Appearance
LL-HLS 是什么,以及为什么它默认关着
LL-HLS(Low-Latency HLS)是 Apple 2019 年推出的 HLS 扩展, 把直播延迟从 10-30 秒压到 2-5 秒。
它解决的问题
普通 HLS 的延迟卡在一个死结上:服务器必须攒够一个完整分片才能发出去。
分片 6 秒 → 最新内容平均要等 3 秒才被打包
播放器缓冲 3 个分片 → 再加 18 秒想降延迟就得缩短分片,但分片越短请求越密集,HTTP 开销和 CDN 压力急剧上升。
LL-HLS 的做法:部分分片
LL-HLS 引入 Partial Segment(部分分片):一个 6 秒的分片, 在它还没录完时就先把已有的 200ms 片段发出去。
普通 HLS: [====== 6s 分片 ======] 录完才发
LL-HLS: [200ms][200ms][200ms]... 边录边发,分片仍是 6s 的结构播放列表里用 EXT-X-PART-INF 标签声明这个能力。
配合 HTTP/2 的 chunked transfer,播放器可以在分片还没完成时就开始拿数据—— 延迟因此降到 2-5 秒,同时保留了 HLS 的兼容性和 ABR。
为什么本 SDK 默认不开(ADR-024)
因为 LL-HLS 有硬前置条件,不满足时开了会更糟:
| 前置条件 | 不满足会怎样 |
|---|---|
后端流带 EXT-X-PART-INF 标签 | 播放器按低延迟模式请求,但服务器给不出部分分片 |
| CDN 支持 HTTP/2 chunked transfer | 请求被缓冲后一次性返回,低延迟收益归零 |
| CDN 不做长缓存 | 拿到的是过期播放列表,反复重试 |
不满足条件却开了 LL-HLS,典型表现是频繁卡顿 + 反复重连——比老老实实用普通 HLS 还差。
所以契约把它设计成显式 opt-in:
js
{
url: 'https://cdn.example.com/live.m3u8',
type: 'hls',
live: true,
hls: { lowLatencyMode: true } // ← 你确认后端和 CDN 都达标了,才开
}⚠️ 一个反直觉的实现细节
你可能以为"不传 = 不开",实际上不是这样的:
xgplayer-hls.js打包的 hls.js,lowLatencyMode默认值是true。
也就是说,如果 SDK 什么都不做、只把 hls 配置原样透传,那所有人默认都开着 LL-HLS—— 而绝大多数后端并不满足前置条件。
所以 create-player 里是显式计算并强制传入的:
ts
const lowLatencyMode = normalized.hls?.lowLatencyMode === true
// ...
{ HlsJsPlugin: { hlsOpts: { lowLatencyMode } } }=== true 而不是 ?? false:只有消费方明确写了 true 才开,其余一律关。
这是「默认值不等于安全值」的典型
上游库的默认值是按它自己的假设定的,不一定符合你的场景。 遇到"影响面大 + 有前置条件"的开关,显式写死比依赖默认值可靠。
Safari 从前是个例外,现在不是了
这一节被 ADR-056 反掉了
本页从前写着「Safari / iOS 自动,不用配」—— 前提是它们走原生 HLS、由系统自己识别 EXT-X-PART-INF。ADR-056 把内核判据从平台改成能力之后, Safari 和 iOS ≥ 17.1 都走 hls.js 了,没有谁再替你自动开。
升级到含 ADR-056 的版本后,原本靠 Safari 自动低延迟的直播会静默退回普通 HLS 延迟 —— 不报错,只是慢。迁移动作:直播源统一显式传 lowLatencyMode: true。
结论:
| 环境 | 怎么开 |
|---|---|
| Chrome / Firefox / Edge / Android | 必须显式 hls.lowLatencyMode: true |
| Safari(桌面)/ iOS ≥ 17.1 | 同样必须显式 —— 它们现在也走 hls.js |
| iOS < 17.1(回落原生) | 系统自动检测;传了也无害 |
所以跨平台唯一正确的写法是无脑统一传,不要按平台分支。
这就是坑 #33,也是 ADR-024 把字段放在 source.hls 而不是顶层的原因—— 和其他 hls 专属配置聚在一起,提醒你这是内核相关的选项。
要不要用?
要用,如果:直播延迟是核心体验指标(互动直播、带货、竞拍), 而且你能确认后端和 CDN 都达标。
不要用,如果:后端说不清是否支持部分分片。 这种情况下老老实实用普通 HLS,或者直播加一路 FLV 拿 1-3 秒延迟, 比赌 LL-HLS 靠谱。
相关
- ADR-024 · LL-HLS 显式开启
- 三种协议的底层差异
- 怎么选视频源 § 6.3 —— 后端要满足什么