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

问题描述

使用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上和作者交流会更好~

06-12 16:01:50.335 25052 25443 D MediaCodec-java: start --start 06-12 16:01:50.338 25052 25443 D MediaCodec-java: Current process == com.ktcp.video 06-12 16:01:50.339 25052 25443 I com.ktcp.video: Rejecting re-init on previously-failed class java.lang.Class<com.skydebug.ftrace.FtraceSys>: java.lang.UnsatisfiedLinkError: dlopen failed: library "libskytrace.so" not found 06-12 16:01:50.339 25052 25443 I com.ktcp.video: (Throwable with no stack trace) 06-12 16:01:50.340 25052 25443 W System.err: java.lang.NoClassDefFoundError: com.skydebug.ftrace.FtraceSys 06-12 16:01:50.340 25052 25443 W System.err: at android.media.MediaCodec.setSkyMediaStatus(MediaCodec.java:2023) 06-12 16:01:50.340 25052 25443 W System.err: at android.media.MediaCodec.start(MediaCodec.java:2331) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.tmediacodec.codec.DirectCodecWrapper.start(DirectCodecWrapper.java:82) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.tmediacodec.TMediaCodec.start(TMediaCodec.java:136) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.decoder.TPBaseMediaCodecDecoder.initMediaCodecInternal(TPBaseMediaCodecDecoder.java:317) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.decoder.TPBaseMediaCodecDecoder.startDecoder(TPBaseMediaCodecDecoder.java:349) 06-12 16:01:50.340 25052 25443 W System.err: at com.tencent.thumbplayer.core.codec.decoder.TPMediaCodecManager.initVideoMediaCodec(TPMediaCodecManager.java:112) 06-12 16:01:50.340 25052 25443 W System.err: Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: library "libskytrace.so" not found 06-12 16:01:50.340 25052 25443 W System.err: at java.lang.Runtime.loadLibrary0(Runtime.java:1088) 06-12 16:01:50.340 25052 25443 W System.err: at java.lang.Runtime.loadLibrary0(Runtime.java:998) 06-12 16:01:50.340 25052 25443 W System.err: at java.lang.System.loadLibrary(System.java:1656) 06-12 16:01:50.340 25052 25443 W System.err: at com.skydebug.ftrace.FtraceSys.<clinit>(FtraceSys.java:25) 06-12 16:01:50.340 25052 25443 W System.err: at com.skydebug.ftrace.FtraceSys.PointWriteFile(FtraceSys.java:73) 06-12 16:01:50.340 25052 25443 W System.err: ... 7 more
06-13
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值