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