Decoder init failed: OMX.qcom.video.decoder.avc

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/asd501823206/article/details/90906014
问题描述

使用Exoplayer,在低端机型上播放视频时抛出异常;视频为使用高端机型自带录屏软件录制,全部参数开启到最大,视频时长6-8s,大小为16-18M,且无音轨。

抛出异常
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, [1080, 2248, -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.video.MediaCodecVideoRenderer.setSurface(MediaCodecVideoRenderer.java:425)  
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.handleMessage(MediaCodecVideoRenderer.java:387)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.deliverMessage(ExoPlayerImplInternal.java:871)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.sendMessageToTarget(ExoPlayerImplInternal.java:842)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.sendMessageInternal(ExoPlayerImplInternal.java:824)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:333)  
        at android.os.Handler.dispatchMessage(Handler.java:98)  
        at android.os.Looper.loop(Looper.java:135)  
        at android.os.HandlerThread.run(HandlerThread.java:61)

问题定位
一、视频问题

1.因为录屏视频的分辨率很高,码率很大,开始怀疑可能是手机不支持解析此类视频,且在Github上找到了对应的bugDecoder init failed: OMX.qcom.video.decoder.avc #3282;

或是录屏视频缺少关键帧,需要调整播放器的设置Decoder init failed: OMX.qcom.video.decoder.avc on lg q6 for HD hls stream link

结果:视频可以在手机的播放器中播放,且无卡顿,先排除视频分辨率问题

2.视频间进行比较,发现录屏视频没有音轨,即无音频编解码器。使用ffmpeg重新输出视频,使其携带音轨。

结果:Exoplayer仍然无法播放

二、Exoplayer问题

1.Huawei M3: MP4 can’t play
定位到问题为低端机型硬件解码不支持解析该类视频,需要使用软件解码的方式

结果:可以播放,但是卡顿很明显,且由于卡顿,视频只会播放一半的长度

2.Plumb MediaCodecRenderer.enableDecoderFallback through DefaultRenderersFactory
将Exoplayer升级到2.10.1后,官方去掉了增加多重解码方式的接口;该问题已提交bug,在两天前被修复,但是未发布新版本;故先使用2.9.6,等待新release再替换


总结

Bug定位耗时两天至三天,在此记录寻找bug的过程以及解决方案,希望能帮助到其他小伙伴们。

另:Exoplayer仍然在开发,Github上bug也不少。但是更新的速度也很快,谷歌的开发大大们也在积极的配合反馈者们定位bug、修复bug,兼容性和稳定性也在越来越好。大家在遇到问题的时候,也要学会质疑播放器本身是否会有问题,在Github上和作者交流会更好~

扫描二维码关注公众号,回复: 7202523 查看本文章

猜你喜欢

转载自blog.csdn.net/asd501823206/article/details/90906014