NATの背後にカメラ(無人機、ラズベリーパイ)を持ち、パブリックIPを持つVPSサーバー、そしてビデオを表示したいNATの背後にクライアントがあるというユースケースがあります。
クライアントはQGroundcontrollと呼ばれるソフトウェアを実行しており、これはローカルUDPポート(通常5000)でRTPストリームを待ち受けます。
クライアントをVPN上で実行してパブリックIPを取得すると、ビデオを取得できるようになりますが、VPNでは遅れが大きすぎます。私は自分のドローンで以下を実行することによってそれを証明することができます:
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://my-client-vpn-fixed-ip:5000
これは私に良い(しかし少し歪んだ)テスト画像を与えるでしょう。
私が行ったもう一つのテストは私のクライアント上で直接testingrcを実行することです。
ffmpeg -f lavfi -re -i testsrc -pix_fmt yuv420p -c:v h264 -f rtp udp://127.0.0.1:5000
だから今私は私のVPSを介してRTPストリームを中継することについてのこの考えを解決しました。
これが私が試したことです。
無人機の上(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リレーが必要です。あなたの最良の選択肢はあなたのVPS経由でVPNを設定することかもしれないので、あなたのドローンは直接にストリームを送ることができます 非公開 クライアントのIP
—
IanB