ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MediaMTX 基础使用指南:发布与读取实时流媒体(RTSP 实操篇)

MediaMTX 基础使用指南:发布与读取实时流媒体(RTSP 实操篇) MediaMTX 基础使用指南发布与读取实时流媒体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/mediamtxMediaMTX 是一个即开即用、零依赖的实时流媒体服务器与媒体代理支持在 RTSP、RTMP、WebRTC、SRT、HLS、MoQ 等协议间自动转换与路由。本文以官方《Basic usage》文档为骨架完整讲解发布一条流 → 再读取这条流的端到端实操流程你将学会用 FFmpeg / GStreamer 推送本地视频到 MediaMTX再用 VLC / GStreamer / FFmpeg 拉流观看或转存并能根据仓库源码与配置文件理解其中的端口、路径与参数原理后续自行迁移到任何支持的协议组合。前置条件开始之前请确保已安装并运行 MediaMTX安装方式见 安装指南可直接运行独立二进制或使用 Docker 镜像bluenviron/mediamtx:1。本机具备 FFmpeg、GStreamer、VLC 三者之一或以上用于下文演示的推流/拉流命令。准备一个本地视频文件下文以file.mp4为例可以是任何 FFmpeg/GStreamer 可解码的媒体文件。端口与路径理解命令背后的地址官方 架构说明 指出MediaMTX 会同时暴露多套服务器让客户端用不同协议发布和读取流。默认配置mediamtx.yml中各协议监听地址如下协议默认监听地址配置参数RTSPTCP 控制 UDP 媒体:8554另有rtp :8000、rtcp :8001、multicast 等rtspAddress/rtpAddress/rtcpAddress等RTMP / RTMPS:1935/:1936rtmpAddress/rtmpsAddressHLS:8888hlsAddressWebRTC:8889UDP/ICE 为:8189webrtcAddress/webrtcLocalUDPAddressSRT:8890UDPsrtAddressMoQ:8892/:8893moqHTTP2Address/moqQUICAddress以rtsp://localhost:8554/mystream为例URL 中的8554即rtspAddress的默认值/mystream则是流的路径path名称。路径是 MediaMTX 路由媒体的核心概念一条路径在同一时刻只允许一个发布者或一个外部源提供流但可被任意数量的读者同时读取发布到/mystream后读者即可用任意支持的协议RTSP、RTMP、HLS、WebRTC、SRT 等从同一路径读取协议转换由服务器自动完成。相关源码实现位于 internal/servers/rtsp/server.goRTSP 服务器启动与地址打印逻辑路径管理的核心位于 internal/core/path_manager.go 与 internal/core/path.go。从源码结构看rtspAddress、rtspTransports等参数在 internal/conf/conf.go 中定义并解析再注入 RTSP 服务器进程入口见 main.go调用core.New启动整套组件。第一步发布流用 FFmpeg 通过 RTSP 发布官方 发布文档 支持 Media-over-QUIC、SRT、WebRTC、RTSP、RTMP、HLS、MPEG-TS、RTP 等多种发布协议。这里以 RTSP 为例将本地 MP4 文件循环推流ffmpeg -re -stream_loop -1 -i file.mp4 -c copy \ -f rtsp rtsp://localhost:8554/mystream各参数含义-re以原始帧率读取输入模拟实时推流避免瞬间推完整个文件。-stream_loop -1无限循环播放输入文件保证流持续在线。-c copy流拷贝不做转码保持原始编码效率最高。-f rtsp强制输出格式为 RTSP。rtsp://localhost:8554/mystream目标服务器地址与路径即发布到路径/mystream。推流成功后在 MediaMTX 日志中会看到类似[RTSP] [conn ...] opened的连接记录详细日志级别配置见 mediamtx.yml 的logLevel。用 GStreamer 通过 RTSP 发布使用 GStreamer 的rtspclientsink完成同样的操作gst-launch-1.0 rtspclientsink names locationrtsp://localhost:8554/mystream filesrc locationfile.mp4 \ ! qtdemux named d.video_0 ! queue ! s.sink_0 d.audio_0 ! queue ! s.sink_1这条管线的思路是filesrc读取file.mp4→qtdemux解封装出视频轨d.video_0与音频轨d.audio_0→ 各自经过queue缓冲后分别接到rtspclientsink的sink_0视频与sink_1音频最终推送到rtsp://localhost:8554/mystream。RTSP 协议发布时支持的编码范围见 RTSP 客户端文档视频支持 AV1、VP9、VP8、H265、H264、MPEG-4 Video、MPEG-1/2 Video、M-JPEG音频支持 Opus、AAC、MP3、AC-3、G726、G722、G711、LPCM此外还支持 KLV、MPEG-TS 等其它负载。提示若发布端先将媒体打包成 MPEG-TS 再发送表现为服务器只看到一个 MPEG-TS 轨可开启pathDefaults下的rtspDemuxMpegts: true让服务器自动解封装出 H.264、H.265、AAC 等原始轨从而保证 HLS、WebRTC 等输出正常工作详见 RTSP 客户端文档。其他发布方式除了 RTSP官方 发布文档 还提供了以下发布路径本文不再展开但原理一致——发布者写入某路径读者即可从该路径读取用 WebRTC浏览器页面/publish、SRT、RTMP、HLS、MPEG-TS、RTP 发布使用 Raspberry Pi Cameras、通用摄像头 等设备使用 Web 浏览器、OBS Studio、Python/OpenCV、Golang、Unity 等软件。第二步读取流流发布到/mystream后即可用任意支持协议读取。官方 读取文档 支持 Media-over-QUIC、SRT、WebRTC、RTSP、RTMP、HLS 等读取协议。这里演示三种 RTSP 读取方式。用 VLC 读取vlc --network-caching50 rtsp://localhost:8554/mystream--network-caching50将网络缓存设为 50 ms可显著降低播放延迟适合实时监控类场景。RTSP 读取 URL 规则见 RTSP 读取文档读取方支持的编解码范围与发布方一致。用 GStreamer 读取gst-play-1.0 rtsp://localhost:8554/mystreamgst-play-1.0是 GStreamer 自带的简易播放器会自动选择解码器播放 RTSP 流。用 FFmpeg 读取并保存ffmpeg -i rtsp://localhost:8554/mystream -c copy output.mp4该命令将 RTSP 流以流拷贝方式-c copy不转码写入output.mp4文件适合旁路录制或验证流内容。更多 FFmpeg 读取方式含 RTMP、SRT、HLS 及增强编码参数-rtmp_enhanced_codecs见 FFmpeg 读取文档。验证与排错完成上述两步后可以通过以下方式确认链路是否正常同时开启两个终端一个运行推流命令另一个运行拉流命令播放画面正常即表示发布/读取链路打通。观察服务器日志默认日志级别为info推送与读取连接、路径创建等事件都会输出到 stdout见 mediamtx.yml 中logLevel/logDestinations。网络无法连通时确认 8554 端口未被占用且防火墙放行 TCP 8554RTSP 握手与控制以及 UDP 8000/8001RTP/RTCP 媒体传输若使用 UDP transport在 Docker 中运行时需显式映射端口-p 8554:8554并注意 RTSP 的 UDP transport 在 Docker 网络下可能不工作官方 安装指南 推荐设置MTX_RTSPTRANSPORTStcp或使用--networkhost修改默认端口后所有 URL 中的端口需同步调整。深入这套链路在服务器内部如何工作从源码层面看一次发布→读取会经历以下关键环节监听与握手RTSP 服务器internal/servers/rtsp/server.go在rtspAddress上监听握手始终基于 TCP媒体传输可选择 UDP、multicast 或 TCP对应配置rtspTransports: [udp, multicast, tcp]见 mediamtx.yml。路径注册发布者建立连接后由路径管理器internal/core/path_manager.go将/mystream注册为一条路径路径内由 internal/core/path.go 维护单发布者、多读者的流分发。读者接入读者通过rtsp://localhost:8554/mystream请求同一路径时路径直接把正在广播的流分发给读者。若读者使用 HLS、WebRTC 等其它协议访问同一路径服务器会自动完成协议转封装remuxing这正是 架构文档 所述媒体路由器的核心能力。配置驱动上述所有地址、传输方式、认证等参数均来自配置mediamtx.yml可通过环境变量MTX_前缀、配置文件热加载或 Control API 修改详见 配置文档。总结本文完成了 MediaMTX 最基础也最核心的一次实践闭环发布FFmpeg/GStreamer → RTSP→ 读取VLC/GStreamer/FFmpeg ← RTSP。掌握这一流程后你可以把其中的协议任意替换——比如用 OBS 通过 RTMP 推流再用浏览器通过 HLS/WebRTC 观看同一路径可被多种协议同时访问服务器自动完成转换。官方 发布 与 读取 文档列出了全部支持的协议与客户端软件可作为下一步深入实践的索引。【免费下载链接】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),仅供参考
返回列表