介绍
MediaMTX(旧名 rtsp‑simple‑server),Go语言开发、零依赖单二进制文件的开源实时媒体服务器/媒体代理,定位为媒体路由器:接收一路推流,自动转换成多种协议对外分发,默认不做转码,只做协议封装转换。
GitHub:https://github.com/bluenviron/mediamtx
官网:https://mediamtx.org
应用场景
- 安防监控Web可视化:IPC(RTSP)接入,浏览器WebRTC低延迟预览,不用安装插件。
- 边缘流媒体网关:树莓派/边缘盒子部署,本地处理摄像头,再SRT回传到云端。
- 直播协议网关:OBS RTMP推流,同时提供WebRTC网页播放、SRT远距离传输。
- 小型NVR录像:内置录制,做简易录像存储。
- 测试调试各种流媒体设备,做协议转换工具。
一、核心定位
- 不是转码服务器,只做协议封装、路由转发、录制;原始编码(H264/H265/AAC等)不变,CPU开销极低。
- 输入一路流,可同时输出 RTSP / RTMP / WebRTC / SRT / HLS / MPEG‑TS,实现一次推流,多协议分发。
- 跨平台:Linux、Windows、macOS、ARM(树莓派、嵌入式、OpenWrt),直接运行二进制,无需安装依赖。
二、支持协议
| 协议 | 默认端口 | 说明 |
|---|---|---|
| RTSP | 8554 | 安防IPC摄像头最常用,支持rtsp‑over‑tcp |
| RTMP | 1935 | OBS推流,直播传统协议 |
| WebRTC(WHIP/WHEP) | 8889 | 浏览器无插件低延迟播放,延迟~100‑500ms |
| SRT | 8890 | 公网弱网可靠传输,远距离回传 |
| HLS / LL‑HLS | 8888 | 网页播放,LL‑HLS降低延迟 |
| MPEG‑TS | ‑ | UDP/TSP TS流 |
| Media‑over‑QUIC | ‑ | QUIC新型流媒体协议 |
编解码支持
H264、H265、VP8/VP9、AV1;AAC、Opus、G711、MP3等;不支持编码格式转换,格式不一致会拒绝流。
三、核心功能
1. 协议自动转换
IPC RTSP摄像头接入,浏览器直接WebRTC播放,无需ffmpeg中转。摄像头RTSP → MediaMTX → RTSP / WebRTC / HLS / SRT 多客户端同时拉流
2. 流路径 Path 管理
- 动态路径:任意客户端可以发布
rtsp://ip:8554/mystream,路径自动创建;无人访问自动销毁。 - 静态路径:配置文件预定义路径,支持按需拉流(source: rtsp://camera):没人看时不连接摄像头,第一个播放者到来才去拉摄像头流,节省带宽。
- 代理转发:把流转发到另一台MediaMTX或其他流媒体服务器。
3. 内置录制回放
- 录制为
.ts/.mp4,支持按时间/文件大小自动切片。 - 文件命名模板,支持日期变量;可配置自动删除过期录像。
- 支持回放已录制片段(HLS点播)。
4. 鉴权与安全
- 用户名密码鉴权、IP白名单;区分发布、读取、API权限。
- RTSP/RTMP/WebRTC/SRT都支持鉴权;支持TLS加密。
5. API与可观测性
- REST Control API:查询流列表、启停流、动态修改配置。
- Prometheus指标
/metrics,健康检查/healthz。 - pprof性能剖析、分级日志,日志输出stdout或文件。
- Hook钩子:发布/读取/断开连接时执行外部shell命令,便于告警、联动业务系统。
6. 热重载配置
修改mediamtx.yml,发送SIGHUP信号即可重载,不用重启服务,流不会断开。
7. 集群扩容
原点节点接收推流,多个只读副本对外提供播放,配合负载均衡,支撑大量播放客户端。
四、架构简要
- 路径管理器 PathManager:核心,管理所有流path,管理发布者(publisher)、读取者(reader),权限校验,流生命周期管理。
- 多协议服务模块:RTSP/RTMP/WebRTC/SRT等模块独立监听端口,接收客户端,把流送入内部统一媒体包。
- 媒体路由层:不解码,直接转发原始NALU/音频帧,分发到各个协议输出模块。
- 录制、API、metrics、hooks 附属模块。
⚠️重要:没有内置转码。如果源是H265,HLS客户端只支持H264,此时会失败,需要外挂ffmpeg做转码。
优缺点
✅优点
- 单文件、零依赖,部署极其简单;资源占用低,适合嵌入式。
- 协议齐全,协议转换能力强。
- 完善API、监控、钩子,适合二次开发集成。
- 开源MIT协议,商业可用。
❌缺点
- 无内置转码,编码不兼容时必须外挂ffmpeg。
- HLS为分片协议,延迟相对WebRTC高;LL‑HLS可以改善。
- WebRTC公网部署需要STUN/TURN服务器解决NAT穿透。