2012-02-14 7 views
1

私はさまざまなプラットフォーム(linux、freebsd、windows ...)でコンパイルする 'C'の小さなリモートデスクトップソフトウェアを作成する必要がありました。が、それでもそれらを使用するのは良いアイデアを思い付くことができませんでした、今、ここに私は何をすべきかです:速度の異なるプラットフォーム上のストリーミングデスクトップ

1. Convert All Formats into Windows Bitmap (XImage,...etc) 
2. Do a byte-to-byte comparion and replace the identical bytes with zeros 
3. Preform a RLE (Run Length Encoding) on the Resulted data. 
4. Transmit the Packet to the Server 
5. Inverse the Operation on the Server by Reconstructing the Image through the previous image (Comparing Last Image with the New one Discarding Zero Bytes after RLE) 

が、ビットマップ画像形式は、すでに非常に大きなファイルを持っているので、これは、非常に遅くなる傾向がありますそれには圧縮が含まれていないため、Mac OS Xなどのプラットフォームでは、非常に高解像度のためビットマップサイズが大きくなります。

デスクトップストリーミングを行うための高速で優れた方法はありますか?

+0

私は推測は宿題ですか? – IanNorton

+3

オープンソースのVNCを使ってみませんか? –

+0

宿題がありません。ホッケーのようにコーディングしています –

答えて

2

コンピュータの画面では、主に画面の小さな部分だけがいつでも変更できるようになっています。

あなたはこれらの3つのアプローチを見ることができる:各画面の更新のみthier場所とともに変化したものを送信するために

    は、長方形に画面を分割
  1. pngやjpegなどの圧縮されたイメージ形式を使用するか、RLEではなくzlibを使用してビットマップを圧縮します。
  2. イメージをキャプチャするときに色の深さを減らし、イメージを4ビットまたは8ビットカラーに縮小すると、送信するデータの量と変更のために比較する必要があるデータの量が大幅に削減されます。

どのようにサーバーに書き込むかによって、処理の量を減らすために画面のどのビットが変更されたかに関するヒントをOSから得ることができます。

最後に、これが宿題でない場合は、VNCのようなものを見てください。これは既にこれをかなりうまく行っています。javaまたはc#バージョンもあります。

+0

私が知っている限り、1)と2)は同時に行うことはできませんが、それぞれのパフォーマンスをテストしますが、1)それを実際に行う方法は、Fileを4つの部分に分けることと同じですか? –

+0

スクリーンをセクションに分割し、それぞれを別々のpng/jpegとしてエンコードする – IanNorton

関連する問題