Media3 ExoPlayer有声音无画面分析

1.问题发现

播放有声音无画面

2.问题分析

2.1 错误解析
  • 组件: amlogic.avc.decoder.awesome - 这是Amlogic平台上的H.264硬件解码器
  • 参数: OMX.google.android.index.storeMetaDataInBuffers(0x7f000002) - 试图设置元数据存储参数
  • 端口: Output:1 - 输出端口1
  • 错误码: BadPortIndex(0x8000101b) - 无效的端口索引

继续从其它方面分析

2.2 对比ijk

从日志中可以看到,错误信息ERROR: BadPortIndex(0x8000101b)

使用的解码器是OMX.amlogic.avc.decoder.awesome ,再来看下ijkplayer设置硬解时播放的情况

ini 复制代码
selected codec: OMX.amlogic.avc.decoder.awesome rank=800

也是使用的该解码器,出现了同样的有声音无画面的问题。设置ijkplayer使用软解

Java 复制代码
//对于ijkPlayer的设置,有如下两种视频格式,0为软解,1为硬解
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 0);

发现可以播放正常了!可能和这个解码器有关。

2.3 对比sys

系统播放器可以正常播放,但是看到了一些奇怪的日志

sh 复制代码
amffmpeg  mediaserver  I  [av_find_stream_info:5268] st 0, para: 1, codec_info_nb_frames: 1,
amffmpeg  mediaserver  I  [av_find_stream_info:5268] st 1, para: 1, codec_info_nb_frames: 3,
amplayer  mediaserver  I  [audio_type_convert]audio codec_id=0x15002 format=2

日志中出现的amffmpeg ,av_find_stream_info等信息明显来自FFmpeg,表明该Android系统播放器扩展FFmpeg的能力 。

3.问题处理

硬件解码器初始化成功,解码的时候有问题也没有通知上层,无法触发解码器回滚机制,扩展ffmpeg能力,并根据盒子型号配置优先使用ffmpeg软解

Java 复制代码
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(this);
//根据条件设置扩展解码能力优先
if(isNotSupportHardwareDecoding()){
	renderersFactory.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_PREFER);
}
player = new ExoPlayer.Builder(this,renderersFactory)
         .build();
相关推荐
心走3 天前
WebRTC音视频连接中黑屏问题解决思路
音视频开发
冬奇Lab6 天前
AudioTrack音频播放流程深度解析
android·音视频开发·源码阅读
冬奇Lab7 天前
AudioFlinger架构基础:Android音频系统的心脏
android·音视频开发·源码阅读
RandySu9008 天前
Soundly 音频DSP流程核心逻辑说明
音视频开发
程序员_Rya10 天前
语聊房如何选择实时语音SDK?一文说清楚决策要点!
实时音视频·音视频开发·技术选型·音视频sdk·音视频sdk对比
ZengLiangYi13 天前
用 AudioContext.suspend()/resume() 作为流式音视频的同步门控
前端·音视频开发
leafyyuki17 天前
如何优雅地上传大文件?分片上传实战指南
前端·音视频开发
炼金术24 天前
AI 驱动的自主开发闭环:从"人工测试员"到"需求驱动"的转变
ai编程·音视频开发
冬奇Lab1 个月前
一天一个开源项目(第17篇):ViMax - 多智能体视频生成框架,导演、编剧、制片人全包
开源·音视频开发
冬奇Lab1 个月前
一天一个开源项目(第16篇):Code2Video - 用代码生成高质量教学视频的智能框架
开源·aigc·音视频开发