MediaMTX 快速上手:完整安装与配置指南,一条命令跑通多协议直播流
【免费下载链接】mediamtxReady-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.项目地址: https://gitcode.com/GitHub_Trending/me/mediamtx
MediaMTX 是一个零依赖、单可执行文件的直播媒体服务器:它能发布、读取、代理、录制和回放音视频流,内置支持 RTSP、RTMP、SRT、WebRTC、LL-HLS、MPEG-TS、RTP 和 MoQ(Media-over-QUIC)等主流协议,流进来后会自动转换成其它协议对外提供。你可以把它理解成一台"媒体路由器":摄像头或推流端从一边接入,播放器、录制系统从另一边取出,适合直播分发、安防监控、视频中转等场景。
开始之前:先花 30 秒自检环境
不用装数据库、不用装运行时,MediaMTX 本身就是单个可执行文件,准备工作非常轻:
| 检查项 | 说明 |
|---|---|
| 操作系统 | Linux、Windows、macOS 均可(Docker 方式需要 Linux 或 Docker Desktop) |
| 硬件 | 普通服务器或 NAS 级别即可,瓶颈通常在网络而非 CPU |
| 端口 | 本地跑通至少需要 8554(RTSP)、1935(RTMP)、8888(HLS)、8889(WebRTC)、8890/8189(SRT)、8892/8893(MoQ),完整清单见 docs/2-features/05-configuration.md |
| 网络 | RTSP 的媒体传输默认走 UDP;在 Docker 或 NAT 后建议改用 TCP 传输,或整体改用--network=host方式,避免媒体包"握手成功、画面不出" |
到这里你已经确认了环境没有硬伤,可以进入安装。
挑一种方式把服务装好 🚀
选型一句话:想要隔离好、可复现 → Docker;想要一个文件长期自管 → 官方发布包;想改代码、跑最新功能 → 源码构建。
| 方式 | 适合谁 | 特点 |
|---|---|---|
| Docker 镜像 | 生产/长期运行 | 环境隔离,官方推荐的生产方式 |
| 官方发布包 | Windows/macOS/普通服务器 | 单可执行文件 + 配置文件,零依赖 |
| 源码构建 | 开发者 | 需要 Go 环境,跑 main 分支 |
用 Docker 一条命令装好并映射端口
docker run --rm -it \ -p 8554:8554 -p 1935:1935 -p 8888:8888 -p 8889:8889 \ -p 8890:8890 -p 8890:8890/udp -p 8893:8893/udp \ bluenviron/mediamtx:1看到滚动日志即代表服务已在容器里运行。镜像有四种变体:1(基础)、1-ffmpeg(内置 FFmpeg)、1-rpi(树莓派摄像头)、1-ffmpeg-rpi(两者都含)。注意:若外部设备要通过 WebRTC 连接,还要用环境变量MTX_WEBRTCADDITIONALHOSTS告诉它你对外暴露的 IP。你现在已经拥有一个正在监听多个端口、随时可收流的媒体服务器。
下载官方发布包:单文件跑起来
- 到官方 Releases 页面,下载与你系统匹配的压缩包(例如
mediamtx_linux_amd64.tar.gz),解压后得到mediamtx可执行文件和mediamtx.yml配置文件。 - 在解压目录里直接启动:
./mediamtxWindows 上双击mediamtx.exe效果相同。执行完这一步,服务已用内置默认配置在本地跑起来,你现在已经完成了最简安装。
源码构建:Go 开发者专属
git clone https://gitcode.com/GitHub_Trending/me/mediamtx cd mediamtx go run .需要本地装有 Go 工具链。命令开始输出监听日志后,你跑的已经是最新开发版了。
写最小配置:只改 2 处就够用 🔧
配置文件mediamtx.yml每个字段都有中文级注释,默认值几乎可以直接生产使用。这里只改两处。第一处:把api: false改成api: true,开启 Control API(一个默认监听 9997 端口的 HTTP 接口,用它验证服务状态最方便)。第二处:在文件末尾的paths:段注册一条流路径,camtest是路径名,之后任何推流端往这个路径推流都会生效:
paths: camtest:保存文件即可——MediaMTX 支持热加载,改动会被立即检测到并应用,不会断开已有客户端,你现在已经完成了最小配置。
启动并 5 秒确认服务正常工作
启动方式与安装方式一致:二进制为./mediamtx,Docker 直接看容器日志。启动成功的标志是每个协议各一条监听日志,例如:
RTSP: listening on :8554 RTMP: listening on :1935 HLS: listening on :8888 WebRTC: listening on :8889 SRT: listening on :8890接着做两件事,整个链路就验证完了。第一件事,用 FFmpeg 往camtest推一路测试图案流(testsrc是 FFmpeg 内置的测试信号源,画面是移动的彩色方块和计数秒表):
ffmpeg -re -f lavfi -i testsrc -f lavfi -i sine \ -c:v libx264 -preset ultrafast -c:a aac \ -f rtsp rtsp://127.0.0.1:8554/camtest第二件事,另开终端探测这条流:
ffprobe rtsp://127.0.0.1:8554/camtestffprobe列出 H.264/AAC 轨道 → 推流、转发全链路打通,验证成功。ffprobe提示 "not connected" 或超时 → 只是还没有人在推这条路径,属正常现象,先确认 ffmpeg 那条命令还活着。curl 127.0.0.1:9997返回api: not enabled→ 你漏改了api: true;连接被拒绝 → 服务没在运行。
| 常见现象 | 原因 | 处理 |
|---|---|---|
bind: address already in use | 端口被别的程序占用 | 在mediamtx.yml里改对应*Address后保存,热加载生效 |
| ffmpeg 报 Connection refused | 服务未启动或防火墙拦了 8554 | 先确认监听日志,再放行端口 |
| 浏览器/WebRTC 连不上,本地 RTSP 正常 | 服务端不知道自己的公网 IP | 设webrtcAdditionalHosts,Docker 用-e MTX_WEBRTCADDITIONALHOSTS=你的IP |
| RTSP 在 Docker 里无画面 | UDP 媒体包被容器网络改写 | 加-e MTX_RTSPTRANSPORTS=tcp,或改用--network=host |
排错到这一步,你已经能独立完成日常运维了。
快速回顾 ✅
- 准备:单可执行文件、零依赖,确认系统支持和端口空闲。
- 安装:Docker 一条
docker run映射端口,或下载官方发布包直接./mediamtx。 - 配置:
mediamtx.yml改两处——api: true+ 在paths:下注册路径,保存即热加载。 - 启动:看到各协议 listening 日志即代表启动成功。
- 验证:ffmpeg 推
testsrc测试流 +ffprobe回读,5 秒闭环。
下一步:深入配置参考 docs/5-references/1-configuration-file.md、Control API 手册 docs/5-references/2-control-api.md;常见扩展方向是开启record录制到磁盘、用source把上游流代理进来、以及给路径加鉴权。
【免费下载链接】mediamtxReady-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, proxy, record and playback real-time video and audio streams.项目地址: https://gitcode.com/GitHub_Trending/me/mediamtx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考