MediaMTX 实现rtsp流转webrtc

遇到一个业务需求,需要将无人机端的rtsp流转到浏览器上播放,网上看了一圈,资料零零散散的,故做一篇实现流程,以后忘了还能来看看

准备

服务器,我用的Ubuntu 24.04 ,之前用centOS7, 结果安MediaMTX一直有问题,版本太低好像,干脆直接换了系统

安装node

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm i -g pnpm@9

部署 RTSP→WebRTC(MediaMTX)

# 安装 docker(若未安装)
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable --now docker

# 运行 MediaMTX(host 网络,RTSP/UDP 正常)
sudo docker run -d --name mediamtx --restart unless-stopped \
  --network=host bluenviron/mediamtx:latest

配置文件

# 创建配置目录
sudo mkdir -p /opt/mediamtx
sudo nano /opt/mediamtx/mediamtx.yml
api: yes

# 监听端口(默认即可)
rtspAddress: :8554
hlsAddress: :8888
webrtcAddress: :8889

# 公网/NAT 必配:写你的外网 IP/域名(用于 ICE 候选)
webrtcAdditionalHosts: [ip]
webrtcICEServers:
  - stun:stun.l.google.com:19302

paths:
  cam1:
    # TODO: 替换为你的真实 RTSP 源地址
    source: your source
    sourceOnDemand: yes

然后重启容器(host 网络 + 挂载配置)

sudo docker rm -f mediamtx 2>/dev/null || true
sudo docker run -d --name mediamtx --restart unless-stopped \
  --network=host \
  -v /opt/mediamtx/mediamtx.yml:/mediamtx.yml \
  bluenviron/mediamtx:latest

# 验证
docker logs --tail=200 mediamtx
curl -v http://< your ip >:8889/cam1

然后放行下要用的端口

这里举例一下,根据你的实际情况来

sudo ufw allow 8554/tcp
sudo ufw allow 8554/udp
sudo ufw allow 8888/tcp
sudo ufw allow 8889/tcp
sudo ufw allow 8189/udp
sudo ufw allow 8890/udp
sudo ufw status

最后你如果用云服务器记得安全组放行端口,这里提供一个测试的rtsp地址:rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream

效果预览

http://< your ip address >:8889/cam1
这个cam1是MediaMTX自带的预览页面,如果出现直播画面就成功了
image
封装好video组件就可以直接播放喽,src地址还是http://< your ip address >:8889/cam1
微信图片_2025-08-19_102209_514

posted @ 2025-08-09 22:26  OvOGhostFace  阅读(207)  评论(0)    收藏  举报