SRS服务器DVR录制WebRTC生成MP4文件时长异常求助
SRS DVR录制WebRTC到MP4仅录制数秒的解决建议
检查DVR核心配置
确认srs.conf中的DVR参数是否正确设置:- 确保
dvr_path指向的目录有读写权限,避免因权限不足导致录制提前终止 - 检查
dvr_duration是否被误设为极小值(比如1秒),该参数控制分片录制的时长,默认应为3600秒 - 开启
dvr_wait_keyframe,让SRS等待第一个关键帧再启动录制,避免因无有效帧触发提前结束
参考配置片段:
dvr { enabled on; dvr_path ./objs/nginx/html/[app]/[stream].[timestamp].mp4; dvr_duration 3600; dvr_wait_keyframe on; }- 确保
排查WebRTC关键帧发送问题
WebRTC流若关键帧间隔过大或初始关键帧延迟,会导致DVR因等待超时提前结束录制:- 推流端设置定期发送关键帧(建议每2-5秒一次)
- 用
ffprobe工具分析流的关键帧间隔,确认关键帧生成正常
优化WebRTC流稳定性
UDP协议的WebRTC易受网络波动影响,流中断或丢包会触发DVR分片:- 检查服务器网络状态,排除丢包、高延迟问题
- 在SRS配置中增大UDP接收缓冲区,减少丢包:
webrtc { enabled on; webrtc_udp_buffer_size 2097152; } - 推流端监控WebRTC连接状态,避免频繁断开重连
验证SRS版本兼容性
部分旧版SRS存在WebRTC转MP4的DVR逻辑bug,建议升级到最新稳定版(如5.x系列),或确认当前版本是否有相关修复补丁通过日志定位问题
开启SRS的trace级日志,查看录制过程中的关键信息:- 关键帧检测日志(如
dvr: wait keyframe) - 流断开或暂停的触发日志(如
client disconnect) - DVR文件结束的原因(如
dvr: finish file)
日志默认路径为./objs/srs.log,可精准定位是流问题还是配置/逻辑问题
- 关键帧检测日志(如
交叉验证RTMP推流
先用RTMP推流测试DVR功能,若RTMP录制正常,说明问题集中在WebRTC处理环节;若RTMP也异常,则排查DVR通用配置或服务器环境
内容的提问来源于stack exchange,提问作者anhhtbk
相关产品推荐
相关产品推荐

