1. 为什么你需要SRS的DVR录制功能?
如果你正在搭建一个直播系统,无论是用于在线教育、企业培训、安防监控还是游戏直播,你大概率会遇到一个核心需求:如何把直播流保存下来? 你可能需要回放精彩片段、存档重要会议、或者满足合规性要求。这时候,手动录屏不仅效率低下,而且不可靠。SRS(Simple Realtime Server)作为一款优秀的开源流媒体服务器,其内置的DVR(数字视频录像)功能,就是为你自动化解决这个问题的利器。
简单来说,SRS的DVR功能就像一个24小时不间断工作的智能录像机。只要推流上来,它就能自动、持续地将视频流按你设定的规则切成片段,保存到硬盘上。这比你想象的要强大和灵活得多。我见过很多团队一开始用FFmpeg拉流录制,不仅消耗额外资源,管理起来也麻烦。而SRS的DVR是“原生”的,直接在服务器内部完成流转存,效率高,配置也集中。今天,我就带你从零开始,把SRS的DVR功能玩转,重点就是那个非常实用的“分段存储”方案,让你录制的视频既好管理,又方便播放。
2. 核心概念扫盲:DVR计划与分段存储
在动手配置之前,我们得先搞清楚SRS DVR里的几个关键“开关”,它们决定了录像的行为模式。官方文档可能讲得比较术语化,我用大白话给你解释一下。
首先是最重要的 dvr_plan,也就是录制计划。它主要有两种模式:
- session:“一场一录”。从推流开始到推流结束,不管这中间播了3小时还是3天,全部录成一个巨大的FLV文件。这种模式简单粗暴,适合录制完整的直播场次,比如一场足球赛、一堂完整的课程。但缺点也很明显:文件太大,不好处理和分发;如果中途推流中断又恢复,可能会出问题。
- segment:“按时分片”****。 这是我们今天要重点讲的,也是生产环境更常用的模式。它会按照你设定的时间间隔,比如30秒、5分钟、1小时,把持续的流切割成一个个小文件。这就像用DV录磁带,一盘录满了自动换下一盘。这样做的好处太多了:文件大小可控,易于备份和迁移;支持边录边播(HLS原理类似);某个文件损坏不影响其他文件。
决定了分段模式后,就要设置 dvr_duration,也就是每个分片的时长(单位:秒)。这里有个巨坑你一定要注意:视频切割不是你想在哪儿切就在哪儿切的。视频流是由一连串的“帧”组成的,其中有一种特殊的帧叫关键帧(I帧),它可以独立解码,而其他帧(P帧、B帧)需要依赖关键帧才能解码。
这就引出了 dvr_wait_keyframe 这个至关重要的参数。如果把它设为 off,SRS就会严格按 dvr_duration 的时间点切文件。假设在29.5秒时刚切完,到30秒时该切下一个文件了,但此时流里来的不一定是个关键帧。你强行一切,新文件开头就是一个需要依赖上一帧才能解码的P帧,播放器拿到这个文件根本解不出来,结果就是开头花屏、黑屏或者直接播不了。所以,在生产环境,我强烈建议你把它设为 on。这样,当到达预设时长后,S


360

被折叠的 条评论
为什么被折叠?



