android - 实现 Drm Dash 媒体源时发生 DecoderInitializationException

标签 android exoplayer android-mediacodec decoder widevine

在实现 Drm Dash 媒体源时,会发生以下异常。 MediaCodecRenderer$DecoderInitializationException:解码器初始化失败:OMX.Exynos.avc.dec.secure

下面列出了错误报告

ExoPlayerImplInternal: Renderer error: index=0, type=video, format=Format(p0va0br256000, null, null, video/avc, avc1.4d4015, 256000, null, [426, 240, 24.0], [-1, -1]), rendererSupport=NO_UNSUPPORTED_DRM
      com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.mediacodec.**MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec.secure**, Format(p0va0br256000, null, null, video/avc, avc1.4d4015, 256000, null, [426, 240, 24.0], [-1, -1])
        at com.google.android.exoplayer2.BaseRenderer.createRendererException(BaseRenderer.java:359)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:563)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254)
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:154)
        at android.os.HandlerThread.run(HandlerThread.java:61)
     Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec.secure, Format(p0va0br256000, null, null, video/avc, avc1.4d4015, 256000, null, [426, 240, 24.0], [-1, -1])
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:867)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:561)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254) 
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.os.HandlerThread.run(HandlerThread.java:61) 
     **Caused by: android.media.MediaCodec$CodecException: start failed**
        at android.media.MediaCodec.native_start(Native Method)
        at android.media.MediaCodec.start(MediaCodec.java:1989)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:931)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:860)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:561) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254) 
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.os.HandlerThread.run(HandlerThread.java:61) 
2020-09-14 11:51:58.096 20803-20803/com.rockvillegroup.vidly E/MainVideoPlayerFragment: onPlayerError: Error => **Decoder init failed: OMX.Exynos.avc.dec.secure**, Format(p0va0br256000, null, null, video/avc, avc1.4d4015, 256000, null, [426, 240, 24.0], [-1, -1])
2020-09-14 11:51:58.097 20803-20803/com.rockvillegroup.vidly D/MainVideoPlayerFragment: onPlayerStateChanged: STATE_IDLE

最佳答案

我之前在尝试播放 hlsv6-widevine DRM 游戏时遇到过同样类型的错误。

com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec.secure, Format(1, null, null, video/avc, avc1.640028, 1461621, null, [854, 480, -1.0], [-1, -1])

第一次玩DRM游戏时出现这种情况(可以正常播放); 然后切换到非DRM标题但忘记释放之前的exoplayer实例; 当非 DRM 标题完成后切换回 DRM 标题时,发生错误。

当我在播放每个标题后及时释放 exoplayer 实例后,错误消失了。

从与MediaCodec错误相关的exoplayer问题来看,大多数错误是由于设备的媒体编解码器资源有限而没有及时释放exoplayer实例(资源)引起的。 或者玩家试图将解码的数据渲染到无效的表面( View )。 https://github.com/google/ExoPlayer/issues

希望回答可以帮助到您。

关于android - 实现 Drm Dash 媒体源时发生 DecoderInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63882714/

相关文章:

android - 如何在Android listview中实现分页

android - 从 Android 分享到 Google+

android - 如何在Android中制作圆形Exoplayer PlayerView

android - Android 中如何减小视频大小?

android - 所有手机都支持 h.264 编码器中的 YUV 420(半)平面颜色格式吗?

android - 为什么打开 proguard 的 "Surface frame wait timed out"编码?

android - 通过 ZIP 文件安装 SDK

android - 从应用程序中检索 keystore 或更改证书

video - Exoplayer 等效于 iOS - 类似于 TikTok 的视频流

android - 我们如何在流式传输后缓存 HLS 视频 url