MediaMTX完整上手:1个进程打通RTSP、RTMP、WebRTC、HLS的流媒体互转
【免费下载链接】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 是一个零依赖的实时流媒体服务器,读流、推流、协议互转、录制回放在一个进程里全部搞定,装完不用改配置就能开播。
一、一台媒体路由器,把各端协议互相翻译
它的定位是"媒体路由器":本身不生产画面,只负责搬运,输入端说什么格式它都收,输出端要什么格式它都出,中间自动转接。就像小区前台不拆你的包裹,只认门牌号码。核心能力:
- 五种以上输入输出协议任意组合互通,转换零转码
- 内置 WebRTC 播放页,浏览器开箱即看
- fMP4 / MPEG-TS 落盘录制,支持回放
- 按需拉流、配置热加载
主要协议的编解码支持:
| 链路 | 视频 | 音频 |
|---|---|---|
| RTSP | H265 / H264 / VP9 / VP8 / AV1 等 | AAC / MP3 / Opus / G711 等 |
| RTMP | H264 | AAC / MP3 |
| WebRTC | H264 / VP9 / VP8 / AV1 | Opus / G711 / G722 |
| HLS | H265 / H264 / VP9 / AV1 | AAC / Opus |
| SRT | H265 / H264 / MPEG-4 等 | AAC / MP3 / Opus 等 |
二、一条命令启动 MediaMTX
单文件可执行,Linux / Windows / macOS / 树莓派通吃,零运行时依赖。最低资源要求:双核 CPU、512MB 内存、约 100MB 磁盘。
| 形态 | 说明 |
|---|---|
| 二进制 | 下载对应平台的单文件即可,最省事 |
| Docker | 官方镜像 bluenviron/mediamtx:latest |
| latest-ffmpeg | 额外内置 FFmpeg,可做二次处理 |
| latest-rpi / latest-ffmpeg-rpi | 树莓派专用,带摄像头驱动 |
docker run --rm --network=host bluenviron/mediamtx:latest启动后日志会逐个列出监听地址,默认端口记住这几行:
| 服务 | 端口 | 服务 | 端口 |
|---|---|---|---|
| RTSP | 8554 | RTMP | 1935 |
| RTP / RTCP (UDP) | 8000 / 8001 | HLS | 8888 |
| WebRTC (HTTP) | 8889 | SRT | 8890 |
| MoQ | 8892 / 8893 | API / Metrics | 9997 / 9998 |
| Playback | 9996 | PPROF | 9999 |
三、把 RTSP 摄像头直接拉进浏览器播放
改配置文件 mediamtx.yml 的paths段,只加三行:
paths: cam1: source: rtsp://user:pass@摄像头IP:554/stream sourceOnDemand: yescam1:流的名字,后面所有访问地址都拼它source:上游地址,RTSP / RTMP / HLS / SRT / RTP 都能填sourceOnDemand:有人看才去上游拉,没人看自动断开,省带宽
保存即热加载,不用重启。浏览器打开http://本机地址:8889/cam1出画面,页面来自内置播放器 internal/servers/webrtc/read_index.html。注意 8889 只是握手入口,媒体流走 UDP 8189。
四、OBS 推流,多端同时取用
OBS 的"推流"设置里选"自定义":服务器填rtmp://本机地址:1935,串流密钥填mystream,开始推流。同一路画面立即可被多端取用:
| 端 | 取流地址 |
|---|---|
| VLC / 摄像头回看 | rtsp://本机地址:8554/mystream |
| 浏览器 | http://本机地址:8889/mystream |
| 移动端 / 弱网 | http://本机地址:8888/mystream.m3u8 |
| SRT 专网 | srt://本机地址:8890?streamid=read:mystream |
推流、读取的详细清单可查 docs/2-features/03-publish.md 和 docs/2-features/04-read.md。
五、把直播流录到磁盘,24 小时后自动清掉
paths下给目标流加录制参数:
| 参数 | 作用 | 建议值 |
|---|---|---|
record | 开启录制 | yes |
recordPath | 存放路径,支持%path、%Y-%m-%d_%H-%M-%S等变量 | ./recordings/%path/%Y-%m-%d_%H-%M-%S |
recordFormat | 容器格式 | fmp4或mpegts |
recordSegmentDuration | 单段时长 | 1h |
recordDeleteAfter | 过期自动删除,0s关闭 | 24h |
录好的文件在http://本机地址:9996/在线回放与下载,页面由 internal/playback/server.go 驱动;默认未开启,先把全局playback置为true。
六、树莓派摄像头直连:三行配置出画面
MediaMTX 内置了摄像头驱动,树莓派上开箱即用:
paths: rpi_cam: source: rpiCamera rpiCameraWidth: 1920 rpiCameraHeight: 1080 rpiCameraFPS: 30浏览器访问http://树莓派IP:8889/rpi_cam。还有 HFlip / 曝光 / 对焦 / 硬编 H264 等几十个旋钮,全列在 docs/5-references/1-configuration-file.md。
七、遇到坑时,30 秒排查表
- WebRTC 握手不通:在配置里加一条
webrtcICEServers2,填stun:stun.l.google.com:19302,让对端知道本机公网出口;服务器在 NAT 后有公网 IP,就补进webrtcAdditionalHosts;确认 UDP 8189 没被防火墙拦。 - HLS 延迟偏高:调小
hlsSegmentDuration(如 1s)与hlsPartDuration(如 200ms),分段越小播放延迟越低;再检查链路上带宽是否够。 - 拉不动上游:
sourceOnDemand: yes时首个读请求有等待窗口,超过sourceOnDemandStartTimeout(默认 10s)就放弃,先确认上游地址和凭据本身可达。
八、下一步去哪
- Control API(
api: true,端口 9997):改配置、看路径状态、在线增删路径,实现见 internal/api/api.go - 事件钩子:推流、读取、录制等节点触发外部命令,适合接告警与业务逻辑
- 指标与鉴权:Prometheus 格式监控;内置账号、HTTP 外部鉴权、JWT 三选一
- 规模化:读写分离 + 代理,多节点分摊一路大流量
动手顺序建议:先打开 API 面板看路径状态,再给主路加一条录制规则,最后挑一个 hooks 事件写第一条命令。更多细节按 docs/ 目录逐节读即可。
【免费下载链接】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),仅供参考