0

我正在开发一个适用于 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 上成功使用了它们。

我对这个错误感到非常困惑,因为它只发生在某些资产上,而且它们之间似乎没有任何联系。任何帮助将非常感激。

4

1 回答 1

0

一位在 Nvidia SHIELD 设备上工作的 Nvidia 工程师在这里发布了答案:

调查样本的唯一性,它无法在 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)。此问题已修复,Nvidia Shield 的下一个 OTA 将修复此问题。

值得一提的是,上述OTA更新已经推出了半年多。

于 2018-05-24T12:20:07.383 回答