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、Web 前端却只认 WebRTC 或 LL-HLS 时两者之间总需要一个中间层做桥接。MediaMTX 是一个开箱即用的实时流媒体服务器单个零依赖二进制文件负责把 RTSP、RTMP、HLS、WebRTC、SRT、MoQ 等协议的流发布、读取、录制和回放并在协议之间做转封装不做转码。 MediaMTX 项目速览它是什么、工程上有什么特征定位是媒体路由器每条流绑定一个路径path发布端写入路径、读取端从同一路径读出中间完成协议转换同一条流可被多个客户端用不同协议同时读取互不影响。单二进制、零运行时依赖Go 编写不需要数据库和解释器Linux、macOS、Windows 通用官方 Docker 镜像为bluenviron/mediamtx:1。默认全开开箱即用RTSP 8554、RTMP 1935、HLS 8888、WebRTC 8889、SRT 8890 五个端口默认监听首次启动不用改任何配置。行为全部由mediamtx.yml一个 YAML 文件驱动且支持热重载文件变更由文件监听internal/confwatcher/自动检测多数路径级参数改动不中断现有连接。路径动态存在一条路径同时挂一个发布源和任意多个读取端认证、录制、转发策略都从路径层分发。 五分钟跑起 MediaMTXDocker 最小启动步骤生产环境推荐 Docker 镜像一条命令起服务MTX_RTSPTRANSPORTStcp是为避免容器网络干扰 RTSP 的 UDP 传输docker run --rm -it \ -e MTX_RTSPTRANSPORTStcp \ -p 8554:8554 -p 1935:1935 \ -p 8888:8888 -p 8889:8889 \ -p 8890:8890/udp -p 8189:8189/udp \ bluenviron/mediamtx:1成功长什么样容器进程持续驻留、日志里各协议监听器依次启动、没有任何端口绑定错误。再准备一条推流源用 FFmpeg 把任意 MP4 以 RTSP 推入 8554 端口ffmpeg -re -stream_loop -1 -i file.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream成功长什么样ffmpeg 持续输出转发帧信息且进程不报错退出。验证方式浏览器打开http://localhost:8888/mystream能看到画面即说明 RTSP 发布到 HLS 读取的链路已通用 VLC 拉rtsp://localhost:8554/mystream也能读到同一条流——同一路径、两种协议这就是它的基本用法。 MediaMTX 核心能力拆解四类场景各需要一段配置把 RTSP 摄像头接进网页按需拉流安防摄像头只说 RTSP你想在浏览器里低延迟观看又不想写转发程序。给路径配一个sourceMediaMTX 就负责持续拉流并做协议适配你得到一个 WebRTC 播放页http://主机:8889/路径名和一个 LL-HLS 地址http://主机:8888/路径名加上sourceOnDemand: yes后有人读才拉流、没人读自动断开省带宽paths: cam1: source: rtsp://user:pass192.168.1.64:554/stream1 sourceOnDemand: yes直播录像自动分段按时间段回放需要保留录像备查时路径级开启录制即可。文件按recordPath模板分段落盘默认每小时一个段recordDeleteAfter控制保留期再全局打开playback: true9996 端口的回放服务提供/list?pathcam1列出可回放时间段、/get返回 fMP4 流可直接放进video标签见 docs/2-features/10-playback.mdpathDefaults: record: yes recordFormat: fmp4 recordDeleteAfter: 1d playback: true playbackAddress: :9996一条流同时推给多个外部平台流要分发给别家系统时forward列表支持 RTSP、RTMP、SRT、MoQ、WebRTC WHIP 等目标一条路径可配多个目标无需二次部署paths: cam1: forward: - dest: rtmp://live.example.com/app/streamkey - dest: srt://host:port?streamidstreamid公网暴露前限制发布账号顺便打开监控流暴露到公网前需要控制谁能推流。默认authMethod: internal凭据写在配置里按publish/read/playback三种动作分配权限可用正则和ips白名单限制到具体路径长期运行后再用metrics: true打开 9998 端口的 Prometheus 指标配合api: true9997 端口的 Control API 在线增删路径、查看状态authInternalUsers: - user: publisher pass: changeme permissions: - action: publish️ 看清 MediaMTX 如何运转路径层与协议转换的数据流三个目录构成主干internal/servers/ 是各协议接入端rtsp、rtmp、hls、webrtc、srt、moq 各占一个子目录负责握手和数据收发internal/protocols/ 是协议编解码实现以及 hls、mpegts 等格式的读写把协议数据帧与内部媒体流互相转换internal/core/path_manager.go 是路径管理中枢。数据流是单向的漏斗协议接入层把发布端帧流解复用成内部媒体流路径层把它扇出给所有读取端和录制器每个读取端所在协议层再各自封装成目标协议发出。想看懂一条流的完整生命周期顺着 path_manager 的 reader/publisher 分发逻辑读即可。️ MediaMTX 常见配置误区现象、原因、解法现象Docker 里用 UDP 读 RTSP 流读不到或中途断 原因容器网络会改写入站 UDP 包的源地址和端口RTSP 服务器无法正确匹配数据报 解法启动时加-e MTX_RTSPTRANSPORTStcp强制 TCP或改用--networkhost绕过容器网络栈现象WebRTC 握手成功但画面黑屏 原因8889 只覆盖 HTTP 握手媒体面走 UDP 8189客户端拿不到可达的服务端地址时 ICE 失败 解法把客户端可达的宿主机 IP 填入webrtcAdditionalHosts并确认 8189/udp 已放行现象iPhone 播放 LL-HLS 不出画面 原因hlsVariant默认lowLatencyLL-HLS 在 Apple 设备上要求 HTTPS 才能正常工作 解法hlsEncryption: yes并配置hlsServerKey/hlsServerCert本地调试可先把hlsVariant切到mpegts现象改了mediamtx.yml但部分参数不生效 原因热重载只应用可运行时变更的参数录制、转发、source 等协议监听地址等全局项不在其列 解法先跑./mediamtx --validate-confmediamtx.yml校验文件全局参数变更重启进程生效现象本机 WebRTC 正常外网访问失败 原因服务器在 NAT 之后客户端无法发现可达地址 解法在webrtcICEServers2配置 STUN/TURN 服务器帮助双方交换地址 下一步文档入口与学习路径安装方式与四种镜像变体含 FFmpeg、树莓派摄像头支持docs/1-kickoff/2-install.md全部配置项及默认值参考docs/5-references/1-configuration-file.md多节点分布式拓扑与 CDN 扩展docs/2-features/19-scalability.md建议的学习路径先按五分钟跑起来跑通一条 RTSP 发布到 HLS 读取的最小链路再按保留需求开启record与playback确认要把服务放到公网后依次配置authInternalUsers与 HTTPS最后再引入 Control API 和 metrics 做运维避免一开始就把所有开关都打开。【免费下载链接】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),仅供参考