ffmpegを使用して可能な限り低い待ち時間であるPCから別のPCにポイントツーポイント2K 60-90Hzストリーミングをコマンドするにはどうすればよいですか?
全内容:
AmazonのEyebox、Alibabaのジャイロスコープ+Aduino、2K HDMIディスプレイを使用してVRヘッドセットを作成しました。 Blenderゲームエンジンとうまく機能しますが、ワイヤーが私を狂わせます。
ラズベリー波や他の小型コンピュータを利用して無線ネットワークにしてみようと思います。 (とにかくヘッドフォンのバランスをとるために、背面に重量を追加する必要があります)
おおよそこのように構成されていると思います -
サーバー(PC):待ち時間の短いIPのポートの1つで2Kアプリケーションウィンドウをストリーミングします。
クライアント(HMD):待ち時間を最小限に抑えるために、デフォルトモードでMplayerを実行します(FFmpegドキュメントに従います)。
FFmpegはBlenderに完全に統合されていますが、入力ストリームはデスクトップのスクリーンショットです。
ISPが提供するホームルーターは5Ghz Wi-Fiをサポートします。また、Linuxでプラグアンドプレイが動作する5Ghz Wifi CSL USBスティックもあります。
VRでは待ち時間が本当に悪いので、圧縮していない状態でストリーミングすれば何ミリ秒を短縮できるのでしょうか?ストリーミングはLAN経由でのみ行われるため、帯域幅は100 Mb / sの5 GHz Wi-Fiに制限されているとします。
ffmpeg文書を解釈する方法は何百ものあり、実際にどのオプションを使用するべきかは経験を通してのみ理解できるようです。他の人が同じことを試しているのを見ることはできません。
可能なすべての設定を試すために1週間を過ごすことができますが、毎日ffmpegを扱う人は最高の設定をすぐに知ることができると確信しています。
このコマンドは約1秒の待ち時間と25FPSを提供します。
サーバー: avconv -f x11grab -s 2160x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1234
クライアント: mplayer -benchmark udp://192.168.0.2:1234
"rawvideo"を使用すると、mplayerはストリームを選択しません。 「ストリームを検索できません」とのみ表示されます。
答え1
avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1234
avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1235
avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1236
avconv -f x11grab -s 640x1200 -r 60 -i :0.0 -f mpegts udp://192.168.0.2:1237
そして
基本モードのMPlayer、遅延なし
追加の詳細:より多くのCPUを使用するには、基本的にストリームを分割する必要があることがわかりました。個々のストリームの優先順位を指定するために「nice」を使用することは効果がありません。 CPUの約30%を使って25fpsで2kを推進しました。上記のように、複数のストリームに分割したのと同じで、CPU使用率が85%の各タイルで60FPSを得ることができます。 -threads 0 to 6 オプションは予想とは異なる動作をします。むしろレンダリングが遅くなるだけです。 H264が優れており、ネットワークはギガビットでなければなりません。