7

クライアント サポート ツールの一部として、デスクトップ セッションの表示/リモート コントロールを要求できる機能を提供したいと考えています。スクリーン キャプチャを取得してストリーミングする方法はたくさんありますが、特に、RDP (リモート デスクトップ/ターミナル サービスと VNC のエクスペリエンスが非常に異なる理由) を知りたいと考えています。RDP と VNC を使用しています。 . VNC は、画面をクライアントにストリーミングするために大幅に異なる方法を使用しているように見えるという理由だけで。

推測すると、RDP はビットマップ グラフィックスのブロック (100x100px など) を送信して全体像を構築するように見えますが (これにはかなり時間がかかる場合があります)、通常のペイントされた形状/塗りつぶし、またはフォント描画をクライアントに非常に迅速に転送するようです。 . VNC は、画面の巨大なスナップショットを取得し、前の画像と比較して、変更をクライアントにストリーミングするようです。

RDP は他のどのプロトコルよりもはるかに高品質でスムーズなプロトコルだと思いますが、これを実現するためにどのような手法を使用していますか?

編集 - 明確にするために、これらのグラフィックス技術について、具体的にはストリーミング プロトコルのプログラミング方法として質問しています。このビジネス要件を解決するために使用する既存の製品/テクノロジではありません。

4

2 に答える 2

10

お気づきのように、両者は変更をストリーミングする方法がかなり異なります。MS の RDP プロトコルは、オンラインで購入できるITU 標準 (T.128)の拡張です。

RDP は、互いに補完し合い、低帯域幅で非常に効率的な帯域幅節約技術を多数実装しています。

一方、VNC には非常に基本的な圧縮技術があります。変更されたビットマップのブロックを送信し、RLE から jpeg への基本的なタイプの圧縮を使用してそれらのブロックを効率的に送信します。
残念ながら、低帯域幅ではまだかなり無駄です。

VNC は基本的に、画面の構築に使用される基本的なグラフィック プリミティブを認識しません。画面のビットマップへの変更を監視するだけなので、どのマシンでも簡単に使用できます。
一方、RDP は Windows API を深くフックし、クライアントで同じ更新を生成するために必要な最小限の情報に基づいてストリームを最適化できます。

リモート デスクトップ機能を統合する場合は、いくつかの選択肢があります。

RDPおよびVNCのCodeProject にも多数のプロジェクトがあります。

于 2009-02-12T06:01:54.273 に答える
4

Renaudが言ったように、VNCはビットマップの変更をブロックごとに送信するだけで、コンテンツが何であるかを知る必要はありません。RDP ははるかにスマートです。

次の 2 つの仕様から、RDP の機能を正確に確認できます。

プロトコル レベル: http://msdn.microsoft.com/en-us/library/cc240445(PROT.10).aspx

グラフィック レベル: http://msdn.microsoft.com/en-us/library/cc241537(PROT.10).aspx

RDP の最大のメリットは、次の点にあると思います。

  • キャッシング: クライアントは以前に見たブロックを大量に保存でき、サーバーはクライアントにそれらの使用方法を伝えることができます。また、これらは永続的であるため、クライアントがサーバーに接続すると、既にアクセスしているサーバーは、ディスク上にあるブロックを通知できます。ウィンドウが移動したときに非常に便利です。また、タイトル バーなど、ウィンドウの多くの部分も同じです。

  • 線画・ブロック画。ご想像のとおり、RDP には線、多角形、四角形の描画操作があります。描画ウィンドウでは、これらがかなり頻繁に使用されます。

  • フォントの描画。RDP には、フォントのグリフを送信し、クライアントにそれらをレンダリングするように指示する方法があります。

  • カーソルのレンダリング。カーソル アイコンはグリフとして送信されます。VNC は単純にドットを使用します

それらは頭に浮かぶ大きなものです。描画機能の完全なリストについては、プロトコル仕様のセクション 2.2.7 Capability Sets を確認してください。

于 2009-08-22T20:42:17.053 に答える