HLS 带宽自适应 ABR 逻辑通俗讲解,码率切换异常排查
一、什么是 ABR 自适应码率多码率 Master 主索引 HLS存在标清、高清、超清好几套子流。ABR 全称自适应码率通俗讲播放器实时测算用户当前网络带宽网速好自动切高清网速变差自动切标清尽量平衡清晰度与流畅度避免频繁卡顿。很多新手做了多码率流之后发现自适应表现不符合预期网速已经很差还死守超清卡顿也不切低清或者网络很好一直停留在标清不会升级高清切换清晰度之后播放黑屏。很多人遇到这个现象第一反应就去修改 hls.js 一堆 ABR 相关参数调各种阈值但是效果依旧不好。实际上 ABR 切换异常不一定是播放器参数的问题有可能是 Master 索引里面 BANDWIDTH 带宽数值填写错误、子流编码异常、分片加载超时导致。很多新手不了解 ABR 的判断逻辑盲目调参越调越乱。遇到码率切换异常问题我会使用 m3u8live.cn网页调试工具加载 Master 主索引观察自动码率切换行为区分是 M3U8 索引配置问题还是前端 hls.js 参数问题。二、ABR 自适应码率简单工作原理Master 主索引里面每一条子流都写 BANDWIDTH单位 bps代表这套码率理论带宽。hls.js 在下载 TS 分片的时候统计每个分片下载耗时计算出实际可用带宽。对比实际带宽和各个子流 BANDWIDTH 数值选择一个合适档位。网络变差向下切低码率网络恢复再向上切高码率。关键点Master 索引里面 BANDWIDTH 数值不能乱写如果写的和真实码率差距很大ABR 判断就会完全错乱。三、自适应码率高频异常现象与根因现象 1网络已经很差持续卡顿播放器依旧不切低清根因Master 索引 BANDWIDTH 写的偏小播放器误以为超清码率需要带宽不高继续尝试加载高清分片持续卡顿。现象 2网速很好一直停留在标清不会自动升到高清根因BANDWIDTH 写的过大或者高清子流分片加载经常超时播放器判定高清不可用一直不升级档位。现象 3手动切换清晰度正常自动 ABR 切换异常手动点切换按钮可以正常切自动切换行为异常。大概率 Master 的 BANDWIDTH 参数配置问题优先检查 M3U8 文本。现象 4切换某一档子流直接黑屏手动或者自动切到特定档位就黑屏说明该路子 M3U8 子流本身存在 404、跨域、编码兼容故障不是 ABR 算法问题。四、简单标准化排查步骤第一步Master 主索引粘贴网页调试工具查看原始 M3U8 文本核对每一条#EXT‑X‑STREAM‑INF里面 BANDWIDTH 带宽数值确认和真实码率接近。如果工具环境下自适应切换行为就异常优先排查 Master 索引、子 M3U8 子流资源如果工具自适应切换正常业务页面异常排查业务 hls.js ABR 配置参数。第二步手动挨个切换全部清晰度档位确认每一档都可以正常播放。如果某一档切换黑屏优先修复该路子流。第三步浏览器开启网络节流模拟 3G 弱网观察自动降级行为。五、开发调优注意点Master 索引 BANDWIDTH 尽量填写真实码率不要随便估算乱写这是 ABR 正常工作的基础。至少保证有一路 H.264 兜底子码率防止切换到 HEVC 编码出现浏览器解码失败。不要盲目修改 hls.js 的 abr 带宽阈值参数优先确认 M3U8 多码率资源本身是否合格。产品交互上最好给用户提供手动强制选择清晰度的入口用户可以关闭自动自适应手动锁定档位。六、总结ABR 自适应码率不是只靠前端播放器参数调节Master 主索引中 BANDWIDTH 带宽数值是否真实、各路子码率流是否正常对自动切换的影响非常大。遇到自适应表现不符合预期不要上来就疯狂修改播放器参数。借助网页调试工具先确认 Master 索引、各路子流播放情况再去调整前端配置可以少做很多无效调参。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →