É possível retransmitir um fluxo RTP?

2

Eu tenho um caso de uso em que tenho câmera (em um drone, com um pi framboesa) por trás de um NAT, um servidor VPS com um IP público e um cliente por trás de um NAT onde eu quero exibir o vídeo.

O cliente está executando um software chamado QGroundcontroll, que escuta um fluxo RTP em uma porta UDP local, geralmente 5000.

Se eu executar o cliente em uma VPN para obter um IP público, posso fazer o vídeo passar, mas a VPN está introduzindo muito atraso. Eu posso demonstrar isso executando o seguinte no meu drone:

ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://my-client-vpn-fixed-ip:5000

O que me dará uma boa foto de teste (mas levemente distorcida).

Outro teste que fiz foi rodar o testsrc diretamente no meu cliente assim, também com sucesso:

ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://127.0.0.1:5000

Então agora eu tenho trabalhado essa idéia sobre a transmissão do fluxo de rtp através do meu VPS.

Isso é o que eu tentei:

No drone (atrás do NAT):

ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://my-virtual-private-server-fixed-ip:5600

No VPS (IP Fixo, rodando Debian, assim avconv):

avconv -i udp://127.0.0.1:5600 -map 0:0 -c copy -f rtp udp://127.0.0.1:5500

No cliente (My Mac, atrás de NAT):

ffmpeg -i udp://my-virtual-private-server-fixed-ip:5500 -map 0:0 -c copy -f rtp udp://127.0.0.1:5000

Parece que nem avconvnem ffmpegé capaz de detectar ou se conectar a um fluxo RTP usando -i udp://adress:port. É suposto ser possível? Quão?

Obrigado!

Fredrik Falkman
fonte
Isso não é possível com o avconv ou o ffmpeg (AFAIK), pois isso exigiria que eles criassem um soquete UDP e o escutassem para os dados recebidos. Você precisa de um relé UDP construído propositadamente. Sua melhor opção pode ser configurar uma VPN através de seu VPS, para que seu drone possa enviar o fluxo diretamente para o IP privado de seu cliente.
IanB