You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTSP流音视频存储:无法同时实现分片、推流及音视频同存问题咨询

解决RTSP流同时分片、推流、存储完整文件的方案

嘿,这个问题我之前做流媒体项目的时候刚好解决过!其实不用纠结“单个命令能不能同时完成这三个任务”——ffmpeg的多路输出能力完全能搞定,而且配置起来也不复杂。下面给你详细的实现方案:

核心思路

用ffmpeg读取一次RTSP源流,然后创建三个独立的输出分支,分别对应你的三个需求:存储完整文件、按时间分片、推流到目标地址。这样只需要拉取一次流,避免重复拉流带来的带宽浪费和性能损耗。

完整命令示例(以每10分钟分片为例)

假设你的RTSP源地址是rtsp://your_camera_ip/stream,推流目标地址是rtsp://push_server/live/stream,执行以下命令即可同时完成三个任务:

ffmpeg -rtsp_transport tcp -i rtsp://your_camera_ip/stream \
# 分支1:存储完整音视频文件
-c:v copy -c:a copy full_stream.mp4 \
# 分支2:每10分钟(600秒)分片存储
-c:v copy -c:a copy -f segment -segment_time 600 -reset_timestamps 1 -segment_format mp4 segment_%03d.mp4 \
# 分支3:推流到目标地址
-c:v copy -c:a copy rtsp://push_server/live/stream

参数解释

  • -rtsp_transport tcp:强制用TCP协议拉取RTSP流,比UDP更稳定,适合丢包率较高的网络环境,避免流中断
  • -c:v copy -c:a copy:直接复制源流的音视频编码,不做转码,最大化节省CPU资源(如果推流服务器要求特定编码,比如H.264 Baseline,就需要替换成对应的编码命令,比如-c:v libx264 -profile:v baseline -level 3.0 -c:a aac)
  • 分片分支参数:
    • -f segment:启用分片复用器
    • -segment_time 600:设置分片时长为600秒(10分钟,你可以改成任意n*60的值)
    • -reset_timestamps 1:让每个分片的时间戳从0开始,避免播放器播放分片时出现时间轴混乱
    • segment_%03d.mp4:分片文件命名格式,%03d表示用三位数字递增编号(比如segment_001.mp4、segment_002.mp4)
  • 推流分支:直接把复制后的流推送到目标地址,格式支持RTSP、RTMP、HLS等主流协议

额外注意事项

  • 如果需要分片格式支持无缝拼接(比如后续要合并分片),可以把-segment_format mp4改成mpegts,TS格式天生支持无缝拼接,不需要额外处理
  • 可以添加-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5参数,让ffmpeg在RTSP流中断时自动尝试重连,最多等待5秒
  • 若日志输出太冗余,可加上-hide_banner -loglevel warning来精简日志,只显示警告和错误信息

内容的提问来源于stack exchange,提问作者Utsav vats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:46:33