配置是:
hls_fragment 2; # 每个 TS 片段 2 秒
hls_playlist_length 10; # 播放列表保留最近 10 秒的内容
实际效果
- TS 文件数量
- 计算方式:
hls_playlist_length / hls_fragment
-
这里
10s / 2s = 5
,所以 大约会有 5 个 TS 文件(而不是 10 个)。 -
播放列表行为
- 每 2 秒生成一个新的
.ts
文件。 .m3u8
播放列表始终包含最近 10 秒的 TS 文件(即 5 个)。-
旧的 TS 文件会被自动清理(除非
hls_cleanup off
)。 -
延迟 & 性能影响
- 延迟:客户端通常会有
hls_fragment * 1.5
左右的延迟(约 3s)。 - 服务器负载:比
hls_fragment 1
更节省 CPU/IO,比默认hls_fragment 3
延迟更低。 - 网络适应性:2s 片段比 1s 更稳定,适合大多数直播场景。
是否需要调整?
✅ 适合的情况
- 希望 降低延迟(2s 片段比 3s 更快)。
- 想 减少 TS 文件数量(5 个左右,而不是默认 20 个)。
- 适用于 普通直播、视频会议等中等延迟需求。
⚠️ 潜在问题
- 如果
hls_playlist_length 10
太小,可能导致: - 播放器缓冲不足(网络差时容易卡顿)。
- 快进/回放时内容太少(HLS DVR 功能受限)。
推荐优化方案
1. 平衡延迟 & 流畅性
hls_fragment 2; # 2s 片段(降低延迟)
hls_playlist_length 20; # 保留 20s 内容(10 个 TS 文件)
- 延迟:~3s
- TS 文件数:10 个
- 适合:大多数直播场景
2. 超低延迟模式
hls_fragment 1; # 1s 片段(最低延迟)
hls_playlist_length 10; # 保留 10s 内容(10 个 TS 文件)
- 延迟:~1.5s
- TS 文件数:10 个
- 缺点:CPU/IO 负载较高
3. 节省资源模式
hls_fragment 3; # 3s 片段(默认)
hls_playlist_length 30; # 保留 30s 内容(10 个 TS 文件)
- 延迟:~4.5s
- TS 文件数:10 个
- 适合:高并发、节省服务器资源
总结
- 你的当前配置(
hls_fragment 2; hls_playlist_length 10
)会生成 5 个 TS 文件,延迟约 3s。 - 如果想减少 TS 文件数量,可以 增大
hls_fragment
(如3s
)。 - 如果想降低延迟,可以 减小
hls_fragment
(如1s
),但会增加服务器负载。
调整参数时,建议用 OBS 推流 并用 VLC/HLS.js 测试播放延迟 来找到最佳平衡点。