IgRemote, Fantasy Remote, VNC

どれを使えばいいのかというタッチの話があったので。
(←広帯域)Fantasy Remote, IgRemote, VNC(狭帯域→) という序列を考えれば良い。
追記 : コメント参照。IgRemoteは確かにGDI+のCODEC(要するにMSペイントで保存可能な形式)は一般に使える可能性が高い。(パケット見れば一発でわかりそうなもんだが、検証している時間が取れない。。)PNG圧縮はZlib+フィルタと同義。

技術要素

(tech) IgRemote Fantasy Remote VNC
キャプチャ 全画面 全画面+cmd 描画コマンド 画面キャプチャの単位
単純差分 前後のフレームの同一ピクセルを転送しない(アニメGIF風)
移動差分 × × 動き検索を行う(Copy Rect)
色空間圧縮 色の情報を捨てる
可逆圧縮 ×? 空間方向の圧縮
圧縮alg. JPEG?(コメント参照) 独自YUV Zlib,JPEG,Wavelet... WaveletはμVNC独自拡張、UltraVNCに取り込み
プロトコル 秘匿 秘匿 公開

VNCの機能が豊富に見えるが、要するにVNCは余計なことをしているので遅い。
他の2つは全体的によく最適化されている。

コメント

  • VNCはビデオドライバのhookで動いていて、基本的に遅い。
    • 逆に、全画面専用のVNCキャプチャを誰か書けば同様の速度が原理的には出せる。
    • ただし、クライアントの後方互換問題はクリアできないだろう。多くのVNCクライアントは遅い(VirtualGLのTurboVNCのようにIntel IPPによる最適化バージョンも無くは無いが)。
    • VNCの圧縮の多くはタイル中の色数をカウントする等の処理が含まれている。リアルタイム処理という意味では非効率。
  • IgRemoteが高速なのは、ビデオカードによる縮小やGDI+による(?)JPEG圧縮などのため。
    • ビデオカードのドライバによっては病的に遅くなることがある(アクセラレーションレベルを下げる)
    • 当然、全画面では遅くなる。
  • Fantasy Remoteは"本質的に"速いが、帯域消費は多い。

簡単なmatrixにすると、

(tech) 軽いCODEC 重いCODEC
全画面キャプチャ Fantasy Remote IgRemote
描画コマンド ? VNC

PrintScreenを押した画面キャプチャが一瞬で終わることからわかるように、全画面の取り込みはそれほど時間のかかる処理ではないことが多い。