7.4.5 延迟之战与 LL-HLS(The Latency Battle & LL-HLS)
7.4.1 埋下的账单,本节清算。HLS 用文件粒度换来了整个 HTTP 生态,代价是延迟与分片时长死死绑定。这场仗业界打了十年:先与分片长度缠斗,再催生出 LL-HLS 的 "分片之内再切片"。
延迟的三重构成
端到端延迟不是一笔糊涂账,拆开看有三座山头 [8]:
- 攒片延迟:编码器必须攒满一个分片,切片器才能发布——直播边缘天然落后至少一个分片时长
- 列表周期:播放器靠轮询媒体列表发现新分片,发现时机最多再晚一个轮询间隔;为容忍网络抖动,客户端通常还要与直播边缘保持若干分片的距离
- 播放缓冲:开播前预缓冲若干分片,换取后续播放的平滑
三者叠加,直播延迟天然不低于一到三个 TARGETDURATION。以 7.6 实战那条流为例:整片 2 秒,延迟下界就在 4~6 秒量级。至于业界沿用多年的 6 秒分片惯例,出处是 Apple 的 HLS Authoring Specification——注意它不在 RFC 8216 之内,是厂商建议而非协议条文。6 秒分片配三重延迟,几十秒的端到端延迟就是这么来的。
缩短分片:一记七伤拳
最直觉的反击是把分片切短:2 秒、1 秒、500 毫秒。延迟确实降了,代价却从四个方向涌来:
- 请求风暴:列表轮询与分片请求的频率成倍上升,源站与 CDN 的 QPS 压力陡增
- 缓存碎片化:同样的内容变成更多小对象,缓存命中率与存储效率双双下滑
- 开销占比:每个分片的容器头、HTTP 头不再能被摊薄,协议开销在流量中的占比节节攀高
- 压缩效率:分片边界要对齐关键帧,分片越短 GOP 越短,关键帧密度上升,同等画质码率跟着涨
延迟与效率近乎零和。要破局,得换一个思路:别再等整片攒完。
LL-HLS:分片之内再切片
2019 年 Apple 给出答案,随后进入 IETF 的 8216bis 草案序列(draft-pantos-hls-rfc8216bis)。先把出处层级钉死:LL-HLS 不属于 RFC 8216——后者全文对它零提及;它的规范身份是草案,与 7.4.2 读到的那些 EXT-X-SERVER-CONTROL、EXT-X-PART 标签同源。
核心思想一句话:fMP4 分片内部本就是一个个 fragment(moof + mdat),何必攒够一整片?成熟一个,发布一个。配套机制四件套:
- EXT-X-PART-INF:PART-TARGET:声明 part 的目标时长,客户端据此校准延迟预期
- EXT-X-PART:每个 part 一行(DURATION/URI,可独立解码的标 INDEPENDENT=YES),随编码进度逐条入列
- EXT-X-PRELOAD-HINT:服务器预告 "下一个 part 将出现在这个 URI",客户端提前把请求挂上,资源一就绪即开始传输
- EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES 允许 阻塞式重载——客户端请求列表时捎带自己已见的序号,服务器将请求挂起、等新内容出现再行响应,轮询间隔这座山头被直接铲平;PART-HOLD-BACK 则给出播放端距直播边缘的建议距离
实测流的全套参数:PART-TARGET=0.24(240 毫秒的 part,每个整片拆 8 段)、PART-HOLD-BACK=0.6 秒、CAN-SKIP-UNTIL=12(增量列表,旧片可省略不列)。延迟下界从整片的三四倍,压到 part 的三四倍——亚秒级。启动期的缺口则用 EXT-X-GAP 加占位分片填平,窗口序列不留空洞。
字节级印证:part 的真身
说一千道一万,不如打开字节看一眼。我们把实测流的一个 part 样本与它所属的整片样本并排解析,结果堪称教科书:
part 的真身,就是整片的第一个 fragment 提前下发。这手魔术之所以成立,靠的是 fMP4 的 自索引 特性:每个 moof 里的 trun 自带本 fragment 的全部定位信息,任何一个 fragment 掰下来都能独立解析播放——7.1.2 的 Box 知识与 7.4.3 的 EXT-X-MAP,在此完成三方会师。当整片最终攒完,列表里补上 EXTINF 与整片 URI,part 与整片在窗口内和平共处,播放器各取所需。
小结:亚秒的成色与边界
LL-HLS 把 HLS 的延迟下限压进了亚秒俱乐部,同时保住了 HTTP 生态的全部红利——这份成绩单足够漂亮。边界也要看清:阻塞式重载让服务器为每个客户端持有挂起请求,长连接资源的消耗回到了服务端;part 粒度对 CDN 缓存策略提出了更精细的要求。7.6 节我们会亲手拉起这样一条流,量一量它在真实网络下的成色。
HLS 的故事讲完,自适应流的天下却不止一家:另一大阵营 DASH 走的是标准化路线,而 WebRTC 与 SRT 则把实时的极限推向另一个维度。下一节,现代协议群像与一幅编年史长卷。