Мы наблюдаем специфическую проблему при попытке перекодировать видео, и кажется, что это происходит только на Nexus 5. Мы используем MediaCodec для сжатия и перекодирования видео на стороне клиента, и иногда, когда задача выполняется на Nexus 5, мы получить следующий сбой:
05-15 16:25:15.023 E/AndroidRuntime( 4716): FATAL EXCEPTION: FinalizerWatchdogDaemon
05-15 16:25:15.023 E/AndroidRuntime( 4716): java.util.concurrent.TimeoutException: android.graphics.SurfaceTexture.finalize() timed out after 10 seconds
05-15 16:25:15.023 E/AndroidRuntime( 4716): at android.graphics.SurfaceTexture.nativeFinalize(Native Method)
05-15 16:25:15.023 E/AndroidRuntime( 4716): at android.graphics.SurfaceTexture.finalize(SurfaceTexture.java:353)
05-15 16:25:15.023 E/AndroidRuntime( 4716): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
05-15 16:25:15.023 E/AndroidRuntime( 4716): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
05-15 16:25:15.023 E/AndroidRuntime( 4716): at java.lang.Thread.run(Thread.java:818)
Наш код относительно похож на код DecodeEditEncodeTest от bigflake (https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts)./DecodeEditEncodeTest.java), и мы также используем их классы InputSurface, OutputSurface и TextureRender (https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests)./media/src/android/media/cts/). Я предполагаю, что проблема возникает где-то в OutputSurface или TextureRender, поскольку это классы, которые на самом деле манипулируют текстурой поверхности.
Единственные надежные шаги воспроизведения, которые мы можем придумать, заключаются в том, что это происходит несколько случайным образом, когда несколько видео ставятся в очередь для перекодирования, даже если кодировщик обрабатывает только одно видео за раз.
Любая помощь приветствуется.