如何在MediaMTX服务器将单路RTSP流拆分为多路不同分辨率流?
用MediaMTX + FFmpeg拆分RTSP流为多路不同分辨率流
1. 配置MediaMTX接收多路推流
打开MediaMTX的配置文件(默认是mediamtx.yml),在paths节点下添加对应分辨率的流路径,设置允许外部推流:
paths: high: source: publisher # 允许推流到该路径 medium: source: publisher low: source: publisher
2. 编写FFmpeg转码推流命令
使用FFmpeg读取输入RTSP流,同时转码为多种分辨率并推送到MediaMTX的对应路径。替换命令中的rtsp://your-input-rtsp-url为实际输入流地址:
ffmpeg -i rtsp://your-input-rtsp-url \ -c:v libx264 -preset fast -crf 23 -s 1920x1080 -f rtsp rtsp://localhost:8554/high \ -c:v libx264 -preset fast -crf 23 -s 1280x720 -f rtsp rtsp://localhost:8554/medium \ -c:v libx264 -preset fast -crf 23 -s 640x360 -f rtsp rtsp://localhost:8554/low
参数说明:
-c:v libx264:采用H.264视频编码-preset fast:平衡编码速度与压缩效率-crf 23:控制视频质量,数值越小质量越高(常用范围18-28)-s WxH:指定输出分辨率,示例为1080p、720p、360p-f rtsp rtsp://localhost:8554/xxx:以RTSP格式推送到MediaMTX对应流路径
3. 启动服务与转码
- 启动MediaMTX服务:
./mediamtx # Linux/macOS # Windows 直接运行 mediamtx.exe
- 执行上述FFmpeg命令,开始转码推流
4. 验证多路流
用RTSP播放器(如VLC)分别访问以下地址,验证不同分辨率的流:
rtsp://localhost:8554/high(1080p)rtsp://localhost:8554/medium(720p)rtsp://localhost:8554/low(360p)
可选:让MediaMTX自动启动FFmpeg
如果不想手动运行FFmpeg命令,可以将转码逻辑集成到MediaMTX配置中,让服务自动启动转码进程:
paths: input: # 当有客户端访问input路径时启动FFmpeg转码 source: "ffmpeg -i rtsp://your-input-rtsp-url -c:v libx264 -preset fast -crf 23 -s 1920x1080 -f rtsp rtsp://localhost:8554/high -c:v libx264 -preset fast -crf 23 -s 1280x720 -f rtsp rtsp://localhost:8554/medium -c:v libx264 -preset fast -crf 23 -s 640x360 -f rtsp rtsp://localhost:8554/low -f null -" sourceOnDemand: true high: source: publisher medium: source: publisher low: source: publisher
注:命令末尾的-f null -用于让FFmpeg生成标准输出,避免MediaMTX判定进程启动失败。
内容的提问来源于stack exchange,提问作者Cobalt
相关产品推荐
相关产品推荐

