MediaMTX 实战教程:10 分钟跑通流媒体服务器,把 RTSP 摄像头送进浏览器
2026/9/8 17:20:20 网站建设 项目流程

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
  • SRTsrt://localhost:8890?streamid=read:mystream

值得留意的是,当前默认配置里hlsVariantlowLatency,也就是 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,再用rpiCameraWidthrpiCameraHeight定分辨率即可,MediaMTX 直接驱动相机,不用装任何采集软件。

转发与代理forward可以把某条流持续推到另一台外部流媒体服务器;source填一个 URL 则把 MediaMTX 当拉流代理,配合sourceOnDemand按需工作,见 docs/2-features/11-forward.md。

排障对照

按"症状 → 原因 → 解法"对号入座,都是短平快的处理。

  • WebRTC 页面一直转圈不连接→ 跨网络时 UDP 打洞失败 → 全局加webrtcICEServers2填一个 STUN 地址;有公网 IP 就加进webrtcAdditionalHosts;防火墙放行 UDP 8189
  • HLS 延迟明显高于其他协议→ 变体或分段参数偏保守 → 确认hlsVariantlowLatency,调小hlsSegmentDurationhlsPartDuration
  • UDP 链路卡顿、丢帧→ 网络丢包或缓冲过小 → 调大udpReadBufferSizewriteQueueSize,方法见 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询