ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MediaMTX 跨平台部署:从选方式到跑通首条流,只需 5 步

MediaMTX 跨平台部署:从选方式到跑通首条流,只需 5 步 MediaMTX 跨平台部署从选方式到跑通首条流只需 5 步【免费下载链接】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 等协议的实时媒体服务器。这篇 MediaMTX 部署指南带你从选部署方式、检查环境到在你自己的机器上跑通第一条视频流Linux、Windows、macOS 和容器环境一次讲清。先花 3 分钟选部署方式三种方式对号入座即可后面都会讲。直装预编译二进制解压即用一个文件 一个配置文件。适合第一次上手、想最快看到效果的人。包管理器用你发行版或 Homebrew 的源安装好处是升级时一条命令搞定不用手动下新版。适合打算长期挂在机器上跑的人。容器化部署用 Docker 跑官方镜像配置靠挂载卷传入。适合开发测试环境或者一台机器上要多套环境互不干扰。怎么选不纠结个人电脑玩直装服务器用容器或包管理器编译源码只在你要改代码时才需要本文第 5 节走的就是编译路线因为它在任何平台结果都一样方便你对照验证。动手前的检查清单这些项跟平台无关花两分钟过一遍能省后面很多事系统较新的 Linux 发行版、macOS 11 或 Windows 10/11 都行。MediaMTX 是单文件程序运行时不需要装任何环境。ffmpeg它不是 MediaMTX 的依赖但你得用它来推流、拉流做测试没装就先装上。端口占用MediaMTX 会监听下面这些端口被占用就起不来。协议 / 用途默认端口传输RTSP8554TCPRTMP1935TCPHLS8888TCPWebRTC信令8889TCP UDPSRT8890UDP管理 API9997TCP指标监控9998TCP如果要从源码编译装好 git 和 Go1.26go version看一眼这是本项目当前要求的版本低了会直接编译失败。配置文件代码仓库里自带mediamtx.yml默认配置就能跑改不改都行。⚠️ 8554 和 1935 是最常被占用的两个端口很多摄像头/NVR 默认就听 8554。启动前先用你系统的端口检查工具确认一下。跟做完一次部署Linux 下 5 步跑通下面以 Linux 为例完整走一遍Windows 和 macOS 只有第 2 步的小差别后面单独说。第 1 步拿到代码git clone https://gitcode.com/GitHub_Trending/me/mediamtx cd mediamtx如果你直接下了发布页的预编译包可以跳过第 2 步。第 2 步编译出二进制go generate会生成内嵌的 HTML 页面WebRTC/HLS 的调试页不能省。go generate ./... CGO_ENABLED0 go build .执行完当前目录会出现mediamtx文件。CGO_ENABLED0让它成为纯静态链接拷到任何同架构机器上都能跑不会报缺库。如果这一步失败九成是 Go 版本不对。先跑go version低于 1.26 就升级这是最常见的翻车点。第 3 步启动服务./mediamtx --version ./mediamtx ./mediamtx.yml第一行确认二进制正常第二行正式启动。看到终端打印各端口开始监听就说明起来了。如果这一步失败终端报端口被占用回检查清单改配置里的端口报配置文件解析错误多半是手改时缩进用了 TabYAML 只认空格。第 4 步推一条测试流开第二个终端。手头随便找个 mp4 文件就能用ffmpeg -re -stream_loop -1 -i test.mp4 -c copy \ -f rtsp rtsp://localhost:8554/mystream-re按帧率推-stream_loop -1无限循环-c copy不重编码。推摄像头流时把输入换成你的设备即可。第 5 步验证在浏览器或终端访问管理 APIcurl -s http://localhost:9997/v3/paths返回的 JSON 里应该能看到mystream这条路径、在线且有一个 publisher。看到它整条链路就通了。再拿 VLC 或ffprobe rtsp://localhost:8554/mystream拉一下出画面就是 100% 完成。其他平台只有这些区别对照上面的 Linux 流程其余平台就这几点不同Windows 部署编译产物叫mediamtx.exe其余步骤相同配置文件里写路径时建议一律用正斜杠C:/xxx/recordings反斜杠偶尔会和模板变量冲突。装成 Windows 服务的话用 NSSM 包一层即可。macOS 部署Apple Silicon 上直接编译就是 arm64不用加任何参数。如果后续用 ffmpeg 抓本机摄像头权限不在配置里——去「系统设置 → 隐私与安全性 → 摄像头」给终端或 ffmpeg 放行。容器化部署官方在docker/下提供四种镜像构建文件标准、带 ffmpeg、树莓派、树莓派 ffmpeg。日常直接用现成镜像把配置文件挂进去就行docker run -d --name mediamtx \ -p 8554:8554 -p 1935:1935 -p 8889:8889 \ -v $(pwd)/mediamtx.yml:/mediamtx.yml \ bluenviron/mediamtx:latest跨平台编译在一台机器上出另一平台的二进制加两个环境变量即可比如给树莓派出包CGO_ENABLED0 GOOSlinux GOARCHarm64 go build .。配置文件只看这几处mediamtx.yml有几百行但日常真正会改的就这几项完整字段说明见 官方配置参考logLevel默认info。排查问题时改debug能看到每个连接的细节定位完记得改回来不然日志刷得很快。encryption默认no。改成strict后服务强制走加密端口RTSPS 8555、RTMPS 等需要配证书。流要经过公网再改这个内网不用动。各*Address端口项rtspAddress、rtmpAddress、webrtcAddress、hlsAddress、srtAddress。只在端口冲突时改改完记得防火墙同步放行。paths.default.source默认publisher意思是路径只等别人推。把它改成rtsp://192.168.1.100:554/stream之类MediaMTX 就会主动去拉这台摄像头的流——这是推流和拉流两种模式的切换开关。runOnInit/runOnInitRestart给某条路径配一条开机就执行的命令典型场景让 ffmpeg 抓本机摄像头再推给 MediaMTXrunOnInitRestart: true让命令崩了能自动拉起。recordrecordPathrecordFormatrecordSegmentDurationrecord: true开启录像recordFormat: fmp4录成可快速寻址的 MP4 分片recordSegmentDuration决定每个文件多长默认 1 小时。要存盘就改这一组其他都不用碰。apiAddress默认:9997是验证、管理、抓指标都用的入口。默认只有本机 127.0.0.1 能访问管理接口这是有意的安全设计别为了省事放开。验证、调优与监控一条命令验证部署curl -s http://localhost:9997/v3/paths | head -c 400能返回 JSON 且能看到你推的路径就算通过。三个最常调的性能点都在全局配置区udpReadBufferSize默认跟随系统值。用 UDP 协议SRT、WebRTC 的媒体面在丢包明显时调大它能直接降丢包代价是每个连接多占点内存。readTimeout/writeTimeout默认各 10 秒。弱网环境下源端偶尔卡顿被断连就适当调大追求快速发现死连接则调小。writeQueueSize默认 512 个待发数据包的队列。带宽大、读者多时调大能抗突发内存紧张时调小。 建议从默认值开始只针对你观测到的具体症状调一个参数别一次改一堆。监控入口http://localhost:9998/metrics暴露 Prometheus 格式的指标连接数、码率、延迟等接上任意 Prometheus Grafana 就有面板。性能分析另有:9999的 pprof 入口平时不用管它。高频问题快速排查1. 启动就退出日志说端口被占用原因8554/1935 等端口已被其他进程常见是另一台虚拟 NVR 或上次没退干净的实例占用。处理改配置端口或找出占用进程停掉。2. 本机推流正常别的设备连不上原因防火墙或 NAT 只放了 TCP没放 UDP。SRT8890和 WebRTC 媒体面都走 UDP。处理放行对应 UDP 端口跨网段还要注意运营商是否封了相关端口。3. 编译报错提示 go.mod 需要更新或版本过低原因本机 Go 低于项目要求的 1.26。处理升级 Go不要手动改 go.mod 里的版本行——那样只会让问题更难查。4. 录像文件多到数不清原因recordSegmentDuration太短切片太碎。处理调到 1h 甚至更长同时要控制总占用配合recordMaxSize设置单路容量上限。5. 配了source: rtsp://...去拉流但路径一直离线原因MediaMTX 拉的是源端的 RTSP而源端摄像头/服务器本身连不通或认证没配对。处理先用ffprobe rtsp://你的源地址单独验证源可达能拉通再回来看 MediaMTX 日志里的具体报错。写在最后到这一步MediaMTX 部署已经在你机器上真正跑起来了一条命令推流、一条命令验证剩下的就是往paths里加你的真实业务流。下一步建议先给一条真实摄像头路径开上录像第 6 项配置再花十分钟把 9998 的指标接进你的监控基本就够稳定长期运行了。【免费下载链接】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),仅供参考
返回列表