3

現在、TCPリモートデスクトップブロードキャストアプリケーションを作成中です。(Team ViewerやVNCのようなもの)サーバーアプリケーションは

1. run on a PC listening for multiple clients on one Thread
2. and on another thread it will record the desktop every second
3. and it will broadcast the desktop for each connected client.

このアプリケーションを、12KBpsのアップロードと50KBpsのダウンロードDSL接続(クライアントとサーバー)の接続で実行できるようにする必要があります。

そのため、1秒あたりに送信するデータ/画像のサイズを小さくする必要があります。

私は次のようにして削減しようとしました。

I. first i send a Bitmap frame of the desktop and each other time i send only the difference of the previously sent frame.

II. the second way i tried was, each time i send a JPEG frame.

JPEGフレームを送信できず、次回は以前に送信したJPEGフレームの差を送信しました。

lzmaビットマップの違いを送信するときに圧縮(7zip SDK)を使用してみました。

しかし、データを12KBpsに減らすことができませんでした。私が達成できた最大値は約50KBpsでした。

誰かがこれを行うためのアルゴリズム/手順を私にアドバイスできますか?

4

1 に答える 1

11

あなたがしたいことは、画像圧縮フォーマットが行うことですが、独自の方法で行います(画像全体ではなく、変更のみを送信します)。これが私が2つのフェーズで行うことです(フェーズ1:完了、機能することを証明、フェーズ2:最適化)

概念実証フェーズ

1) 画面のイメージをビットマップ形式でキャプチャする

2) イメージを連続するバイトのブロックに分割します。最適なブロック サイズが何であるかを調べるには、いろいろ試してみる必要があります。アップリンク/ダウンリンクの速度によって異なります。

3)各ブロックの短いハッシュ(crc32、おそらくmd5、これも実験してください)を取得します

4) 圧縮 (これを行うことを忘れないでください!) および変更された各ブロックを転送します (ハッシュが変更された場合、ブロックは変更され、転送する必要があります)。受信側で画像をつなぎ合わせて表示します。

5) データ転送には UDP パケットを使用します。

最適化フェーズ

速度を最適化するためにできることは次のとおりです。

1) 最適な転送速度を得るために、統計とハードコードの転送速度とフレーム サイズおよびハッシュ方法を収集します。

2) #1 の自動調整メカニズムを作成する

3) 上記の第 1 段階の #2 で説明したように、画像は連続するバイト ブロックよりも正方形の領域で圧縮されます。アルゴリズムを変更して、一連の線のブロックではなく、視覚的に正方形の領域を取得するようにします。この正方形の方法は、画像とビデオの圧縮担当者が行う方法です。

4) 圧縮アルゴリズムをいじってみましょう。これにより、さまざまな変数を扱うことができます (CPU 負荷、インターネット アクセス速度、圧縮アルゴリズムの選択、画面更新の頻度)。

これは基本的に、(大まかに) 圧縮されたビデオ ストリーミングがどのように機能するかをまとめたものです (考えてみれば、タスクとの類似点がわかります) ので、証明されていない概念ではありません。

HTH

編集:実験できるもう1つのこと:画面のビットマップをキャプチャした後、その中の色の数を減らします。たとえば、色深度を 32 ビットから 16 ビットに変更すると、画像サイズを半分に抑えることができます。

于 2010-11-04T15:52:13.870 に答える