Chrome中MSE添加含音频编码的SourceBuffer时无法播放fMP4流
fMP4(H264/AAC)流Chrome播放异常排查方案
问题定位
Chrome对带音频的MediaSource SourceBuffer初始化校验逻辑比Firefox更严格,当使用混合音视频codecs参数创建SourceBuffer时,若音频轨道的初始化信息不完整、编码参数不匹配或数据推送顺序有误,就会导致播放失败。
可落地的修复步骤
分离音视频SourceBuffer:放弃混合codecs的方式,分别创建视频和音频轨道的SourceBuffer,Chrome对分离轨道的兼容性更稳定:
// 创建视频轨道Buffer const videoBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.4D4028"'); // 创建音频轨道Buffer const audioBuffer = mediaSource.addSourceBuffer('audio/mp4; codecs="mp4a.40.2"');后续分别向对应Buffer推送音视频分片即可。
校验音频初始化数据完整性:检查服务器推送的fMP4流,确保音频轨道的
moovbox包含完整的stsd(媒体信息描述)、stts(时间映射)等子box,且音频的采样率、声道数等参数与codec字符串mp4a.40.2完全匹配(该字符串对应AAC-LC编码,若为HE-AAC需改用mp4a.40.5)。调整数据推送顺序:在Chrome环境下,优先推送音频的初始化段(
moov中的音频部分),再推送视频初始化段,最后推送后续的音视频分片。Chrome需要先确认音频轨道的合法存在,才能正确处理混合轨道的流数据。绕过播放器封装测试:暂时跳过Wsplayer的封装逻辑,直接调用原生MediaSource API创建分离的SourceBuffer并推送数据,若能正常播放,说明问题出在Wsplayer对Chrome环境的适配逻辑上,需要排查播放器的源码或更新到最新版本。
内容的提问来源于stack exchange,提问作者Ильгиз Работа
相关产品推荐
相关产品推荐

