我正在为安卓电视设备开发一个应用程序,它使用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上成功地使用它们。
我对这个错误感到很困惑,因为它只发生在一些资产上,而且它们之间似乎没有任何联系。任何帮助都将不胜感激。
发布于 2018-05-24 12:20:07
这个答案是由一位在Nvidia盾牌设备这里上工作的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之盾OTA将会解决这个问题。
值得一提的是,上述OTA更新已经发布了半年多了。
https://stackoverflow.com/questions/41401742
复制相似问题