ExoPlayer: "Внутренняя ошибка времени выполнения" на некоторых активах, защищенных PlayReady
Я работаю над приложением для устройств Android TV, которое использует ExoPlayer в качестве видеопроигрывателя, и я использую плавное потоковое видео с PlayReady DRM. Приложение способно выполнять ключевые запросы и т. Д. Без каких-либо проблем, и большая часть контента воспроизводится.
Однако у меня возникли проблемы с определенными видео активами. В Logcat виден следующий журнал ошибок:
E/ExoPlayerImplInternal: Internal runtime error.
android.media.MediaCodec$CodecException: Error 0xffffffff
at android.media.MediaCodec.native_queueSecureInputBuffer(Native Method)
at android.media.MediaCodec.queueSecureInputBuffer(MediaCodec.java:2535)
at com.google.android.exoplayer.MediaCodecTrackRenderer.feedInputBuffer(MediaCodecTrackRenderer.java:721)
at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:529)
at com.google.android.exoplayer.SampleSourceTrackRenderer.doSomeWork(SampleSourceTrackRenderer.java:128)
at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:432)
at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:211)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
Я знаю, что эти активы работают, так как мы успешно используем их в Chromecast.
Я довольно озадачен этой ошибкой, так как она возникает только на некоторых активах, и между ними, похоже, нет никакой связи. Любая помощь приветствуется.
1 ответ
Ответ был опубликован инженером Nvidia, работающим над устройством Nvidia SHIELD здесь:
Изучая уникальность сэмплов, причина, по которой он не работал на Nvidia Shield, заключается в том, что зашифрованные сэмплы обнуляли все IV. В нашей эталонной реализации PlayReady это было ограничено, чтобы избежать атак "воспроизведения" ( https://crypto.stackexchange.com/questions/8600/why-should-i-use-an-initialization-vector-iv-when-i-have-unique-keys), и всегда любил соленые IV. Однако позже было понято, что, если ключи всегда разные и не повторяются в режиме CTR, все нулевые значения IV все еще достаточно безопасны. ( https://crypto.stackexchange.com/questions/8151/counter-mode-static-iv-but-different-keys). Эта проблема была исправлена, и следующая OTA Nvidia Shield исправит это.
Стоит отметить, что упомянутое обновление OTA вышло уже более полугода.