2

비디오를 코드 변환하기 위해 ExtractDecodeEditEncodeMuxTest.java 코드를 내 앱에 복사했습니다. 가장 중요한 변경 사항은 클래스를 으로 변경하고 extends AndroidTestCase을 제거하는 것이므로 모든 활동에서 분리됩니다. 내가 별도의 스레드 등을 모두 작성해야 this 또는 that 같은 답변에 따르면왜 난독 화와 인코딩이 켜져 "표면 프레임이 초과되었습니다 대기"는 무엇입니까?

E/d: com.testapp.a.g.a.b.b(OutputSurface.java:270) 
E/d: com.testapp.a.g.a.d.a(VideoTranscoder.java:944) 
E/d: com.testapp.a.g.a.d.a(VideoTranscoder.java:6353) 
E/d: com.testapp.a.g.a.f.run(VideoTranscoder.java:162) 
E/d: java.lang.Thread.run(Thread.java:818) 
E/d: TestWrapper 
E/MediaCodecController: com.testapp.a.g.a.b.b(OutputSurface.java:270) 
E/MediaCodecController: com.testapp.a.g.a.d.a(VideoTranscoder.java:944) 
E/MediaCodecController: com.testapp.a.g.a.d.a(VideoTranscoder.java:6353) 
E/MediaCodecController: com.testapp.a.g.a.f.run(VideoTranscoder.java:162) 
E/MediaCodecController: java.lang.Thread.run(Thread.java:818) 
W/System.err: java.lang.RuntimeException: Surface frame wait timed out 
W/System.err:  at com.testapp.a.g.a.b.b(OutputSurface.java:270) 
W/System.err:  at com.testapp.a.g.a.d.a(VideoTranscoder.java:944) 
W/System.err:  at com.testapp.a.g.a.d.a(VideoTranscoder.java:6353) 
W/System.err:  at com.testapp.a.g.a.f.run(VideoTranscoder.java:162) 
W/System.err:  at java.lang.Thread.run(Thread.java:818) 
E/CompressionController: Compressor reported error, not hashing! 

하지만 실제로 원본을 사용하고 있습니다 : 내가 난독 화와 릴리스 빌드를 컴파일 할 때까지 모든 것이 잘 작동, 그것은과 런타임에 실패 코드가 이미 해당 스레드를 작성하고 있습니다. 내가 난독 화를 해제하기 위해 minifyEnabled false에 Gradle을 해제 설정을 변경하면 모든 것이 다시 작동합니다.

그래서 난독 화는 엉망 인코더/디코더를 스레드에 무엇을하고 있는가? 또는 MediaCodec에 의해 간접적으로 사용되는 클래스를 제거하고 있습니까? 그것을 작동시키기 위해 프로 가드 설정에 추가해야 할 것이 있습니까? 난독 화 파일 모두에 -dontoptimize을 추가 한 후

답변

3

다시 작동합니다. 분명히 이것은 이상적인 솔루션 아니지만, 여기 용의자가 proguard optimising away some of the loops in the encoding/decoding threads 때문에, 할 수있는 유일한 것 같다. 필자의 경우에는 -dontoptimize을 사용하지 말고 모든 최적화를 비활성화하지 않는 다음 줄을 사용하십시오.

-optimizations !code/removal/advanced,!method/inlining/short,!method/inlining/unique,!method/removal/*,!method/marking/*