MediaMTX 快速上手:三行配置搞定 RTSP 转 WebRTC
【免费下载链接】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、WebRTC、HLS、SRT 五种协议,任何一路协议推进来的媒体,都能从另一种协议读出去。如果你的需求是把安防摄像头画面搬进浏览器、让 OBS 的一路推流变成多端可播,或者要把直播流留下来存盘,这个工具都能覆盖。你可以把它理解成一台媒体路由器:流从一侧进来,换几种格式从另一侧出去,中间不用额外写转码程序。下面用一路真实流串起完整流程:部署、接入、多端观看、录制,最后扫一遍常见坑。
先对场景:MediaMTX 适合解决哪些需求
动手写配置前,先对照一下你的需求长不长这样:
- 安防取流:摄像头只会推 RTSP(摄像头最常用的实时流协议),而你要在浏览器里看;把源地址填进服务器,网页端直接打开画面。
- 推流分发:OBS 推一路 RTMP(网络直播最常用的推流协议),服务器同时给出 WebRTC(浏览器原生支持的低延迟协议)、HLS(基于 HTTP 分片的点播式协议)、RTSP 三个出口。
- 低延迟观看:WebRTC 播放延迟通常在一秒内,比传统分片方案体验好得多;HLS 也有 LL(低延迟)模式可用。
- 录像与回放:流可以按 fMP4 / MPEG-TS(广播传输常用容器)分段存盘,按保留期自动清理。
确认需求对得上,下一步先把服务跑起来。
两条命令跑起 MediaMTX
硬件门槛不高:双核 CPU、512MB 内存就够用。安装分两条路径,任选其一:
二进制安装
./mediamtx拿到对应系统的发布包后直接执行单一可执行文件,同目录的mediamtx.yml即配置文件,全部默认值即可用。
Docker 安装
docker run --rm -it --network=host bluenviron/mediamtx:latest需要调用 FFmpeg 等外部工具时,换成latest-ffmpeg镜像变体即可。
终端里看到server is ready,说明启动完成。服务起来了,接下来接入第一路真实的流。
接一路 RTSP 摄像头,在浏览器里看它
MediaMTX 的核心概念是路径(path):每条路径代表一路流,路径名就是读取它的钥匙。以把摄像头转成网页流为例,在 mediamtx.yml 的paths块下加三行:
paths: camera: source: rtsp://user:pass@192.168.1.100:554/stream sourceOnDemand: yessourceOnDemand: yes表示有人观看才向摄像头拉流,最后一个人离开 10 秒后断开,省带宽。其余配置项保持默认即可。
保存后重启./mediamtx,再按下表验证,WebRTC 那行能出画面就算整条链路通了:
| 协议 | 地址 | 说明 |
|---|---|---|
| WebRTC | http://localhost:8889/camera | 内置网页播放页,浏览器直接打开 |
| RTSP | rtsp://localhost:8554/camera | VLC、FFmpeg 等播放器可打开 |
| HLS | http://localhost:8888/camera/index.m3u8 | 分片播放,兼容性最好 |
| SRT | srt://localhost:8890?streamid=read:camera | 基于 UDP 的传输协议,弱网更抗造 |
能看了之后,紧接着要考虑的就是把流留下来。
把流变成录像文件:四行配置加自动清理
录像功能很直白,在对应路径下追加四行:
record: yes recordPath: ./recordings/%path/%Y-%m-%d_%H-%M-%S recordFormat: fmp4 recordDeleteAfter: 7drecordPath里的%path和日期变量会让文件按“流名 + 日期”自动归档成目录;recordDeleteAfter: 7d表示分段完成 7 天后自动删除,不用手写清理脚本。若希望在线回看,把playback: true打开,访问http://localhost:9996/,该服务源码在 internal/playback/。
观看和留存都齐了,最后熟悉几个大概率会踩的坑。
卡住了先查这五个坑
- WebRTC 页面转圈连不上→ 多半是防火墙拦了 MediaMTX 的 WebRTC 数据通道 UDP 8189,放行该端口;客户端与服务器不同网段时,再在
webrtcICEServers2加一个公网 STUN。 - RTSP 源拉流超时→ 摄像头要求鉴权或 UDP 被阻断;在
source地址上补上账号密码,或用rtspTransport: tcp强制走 TCP。 - OBS 在直播但浏览器 404→ 路径名没对上:推流密钥写的是
mystream,观看地址里也必须用mystream。 - HLS 播放感觉延迟高→ 确认没有覆盖默认的低延迟参数,
hlsSegmentDuration: 1s、hlsPartDuration: 200ms保持原样。 - 录像目录是空的→ 该路径还没有活跃流:录制只在流被发布或拉取时进行;也检查配置是否写错层级被
pathDefaults覆盖。 - 端口被占用→ 所有监听端口在
mediamtx.yml中都能单独改,如rtspAddress、rtmpAddress,改一行重启即可。
环境顺了之后,就可以给服务器加程序化控制和权限了。
进阶方向:四扇门各一句话
到这里,一台可用的多协议流媒体服务器已经搭完:一个配置文件搞定转协议、多端观看和录像。
- Control API:把
api: true打开,用 HTTP 查询路径状态、上下线信息,细节见 docs/5-references/2-control-api.md。 - 事件钩子:流上线、读写者变化、分段完成等事件都能触发 shell 命令,参考 internal/hooks/。
- 认证:通过
authInternalUsers给用户分配推流 / 读取权限,控制哪些路径对外开放。 - 多实例与分发:结合
forward转发和代理能力做多实例分发,架构思路见文档中的架构一章。
【免费下载链接】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),仅供参考