ZLMediaKit 直播时移:视频录制实时回看怎么开启(HLS 配置实战)
ZLMediaKit 直播时移:视频录制实时回看怎么开启(HLS 配置实战)
在 ZLMediaKit 里做视频录制时,录完却必须等完整文件生成才能回看?把 hls.segNum 设为 0,HLS 直播流会持续切成 TS 片段并写进 M3U8 索引,播放器就能实时回看最近内容——这就是直播时移。本文带你把开关打开、把参数调顺。
录好了却看不了:回看得等文件落地
传统录制是把整段流攒成一个完整文件,回放必须等它写完。安防、教育这类"刚发生就要能看回去"的业务,等不起这份延迟。
直播时移是什么:像电视的即时倒带
📺 直播时移好比电视机自带的 DVR 倒带:你按了"回退 30 秒",画面并不是真的往回播,而是服务器把最近 30 秒提前切好、存着,你再往前拉。
ZLMediaKit 的机制类似:直播的同时,把流按固定时长切成一个个 TS 小片段,边播边写进 M3U8 索引文件。播放器顺着索引往前读,就能看"刚才"的画面。
hls.segNum 怎么设:把直播变成可回放的录播
关键就一行配置:在 config.ini 的 [hls] 段,把 hls.segNum 从默认值改成 0。
- 非 0 值(如默认
3):M3U8 只保留最近几个片段,是纯直播形态。 - 设为
0:ZLMediaKit 会把直播流持续保存为可回放的录播文件,所有 TS 片段都完整写进 M3U8 播放列表,一个都不删。
开启后,每个新片段一生成就立即出现在 M3U8 里。播放器要做两件事:首次请求拿到 M3U8,然后按切片周期(通常每个片段时长轮询一次)重新拉取 M3U8,发现新片段就追加播放。这样"边直播、边回看"就闭环了。
相关实现见 src/Record/HlsMakerImp.cpp,配置默认值定义在 src/Common/config.cpp。
切片时长怎么选:2 到 10 秒的权衡
切片时长由 hls.segDur 控制,默认 2 秒。它直接决定你能往回看多"细"、延迟有多小:
- 片段越短(2 秒左右):回看延迟低、定位快,但片段多、文件头多,磁盘读写和 M3U8 更新更频繁。
- 片段越长(8–10 秒):I/O 压力小、更省资源,但回看颗粒度变粗、延迟变大。
经验区间是 2–10 秒:要"秒级回看"取小值,要稳定省资源取大值。配合 hls.segRetain(片段移出 M3U8 后在磁盘多留几个)规划好存储。注意 segNum 为 0 时片段不删除,长期录制要自己设保留策略,否则会持续吃磁盘。
两条别踩坑的提醒
- 目前实时回看只走 HLS。RTSP、RTMP 等协议暂时没有对应的时移形态,要别的协议就得自己按"切片段 + 维护索引"的思路实现。
- 播放器必须能动态解析 M3U8。一次性把列表读死的老式播放器不行,得支持按切片周期刷新播放列表、增量追加片段,时移才成立。
这套方案适合哪些场景
🎬
- 安防监控:值班时"回看刚才那几秒",快速核查画面。
- 在线教育:课程直播的同时保留即时回放,学生能回看刚讲的内容。
- 直播平台:给观众提供时移电视体验,进度条可拖拽。
- 视频会议:会议内容一边录、一边可即时回顾存档。
把 hls.segNum 设为 0,再用合适的 hls.segDur 平衡延迟与开销,ZLMediaKit 的直播流就同时具备了"录得住、回看快"两种能力。对多数实时回看需求,这套 HLS 时移组合已经够用。
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐
所有评论(0)