FFMPEG生成DASH-LL流音视频分片速率不同导致播放器报404错误
音视频分片不同步问题解决
该现象属于异常情况,核心原因是你原FFmpeg命令中使用-c:a copy直接拷贝源文件音频流,原始音频的帧边界和你设置的2秒分片时长不匹配,导致音频分片切割速度远快于视频。调整关键帧间隔后分片对齐属于治标,更稳妥的方案是对音频也做重新编码,保证分片边界完全对齐:
# 替换原命令中的-c:a copy为以下参数 -c:a aac -ac 2 -ar 48000 -b:a 128k
dash.js超前请求分片404问题解决
这是低延迟DASH场景下的典型兼容性问题,你的MPD配置中availabilityTimeOffset=1.8代表分片还差0.2秒完全生成时就可以被请求,dash.js 3.2.2版本对该参数的计算逻辑存在缺陷,同时你配置的liveDelay=2比FFmpeg侧设置的target_latency=3更激进,播放位置太靠近分片生成边缘,自然会频繁请求尚未生成的分片。可以通过两个层面修复:
- 修改FFmpeg参数,缩短MPD更新周期,让播放器拿到更准确的分片序号:
# 原有DASH参数基础上新增两个参数 -min_buffer_time 2 \ -minimum_update_period 1 \
- 修改dash.js配置,对齐延迟参数,增加容错逻辑:
player.updateSettings({ streaming : { lowLatencyEnabled : true, liveDelay : 3, // 和FFmpeg侧target_latency保持一致 jumpGaps : true, jumpLargeGaps : true, smallGapLimit : 1.5, manifestUpdateInterval: 1, // 每秒拉取一次最新MPD fragmentRequestTimeout: 2000, // 请求超时后自动重试 liveCatchup: { enabled: true, maxDrift: 0.5, playbackRate: 0.05 } } });
如果要继续使用dash.js,建议升级到4.x及以上版本,该版本对低延迟DASH的标准兼容性有大幅提升,已修复大量3.x版本的请求时机计算bug。
shaka-player正常播放的原因
shaka-player对低延迟DASH的标准兼容度高于旧版dash.js,会自动根据availabilityTimeOffset和服务端UTC时间校准分片请求时机,你配置的inaccurateManifestTolerance=0也禁止了播放器超前计算分片序号的行为,自然不会出现404报错。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

