MediaMTX 实战教程:10 分钟跑通流媒体服务器,把 RTSP 摄像头送进浏览器
【免费下载链接】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 等多套协议栈,能把一路流接入、转换、分发给不同协议的客户端,还能顺手录下来。这篇教程带你完成两件事:把摄像头的 RTSP 流在浏览器里用 WebRTC 播出来,再用一路 RTMP 推流同时喂给四个协议的观看端。
先跑起来:最短路径部署
这一节只做一件事:让一台 Linux 机器变成一个可用的流媒体服务器。
MediaMTX 不需要数据库、不需要额外运行时,拿到对应平台的编译产物直接执行即可。假设二进制已经下载到当前目录:
./mediamtx配置读取自同目录下的 mediamtx.yml,默认值已经能直接工作,不用改任何配置。终端出现INF server is ready这一行,说明各协议监听器都已打开:RTSP 在 8554 端口、RTMP 在 1935、HLS 在 8888、WebRTC 在 8889、SRT 在 8890。
✅ 其他安装方式一句话带过:喜欢容器化的话,docker run --rm -it --network=host bluenviron/mediamtx:latest一条命令等效;源码编译见 docs/6-misc/1-compile.md。
场景一|把摄像头画面送进浏览器
这一节解决"RTSP 转 WebRTC"这个最高频的需求:源流来自摄像头,观看端是浏览器。
在 mediamtx.yml 末尾的paths下加一个流:
paths: cam1: source: rtsp://摄像头地址:554/stream sourceOnDemand: yes两行配置说清楚了两件事:source告诉 MediaMTX 去哪拉流;sourceOnDemand: yes表示按需拉流——只有真有人在看时才去连摄像头,没人看就断开,省带宽。改完配置后重新执行./mediamtx。
现在打开浏览器访问:
http://localhost:8889/cam1这是 MediaMTX 内置的 WebRTC 播放页,不需要写一行前端代码。画面正常的话你会看到实时视频在动;同时看一眼服务器终端,日志里的 reader 数量会从 0 变成 1,关掉页面再变回 0。刷新两次页面确认画面稳定不黑屏,这个场景就算跑通了。
场景二|一路推流,多端观看
这一节解决"RTMP 推流分发":OBS 只推一次,四类客户端各自用自己的协议看。
OBS 里打开"设置 → 推流",服务选"自定义",服务器填rtmp://localhost/live,串流密钥填mystream,点开始推流。流名mystream会成为后面所有协议的公共路径。不用等任何转换配置,同一画面立刻可以从这些地址访问:
- RTSP(VLC 等客户端):
rtsp://localhost:8554/mystream - HLS(播放器/浏览器):
http://localhost:8888/mystream/index.m3u8,直接打开http://localhost:8888/mystream则是内置播放页 - WebRTC(浏览器):
http://localhost:8889/mystream - SRT:
srt://localhost:8890?streamid=read:mystream
值得留意的是,当前默认配置里hlsVariant是lowLatency,也就是 Low-Latency HLS 模式,配合 1 秒分段、200ms 分片,HLS 端延迟也能压到秒级——做低延迟直播时不用额外折腾。各协议的完整用法在 docs/2-features/04-read.md 有索引。
进阶能力速览
下面几项每项都只需少量配置,正文点到为止,细节看链接里的文档。
流媒体录制:在 path 里加record: yes,格式可选recordFormat: fmp4(或mpegts),recordSegmentDuration控制分段时长,recordDeleteAfter控制自动清理。再全局打开playback: true,就能在 9996 端口用网页回放下载录像,见 docs/2-features/09-record.md。
树莓派摄像头:path 里写source: rpiCamera,再用rpiCameraWidth、rpiCameraHeight定分辨率即可,MediaMTX 直接驱动相机,不用装任何采集软件。
转发与代理:forward可以把某条流持续推到另一台外部流媒体服务器;source填一个 URL 则把 MediaMTX 当拉流代理,配合sourceOnDemand按需工作,见 docs/2-features/11-forward.md。
排障对照
按"症状 → 原因 → 解法"对号入座,都是短平快的处理。
- WebRTC 页面一直转圈不连接→ 跨网络时 UDP 打洞失败 → 全局加
webrtcICEServers2填一个 STUN 地址;有公网 IP 就加进webrtcAdditionalHosts;防火墙放行 UDP 8189 - HLS 延迟明显高于其他协议→ 变体或分段参数偏保守 → 确认
hlsVariant为lowLatency,调小hlsSegmentDuration和hlsPartDuration - UDP 链路卡顿、丢帧→ 网络丢包或缓冲过小 → 调大
udpReadBufferSize、writeQueueSize,方法见 docs/2-features/28-decrease-packet-loss.md - 配置了 source 但没人看时拉不到流→ 按需拉流本就是这个行为 → 有读者时再连;若希望常驻可关掉
sourceOnDemand - SRT 客户端连不上→
streamid不匹配 → 读取流必须是streamid=read:流名的写法
⚠️ 排障前先看服务器终端日志,MediaMTX 的连接拒绝、鉴权失败都会写明原因,比猜快得多。
下一步
两个场景跑通之后,这些方向值得接着看,每篇文档都不长:
- API 控制:打开
api: true,用 REST 接口动态增删流、查状态,见 docs/2-features/21-control-api.md - Hooks 钩子:在客户端连接、流上线等事件上执行外部命令,见 docs/2-features/20-hooks.md
- 认证授权:内置用户表加密码、按路径限定读/写权限,见 docs/2-features/06-authentication.md
- 规模化部署:只读副本、HLS 走 CDN 分摊压力,见 docs/2-features/19-scalability.md
全部配置项的说明在 docs/5-references/1-configuration-file.md,功能总览在 README.md。
如果这篇帮你省下了翻文档的时间,点个赞收藏一下,关注我会陆续更新更多 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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考