Eu tenho um caso de uso em que tenho câmera (em um drone, com um pi de framboesa) atrás de um NAT, um servidor VPS com um IP público e um cliente atrás de um NAT onde quero exibir o vídeo. p>
O cliente está executando um software chamado QGroundcontroll que escuta um fluxo RTP em uma porta UDP local, geralmente 5000.
Se eu executo o cliente em uma VPN para obter um IP público, posso exibir o vídeo, 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 (mas ligeiramente distorcida) imagem de teste.
Outro teste que fiz foi executar o testsrc diretamente no meu cliente da seguinte forma, 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, portanto avconv
):
avconv -i udp://127.0.0.1:5600 -map 0:0 -c copy -f rtp udp://127.0.0.1:5500
No cliente (Meu Mac, por trás do 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? Como?
Obrigado!