WRITING / 2026.09.18

WebRTC、HLS 与 LL-HLS:流媒体协议该如何选择

从延迟、规模、互动能力、兼容性和运维成本出发,比较 WebRTC、HLS 与 LL-HLS 的适用边界。

流媒体协议选型经常被简化成一个问题:“哪个延迟最低?”但直播系统很少只有一个目标。互动课堂关注连麦反馈,赛事直播关注稳定分发,公开活动关注突发流量下的成本和兼容性。协议选择实际上是在延迟、规模、终端能力和运维复杂度之间做取舍。

WebRTC、HLS 和 LL-HLS 不是简单替代品,也可以在同一个系统里服务不同角色。把它们放在“实时互动”“HTTP 分发”“低延迟分发”三个模型中比较,才能看清协议本身解决了什么问题,以及哪些问题仍然需要业务层承担。

先把协议放回完整链路

一个直播产品通常至少包含发布、处理、分发和互动四条能力:

发布端 → 接入与鉴权 → 编码/转码 → 播放分发 → 观看端
                              ├── WebRTC 实时会话
                              ├── HLS HTTP 分片
                              └── LL-HLS 低延迟 HTTP 分片
互动消息 ───────────────→ 信令、数据通道或业务 API

协议选择不一定发生在发布端。一个主播可以用 RTMP 推到平台,平台在内部转成 WebRTC 给连麦用户,同时转成 HLS 或 LL-HLS 给观看用户。真正需要决策的是每一类用户需要什么体验,以及系统是否愿意为这类体验承担相应的连接、带宽和运维成本。

WebRTC:为互动建立会话

WebRTC 通常以点对点或媒体服务器会话为中心,使用实时传输和拥塞控制把音视频尽快送到对端。它可以提供很低的端到端延迟,并支持发布者与观众之间的双向音视频或数据通道。对于连麦、远程协作和实时控制,延迟不是一个附加指标,而是交互能否成立的基础。

从 ICE 到媒体传输

WebRTC 建连并不是“打开一个 UDP 端口”这么简单。ICE(Interactive Connectivity Establishment,交互式连接建立)会收集本机地址、服务器反射地址和中继地址,再尝试找出双方都能使用的路径。STUN 用来发现经过 NAT 后的公网映射;直连不可用时,TURN 提供媒体中继,代价是增加服务器带宽和成本。

连接协商还需要交换编解码器、分辨率、音频能力和网络候选信息。DTLS 用于建立安全密钥,SRTP 负责保护实时媒体包。权限、设备切换、网络变化和浏览器后台策略也会影响会话生命周期,因此 WebRTC 的故障排查往往同时涉及信令、网络、浏览器和媒体服务器。

SFU 与 MCU 的取舍

多人会议通常不会让每个发布者把媒体复制给所有观众。SFU(Selective Forwarding Unit,选择性转发单元)接收上行流,再按订阅关系转发已有媒体,服务器不必重新混合画面,延迟和画质更容易保持;MCU(Multipoint Control Unit,多点控制单元)则在服务端解码、混合并重新编码,适合需要固定布局的场景,但计算成本和编码延迟更高。

当观众数量从几十增长到几万时,单纯增加 SFU 实例并不能自动解决扇出问题。系统还需要考虑节点级级联、区域就近接入、上行复制和跨区域带宽。WebRTC 的优势是实时互动能力,规模化分发则需要额外的平台架构。

HLS:用 HTTP 进行大规模分发

HLS 将编码后的媒体拆成分片,并通过播放清单描述可用窗口。播放器以 HTTP 请求分片,CDN 可以缓存和复用内容,系统也容易利用已有的鉴权、日志和边缘分发能力。对只观看、不互动的场景,HLS 的延迟通常换来了更好的扩展能力和运维可预期性。

主播放清单与媒体清单

HLS 通常由一份主播放清单和多份媒体播放清单组成:

master.m3u8
  ├── 360p/index.m3u8
  ├── 720p/index.m3u8
  └── 1080p/index.m3u8

720p/index.m3u8
  ├── segment_201.ts
  ├── segment_202.ts
  └── segment_203.ts

主播放清单描述每个表示的码率、分辨率和编解码器,播放器据此选择起始档位;媒体清单描述当前可下载的分片、序号和时长。直播清单是一个不断向前移动的窗口,CDN 的缓存时间不能让用户长期停留在已经过期的窗口上。

HLS 的分发模型很适合 CDN。分片一旦生成通常不可变,可以被多个用户复用;清单需要更快更新,应该采用更短的缓存时间或合适的验证策略。鉴权参数、缓存键和回源策略如果设计不当,可能造成命中率下降或权限结果串用。

LL-HLS:缩短 HLS 的等待窗口

LL-HLS 在 HLS 的分发模型上减少等待时间,例如让播放器更早获取正在形成的媒体内容,并通过更细粒度的更新机制追赶直播边缘。它仍然可以使用 HTTP 和 CDN,但对源站、边缘缓存、播放器和超时策略的协同要求更高。

普通 HLS 往往需要等待一个完整分片形成;低延迟模式可以把一个分片拆成更小的可获取部分,播放器在分片完全结束前就开始下载。清单还可能提供下一个更新点或预加载提示,让客户端减少轮询等待。这样做会提高请求频率和连接管理复杂度,边缘节点也必须正确处理尚未完全结束的对象。

低延迟 HLS 不是把普通 HLS 的分片时长简单调小。清单更新、缓存控制、连接保持、部分分片的可见时机和播放器追赶策略都需要同时验证,否则可能换来更高的请求压力和更多播放失败。网络稍有抖动时,播放器还要在“追赶直播”和“保留缓冲”之间重新选择。

按决策维度比较

维度 WebRTC HLS LL-HLS
主要目标 双向实时互动 稳定的大规模观看 低延迟的大规模观看
延迟 通常最低 通常最高 介于两者之间
大规模观看 需要专门的扇出架构 适合 CDN 扩散 可复用 CDN,但边缘要求更高
双向互动 原生支持 需要额外信令和回传链路 仍需额外互动链路
终端兼容性 依赖浏览器和系统能力 生态成熟,适合广泛播放 需要确认播放器和 CDN 支持
缓存复用 连接级复用较弱 分片天然适合缓存 可缓存,但更新更频繁
故障排查 会话、网络和媒体服务器 HTTP、清单和分片更直观 同时涉及 HTTP 与低延迟时序
运维成本 连接和媒体服务器成本较高 分发和缓存模型成熟 需要更细的容量与超时管理

最终还要结合观看人数、互动比例、设备分布和可接受延迟。没有一种协议在所有维度都占优。一个“最低延迟”的方案,如果让大量观众无法播放,实际体验仍然不如延迟稍高但稳定的方案。

按场景做选择

互动课堂和连麦

教师提问、学生举手和多人连麦需要较快的反馈,主讲人与参与者之间可以使用 WebRTC。课堂回放、旁观人数较多的直播观看则可以转成 HLS 或 LL-HLS,避免所有观众都占用实时会话资源。

这里要把“互动通道”和“观看通道”拆开。互动状态通过信令或数据通道传播,主视频通过更适合扩散的协议播放;两条链路需要明确的时间轴同步策略。互动事件应带发生时间,而不是只带客户端收到消息的时间,否则不同协议的观众会看到难以解释的状态顺序。

赛事和公开活动

赛事通常需要稳定覆盖大量观众,弹幕、竞猜和比分更新不一定要求视频本身使用实时会话。HLS 是简单可靠的基础选择;如果业务要求观众看到事件后能更快参与互动,可以考虑 LL-HLS,同时保留普通 HLS 作为回退。

赛事还要考虑突发流量。HTTP 分发可以提前预热 CDN 和扩容回源,WebRTC 则需要预留会话和扇出容量。若所有观众同时使用实时会话,网络带宽和连接状态会随人数线性增长,故障域也更难隔离。

小规模实时协作

远程协作、设备监控和一对一指导更关心双方是否能迅速看到和回应对方。此时 WebRTC 的低延迟价值更明显,连接规模和媒体服务器容量反而是主要约束。若只需要把摄像头画面单向广播给大量用户,仍应重新评估是否需要完整的双向能力。

商品直播和互动活动

商品讲解可以使用 LL-HLS 或普通 HLS 承担大部分观看,购物车、点赞、问答和库存状态通过 WebSocket 或业务 API 传递。若某些用户需要上麦或与主播连线,再为少量参与者建立 WebRTC 会话。把所有功能都塞进视频协议,会让协议选择变成产品功能耦合。

混合架构比单协议更常见

一个实际系统可以采用如下结构:

发布者 ── WebRTC/RTMP ── 接入层 ── 实时媒体服务器 ── WebRTC 互动观众
                                      │
                                      └── 转码/打包 ── LL-HLS/HLS ── CDN 观众
                                                        │
                                                        └── 普通 HLS 回退

实时链路服务互动人群,HTTP 分发链路服务大规模观看。两条链路共享输入流,但不必共享全部故障域:实时媒体服务器异常时,公开观看仍可通过 HLS 继续;CDN 回源抖动时,互动会话也不一定中断。

混合架构会带来时间差。产品需要明确哪个时间点是“直播当前时刻”,并在互动消息、比分或字幕中携带事件时间戳。播放器不能只根据收到消息的顺序更新界面,否则不同协议的观众会看到难以解释的状态跳变。

混合架构还需要明确降级顺序。WebRTC 连接建立失败时,可以让用户进入 LL-HLS 或普通 HLS 观看;LL-HLS 的清单超时,可以回退到普通 HLS;HLS 源站异常时,播放器应展示可理解的重试状态,而不是频繁创建新的 WebRTC 会话。

从普通 HLS 逐步迁移

迁移到 LL-HLS 或 WebRTC 时,先生成新输出但不立刻切换所有用户。可以按设备、地区、账号或流白名单逐步放量,同时观察首帧成功率、清单错误、卡顿、延迟和 CDN 回源压力。转码成功率不能替代端到端播放成功率。

迁移需要保留旧协议的可用回退。新播放器发现能力不满足时,使用普通 HLS;低延迟清单出现连续超时,回退到稳定窗口;WebRTC 的 TURN 使用率和媒体服务器负载超过阈值时,暂停扩大灰度。每一步都要有继续、暂停和回滚条件。

不要只比较平均延迟。P50 下降但 P99 卡顿上升,可能意味着新协议只对网络良好的用户有效。选型时应同时观察分位延迟、失败用户比例、设备覆盖和服务端资源成本。

选型前的验证清单

  • 目标延迟是端到端目标,还是只测服务端输出时间;
  • 观众是少量互动用户,还是大量单向观看用户;
  • 是否需要上行音视频、数据通道或只需要观看;
  • 目标浏览器、系统和播放器是否支持所需能力;
  • STUN/TURN、SFU 或 CDN 的容量是否已经纳入方案;
  • CDN、鉴权、缓存和带宽成本是否已经纳入方案;
  • 清单、部分分片和连接保持的超时是否经过真实网络验证;
  • 断网、切后台、切换网络和设备休眠后能否恢复;
  • 是否准备了可播放的回退协议,而不是把所有用户绑定在单一路径上;
  • 监控能否区分连接失败、清单过期、分片下载失败和解码失败;
  • 灰度期间是否同时观察延迟、成功率、卡顿率和资源消耗。

协议选型的结果应当是一张带有边界条件的决策表,而不是一句“使用低延迟方案”。当互动规模、分发规模和终端差异被拆开后,WebRTC、HLS 与 LL-HLS 往往可以共同组成一套更容易演进的系统。

相关阅读:工程日志:自适应流媒体中的能力协商一条直播流是怎样到达用户的:从 RTMP 推流到 HLS 播放