只有 HTTP 通道可用时,mediamtx 如何用 RTSP over HTTP 隧道读取外部 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 服务器或摄像头部署在强制的 API 网关或严格防火墙之后、只有 HTTP 协议被放行时,普通的rtsp://直连拉流会失败。MediaMTX 支持把 RTSP 封装进 HTTP 隧道(即 RTSP over HTTP tunneling)来解决这个问题:在mediamtx.yml中把拉流源的 scheme 改成rtsp+http,MediaMTX 就会通过隧道从外部 RTSP 服务器读取流,并把结果流发布到本地路径上,供其他客户端用常规的 RTSP 地址消费。
隧道方案的选择依据
RTSP-specific features 中说明了标准 HTTP 隧道有两个变体,选型依据是网关/防火墙的能力:
- RTSP over WebSocket(
rtsp+ws/rtsps+ws):效率更高,但要求网关或防火墙支持 WebSocket; - RTSP over HTTP(
rtsp+http/rtsps+http):较老的变体,在极端情况下也能工作。
+ws与不带+ws的差异在于隧道方式,rtsps前缀则表示外部源本身是加密 RTSP(RTSPS)。带+http/+ws的四种 scheme 在 mediamtx.yml 的pathDefaults注释中都有列出,格式均为scheme://user:pass@host:port/path。如果网关只放行最普通的 HTTP 流量,就用rtsp+http(加密源用rtsps+http)。
另外,MediaMTX 对入站的 HTTP 隧道 RTSP 连接是自动处理的,不需要任何配置;本文讨论的是出站拉流,也就是"读取外部 RTSP 流"这一方向,只需配置source。
配置拉流路径
编辑mediamtx.yml,在paths段下添加一个路径,把source设为带隧道 scheme 的 URL(这是 RTSP cameras and servers 中拉流配置方式在隧道场景下的对应写法):
paths: proxied: # standard-rtsp-url 换成外部 RTSP 服务器的实际地址, # 即 user:pass@host:port/path 的形式 source: rtsp+http://user:pass@host:port/path几个需要注意的点:
proxied是路径名,可以任意取;配置后,拉到的流会出现在本机的rtsp://localhost:8554/proxied上。- 如果用户名或密码中含有
?、:等特殊字符,需要先做 URL 编码再填入 URL。 - 使用
rtsps+http(外部源为 RTSPS)且其 TLS 证书是自签名或无效证书时,可以用sourceFingerprint提供证书指纹来放行校验,获取方式见 RTSP cameras and servers 文档中的openssl命令。 - 若希望只在有读者连接时才去拉源、节省带宽,可加
sourceOnDemand: yes,并配合sourceOnDemandStartTimeout(无读者超时后关断源)使用;默认值是false,即持续拉流。
修改mediamtx.yml后,可以重启 MediaMTX 进程,或利用其配置热加载功能让新配置生效(参见 Install 中提到的 hot-reloading 功能)。
验证拉流结果
流拉取成功后,它会像普通路径一样可通过本机 RTSP 端口读取。用 RTSP 客户端 访问即可,例如 FFmpeg:
ffmpeg -rtsp_transport tcp -i rtsp://localhost:8554/proxied -c copy output.mp4也可以用 Control API 确认路径状态:先在mediamtx.yml中启用api: yes,然后查询当前活动的路径列表(见 Control API):
curl http://127.0.0.1:9997/v3/paths/list注意 Control API 默认仅允许 localhost 访问。
边界与限制
- 四种隧道 scheme(
rtsp+http、rtsps+http、rtsp+ws、rtsps+ws)覆盖明文/加密源 × HTTP/WebSocket 隧道的组合;如果选了rtsp+ws但网关不支持 WebSocket,拉流会失败,此时应退回rtsp+http变体。 - 文档未对 HTTP 隧道拉流的额外性能开销给出量化说明;只说明 WebSocket 变体"more efficient",选型以网关能力为准。
- 拉流路径支持的视频/音频编解码范围与普通 RTSP 拉流一致,见 RTSP cameras and servers 顶部的编解码表。
更多 RTSP 传输协议与加密的细节,见 RTSP-specific features。
【免费下载链接】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),仅供参考