web-dev-qa-db-ja.com

ウィンドウ(ディスプレイ)をネットワーク上の別のコンピューターに転送する方法

映画用のメディアサーバーをセットアップしています。サーバーはネットワーク化されており、ラップトップ/デスクトップもネットワーク化されています。サーバーは最新のUbuntu(サーバーではなくデスクトップエディション)を実行しています。

これは私が達成しようとしているシナリオです:

  • サーバーの電源がオンになっていて、ネットワークに接続されている
  • クライアント(私のラップトップ)はサーバーへのWebインターフェイスを開きます(またはssh経由でコマンドを送信します)。 Webインターフェイスを介して必要な映画を選択すると、インターフェイスがコマンドを実行します。
  • このコマンドは、指定されたムービーが再生されているVLCのインスタンスを生成し、ウィンドウ(ウィンドウのみ)を要求したコンピューターに転送します。
  • 最終結果:ラップトップに映画を再生するVLCウィンドウがあります。終わったら閉じることができます。

そのようなネットワーク上のクライアントにウィンドウだけを転送することは可能ですか?

4
n0pe

可能性ありですが、おそらく望ましくありません。 VLCクライアント(ウィンドウ)は任意のディスプレイに表示されますが、再生されます非圧縮ビデオ。ネットワーク化されたXリクエストとして送信する必要があります。オーバーヘッドがない場合でも、24bppおよび30fpsで720×540を送信するには、約279 Mbps(720px×540px×3バイト/ピクセル×30 fps×8ビット/バイト)が必要です。

イーサネットフレーム、TCP/IPパケット、およびXプロトコル自体は、これをさらに膨らませます。

さらに直感に反するのは、後処理されたRGBデータを表示しているため、ウィンドウが大きいほど、より多くの帯域幅が必要になるということです。 (これをほんの少しの塩でとると、実際のスケーリングはディスプレイ側で発生する可能性があります—その場合、縮小ウィンドウサイズはパフォーマンスに影響を与えません)

VLC(または他のXクライアント)がlocalhostのディスプレイに表示されているとき、期待する応答性を提供する巨大な最適化のファミリー全体が始まります。

必要に応じて、これを自分で試すことができます(実際に動作するのを見るのは非常に興味深いです)。

ssh -Yf user@hostname vlc some-file.avi

VLCは開始しますが、オーディオはXクライアントのホスト(上記のhostname)で再生され、not Xサーバーのホストで再生され、ビデオは予想されるfpsの何分の1かで更新されます。ストリームの数秒後、ビデオとオーディオが絶望的に​​非同期になります。ほとんどの標準ストリームは監視できません。 HD A/Vストリームについても考えないでください。

標準のメディアサーバーセットアップは、何らかの形式のネットワークファイルアクセスプロトコル(NFS、CIFSなど)を使用してサーバーからクライアントにcompressedストリームを配信し、ビデオクライアントに解凍と再生を実行させます。

5
Alexios