FFmpeg循环推流至MediaMTX RTSP服务器时出现400错误及路径无效问题求助
FFmpeg循环推流至MediaMTX RTSP服务器时出现400错误及路径无效问题求助
问题描述
我最近在用MediaMTX搭建RTSP服务器,尝试通过FFmpeg把本地的clouds.mp4视频循环推流到服务器上,但试了好几种参数组合都没成功,MediaMTX的终端一直提示“invalid path”错误。以下是我的配置和错误信息:
- 使用的FFmpeg命令:
ffmpeg -re -stream_loop -1 -i ./clouds.mp4 -f rtsp -rtsp_transport tcp rtsp://localhost:8554
- 视频文件详细信息(通过FFmpeg读取的输入信息):
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './clouds.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 creation_time : 2023-01-12T20:44:34.000000Z Duration: 00:00:56.34, start: 0.000000, bitrate: 2952 kb/s Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 2758 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default) Metadata: creation_time : 2023-01-12T20:44:34.000000Z handler_name : Vimeo Artax Video Handler vendor_id : [0][0][0][0] encoder : AVC Coding Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default) Metadata: creation_time : 2023-01-12T20:44:34.000000Z handler_name : Vimeo Artax Audio Handler vendor_id : [0][0][0][0] Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (native)) Stream #0:1 -> #0:1 (aac (native) -> aac (native))
- MediaMTX终端错误日志:
2023/05/08 17:30:43 INF [RTSP] [session 298895e1] created by 127.0.0.1:38024 2023/05/08 17:30:43 INF [RTSP] [conn 127.0.0.1:38024] closed (invalid path)
专家解答
你遇到的核心问题是RTSP推流地址缺少了流路径,MediaMTX要求推流时必须指定一个具体的流名称(路径),否则服务器无法识别该推流请求,从而返回“invalid path”错误。
1. 修正FFmpeg推流命令
把你的命令修改为:
ffmpeg -re -stream_loop -1 -i ./clouds.mp4 -c copy -f rtsp -rtsp_transport tcp rtsp://localhost:8554/mystream
这里做了两个关键调整:
- 添加了
-c copy参数:直接复用视频的H.264编码和音频的AAC编码,避免不必要的转码,提升推流效率,同时减少兼容性问题。 - 在RTSP地址末尾添加了
/mystream:这就是推流的路径(流名称),你可以换成任意你喜欢的名称,比如/clouds_stream。
2. 验证推流是否成功
修改命令后重新执行,此时MediaMTX的终端应该会输出类似这样的日志,说明推流成功:
2023/XX/XX XX:XX:XX INF [RTSP] [session XXXXXXXX] created by 127.0.0.1:XXXX 2023/XX/XX XX:XX:XX INF [RTSP] [path mystream] created 2023/XX/XX XX:XX:XX INF [RTSP] [session XXXXXXXX] is publishing to path 'mystream'
3. 额外排查点
如果修改后还是有问题,可以检查这两点:
- 确认MediaMTX的配置文件(默认是
mediamtx.yml)中,paths部分是否允许推流。默认配置下,所有路径都是允许发布和读取的,如果你修改过配置,确保目标路径的publish权限是开启的。 - 确认FFmpeg能正确读取到
./clouds.mp4文件,你可以先执行ffmpeg -i ./clouds.mp4测试文件是否能正常解析。
备注:内容来源于stack exchange,提问作者lokit khemka




