如何通过OpenVPN远程访问局域网内的UDP组播音视频流?
解决方案:OpenVPN远程访问树莓派组播音视频流
问题根源
OpenVPN默认不转发组播流量,因为组播依赖IGMP协议,而VPN隧道默认未启用IGMP snooping或组播路由规则,导致远程客户端无法接收组播包。
最优需求:远程访问音视频合并流
方案1:原树莓派直接转为单播RTSP流(最简便)
修改原有GStreamer管线,将音视频合并后推送为RTSP单播流,替代原组播输出:
MULTICAST_IP_ADDR=224.1.1.1 RTSP_PORT=8554 RTSP_MOUNT=/pi_cam gst-launch-1.0 -v rpicamsrc vflip=true hflip=true \ name=src preview=0 fullscreen=0 bitrate=10000000 \ annotation-mode=time annotation-text-size=20 \ ! video/x-h264,width=960,height=540,framerate=24/1 \ ! h264parse \ ! rtph264pay config-interval=1 pt=96 \ ! queue max-size-bytes=0 max-size-buffers=0 \ ! mux. \ alsasrc device=plug:dsnooped provide-clock=false \ ! audio/x-raw,rate=44100 \ ! audiorate \ ! audioconvert \ ! audioresample \ ! opusenc \ ! rtpopuspay \ ! queue max-size-bytes=0 max-size-buffers=0 \ ! mux. \ rtspclientsink name=mux location=rtsp://0.0.0.0:$RTSP_PORT$RTSP_MOUNT
远程通过OpenVPN访问时,直接使用地址:rtsp://<树莓派局域网IP>:8554/pi_cam,RTSP为单播协议,可正常通过VPN隧道传输。
方案2:NAS(Docker Home Assistant)中转组播流
利用HA的插件将组播流转为可远程访问的单播流:
- 在HA中安装Frigate或RTSPtoWebRTC插件
- Frigate配置示例(添加到
configuration.yaml):
frigate: cameras: pi_camera: ffmpeg: inputs: - path: udp://224.1.1.1:5001 input_args: -fflags +genpts - path: udp://224.1.1.1:5002 input_args: -fflags +genpts roles: - audio width: 960 height: 540 fps: 24
- 配置完成后,可通过HA远程访问功能(或OpenVPN访问HA局域网IP)查看合并后的音视频流。
方案3:配置OpenVPN支持组播(适合不想修改原有管线的场景)
- 在OpenVPN服务器配置文件(通常为
server.conf)中添加:
push "route 224.0.0.0 240.0.0.0" client-to-client dev tun0 multicast
- 在树莓派上启用组播路由:
sudo sysctl -w net.ipv4.ip_forward=1 sudo sysctl -w net.ipv4.conf.all.mc_forwarding=1
- 远程客户端启用IGMP支持:Windows客户端可在网卡IPv4高级设置中勾选「启用IGMP」,Linux/macOS客户端执行
sudo sysctl -w net.ipv4.conf.all.mc_forwarding=1。
次优需求:远程访问低帧率(1-2fps)视频流
方案1:原树莓派直接输出低帧率单播HTTP流
修改GStreamer管线,降低帧率并推送为HTTP流:
gst-launch-1.0 -v rpicamsrc vflip=true hflip=true \ name=src preview=0 fullscreen=0 bitrate=500000 \ annotation-mode=time annotation-text-size=20 \ ! video/x-h264,width=640,height=360,framerate=1/1 \ ! h264parse \ ! queue \ ! mp4mux \ ! tcpserversink host=0.0.0.0 port=8080
远程访问地址:http://<树莓派局域网IP>:8080,可直接用VLC或浏览器打开。
方案2:新增树莓派中转降帧
在中转树莓派上运行以下管线,接收组播视频流、降帧后转发为单播HTTP流:
gst-launch-1.0 udpsrc address=224.1.1.1 port=5001 \ ! application/x-rtp,media=video,encoding-name=H264 \ ! rtph264depay \ ! h264parse \ ! avdec_h264 \ ! videoscale \ ! video/x-raw,width=640,height=360,framerate=1/1 \ ! x264enc bitrate=500 \ ! h264parse \ ! mp4mux \ ! tcpserversink host=0.0.0.0 port=8081
远程通过OpenVPN访问地址:http://<中转树莓派局域网IP>:8081。
内容的提问来源于stack exchange,提问作者jhthompson12
相关产品推荐
相关产品推荐

