直播画面慢半拍?HLS 延迟成因与压缩方法

目录

  1. 先量化:你的延迟有几秒
  2. 延迟是怎么一秒秒叠出来的
  3. 不改架构的三招速调
  4. 进阶方案:LL-HLS 与部分分片
  5. 什么情况该换协议

先量化:你的延迟有几秒

拿手机秒表对准主播喊一声"现在",记下同一句话出现在你屏幕上的时刻,差值就是端到端延迟。传统 HLS 一般落在 10 到 30 秒;一旦超过 40 秒,多半说明配置存在优化空间。

延迟是怎么一秒秒叠出来的

这笔账并不复杂:编码端每 6 秒才切出一个 TS 分片,播放器按惯例攒够三段才起播,再加上网络传播与 CDN 分发的时间,光前两项就有 18 秒。结论很清晰——大头压在分片时长和开播缓冲上,其余环节都是零头。

不改架构的三招速调

服务器允许重新推流的话,先把分片切短:

ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f hls \
  -hls_time 2 -hls_list_size 6 -hls_flags delete_segments live.m3u8

在此基础上再叠加两条:

代价也要心里有数:分片变短后请求数成倍增长,源站与 CDN 的压力会明显上升。

进阶方案:LL-HLS 与部分分片

苹果的 Low-Latency HLS 把长分片拆成若干"部分分片",边生成边下发,配合预加载提示和阻塞式列表刷新,可以把延迟压进 2-5 秒区间。它要求源站与 CDN 双侧都支持相应扩展,改造前务必确认整条链路的兼容情况。

什么情况该换协议

连麦、拍卖、弹幕互动这类强实时场景,两秒仍然嫌慢,亚秒级的 WebRTC 才是对口答案;HLS 的强项在于规模化分发和简单可靠,赛事转播、在线课堂、发布会直播完全够用。服务端怎么选,可参考 自建 HLS 服务器的三种选型;想实测手里这条流的表现,丢进 首页播放器 看看即可。