如何通过单条FFmpeg命令同步推送两路RTSP流至MediaMTX服务器
如何通过单条FFmpeg命令同步推送两路RTSP流至MediaMTX服务器
嗨,我完全懂你的需求——要避免分开启动两个FFmpeg进程导致的流不同步问题,用一条命令推两路同步的RTSP流对吧?其实很简单,我们可以让FFmpeg从同一个输入源生成两路独立输出,这样它们共享同一帧数据,完全不会有启动时间差的问题。
直接给你最实用的解决方案,分两种场景:
场景1:从同一个视频文件生成原画质+低画质两路流
这应该是你最需要的情况,用一个输入源同时推送原画质和缩放后的低画质流:
ffmpeg -re -stream_loop -1 -i NameFile.mkv \ # 第一路:原画质直接复用编码推送 -c:v copy -c:a copy -f rtsp rtsp://localhost:554/mystream1 \ # 第二路:缩放后重新编码推送(参数可按需调整) -c:v libx264 -vf scale=640:360 -preset fast -crf 23 \ -c:a aac -b:a 128k -f rtsp rtsp://localhost:554/mystream2
参数说明:
-re -stream_loop -1 -i NameFile.mkv:保留你原来的设置,按视频帧率读取文件,无限循环播放- 第一路输出:
-c:v copy -c:a copy直接复用原音视频编码,无需重新编码,节省资源,推送到mystream1 - 第二路输出:
-vf scale=640:360:将视频缩放到640x360分辨率,你可以改成自己需要的尺寸(比如1280:720)-c:v libx264:用H.264编码重新压缩视频(缩放操作必须重新编码,若原视频已是H.264也适用)-preset fast:平衡编码速度与画质,可选ultrafast到slow之间的参数,越快资源占用越低但画质稍降-crf 23:控制画质,数值越小画质越好(18-28是常用合理范围)-c:a aac -b:a 128k:将音频转成AAC编码,128k比特率保证兼容性与音质平衡
场景2:如果已准备两个独立分辨率的视频文件
如果你已经有原画质和低画质两个分开的视频文件,也可以用一条命令同时推送,不过同步性不如单输入源可靠:
ffmpeg -re -stream_loop -1 -i NameFile.mkv -re -stream_loop -1 -i LowResFile.mkv \ -c copy -map 0 -f rtsp rtsp://localhost:554/mystream1 \ -c copy -map 1 -f rtsp rtsp://localhost:554/mystream2
关键注意点:
- 两种方案都是单FFmpeg进程处理,所以两路流的帧数据完全同步,不会出现分开启动时的时间差问题
- 记得检查MediaMTX的配置文件(
mediamtx.yml),确保允许/mystream1和/mystream2这两个流路径,默认配置一般支持任意路径,但最好确认一下
备注:内容来源于stack exchange,提问作者Sebastian Vasii
相关产品推荐
相关产品推荐

