我有一个用例,其中我在 NAT 后面有一个摄像头(在无人机上,使用树莓派),一个具有公共 IP 的 VPS 服务器,以及一个在 NAT 后面的客户端,我想要在其中显示视频。
客户端正在运行一个名为 QGroundcontroll 的软件,该软件监听本地 UDP 端口(通常为 5000)上的 RTP 流。
如果我在 VPN 上运行客户端,这样它就会获得一个公共 IP,我就可以传输视频,但 VPN 引入了太多延迟。我可以通过在我的无人机上运行以下命令来演示这一点:
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://my-client-vpn-fixed-ip:5000
这将给我一张漂亮(但略微扭曲)的测试图片。
我所做的另一项测试是直接在我的客户端上运行 testsrc,如下所示,也成功了:
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://127.0.0.1:5000
所以现在我已经想出了通过我的 VPS 中继 rtp 流的想法。
这是我尝试过的:
在无人机上(NAT后面):
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://my-virtual-private-server-fixed-ip:5600
在 VPS 上(固定 IP,运行 Debian,因此avconv
):
avconv -i udp://127.0.0.1:5600 -map 0:0 -c copy -f rtp udp://127.0.0.1:5500
在客户端上(我的 Mac,位于 NAT 后面):
ffmpeg -i udp://my-virtual-private-server-fixed-ip:5500 -map 0:0 -c copy -f rtp udp://127.0.0.1:5000
似乎 和avconv
都ffmpeg
无法使用 检测或连接到 RTP 流-i udp://adress:port
。这应该可行吗?如何实现?
谢谢!