LL-HLS(Low-Latency HLS)是 Apple 在 2019 年推出的 HLS 扩展协议,通过将传统分片进一步细分为 Part、引入阻塞加载和预加载机制,将直播延迟从传统的 10-30 秒降低到 2-5 秒。本文提供一套完整的自建 LL-HLS 服务架构方案。
一、整体架构概览
一个完整的 LL-HLS 服务架构包含四个核心层次:
核心数据流:
二、核心组件与配置
2.1 推流端配置
LL-HLS 要求视频流具备稳定的帧率和关键帧间隔,以便正确生成 Part。
OBS 关键配置:
输出模式设为“高级”
在 x264 选项中添加
keyint=60(关键帧间隔 2 秒,30fps × 2 = 60 帧)添加
bframes=0(禁用 B 帧,WebRTC 和部分播放器需要)
FFmpeg 推流命令:
bash
ffmpeg -re -i input.mp4 \ -c:v libx264 -g 60 -bf 0 \ -c:a aac -ar 44100 \ -f flv rtmp://your-server/live/streamkey
2.2 源站配置
SRS 配置(推荐)
SRS 5.0+ 原生支持 LL-HLS,配置如下:
conf
# srs.conf listen 1935; http_server { enabled on; listen 8080; } vhost __defaultVhost__ { hls { enabled on; hls_type low_latency; # 启用 LL-HLS 模式 hls_part_wait 100; # Part 等待超时(ms) hls_part_cache 100; # Part 缓存数量 hls_fragment 2; # 分片时长 2 秒 } }Wowza 配置
在 Wowza Streaming Engine 中添加以下自定义属性以启用 LL-HLS:
| 属性名 | 类型 | 值 | 说明 |
|---|---|---|---|
cmafLLEnableLowLatency | Boolean | true | 启用低延迟模式 |
cmafLLChunkDurationTargetAudio | Integer | 500 | 音频块时长(ms) |