最近、ffmpegを使用してリモートデスクトップをストリーミングしようとしています。目標は、出力解像度などの設定を選択できる一方で、コンピューターの画面の1つに表示されているものを別のコンピューターに送信できるようにすることです。
それは小さいですほぼ機能しています概念実証。完了したら、キーボードとマウスのイベントを転送するためにffmpegストリーミングをx2xまたはsynergyに使用して、VNCを置き換えることができます。
これで、次を使用してストリーミングを開始できます。
ffmpeg -f x11grab -s "1600x1200" -i ":0" \
-f alsa -i Pulse \
-s 800x600 -b 200k -f mpegts - \
| mplayer -cache 1024 -
#
# I have Pulse audio configured so that `-i Pulse` will
# The output can sent through for example netcat to another Host
#
待ち時間は、エンコードオプションによって異なります。これらのオプションを使用すると、画面の更新とビデオの更新の間の遅延は約800msです。
私が達成しようとしていること:
mplayer
が実行されると、リアストリームをシークできないと文句を言い、オーディオなしがあります。出力をファイルに保存して再生しても、まだ音が出ます。
編集:
-cache
を追加した後、線形ストリームでシークするメッセージは表示されなくなりました。出力形式を-f mpegts
に変更すると、オーディオが機能します。
エンコーディングがcpuコアの1つを100%使用しないのであれば素晴らしいでしょう(第2の目標)。
インターネットで調べたところ、これらの問題は私が使用すべきコーデック/オプションに関連していると思います。しかし、私は既存の可能性の違いを知りません。私の問題を解決するいくつかのオプションを教えてください。また、VLCは優れた代替手段ですか?もしそうなら、あるデスクトップから別のデスクトップにストリーミングするための同等のコマンドは何でしょうか?
DesktopAからdesktopBへのストリーミングは興味深い問題です。ビデオ/オーディオが必要ない場合は、代わりにNXプロトコルにチェックインすることをお勧めします。 VNCよりもはるかに効率的です。 FreeNXはサーバーであり、NoMachineなどがNXクライアントを作成します。他にも無料のサーバーと商用サーバーがあります。
F/LOSSプロジェクトとして、高性能リモートデスクトップSPICE機能で実行されている作業もあります。 Redhatが主導権を握っていると思います。 http://spice-space.org/
これらが有用な答えであるかどうかはわかりませんが、おそらくもっと有用な何かにつながるのでしょうか?
ビデオのストリーミングでは、完全なデスクトッププロトコルのオーバーヘッドを回避する必要があります。