Я скопировал код из ExtractDecodeEditEncodeMuxTest.java в свое приложение для перекодирования видео, наиболее значительным изменением является переименование класса в VideoTranscoder
и удаление extends AndroidTestCase
, так как я собираюсь запускать его отдельно от какой-либо активности. Все работает нормально, пока я не скомпилирую сборку релиза с помощью proguard, затем во время выполнения происходит сбой:
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!
Согласно таким ответам, как этот или что мне нужно создать отдельные потоки и все такое, но на самом деле я использую исходный код, уже создающий эти потоки. Когда я меняю настройку выпуска gradle на minifyEnabled false
, чтобы отключить proguard, все снова работает.
Так что же proguard делает с потоками, которые портят работу кодировщика/декодера? Или, может быть, он удаляет какой-то класс, косвенно используемый MediaCodec
? Есть ли что-то, что мне нужно добавить в настройки proguard, чтобы заставить его работать?