У меня есть случай использования, когда у меня есть камера (на дроне, с малиновым пи) за NAT, VPS-сервер с публичным IP-адресом и клиент за NAT, где я хочу отобразить видео.
На клиенте запущено программное обеспечение под названием QGroundcontroll, которое прослушивает поток RTP через локальный порт UDP, обычно 5000.
Если я запускаю клиент по VPN, чтобы он получал общедоступный IP-адрес, я могу передать видео, но VPN вносит слишком большую задержку. Я могу продемонстрировать это, запустив следующее на моем дроне:
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://my-client-vpn-fixed-ip:5000
Что даст мне хорошую (но слегка искаженную) тестовую картинку.
Еще один тест, который я провел, - это запуск testrc непосредственно на моем клиенте, например, так же успешно:
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://127.0.0.1:5000
Итак, теперь я разработал эту идею о ретрансляции потока rtp через мой VPS.
Вот что я попробовал:
На дроне (за 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
. Это должно быть возможно? Как?
Спасибо!