解码器初始化失败:OMX.qcom.video.decoder.avc

15

当我打开视频超过两次时,它会出现错误。但如果我只打开视频少于两次,它会正常工作。

我找不到任何解决方案,如果您有任何解决方案,请帮帮我。

com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, null, -1, null, [480, 270, -1.0], [-1, -1])
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:479)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111)
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:536)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:303)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, null, -1, null, [480, 270, -1.0], [-1, -1])
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:753)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111) 
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:536) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:303) 
        at android.os.Handler.dispatchMessage(Handler.java:101) 
        at android.os.Looper.loop(Looper.java:166) 
        at android.os.HandlerThread.run(HandlerThread.java:65) 
     Caused by: android.media.MediaCodec$CodecException: Failed to initialize OMX.qcom.video.decoder.avc, error 0xfffffff4
        at android.media.MediaCodec.native_setup(Native Method)
        at android.media.MediaCodec.<init>(MediaCodec.java:1786)
        at android.media.MediaCodec.createByCodecName(MediaCodec.java:1767)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:802)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:745)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111) 
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:536) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:303) 
        at android.os.Handler.dispatchMessage(Handler.java:101) 
        at android.os.Looper.loop(Looper.java:166) 
        at android.os.HandlerThread.run(HandlerThread.java:65

这里是ExoPlayer、minSdkVersion和targetSdkVersion版本。

 implementation 'com.google.android.exoplayer:exoplayer:2.9.1'
 minSdkVersion 16
 targetSdkVersion 28

这是我的视频播放代码:

view = inflater.inflate(R.layout.video_item, container, false);
                simpleExoPlayerView = view.findViewById(R.id.video_view);
                simpleExoPlayerView.setTag("view" + position);
                player = ExoPlayerFactory.newSimpleInstance(context, new DefaultTrackSelector(), new DefaultLoadControl());
                Uri mediaUri = Uri.parse(urlList.get(position));
                mediaSource = new ExtractorMediaSource.Factory(
                        new DefaultHttpDataSourceFactory("media-slider-view")).
                        createMediaSource(mediaUri);
                simpleExoPlayerView.setPlayer(player);
                player.prepare(mediaSource, true, true);
                player.setPlayWhenReady(false);
                player.seekTo(0, 0);

找到任何解决方案了吗? - R.singh
4个回答

8

你是否在每次从一个视频切换到另一个视频时都要发布并重新初始化播放器?如果没有,请尝试这样做。如果还是不行,最好的方法就是在ExoPlayer演示项目上重现错误行为,以确保问题只存在于你的实现内部。否则,请向ExoPlayer项目提交错误问题,并描述如何在ExoPlayer演示项目上重现此错误。


6

尝试在onResume、onStop和onPause中停止并释放ExoPlayerFactory.newSimpleInstance。

我尝试了这个方法,它完美地运行了。

enter image description here


你为什么要写两次 player.release()?只写一次不够吗? - Gilberto Ibarra
你说得对,一个就足够了 :) - fadi Mashan

5
此回答适用于特定情况。
如果您使用的是scrcpy,请关闭或使用max-size选项进行缩放。(例如:scrcpy -m 1080) 一些设备在使用scrcpy时会引起此问题。

我从来没有想到过,谢谢。 - Alaa AbuZarifa
WTF?你是怎么想到那个的? - Gilberto Ibarra

0
在我的情况下,我是在片段的 onDestroy() 中释放播放器。将其移动到 onPause() 中可以解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接