
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/mediamtxMediaMTX 是一个开箱即用、零依赖的实时流媒体服务器与媒体网关它同时提供 RTSP、RTMP、WebRTC、SRT、LL-HLS、HLS、MPEG-TS、RTP 八种协议的收流与读流端口流可以在协议之间自动转接无需你写一行转发代码。下面从一个真实的接入难题讲起走完跑通第一条流 → 配置热重载 → 录制转码推流 → 扩展方向的完整链路。 设备与平台各说各话时缺的就是一个媒体网关监控系统推 RTSP网页端想要 WebRTC 低延迟播放CDN 只收 RTMP归档系统要走 SRT——如果每种对接都单独挂一个 FFmpeg 实例你会得到一堆进程每个都占 CPU、都要单独保活而且任何一个挂掉就断一路流。MediaMTX 的设计思路不是播放器或转码器而是一个媒体路由器一个 Go 编译的独立可执行文件无依赖、无解释器Linux/Windows/macOS 通吃把每种协议的端口都开出来。任何客户端用任何协议发布到某个路径所有读流者就可以用任何协议取走这路流协议转换在路由过程中自动完成。内部结构并不复杂核心就三个部件可参考 架构说明路径管理器internal/core/负责鉴权、把发布者和读流者挂到路径上路径Path每个路径承载一路流由单个发布者或外部源提供广播给全部读流者记录器把流写入磁盘供后续回放理解了路径 一路流 一个入口多个出口这个路由模型剩下的操作都只是在往不同端口上插线。下面先把第一条流跑起来。五分钟跑通第一条流安装、发布、读取启动服务器最省事的体验方式是 Docker官方镜像分四个变体是否内置 FFmpeg / 是否支持树莓派摄像头生产环境推荐带 FFmpeg 的bluenviron/mediamtx:1-ffmpegdocker run --rm -it --networkhost -p 8554:8554 -p 1935:1935 -p 8888:8888 bluenviron/mediamtx:1-ffmpeg如果你想从源码运行克隆仓库https://gitcode.com/GitHub_Trending/me/mediamtx后按 安装文档 编译或直接启动单文件二进制即可配置文件mediamtx.yml就在仓库根目录。发布与读取各一条命令发布端用 FFmpeg 把一个 MP4 文件以 RTSP 协议循环推入服务器的mystream路径ffmpeg -re -stream_loop -1 -i file.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream读流端任选工具比如用 VLC 拉流播放vlc --network-caching50 rtsp://localhost:8554/mystream此时流已经在 MediaMTX 的路径上路由起来了。关键点在于发布走 RTSP读流并不非得也用 RTSP——换成rtmp://localhost:1935/mystream、WebRTC 的 WHIP 地址或 LL-HLS 地址取到的都是同一路流转接由服务器自动完成。更多发布/读取组合OBS、GStreamer、Python/OpenCV、树莓派摄像头等见 基础用法。流跑起来之后下一个现实问题是线上环境改配置能不能不断流mediamtx.yml 与热重载改配置不踢掉在线客户端两级配置结构所有行为都由 mediamtx.yml 中的参数驱动结构上分两层理解这个分工就掌握了 80% 的配置pathDefaults对全部路径生效的默认值改一处影响所有流适合统一开关录制、鉴权paths按路径名覆盖默认值路径名甚至可以是正则$G1会自动替换为正则分组source把某路外部流挂到路径上让该路径成为拉流源而非等待发布者forward把收到的流原生转发到其他服务器RTSP/RTMP/SRT/WebRTC/QUIC服务器运行期间持续监听配置文件改动会被检测并动态应用且不会断开现有客户端——这意味着你可以在线调整某路流的转发目标或录制参数。所有参数含注释完整列在配置参考。环境变量Docker 场景的正解每个参数都可以用MTX_参数名形式的环境变量覆盖数组用逗号分隔映射项用下划线拼键名例如指定某条路径的拉流源docker run --rm -it --networkhost -e MTX_PATHS_TEST_SOURCErtsp://myurl bluenviron/mediamtx:1这样容器里的 yml 文件保持不动差异全部走环境变量对编排系统K8s、Compose非常友好。细节见配置文档。配置体系解决的是怎么改接下来看几个真正拉开差距的路径级玩法。⏺️ 录制、转码、推平台都靠 paths 里几行配置录制与回放直播流可以直接落盘为 fMP4 或 MPEG-TS 分段文件服务器自带回放端口按路径/日期归档并支持按时间自动清理。只需在默认层打开开关并指定分段策略pathDefaults: record: yes recordPath: ./recordings/%path/%Y-%m-%d_%H-%M-%S-%f recordFormat: fmp4 recordSegmentDuration: 1h recordDeleteAfter: 1d分段时长是每段文件的最小长度recordPartDuration默认 1s才是崩溃时可能丢失的粒度相当于 RPO。如果要上 S3、FTP、网盘官方推荐搭配 rclone 放进runOnRecordSegmentComplete钩子做增量同步完整做法见录制文档。转码、转发、代理都是路径上的事MediaMTX 本身不转码但每条路径挂了整套钩子命令connect/available/record 等事件把 FFmpeg 作为外挂挂进去即可。比如把/original重新编码成 600k 的/compressed供弱网观看就是给original路径配一条runOnAvailable跑 FFmpeg 编码回推同理forward配置可以原生把流推到 YouTube、Twitch 的 RTMP 推流地址或任意 SRT/QUIC 端点见转发文档。另一类高频场景是代理用正则路径把内网摄像头透传到公网所有指向rtsp://服务器/a的请求都会被拉到内网rtsp://other-server:8554/a一行配置替代整套反代方案细节在代理文档。还有alwaysAvailable可以在发布方掉线时循环播放离线段让读流端连接不断、画面不黑适合对永远在线有要求的路径文档。单节点跑顺之后怎么管理、怎么观测、怎么横向扩 下一步Control API、指标与横向扩展MediaMTX 把运维面也做成了服务Control APIHTTP 接口可查询路径状态、在线读流者、触发录制适合接到自己的后台接口文档MetricsPrometheus 兼容格式导出接 Grafana 即可监控流量与连接数Hooks客户端连上、断开、开始读/推、录制分段完成等事件都能触发外部命令做告警和联动横向扩展多实例 读副本分担并发官方文档给出了扩展拓扑建议从把一路 RTSP 摄像头接到网页播放这种最小需求到多协议收流 → 自动转接 → 录制归档 → 分发到多个平台的完整链路MediaMTX 基本不需要你碰代码全部落在 yml 的参数和钩子上。建议的路径是先用 Docker 把第一条流跑通再逐条打开录制、forward、hooks 验证各自的链路最后按完整配置参考逐项对齐生产环境。源码层面internal/core/ 是路径管理的主干internal/servers/ 下每种协议一个目录按协议阅读是最快的上手方式。【免费下载链接】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),仅供参考