实现 Drm Dash 媒体源时发生 DecoderInitializationException
DecoderInitializationException occurs while implementing Drm Dash media source
在执行 Drm Dash 媒体源时出现以下异常。 MediaCodecRenderer$DecoderInitializationException:解码器初始化失败:OMX.Exynos.avc.dec.secure
报错如下
ExoPlayerImplInternal: 渲染器错误: 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: 解码器初始化失败: OMX.Exynos.avc.dec.secure, 格式( p0va0br256000, null, null, video/avc, avc1.4d4015, 256000, null, [426, 240, 24.0], [-1, -1])
在 com.google.android.exoplayer2.BaseRenderer.createRendererException(BaseRenderer.java:359)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:563)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254)
在 com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712)
在 com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599)
在 com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:154)
在 android.os.HandlerThread.run(HandlerThread.java:61)
由以下原因引起:com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException:解码器初始化失败:OMX.Exynos.avc.dec.secure,格式(p0va0br256000,null,null,video/avc,avc1.4d4015,256000,null , [426, 240, 24.0], [-1, -1])
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:867)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:561)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254)
在 com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712)
在 com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599)
在 com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:154)
在 android.os.HandlerThread.run(HandlerThread.java:61)
原因:android.media.MediaCodec$CodecException:启动失败
在 android.media.MediaCodec.native_start(本机方法)
在 android.media.MediaCodec.start(MediaCodec.java:1989)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:931)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:860)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:561)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254)
在 com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814)
在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712)
在 com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599)
在 com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329)
在 android.os.Handler.dispatchMessage(Handler.java:98)
在 android.os.Looper.loop(Looper.java:154)
在 android.os.HandlerThread.run(HandlerThread.java:61)
2020-09-14 11:51:58.096 20803-20803/com.rockvillegroup.vidly E/MainVideoPlayerFragment: onPlayerError: 错误 => 解码器初始化失败: OMX.Exynos.avc.dec.secure, 格式 (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: 解码器初始化失败: OMX.Exynos.avc.dec.secure, Format(1, null, null, video/avc, avc1.640028, 1461621, null, [854, 480 , -1.0], [-1, -1])
第一次播放DRM曲目时出现(可以正常播放);
然后切换到一个non-DRM标题却忘记释放之前的exoplayer实例;
non-DRM 标题完成后切换回 DRM 标题时,发生错误。
每次播放完及时释放exoplayer实例后错误消失
从与MediaCodec错误相关的exoplayer问题来看,我看到大部分错误是由于exoplayer实例(资源)没有及时释放造成的,因为设备的媒体编解码器资源有限。
或者播放器试图将解码数据渲染到无效表面(视图)。
https://github.com/google/ExoPlayer/issues
希望回答对您有所帮助。
在执行 Drm Dash 媒体源时出现以下异常。 MediaCodecRenderer$DecoderInitializationException:解码器初始化失败:OMX.Exynos.avc.dec.secure
报错如下
ExoPlayerImplInternal: 渲染器错误: 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: 解码器初始化失败: OMX.Exynos.avc.dec.secure, 格式( p0va0br256000, null, null, video/avc, avc1.4d4015, 256000, null, [426, 240, 24.0], [-1, -1]) 在 com.google.android.exoplayer2.BaseRenderer.createRendererException(BaseRenderer.java:359) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:563) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254) 在 com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712) 在 com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599) 在 com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:154) 在 android.os.HandlerThread.run(HandlerThread.java:61) 由以下原因引起:com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException:解码器初始化失败:OMX.Exynos.avc.dec.secure,格式(p0va0br256000,null,null,video/avc,avc1.4d4015,256000,null , [426, 240, 24.0], [-1, -1]) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:867) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:561) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254) 在 com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712) 在 com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599) 在 com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:154) 在 android.os.HandlerThread.run(HandlerThread.java:61) 原因:android.media.MediaCodec$CodecException:启动失败 在 android.media.MediaCodec.native_start(本机方法) 在 android.media.MediaCodec.start(MediaCodec.java:1989) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:931) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:860) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:561) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1254) 在 com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:756) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:814) 在 com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:712) 在 com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599) 在 com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329) 在 android.os.Handler.dispatchMessage(Handler.java:98) 在 android.os.Looper.loop(Looper.java:154) 在 android.os.HandlerThread.run(HandlerThread.java:61) 2020-09-14 11:51:58.096 20803-20803/com.rockvillegroup.vidly E/MainVideoPlayerFragment: onPlayerError: 错误 => 解码器初始化失败: OMX.Exynos.avc.dec.secure, 格式 (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: 解码器初始化失败: OMX.Exynos.avc.dec.secure, Format(1, null, null, video/avc, avc1.640028, 1461621, null, [854, 480 , -1.0], [-1, -1])
第一次播放DRM曲目时出现(可以正常播放); 然后切换到一个non-DRM标题却忘记释放之前的exoplayer实例; non-DRM 标题完成后切换回 DRM 标题时,发生错误。
每次播放完及时释放exoplayer实例后错误消失
从与MediaCodec错误相关的exoplayer问题来看,我看到大部分错误是由于exoplayer实例(资源)没有及时释放造成的,因为设备的媒体编解码器资源有限。 或者播放器试图将解码数据渲染到无效表面(视图)。 https://github.com/google/ExoPlayer/issues
希望回答对您有所帮助。