0

RFB クライアントと通信できる RFB サーバーを作成しています。主な質問は次のとおりです。現在、画面全体を RAW 形式でキャプチャしてクライアントに送信できます。この割には速度が遅い。また、クライアントは増分を false として送信しています。私は知りたいです)サーバーが画面が変更されたことを検出するための最良の方法は何ですか?b) 変更画面情報のみをクライアントに送信する方法。

クエリが多くのオフ情報を要求することは知っていますが、それでも私の主なポイントは、サーバーが増分更新のみを送信できるようにし、画面が変更されたことを検出できるようにするためのロジックを知ることです。私はC/C++で作業しています

4

3 に答える 3

0

これは、使用しているシステムと、画面を取得する方法によって異なります。これを実現する方法はたくさんあります。ほとんどの場合、クライアントに送信した内容のバッファを保持し、それを現在画面に表示されているものと比較します。

最も素朴で最も単純なコード例 (私が思うに) は、単純に画面を小さなバッファーに保持することです。画面を表す 1024 x 1024 ピクセルのフレーム バッファがあるとします。したがって、画面の (1) 1024 x 1024 バッファーを保持することに加えて、サイズ 64 x 64 の (256) バッファーを保持します。

大きなバッファーを更新するたびに、それを小さなバッファーと比較し、何かが変更された場合は、そのセクションを小さなバッファーにコピーしてクライアントに送信します。

于 2014-06-18T22:21:08.707 に答える
0

これは、増分更新を見つけるために使用できる簡単なロジックです

1.) 最後の既知のフレームバッファを refrenceBuffer として保存します。

2.) クライアントがインクリメンタル フレームバッファを要求するたびに、ステップ 3 を実行します。

3.) 現在のフレームバッファをキャプチャし、refrenceBuffer と異なるかどうかを比較します

4.) 両方のフレームバッファが、変更が発生するまで現在のフレームバッファのキャプチャと refrenceBuffer との比較を続ける場合 (スレッドが重すぎる場合は、数ミリ秒追加することができます)。

5.) 論理比較は単純なビット比較であり、これらすべての変更を含む最大の長方形を見つけることができます (長方形でこれだけをクライアントに送信できます)。

于 2014-03-18T09:24:43.927 に答える