MediaMTX 实战:三行 YAML 把 RTSP 摄像头变成网页直播流

MediaMTX 实战:三行 YAML 把 RTSP 摄像头变成网页直播流 MediaMTX 实战三行 YAML 把 RTSP 摄像头变成网页直播流【免费下载链接】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-simple-server就是这样一个单文件、零依赖的流媒体服务器流从任意协议进来自动完成协议转换再用任意协议出去还能顺手录制、回放、转发。这台流媒体服务器帮你省掉什么它解决的不是多一个服务器的问题而是把三件麻烦事一次抹平零依赖一个可执行文件加一份 YAML 配置Linux、Windows、macOS、树莓派通吃不需要装任何运行时或数据库协议互转自动完成RTSP、RTMP、WebRTC、HLS、SRT 之间不需要你写任何转封装代码流进来即自动可被所有协议读取延迟可控WebRTC 走 UDP 转发端到端延迟通常在几百毫秒HLS 延迟高一些但兼容性最好两种需求各有出口后面所有例子都基于这份默认配置跑你只需要在paths里声明流的路径名。一条命令把服务跑起来最低配置一句话带过双核 CPU、512MB 内存就够磁盘留 100MB 余量即可。两条安装路径二进制从 GitHub Releases 下载对应系统的压缩包解压后直接./mediamtx启动Windows 为mediamtx.exe同目录放一份mediamtx.yml即可。Docker官方镜像四个变体按需选择镜像含 FFmpeg树莓派摄像头bluenviron/mediamtx:1否否bluenviron/mediamtx:1-ffmpeg是否bluenviron/mediamtx:1-rpi否是bluenviron/mediamtx:1-ffmpeg-rpi是是带端口映射的启动命令MTX_WEBRTCADDITIONALHOSTS填客户端实际连接你机器用的 IPdocker run --rm -it \ -e MTX_RTSPTRANSPORTStcp \ -e MTX_WEBRTCADDITIONALHOSTS192.168.x.x \ -p 8554:8554 -p 1935:1935 \ -p 8888:8888 -p 8889:8889 \ -p 8890:8890/udp -p 8189:8189/udp \ bluenviron/mediamtx:1Docker 网络栈有时会改写 UDP 包里的源地址所以示例里把 RTSP 传输限成了 TCP如果不想动这个变量直接用docker run --rm -it --networkhost bluenviron/mediamtx:1走 host 网络。默认配置就能跑第一路流mediamtx.yml 里 RTSP(8554)、RTMP(1935)、HLS(8888)、WebRTC(8889)、SRT(8890) 全部默认开启认证默认放行任意用户也就是说一个字符不改服务就能用。你唯一要写的通常是路径paths: # 键就是流名值留空即全部走默认设置 mystream: {}流名即 URL 里的路径后面所有协议都用它寻址。MediaMTX 支持配置热加载改动保存后不会踢掉现有客户端想稳妥点停掉重新./mediamtx也行。两个真实场景摄像头进浏览器OBS 分多端场景 ARTSP 摄像头到浏览器播放改一处在paths里声明这个摄像头sourceOnDemand: yes表示有人看才去拉流省带宽paths: camera: source: rtsp://user:pass192.168.1.100:554/stream sourceOnDemand: yes改三行重启生效。然后让同事打开http://localhost:8889/camera这是 MediaMTX 内置的 WebRTC 播放页无需任何插件画面就出来了。不想折腾 UDP 的话http://localhost:8888/camera走 HLS 也能播延迟稍高。场景 BOBS 一路推流多端同时分发OBS 设置 → 推流服务选自定义…服务器填rtmp://localhost/mystream串流密钥留空点开始推流。流名就是路径mystream同一路内容立刻以所有协议可访问rtsp://localhost:8554/mystream http://localhost:8889/mystream # WebRTC浏览器直接播 http://localhost:8888/mystream # HLS兼容性最好 srt://localhost:8890 # SRTstreamid 指向 mystream注意 OBS 默认推 AAC 音频WebRTC 对 AAC 支持有限要 WebRTC 端稳定出声按文档把 OBS 音频编码器换成 Opus设置 → 输出选 Output to URL 推 RTSP。一个 RTMP 入口四路出口这就是协议转换的价值。再进一步录制到磁盘、接树莓派摄像头录制默认按小时切片存 fMP4存一天自动清理按需改参数pathDefaults: record: yes recordPath: ./recordings/%path/%Y-%m-%d_%H-%M-%S recordFormat: fmp4 # 或 mpegts recordSegmentDuration: 1h recordDeleteAfter: 1d%path、%Y-%m-%d等变量让文件名自带时间线多路流自动按目录分开。树莓派摄像头官方镜像-rpi后缀直接支持 CSI 摄像头不装任何驱动paths: rpi_cam: source: rpiCamera rpiCameraWidth: 1920 rpiCameraHeight: 1080 rpiCameraFPS: 30启动后访问http://树莓派IP:8889/rpi_cam即可在浏览器里看摄像头画面分辨率和帧率就是上面两个参数说了算。避坑清单WebRTC 连不上大概率是客户端到服务器的 UDP 走不通。公网部署把服务器公网 IP 填进webrtcAdditionalHosts跨网段加 STUN/TURNwebrtcICEServers2示例里就有 Google 的公共 STUN最后确认 UDP 8189 没被防火墙拦。画面卡顿先分清协议——HLS 天生延迟高要低延迟换 WebRTC 看WebRTC 卡顿多是网络丢包适当调大udpReadBufferSize能缓解。浏览器里没声音/没画面检查编码。RTMP 只能进 H.264WebRTC 浏览器对 H.265 基本无支持源是 H.265 时浏览器端会哑火需要在源端转码。Docker 里 RTSP 拉流失败Docker 网络栈改写了 UDP 源地址导致用MTX_RTSPTRANSPORTStcp或--networkhost二选一。从一台摄像头到多端分发MediaMTX 到这里已经覆盖了 80% 的日常场景。接下来按需求走想程序化控制看 Control API想在推流/断流时触发外部脚本读 Hooks上线前加认证见认证文档多机分摊负载参考扩展性文档。【免费下载链接】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),仅供参考