9.1.5 延迟预算:glass-to-glass 的定量拆解(Latency Budgeting)

9.1.2 给出了端到端延迟的定义与四级体验表,回答了"延迟是什么"。但定义只解决度量问题,工程上更棘手的是另一个:一场直播的 30 秒延迟,到底是哪一环吃掉的?定性地说"分片太长"人人都会,定量地拆开每一环,才知道刀该往哪里下。

延迟预算(Latency Budget) 是指把 glass-to-glass 总延迟按链路环节逐项拆解得到的账目表。它的原理朴素得像小学算术:

总延迟 = 采集 + 编码 + 推流 + 封装 + 分发 + 缓冲 + 解码渲染

可一旦把真实数字填进去,这张表就成了流媒体架构里最有说服力的那张纸。学界对低延迟演进做定量梳理时,用的也是同样的拆解方法 [2]

三条管线的账本

同一场 1080p 赛事直播,分别走传统 HLS、LL-HLS 与 WebRTC 三条管线,各环节的典型量级如下 [2]

环节 传统 HLS LL-HLS WebRTC
采集与相机管线 30~60 ms 30~60 ms 20~40 ms
编码 300~600 ms 150~400 ms 20~50 ms
推流回传 150~400 ms 150~400 ms n/a(SFU 直连)
封装打包 6~10 s 200~400 ms 0
源站到边缘 40~120 ms 20~120 ms 20~80 ms
播放器缓冲 12~18 s 0.6~3 s 60~200 ms
解码渲染 50~100 ms 50~100 ms 30~60 ms
合计 约 19~29 s 约 1.2~5 s 约 0.15~0.5 s

数字是量级参考,具体实现各有浮动,但表里的结构信息是稳定的,逐行读过去,每一处都连着前面章节讲过的原理。

采集与编码是毫秒级的世界。采集端绕不开帧周期,30 fps 下一帧就是 33 ms;编码的账来自 6.1.3 的老朋友,x264 的 lookahead 与 B 帧重排用延迟换压缩率,低延迟配置把它们关掉,编码耗时就从数百毫秒缩到几十毫秒。推流回传若是 SRT,7.5.3 的 ARQ 重传缓冲通常按两倍 RTT 设,这是为可靠性预付的过路费。

封装与缓冲才是秒级的战场,也是三条管线真正拉开差距的地方。传统 HLS 的封装器要攒够一个完整分片才能发布,6 秒分片先欠下 6 秒;播放器再按惯例握三片在手(8.2.3 的水位逻辑),又是十几秒。LL-HLS 用 200 ms 量级的 part 分片破解了封装等待(7.4.5 的机制),缓冲水位随之削到秒级以内。WebRTC 则干脆没有"分片"这个概念,帧从编码器出来就被推上 UDP,播放器只留一层抗抖动的薄缓冲。

一个反直觉的注脚:链路换到 LL-HLS,播放端不调优也白搭。源站给出 200 ms 的 part,客户端若仍按保守水位起播,端到端延迟依然会停在五六秒。预算表的每一环都是独立科目,协议只负责其中两行。

账本的用法

延迟预算的价值不在数字本身,而在它指出的优化次序:先找表里最大的那一项。传统 HLS 想降延迟,去抠编码的几十毫秒毫无意义,分片时长与缓冲片数才是秒级的债主;反过来,WebRTC 管线已经把缓冲压到百毫秒,继续压编码参数就得不偿失。每一代低延迟技术的名字,其实都对应着预算表上被削掉的那一行:LL-HLS 削封装与缓冲,SRT 优化回传,WebRTC 抹去整列。

延迟账算清了,链路上还剩最后一类可靠性问题:分发环节的 CDN 若整个趴窝,预算表再漂亮也没用。9.1.6,多 CDN 调度与容灾。

Copyright © Since 2021 李述博 (Arikan.Li) , All Rights Reserved all right reserved,powered by GitbookLast Updated: 2026-08-27 21:51:22

results matching ""

    No results matching ""