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();
相关推荐
老孙讲技术1 天前
【监控开发】把车间未戴帽和烟火报警接进安监值班群:workwearDetect 对图与 setMessageCallback 订 smokeAlarm
后端·物联网·音视频开发
字节跳动视频云技术团队4 天前
豆包视频通话升级,火山引擎多模态传输系统提供技术支撑
人工智能·音视频开发
搬砖记录员5 天前
录屏总黑屏?90% 的人没关这个开关——浏览器硬件加速冲突排查指南
前端·音视频开发
老孙讲技术7 天前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
后端·物联网·音视频开发
老孙讲技术7 天前
关店后有人进门,监控值班群却没响:用 setMessageCallback 订 human,再用 aiHuman 打开人形
后端·物联网·音视频开发
老孙讲技术7 天前
把园区几百路摄像头收进值班台账:bindDevice 入账与 listDeviceDetailsByPage 翻页
后端·物联网·音视频开发
老孙讲技术7 天前
把没网没电的户外点位接进出画值班台:unBindDeviceInfo 核 SIMCard 与 bindDeviceLive
后端·物联网·音视频开发
字节跳动视频云技术团队7 天前
从出片到出海:AI MediaKit 重塑短剧全链路生产力
人工智能·音视频开发
小小杨树11 天前
【C++】学习:双缓冲视频流水线深解析
c++·性能优化·音视频开发
老孙讲技术14 天前
老板说「网页上嵌个监控就行」?黑屏三小时后我才搞懂:播放器要的不是 accessToken
物联网·音视频开发·小程序·云开发