
MediaMTX 搭建指南10 分钟跑通零依赖流媒体服务器【免费下载链接】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凌晨两点刚装好的摄像头要立刻出现在网页预览里还要同时给 NVR 留一路录像。你不想再拼一套转码加多协议网关的部署。MediaMTX 是一个零依赖的流媒体服务器和媒体代理它把 RTSP、RTMP、WebRTC、HLS、SRT 等协议的读、写、转发、录制、回放收进同一个进程。下面带你把它跑起来。跑起来编译、启动、确认监听MediaMTX 用 Go 编写、不开 CGO所以拿到的是一个单文件二进制。我们走源码编译这条最稳的路径。克隆仓库并编译出可执行文件git clone https://gitcode.com/GitHub_Trending/me/mediamtx cd mediamtx CGO_ENABLED0 go build -o mediamtx仓库里已经带了一份带完整注释的mediamtx.yml保持原样即可启动./mediamtx预期输出里会出现各协议的监听日志节选[RTSP] listener opened on :8554 (TCP/RTSP), :8000 (UDP/RTP), :8001 (UDP/RTCP) [RTMP] listener opened on :1935 [HLS] listener opened on :8888 [WebRTC] listener opened on :8889 (TCP/HTTP), :8189 (UDP/ICE) [SRT] listener opened on :8890 (UDP)看到这几行listener opened说明服务器已经就绪。8554、1935、8888、8889、8890 端口空闲./mediamtx进程持续运行日志出现listener openedcurl 127.0.0.1:9997/v3/config/global返回 JSONMediaMTX 架构图展示一个进程内的多协议监听与转发关系它能做什么一张表说清这台流媒体服务器的能力边界能力说明多协议接入RTSP、RTMP、WebRTC、HLS、SRT、MPEG-TS、RTP、MOQ协议转换一路输入多路输出原生完成不依赖 FFmpeg录制FMP4 或 MPEG-TS 分段写入按小时归档按需拉流有观看者才去拉源无人观看自动断开回放与转发已录内容通过 HTTP 回放可推送到下游媒体代理最容易被误解的一点所谓协议转换不是转码。MediaMTX 做的是原生封装转换输入 H.264 输出还是 H.264只换容器和传输方式。它不改变分辨率、码率或编码。需要重编码时要在上游完成。一份能直接用的配置把下面这份mediamtx.yml放到二进制旁边替换仓库自带的那份。它覆盖了三路摄像头每路都是按需拉流 录制的组合这是实际使用中最常见的搭配。logLevel: info logDestinations: [stdout] paths: all_others: source: publisher gate_camera: source: rtsp://192.168.1.101:554/stream1 sourceOnDemand: true sourceOnDemandStartTimeout: 10s sourceOnDemandCloseAfter: 30s record: true recordFormat: fmp4 recordPath: ./recordings/gate/%Y-%m-%d_%H-%M-%S recordSegmentDuration: 1h recordDeleteAfter: 72h shop_camera: source: rtsp://192.168.1.102:554/ch1 sourceOnDemand: true sourceOnDemandCloseAfter: 30s record: true recordPath: ./recordings/shop/%Y-%m-%d_%H-%M-%S warehouse_camera: source: rtsp://192.168.1.103:554/main sourceOnDemand: true sourceOnDemandCloseAfter: 30ssource 指向一路 RTSP 摄像头source写摄像头的 RTSP 地址MediaMTX 会主动去拉这一路流。all_others是兜底规则没有单独写路径名的流走这里source: publisher表示该路径只接受外部推流。按需拉流让摄像头按需上线sourceOnDemand: true表示有观看者时才去连摄像头sourceOnDemandCloseAfter规定最后一个观看者离开后多久断开。摄像头不是一直被占用夜间没人看的时段它也休眠。录制按小时切片、自动清理recordFormat: fmp4生成可被多数播放器直接打开的分片文件recordSegmentDuration: 1h按小时切段recordPath里的%Y-%m-%d等占位符用于归档到日期目录recordDeleteAfter: 72h让旧录像自动删除。搭一个完整的东西把上面配置里的三路路径当成一个小型安防中枢三路 RTSP 摄像头接入任何一路随时可以通过 WebRTC 在浏览器里打开同时自动落盘。把配置替换进mediamtx.yml重启./mediamtx。配置完成后各协议的访问地址如下把10.0.0.5换成你的服务器 IP流RTSPWebRTC浏览器录像位置gate_camerartsp://10.0.0.5:8554/gate_camerahttp://10.0.0.5:8889/gate_camera./recordings/gate/shop_camerartsp://10.0.0.5:8554/shop_camerahttp://10.0.0.5:8889/shop_camera./recordings/shop/warehouse_camerartsp://10.0.0.5:8554/warehouse_camerahttp://10.0.0.5:8889/warehouse_camera未开启管理面走 9997 端口的 APIGET /v3/paths能列出当前所有路径状态。HLS 观看地址在 8888 端口格式为http://10.0.0.5:8888/gate_camera/index.m3u8。验证顺序建议先curl 127.0.0.1:9997/v3/paths确认路径已注册再用 VLC 或任意 RTSP 客户端拉一路确认能出画面最后在浏览器打开 WebRTC 地址确认低延迟预览。踩坑与调优UDP 丢包导致花屏症状室外 Wi-Fi 或跨网段拉流时画面周期性花屏。udpReadBufferSize: 4194304MediaMTX 的 UDP 读缓冲区默认交给操作系统往往只有 64KB 上下突发流量直接丢弃。把它调大给内核留出缓冲余量。WebRTC 在浏览器里连不上症状浏览器控制台显示 ICE 失败VLC 拉同一路 RTSP 却正常。webrtcICEServers2: - url: stun:stun.l.google.com:19302跨网络时 UDP 打洞需要 STUN 协助。防火墙挡 UDP 8189 时WebRTC 会退化到 TCP延迟上去先检查防火墙规则。HLS 预览延迟高症状浏览器 HLS 预览比 WebRTC 慢好几秒。hlsVariant: lowLatency hlsSegmentDuration: 1s hlsPartDuration: 200ms这是仓库配置的默认值确认没被改回m3u8普通变体即可。LL-HLS 把 1 秒段切成 200ms 的分片客户端边下边播。内存占用持续偏高症状观看者多时进程内存上涨。writeQueueSize: 256writeQueueSize是每个连接的待发包队列默认 512调小直接省内存代价是弱网下更容易丢帧。先用默认值跑确认基线后再动它。先拿一路摄像头把上面这条链路验证完RTSP 能拉、网页能播、录像在目录里增长。确认没问题再扩路数。所有参数名和默认值仓库里那份mediamtx.yml的注释就是最权威的手册直接对照改。【免费下载链接】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),仅供参考