Можно ли ретранслировать поток RTP?

2

У меня есть случай использования, когда у меня есть камера (на дроне, с малиновым пи) за 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. Это должно быть возможно? Как?

Спасибо!

Фредрик Фалькман
источник
Это невозможно с avconv или ffmpeg (AFAIK), так как это потребует от них создания UDP-сокета и прослушивания входящих данных. Вам нужно встроенное реле UDP. Наилучшим вариантом может быть настройка VPN через VPS, чтобы ваш дрон мог отправлять поток напрямую на частный IP вашего клиента.
IanB