#android #exoplayer #android-mediacodec #decoder #widevine
#Android #exoplayer #android-mediacodec #декодер #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
Ответ №1:
Я встречал ошибку такого же типа раньше при попытке воспроизвести заголовок 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 вовремя после воспроизведения каждого заголовка.
Из проблем exoplayer, связанных с ошибкой MediaCodec, я вижу, что большинство ошибок вызваны тем, что экземпляр exoplayer (ресурсы) не был выпущен вовремя, поскольку ресурс медиакодека для устройства ограничен. Или проигрыватель пытался перенести декодированные данные на недопустимую поверхность (view). https://github.com/google/ExoPlayer/issues
Надеюсь, что ответ может помочь.
Комментарии:
1. Спасибо за ваш ответ. Но я уже решил проблему. В моем случае все работало, но проблема заключалась в зависимости от модуля dash. Я забыл реализовать эту зависимость, упомянутую в документации. реализация ‘com.google.android.exoplayer: exoplayer-dash: 2.X.X’
2. Для меня тоже причиной было обновление списка, но не выпуск последнего воспроизведенного проигрывателя. Выпуск проигрывателя перед обновлением исправил проблему.