什么是 MediaMTX?
MediaMTX(原名 rtsp-simple-server)是一款用 Go 语言编写的开源实时流媒体服务器。它不仅仅是一个简单的转发器,而是一个功能强大的流媒体代理服务器,旨在将各种不同的流媒体协议进行互通和转换。
在现代视频传输场景中,我们经常面临协议碎片化的问题:摄像头输出的是 RTSP,网页播放需要 HLS 或 WebRTC,而直播推流则常用 RTMP。MediaMTX 的核心价值就在于:它能让你在一次推送后,通过多种协议同时消费内容。
核心特性
1. 多协议支持(全能转换)
MediaMTX 支持目前市面上几乎所有主流的实时传输协议,且支持协议自动转换: - 输入/输出协议:RTSP, RTMP, HLS, WebRTC, SRT。 - 场景示例:你可以通过 RTMP 将视频推送到服务器,然后通过 WebRTC 在浏览器中实现超低延迟观看,或者通过 HLS 在移动端进行兼容性播放。
2. 零依赖部署
得益于 Go 语言的特性,MediaMTX 编译后是一个单一的可执行二进制文件。无需安装复杂的依赖库(如 FFmpeg 库或 Nginx 模块),下载即运行,极大地降低了运维成本。
3. 强大的 API 与可编程性
它提供了完整的 HTTP API,允许开发者动态地: - 创建、删除流。 - 查询当前连接的客户端数量。 - 监控服务器状态。
4. 灵活的路径管理
你可以定义不同的“路径”(Paths)。每个路径可以配置独立的权限、来源(例如直接拉取某个 IP 摄像头的流)以及转发策略。
快速上手实例
场景一:最简单的“推流-拉流”测试
这是验证服务器是否工作最快的方法。
- 启动服务器:
下载发布版本并运行
./mediamtx。 - 推流 (使用 FFmpeg):
假设你有一个本地视频文件
test.mp4,将其推送到服务器的mystream路径:textffmpeg -re -i test.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream
- 拉流 (使用 VLC 或 ffplay):
打开 VLC 播放器,输入地址:
rtsp://localhost:8554/mystream。
场景二:将 RTSP 摄像头转换为 WebRTC(浏览器低延迟观看)
这是 MediaMTX 最受欢迎的场景,因为浏览器原生不支持 RTSP。
- 配置
mediamtx.yml: 在配置文件中添加一个路径,让服务器主动去拉取摄像头的流:textpaths: cam1: source: rtsp://admin:password@192.168.1.100:554/stream1
- 运行服务器: 启动后,MediaMTX 会自动连接摄像头并将其缓存。
- 浏览器访问:
直接在浏览器输入:
http://localhost:8889/cam1。 你将通过 WebRTC 协议看到几乎零延迟的实时画面,无需安装任何插件。
场景三:构建 RTMP 直播中继
如果你想搭建一个私有的直播分发服务器:
- 推流:
使用 OBS Studio,设置推流地址为
rtmp://your-server-ip/live,推流码为stream1。 - 多端消费:
- 低延迟端 (RTMP):
rtmp://your-server-ip/live/stream1 - 兼容端 (HLS):
http://your-server-ip:8888/live/stream1/index.m3u8 - 网页端 (WebRTC):
http://your-server-ip:8889/live/stream1
- 低延迟端 (RTMP):
核心配置参数详解
在 mediamtx.yml 中,有几个关键参数需要关注:
rtspAddress: RTSP 服务的监听端口(默认 8554)。rtmpAddress: RTMP 服务的监听端口(默认 1935)。webrtcAddress: WebRTC 的 HTTP 端口(默认 8889)。hlsAddress: HLS 的 HTTP 端口(默认 8888)。paths: 核心配置区。source: 指定流的来源。如果设置了此项,服务器会主动拉流。publishUser/publishPass: 设置推流时的用户名和密码。readUser/readPass: 设置拉流时的用户名和密码。
为什么选择 MediaMTX 而不是 Nginx-RTMP?
| 特性 | MediaMTX | Nginx-RTMP 模块 |
|---|---|---|
| 部署难度 | 极低(单二进制文件) | 较高(需编译 Nginx 模块) |
| 协议支持 | RTSP, RTMP, WebRTC, HLS, SRT | 主要为 RTMP, HLS |
| WebRTC | 原生支持,极低延迟 | 不支持(需配合其他组件) |
| 动态配置 | 支持 API 动态管理 | 修改配置需重启/重载 |
| 语言 | Go (并发性能极强) | C (性能极高但开发慢) |
总结与适用场景
MediaMTX 是一个极其高效的“协议转换枢纽”。
它最适合以下场景: 1. 安防监控集成:将大量 RTSP 摄像头流转换为 WebRTC,实现在网页端实时监控。 2. 私有直播平台:替代昂贵的云服务,构建自己的 RTMP \(\rightarrow\) HLS 分发链路。 3. 低延迟交互:利用 SRT 或 WebRTC 协议实现远程指令与视频同步。 4. 快速原型开发:无需配置复杂的 Linux 环境,快速搭建流媒体测试环境。



还没有评论,来说两句吧...