ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

三步跑起多协议流媒体服务器:MediaMTX完整实践

2026/9/8 18:18:31 拓冰建站 浏览量
三步跑起多协议流媒体服务器:MediaMTX完整实践 三步跑起多协议流媒体服务器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需要把摄像头的 RTSP 流让浏览器直接播放时我只改了十几行配置。用的工具叫 MediaMTX一个单文件、零依赖的实时流媒体服务器在 RTSP、RTMP、HLS、SRT、WebRTC 等协议之间做双向转换。设备推流或服务器去拉进来之后你想用哪种协议读就从哪种协议读出去。这是个什么东西定位与能力MediaMTX 把自己定位成媒体路由器流从一种协议进来可以从任意其他协议出去多路流以不同路径path区分管理。典型使用方是安防部署、直播链路和需要多协议互通的视频系统。单文件可执行程序不依赖任何运行时Linux / Windows / macOS 都能跑支持 RTSP、RTMP、HLS、SRT、WebRTC、MoQ、MPEG-TS、RTP 发布与读取流在各协议之间自动转换不需要转码可以把流录到磁盘并支持回看历史录像配置热重载改动不需要断开已有客户端更多能力可以看 features 文档。最快的跑通方式二进制三步起步下载并启动下载与你系统和架构对应的 release 包并解压里面是一个可执行文件加一份 mediamtx.yml。直接运行./mediamtx默认配置已经打开了 RTSP、RTMP、HLS、WebRTC、SRT、MoQ 全部监听第一次启动不需要改任何配置。容器环境用官方 Docker 镜像跑即可把配置文件挂出来还能享受热重载Arch 和 FreeBSD 有原生软件包。如何确认启动成功终端里看到各协议监听行且最后一行是 server is ready就算起来了INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP) INF [RTMP] listener opened on :1935 INF [HLS] listener opened on :8888 (HTTP) INF [WebRTC] listener opened on :8889 (HTTP), :8189 (UDP/ICE) INF server is ready配置怎么读3个高频配置项mediamtx.yml 分四块读前面是全局设置日志、读写超时、认证中间是每个协议服务器的开关与端口rtsp、rtmp、hls、webrtc、srt、moq、api、metrics 等然后是 pathDefaults定义所有路径的默认值最后 paths 逐路径配置可以覆盖 pathDefaults 里的任意字段。实际工作中你碰的几乎只有后两块。文件里每个参数都能用 MTX_ 前缀的环境变量覆盖运行中的服务也会监视文件变化并热加载。paths.source每路流从哪里来管什么流的内容来源。常见取值publisher客户端自己推或一个 RTSP / RTMP / SRT / HLS 地址服务器主动去拉。一行示例my_camera: source: rtsp://192.168.1.101:554/stream1sourceOnDemand按需拉流省带宽管什么source 是地址时是否只在有人观看时才去拉。常见取值false一直在线或yes有人看才拉看完一段时间后自动断开。一行示例my_camera: sourceOnDemand: yesauthInternalUsers谁能推、谁能看管什么账号及各动作publish / read / api / metrics的权限。常见取值默认允许任何人推和读部署到公网前必须改这里。一行示例- user: admin pass: yourpass 完整示例接入两路摄像头并在浏览器播放要解决的问题两路 RTSP 摄像头要求浏览器能直接播、录像保留 7 天、没人看时不去拉流。配置在 mediamtx.yml 的 paths 部分加paths: front_door: source: rtsp://admin:pass192.168.1.101:554/stream1 sourceOnDemand: yes record: yes recordPath: ./recordings/%path/%Y-%m-%d_%H-%M-%S recordFormat: fmp4 recordSegmentDuration: 1h recordDeleteAfter: 7d lobby: source: rtsp://admin:pass192.168.1.102:554/main sourceOnDemand: yes其余保持默认。保存后服务会热加载不需要重启。如何验证播放成功浏览器打开http://服务器IP:8888/front_door/index.m3u8返回以 #EXTM3U 开头的播放列表说明 HLS 链路通了用 VLC 打开同一地址也能看到画面。要低延迟就走 WebRTC打开http://服务器IP:8889在内置读取页面输入 front_door 直接播放。最后确认录像在落盘ls recordings/front_door/出现按日期命名的新文件整条链路就闭环了。用其他工具推流和播放的方式见 publish 文档。值得知道的功能录像回放playbackplayback: yes开启一个列出并下载录像的 HTTP 服务输出是 fMP4可以直接放进video标签需要给前端回看历史画面时用。转发forwardforward字段把一路流的流实时推到其他服务器一路流要同时分发给多个下游系统时用。事件钩子runOn* 系列流上下线、有人开始观看、录像段生成等事件都能触发外部命令并通过环境变量拿到路径等信息需要联动通知或自动上传时用。另外还有一个 alwaysAvailable 选项源离线时循环播放离线占位视频避免播放端黑屏。⚠️ 避坑三个最容易踩的坑浏览器 WebRTC 连不上现象打开读取页面ICE 握手卡住长时间无画面。 原因服务器没有把客户端可达的 IP 告诉客户端或 NAT / 容器挡住了默认 UDP 端口 8189。 修复webrtcAdditionalHosts: [192.168.1.10]UDP 走不通时再切 TCP 通道webrtcLocalTCPAddress: :8189RTSP 拉摄像头失败或画面卡顿现象source 指向 RTSP 摄像头日志显示拉取失败或播放几秒后卡死。 原因传输默认走 UDP 优先不少摄像头和网络环境对 UDP 不友好或摄像头不回报服务器端口。 修复paths: my_camera: rtspTransport: tcp全局性问题的话把rtspTransports: [tcp]改掉即可。改了配置不生效现象编辑了 mediamtx.yml行为却没有变化。 原因运行实例读的是另一份文件Docker 里默认是镜像内的 /mediamtx.yml或者改动项不支持热加载。 修复启动时显式指定配置文件或用环境变量覆盖MTX_RTSPADDRESS127.0.0.1:8554 ./mediamtx /path/to/mediamtx.yml下一步MediaMTX 的价值是把多协议适配和流管理收敛成一份配置文件默认配置就足够开工。接下来可以打开api: yes用 Control API 管理流或者开启metrics: yes把运行数据交给 Prometheus。完整参数清单在 配置文件参考。【免费下载链接】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),仅供参考