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();
相关推荐
字节跳动视频云技术团队2 天前
把 AI 视频的钱花在刀刃上,不是每一刀上
人工智能·音视频开发
大辉狼_音频架构5 天前
第 02 篇:时域的语言 —— 卷积、LTI 系统与冲激响应
算法·音视频开发
大辉狼_音频架构5 天前
第 01 篇:音频采样与量化 —— 从 I2S 帧到奈奎斯特定理
嵌入式·音视频开发
qingmiaozhuan7 天前
区域录屏窗口位移录制框固定?GDI+win32gui动态坐标追踪4种代码方案
音视频开发·录屏工具·录屏技术·电脑录屏
KnowFun10 天前
互动视频的前端实现:有向图建模、分支预加载与尾帧管线
音视频开发
大辉狼_音频架构15 天前
AudioReach Plugin 机制问题解答
嵌入式·音视频开发
大辉狼_音频架构15 天前
AudioReach:Tinyalsa PCM Plugin 机制
嵌入式·音视频开发
老孙讲技术16 天前
凌晨三点报警全乱了:一个 callback 地址,如何把设备托管消息拆成多客户流水线?
物联网·音视频开发
ltlovezh20 天前
点播 Seek 性能优化:丢帧的原理、判定与硬解落地
音视频开发
音视频牛哥21 天前
把Android设备变成RTSP网络摄像机:SmartMediaKit 后台采集、编码与轻量级RTSP服务实践
音视频开发·视频编码·直播