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 avconv
nem ffmpeg
é capaz de detectar ou se conectar a um fluxo RTP usando -i udp://adress:port
. É suposto ser possível? Quão?
Obrigado!