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

使用Mediamtx转推流时如何解决“runOnReady命令以码0退出”问题

问题分析与解决

核心问题

你遇到的runOnReady命令退出码0但转推失败,主要有两个常见原因:

  • 容器内未安装ffmpeg,导致命令执行异常(日志显示退出码0实际是容器对"命令未找到"的异常处理结果)
  • ffmpeg启动时流还未完全就绪,连接失败后直接退出

解决方案

1. 确保容器内安装ffmpeg

默认的aler9/rtsp-simple-server:v0.22.2镜像不带ffmpeg,需先安装:

方法一:自定义Docker镜像(推荐)

创建Dockerfile:

FROM aler9/rtsp-simple-server:v0.22.2
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*

修改docker-compose.yml中的镜像配置为构建本地镜像:

services:
  mediamtx:
    build: .
    # 其余端口、挂载配置保持不变

方法二:临时安装(仅用于测试)

进入运行中的容器执行安装命令:

docker exec -it media_mtx_rtsp_server apt-get update && apt-get install -y ffmpeg

2. 修正runOnReady命令

调整ffmpeg参数,增加重试机制,同时使用Mediamtx内置变量避免硬编码地址,适配流就绪延迟:

paths:
  show/test:
    runOnReady: ffmpeg -re -i "${RTMP_URL}" -c copy -f flv "rtmp://localhost:1935/compressed/test" -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 5
    runOnReadyRestart: yes
  • ${RTMP_URL}是Mediamtx内置变量,自动指向当前路径的RTMP推流地址,无需手动写死
  • -reconnect系列参数让ffmpeg在连接失败时自动重试,解决流刚启动时的就绪延迟问题

3. 验证转推结果

服务启动并推流成功后,用播放器测试转推地址:

ffplay rtmp://localhost:1935/compressed/test

日志排查(若问题仍存在)

修改runOnReady命令重定向ffmpeg日志,排查具体错误:

runOnReady: ffmpeg -re -i "${RTMP_URL}" -c copy -f flv "rtmp://localhost:1935/compressed/test" -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 5 2>/tmp/ffmpeg.log

进入容器查看日志内容:

docker exec -it media_mtx_rtsp_server cat /tmp/ffmpeg.log

内容的提问来源于stack exchange,提问作者Emad Helmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:55:43