HLS 直播延迟优化:如何将延迟从 30 秒降到 3 秒

使用 HLS 协议进行直播时,很多开发者都会遇到一个头疼的问题:延迟太高。传统 HLS 直播的延迟通常在 15-30 秒之间,这对于互动直播、体育赛事、在线教育等场景显然是无法接受的。本文将深入分析 HLS 延迟的来源,并介绍几种成熟的优化方案,帮助你将直播延迟降到 3 秒甚至更低。

HLS 直播延迟从哪里来?

HLS 的高延迟并非设计缺陷,而是其切片机制 inherent 的特性。一个典型的 HLS 直播流程中,延迟主要来自以下几个环节:

  1. 切片时长(GOP 长度):HLS 播放器必须等待一个完整的 TS 切片生成后才能开始下载。如果切片时长为 10 秒,这里就产生了平均 5 秒、最大 10 秒的延迟
  2. 播放器缓冲区:为了应对网络波动,播放器通常会缓冲 3 个切片才开始播放。3 个 10 秒切片 = 30 秒缓冲
  3. 编码延迟:视频编码器需要将一组帧(GOP)编码完成后才能输出,这通常增加 1-2 秒延迟
  4. CDN 回源与分发:切片文件上传到 CDN 并分发到边缘节点,需要 1-3 秒

将这些环节累加起来,传统 HLS 直播产生 15-30 秒延迟就不足为奇了。

方案一:LL-HLS 低延迟技术

Apple 在 2019 年推出了 Low-Latency HLS(LL-HLS) 协议扩展,旨在将 HLS 延迟降到 2-3 秒级别,同时保持与现有 CDN 架构的兼容性。

LL-HLS 的核心机制

  • 片段式传输(Partial Segments):将传统 6-10 秒的切片进一步切分为更小的部分片段(约 200ms-1s),播放器无需等待完整切片即可开始下载和播放
  • 阻塞式播放列表加载(Blocking Playlist Reload):播放器在请求 M3U8 播放列表时,服务器会保持连接直到新内容就绪,减少轮询间隔
  • 预加载提示(Preload Hints):服务器提前告知播放器下一个片段的地址,减少请求往返时间
  • HTTP/2 PUSH:服务器主动将部分片段推送给播放器,进一步减少请求延迟

FFmpeg 生成 LL-HLS 的命令

ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset fast -tune zerolatency \
  -c:a aac -b:a 128k \
  -f hls \
  -hls_time 2 \
  -hls_flags partial+independent_segments \
  -hls_playlist_type event \
  -method PUT \
  http://server/live/stream.m3u8

方案二:CMAF 碎片封装格式

CMAF(Common Media Application Format) 是由 MPEG 标准化的媒体封装格式。它的核心思想是:使用一套统一的媒体分片格式,同时服务于 HLS 和 DASH 两种协议。

CMAF 如何降低延迟

  • CMAF 采用 Chunked Transfer Encoding,不需要等待完整的切片文件生成,而是边生成边传输
  • 结合 CTE(Chunked Transfer Encoding) 和 HTTP/1.1 或 HTTP/2,可实现服务器到播放器的实时数据推送
  • CMAF 分片可以被 HLS(通过修改后的 M3U8)和 DASH(通过 MPD)同时引用,实现"一份内容,多种协议"

💡 注意:CMAF 对 CDN 和播放器都有要求。CDN 需要支持 Chunked Transfer Encoding,播放器需要支持 CMAF Low Latency 模式。目前主流 CDN(CloudFront、Akamai、阿里云 CDN)和播放器(hls.js、Shaka Player)均已支持。

方案三:服务端参数调优

如果你暂时无法升级到 LL-HLS 或 CMAF,通过调整传统 HLS 的服务端参数也能获得明显的延迟改善:

  • 缩短切片时长:将 hls_time 从 10 秒改为 2-3 秒。这是最简单有效的优化手段
  • 减少播放列表长度:将 hls_list_size 从默认的 5 改为 3,播放器缓冲的数据量更少
  • 使用 zerolatency 预设:FFmpeg 编码时添加 -tune zerolatency,牺牲少量压缩率换取更低的编码延迟
  • 优化 GOP 结构:将关键帧间隔(GOP size)设置为与切片时长一致,通常为帧率的 2-3 倍

三种方案如何选择?

方案延迟水平适用场景改造难度
服务端参数调优8-15 秒现有系统快速优化低(改配置)
LL-HLS2-4 秒Apple 生态、移动端直播中(需升级播放器)
CMAF + CTE2-3 秒大规模分发、多协议兼容高(需 CDN 支持)

在线测试您的 HLS 视频流

优化延迟后,使用我们的在线播放器验证播放效果

前往 M3U8 在线播放器 →

相关文章: