以下、実施例について、添付図面を参照しながら説明する。
[実施例]
<システム>
実施例に係るシンクライアントシステムについて説明する。図1は、実施例に係るシンクライアントシステムに含まれる各装置の構成の一例を示すブロック図である。
図1に示すシンクライアントシステム(thin client system)1は、クライアント(client)端末20が表示する画面をリモート(remote)でサーバ(server)装置10に制御させるものである。サーバ装置10及びクライアント端末20は、例えば情報処理装置である。
シンクライアントシステム1は、実際にはサーバ装置10が実行した処理結果や保持するデータをクライアント端末20に表示させつつも、あたかもクライアント端末20が主体となって処理を実行したり、データを保持したりしているかのように振る舞う。
図1に示す例では、シンクライアントシステム1は、サーバ装置10と、クライアント端末20とを有する。なお、図1に示す例では、1つのサーバ装置10に対し、1つのクライアント端末を接続する場合を示したが、任意の数のクライアント端末を接続してもよい。
サーバ装置10及びクライアント端末20は、所定のネットワークを介して、相互に通信可能に接続される。所定のネットワークには、有線または無線を問わず、インターネット、LAN(Local Area Network)やVPN(Virtual Private Network)などの任意の種類の通信網を採用する。なお、サーバ装置10及びクライアント端末20間の通信プロトコルには、一例として、VNCにおけるRFB(Remote Frame Buffer)プロトコルを採用する場合を想定する。
サーバ装置10は、クライアント端末20に表示させる画面をリモートで制御するサービスを提供するコンピュータである。このサーバ装置10には、サーバ向けのリモート画面制御用のアプリケーションがインストールまたはプリインストールされる。なお、以下では、サーバ向けのリモート画面制御用のアプリケーションをサーバ側リモート画面制御用アプリとも呼ぶ。
サーバ側リモート画面制御用アプリは、基本機能として、リモート画面制御サービスを提供する機能を有する。一例としては、サーバ側リモート画面制御用アプリは、クライアント端末20における操作情報を取得した上でその操作により要求された処理を自装置で動作するアプリケーションに実行させる。
サーバ側リモート画面制御用アプリは、アプリケーションにより実行された処理結果を表示するための画面の画像を生成した上でその画像をクライアント端末20へ送信する。このとき、サーバ側リモート画面制御用アプリは、今回の画面生成の前にクライアント端末20で表示させていたビットマップ(bitmap)画像との間で変更があった部分の画素(pixel)が集まった領域、すなわち更新矩形の画像を送信する。なお、以下では、一例として、更新部分の画像が矩形の画像で形成される場合を説明するが、開示の装置は更新部分の画像が矩形以外の形状で形成される場合にも適用できる。
このほか、サーバ側リモート画面制御用アプリは、フレーム(frame)間で動きが大きい部分のデータを動画向けの圧縮方式のデータに圧縮してクライアント端末20へ送信する機能も有する。一例としては、サーバ側リモート画面制御用アプリは、アプリケーションにより実行された処理結果から生成した画面の画像を複数の領域に分割し、分割した領域ごとに変更の頻度を監視する。
このとき、サーバ側リモート画面制御用アプリは、変更の頻度が閾値を超えた領域、すなわち高頻度変更領域の属性情報をクライアント端末20へ送信する。これとともに、サーバ側リモート画面制御用アプリは、高頻度変更領域のビットマップ画像をMPEG−2やMPEG−4などのMPEG方式のデータにエンコード(encode)した上でクライアント端末20へ送信する。
なお、ここでは、MPEG(Moving Picture Experts Group)方式のデータへ圧縮する場合を例示したが、これに限定されない。例えば、動画向けの圧縮方式であれば任意の圧縮符号化方式、例えばMotion−JPEG(Joint Photographic Experts Group)などを採用してもよい。
また、サーバ側リモート画面制御用アプリは、画面内で所定領域の移動があった場合、動画化処理を停止して、所定領域の移動情報及び所定領域のサイズ情報をクライアント端末20に送信する機能を有する。以下では、移動される所定領域を移動領域とも呼ぶ。
また、サーバ側リモート画面制御用アプリは、この移動領域内で変更される部分がある場合、この部分を動画化して動画圧縮したデータ、又は変更前後における静止画の符号化データ又は差分データをクライアント端末20に送信する機能を有する。
クライアント端末20は、サーバ装置10によるリモート画面制御サービスの提供を受ける側のコンピュータである。クライアント端末20の一例としては、パーソナルコンピュータ(personal computer)など固定端末の他、携帯電話機、PHS(Personal Handyphone System)やPDA(Personal Digital Assistant)などの移動体端末を適用することもできる。
クライアント端末20には、クライアント向けのリモート画面制御用アプリケーションがインストールまたはプリインストールされる。なお、以下では、クライアント向けのリモート画面制御用のアプリケーションをクライアント側リモート画面制御用アプリと呼ぶ。
このクライアント側リモート画面制御用アプリは、マウスやキーボードなどの各種の入力デバイスを介して受け付けた操作情報をサーバ装置10へ通知する機能を有する。一例としては、クライアント側リモート画面制御用アプリは、マウスの左右のクリックを始め、ダブルクリックやドラッグ、マウスの移動操作を介して得られたマウスカーソルの移動量などを操作情報として通知する。他の一例としては、マウスホイールの回転量、キーボードのうち押下されたキーの種別なども操作情報として通知する。
クライアント側リモート画面制御用アプリは、サーバ装置10から受信した画像を所定の表示部に表示させる機能を有する。一例としては、クライアント側リモート画面制御用アプリは、サーバ装置10から更新矩形のビットマップ画像を受信した場合には、更新矩形の画像を前回のビットマップ画像から変更のあった位置に合わせて表示する。
他の一例としては、クライアント側リモート画面制御用アプリは、サーバ装置10から高頻度変更領域の属性情報を受信した場合には、その属性情報に含まれる位置に対応する表示画面上の領域をビットマップ画像の表示対象外のブランク(blank)領域とする。その上で、クライアント側リモート画面制御用アプリは、動画向けの圧縮方式のデータを受信した場合にそのデータをデコードした上でブランク領域に表示する。
クライアント側リモート画面制御用アプリは、サーバ装置10から移動領域の移動情報及びサイズ情報を受信した場合、フレームバッファ内のサイズ情報に基づく所定領域をコピーして、移動情報に基づく移動後の位置に表示する。
クライアント側リモート画面制御用アプリは、移動領域内に変更される部分があり、その部分に対応するデータを受信した場合、上述した更新矩形の画像、又はデコードした動画をその部分に表示する。
<サーバ装置の構成>
次に、実施例に係るサーバ装置の構成について説明する。図1に示すように、サーバ装置10は、OS実行制御部11aと、アプリ実行制御部11bと、グラフィックドライバ12と、フレームバッファ13と、サーバ側リモート画面制御部14とを有する。なお、図1に示す例では、図1に示した機能部以外にも既知のコンピュータが有する各種の機能部、例えば各種の入力デバイスや表示デバイスなどの機能を有するものとする。
OS実行制御部11aは、OS(Operating System)の実行を制御する処理部である。例えば、OS実行制御部11aは、後述の操作情報取得部101により取得された操作情報からアプリケーションの起動指示やアプリケーションに対するコマンドを検出する。例えば、OS実行制御部11aは、アプリケーションのアイコン(icon)上でダブルクリックを検出した場合に、そのアイコンに対応するアプリケーションの起動を後述のアプリ実行制御部11bへ指示する。
他の例としては、起動中のアプリケーションの操作画面、例えばウィンドウ(window)上でコマンド(command)の実行を要求する操作を検出した場合に、OS実行制御部11aは、そのコマンドの実行をアプリ実行制御部11bへ指示する。なお、以下では、アプリケーションをアプリと略記する場合がある。
アプリ実行制御部11bは、OS実行制御部11aによる指示に基づき、アプリケーションの実行を制御する処理部である。例えば、アプリ実行制御部11bは、OS実行制御部11aによりアプリの起動が指示された場合や起動中のアプリにコマンドの実行が指示された場合にアプリを動作させる。
アプリ実行制御部11bは、アプリを実行することにより得られた処理結果の表示用イメージ(image)をフレームバッファ13に描画する要求を、後述のグラフィックドライバ12へ行う。このようにグラフィックドライバ12へ描画要求を行う場合には、アプリ実行制御部11bは、表示用イメージとともに表示用イメージの描画位置をグラフィックドライバ12へ通知する。
なお、アプリ実行制御部11bが実行するアプリは、プリインストールされたものであってもよく、サーバ装置10の出荷後にインストールされたものであってもかまわない。また、JAVA(登録商標)などのネットワーク環境で動作するアプリであってもよい。
グラフィックドライバ12は、フレームバッファ13に対する描画処理を実行する処理部である。例えば、グラフィックドライバ12は、アプリ実行制御部11bからの描画要求を受け付けた場合に、アプリの処理結果の表示用イメージをアプリにより指定されたフレームバッファ13上の描画位置へビットマップ形式で描画する。
なお、ここでは、アプリにより描画要求を受け付ける場合を説明したが、OS実行制御部11aからの描画要求を受け付けることもできる。例えば、グラフィックドライバ12は、OS実行制御部11aからマウスカーソルの描画要求を受け付けた場合に、マウスカーソルの表示用イメージをOSにより指定されたフレームバッファ13上の描画位置へビットマップ形式で描画する。
フレームバッファ13は、グラフィックドライバ12により描画されたビットマップデータを記憶する記憶デバイスである。かかるフレームバッファ13の一態様としては、VRAM(Video Random Access Memory)を始めとするRAM(Random Access Memory)、ROM(Read Only Memory)やフラッシュメモリ(flash memory)などの半導体メモリ素子が挙げられる。なお、フレームバッファ13は、ハードディスク、光ディスクなどの記憶装置を適用してもかまわない。
サーバ側リモート画面制御部14は、サーバ側リモート画面制御用アプリを通じて、リモート画面制御サービスをクライアント端末20へ提供する処理部である。このサーバ側リモート画面制御部14は、図1に示すように、操作情報取得部101と、画面生成部102と、変更頻度判別部103と、高頻度変更領域識別部104と、第1のエンコーダ105と、第2のエンコーダ106と、第1の送信部107と、第2の送信部108と、移動領域検出部109と、変更判定部110と、第3の送信部111とを有する。
操作情報取得部101は、クライアント端末20から操作情報を取得する処理部である。操作情報の一例としては、マウスの左右のクリックを始め、ダブルクリックやドラッグ、マウスの移動操作を介して得られたマウスカーソルの移動量などが挙げられる。操作情報の他の一例としては、マウスホイールの回転量、キーボードのうち押下されたキーの種別なども挙げられる。
画面生成部102は、クライアント端末20の表示部22に表示させる画面の画像を生成する処理部である。例えば、画面生成部102は、グラフィックドライバ12によりフレームバッファ13へビットマップデータが格納される度に、次のような処理を起動する。
画面生成部102は、前回のフレーム生成時にクライアント端末20で表示させていた表示画面の画像と、今回のフレーム生成時にフレームバッファ13へ書き込まれた表示画面の画像とを比較する。そして、画面生成部102は、前回のフレームから変更があった部分の画素をつなぎ合わせた上で矩形に整形した更新矩形の画像を生成し、更新矩形送信用のパケットを生成する。
《画面全体における動画化判定処理》
まず、画面内の領域に対し、動画向けの圧縮方式を用いる領域を高頻度変更領域として特定のアプリケーションに依存せずに識別する処理について説明する。この処理は、後述する移動領域が検出されていない場合の処理である。
変更頻度判別部103は、フレームバッファ13に描画された画像を分割した領域ごとにフレーム間の変更の頻度を判別する処理部である。例えば、変更頻度判別部103は、画面生成部102により生成された更新矩形を図示しない作業用の内部メモリへ所定の期間にわたって蓄積する。
このとき、変更頻度判別部103は、更新矩形の位置および大きさを特定可能な属性情報、例えば更新矩形の左上の頂点の座標と更新矩形の幅および高さとを蓄積する。更新矩形を蓄積させる所定期間は、高頻度変更領域を識別する精度と相関関係があり、期間を長くするほど高頻度変更領域の誤検出が低減される。なお、ここでは、一例として、1秒間にわたって更新矩形の画像を蓄積する場合を想定する。
このとき、変更頻度判別部103は、更新矩形の画像を蓄積してから所定の期間が経過した場合に、クライアント端末20に表示させる表示画面をメッシュ(mesh)状に分割したマップ(map)を用いて、表示画面の変更頻度を判別する。
図2は、表示画面の分割例を説明するための図である。図2に示す符号30は、変更頻度判別用のマップを示す。図2に示す符号31は、マップ30に含まれるメッシュを指す。図2に示す符号32は、メッシュ31を形成する画素のブロックに含まれる1画素を指す。図2に示す例では、変更頻度判別部103がマップ30を占める画素のうち8画素×8画素のブロックを1つのメッシュとして分割する場合を想定している。この場合には、1つのメッシュに64個の画素が含まれることになる。
ここで、変更頻度判別部103は、作業用の内部メモリに蓄積した更新矩形の位置および大きさにしたがって更新矩形の画像を変更頻度判別用のマップに順次展開する。そして、変更頻度判別部103は、更新矩形をマップに展開する度に、マップ上で更新矩形と重なり合った部分のメッシュの変更回数を累積して加算する。
このとき、変更頻度識別部103は、マップ上に展開された更新矩形がメッシュに含まれる画素との間で所定数にわたって重なり合った場合に、そのメッシュの変更回数を1つ加算する。なお、ここでは、更新矩形がメッシュに含まれる画素と1つでも重なり合った場合に、メッシュの変更回数を加算する場合を想定して説明を行う。
図3A〜図3Cは、表示画面の変更頻度の判別例を説明するための図である。図3A〜図3Cに示す符号40A、符号40B及び符号40Nは変更頻度判別用のマップを示す。図3A及び図3Bに示す符号41A及び符号41Bは更新矩形を示す。ここで、マップ40Aのメッシュ内に図示した数字は、更新矩形41Aが展開された時点におけるメッシュの変更回数を示す。
また、マップ40Bのメッシュ内に図示した数字は、更新矩形41Bが展開された時点におけるメッシュの変更回数を示す。さらに、マップ40Nのメッシュ内に図示した数字は、作業用の内部メモリに蓄積した更新矩形が全て展開された時点におけるメッシュの変更回数を示す。なお、図3A〜図3Cにおいて数字が図示されていないメッシュは変更回数がゼロであるものとする。
図3Aに示すように、更新矩形41Aがマップ40Aに展開された場合には、網掛け部分のメッシュが更新矩形41Aと重なり合う。このため、変更頻度判別部103は、網掛け部分のメッシュの更新回数を1つずつ加算する。この場合には、各メッシュの変更回数はゼロであるため、網掛け部分の変更回数は0から1に加算される。
さらに、図3Bに示すように、更新矩形41Bがマップ40Bに展開された場合には、網掛け部分のメッシュが更新矩形41Bと重なり合う。このため、変更頻度判別部103は、網掛け部分のメッシュの更新回数を1つずつ加算する。この場合には、各メッシュの変更回数は1であるため、網掛け部分の変更回数は1から2に加算される。このようにして全ての更新矩形がマップに展開された段階では、図3Cに示すマップ40Nの結果が得られる。
そして、変更頻度判別部103は、作業用の内部メモリに蓄積した更新矩形を全てマップに展開し終えた場合に、所定の期間における変更回数、すなわち変更頻度が閾値を超えるメッシュを取得する。図3Cの例で言えば、閾値を「4」としたとき、網掛け部分のメッシュが取得されることになる。
閾値は、その値を高く設定するほど表示画面で動画が表示されている可能性が高い部分を後述の第2のエンコーダ106によりエンコードできる。なお、この閾値は、サーバ側リモート画面制御用アプリの開発者が段階的に設定した値をエンドユーザに選択させたり、また、エンドユーザが値を直接設定したりすることができる。
図1の説明に戻り、高頻度変更領域識別部104は、クライアント端末20に表示される表示画面のうち高頻度で変更される領域を高頻度変更領域として識別する処理部である。
高頻度変更領域識別部104は、所定の期間内で、変更頻度判別部103により変更回数が閾値を超えるメッシュが取得された場合に、隣接するメッシュ同士を連結したメッシュ連結体を矩形に補正する。例えば、高頻度変更領域識別部104は、メッシュ連結体に補間する補間領域を導出した上でメッシュ連結体に補間領域を足し合わせることによりメッシュ連結体を矩形に補正する。この補間領域の導出には、メッシュの連結体が最小の補間で矩形に整形される領域を導出するアルゴリズム(algorithm)が適用される。
図4は、メッシュ連結体の補正例を説明するための図である。図4に示す符号51は補正前のメッシュ連結体を示す。図4に示す符号52は補間領域を示す。また、図4に示す符号53は補正後の矩形を示す。図4に示すように、高頻度変更領域識別部104は、メッシュ連結体51に補間領域52を足し合わせることにより、メッシュ連結体51を矩形53に補正する。この段階では、後述の矩形の合成が完了しておらず、矩形53が未だ高頻度変更領域と確定していないので、補正後の矩形を高頻度変更領域の候補と呼ぶこととする。
高頻度変更領域識別部104は、高頻度変更領域の候補が複数存在する場合には、複数の高頻度変更領域の候補の距離が所定の値以下である高頻度変更領域の候補同士を含む矩形に合成する。ここで言う高頻度変更領域の候補の距離とは、補正後の矩形の最短距離を指すものとする。
例えば、高頻度変更領域識別部104は、高頻度変更領域の候補を合成するにあたって各候補の間を埋める補間領域を導出した上で高頻度変更領域の候補に補間領域を足し合わせることにより、高頻度変更領域の候補同士を含む矩形に合成する。この補間領域の導出には、高頻度変更領域の候補の間が最小の補間で合成体に整形される領域を導出するアルゴリズム(algorithm)が適用される。
図5は、高頻度変更領域の候補の合成例を説明するための図である。図5に示す符号61A及び符号61Bは、高頻度変更領域の候補を指す。図5に示す符号62は補間領域を指す。図5に示す符号63は、高頻度変更領域の候補61A及び高頻度変更領域の候補61Bの合成体を指す。
図5に示すように、高頻度変更領域識別部104は、高頻度変更領域の候補61A及び高頻度変更領域の候補61Bに補間領域62を足し合わせることにより、高頻度変更領域の候補61A及び高頻度変更領域の候補61Bを含む合成体63へ合成する。そして、高頻度変更領域識別部104は、このようにして得た合成体を高頻度変更領域と識別する。
上述したようにして高頻度変更領域を識別すると、高頻度変更領域識別部104は、高頻度変更領域の位置および大きさを特定可能な属性情報を第1の送信部107及び第2の送信部108に出力する。
これにより、クライアント端末20で表示される表示画面のビットマップデータのうち、高頻度変更領域に対応する部分をブランク表示させる。その後、高頻度変更領域識別部104は、作業用の内部メモリにマッピングされたメッシュの変更回数をクリア(clear)する。なお、高頻度変更領域識別部104は、高頻度変更領域の属性情報を作業用の内部メモリに登録する。
図6A〜図6Cは、高頻度変更領域の属性情報の通知例を説明するための図である。図6Aに示す符号70Aは、フレームバッファ13に描画された表示画面の一例を示す。図6B〜図6Cに示す符号70B及び符号70Cは、変更頻度判別用のマップを示す。図6Aに示す符号71は、ブラウザ(browser)画面を指す。図6Aに示す符号72は、動画再生画面を指す。図6Bに示す符号73は、マウスの移動軌跡を示す。図6Bに示す符号74は、アプリによる動画再生領域を示す。
図6Aに示すように、表示画面70Aには、ブラウザ画面71及び動画再生画面72が含まれる。この表示画面70Aから経時的な変化を追った場合には、図6Bに示すように、静止画であるブラウザ画面71の更新矩形は検出されず、マウスの移動軌跡73および動画再生領域74に関する更新矩形が検出される。
このうち、動画の再生領域74で変更回数が閾値を超えるメッシュ、すなわち図示の網掛け部分が高頻度変更領域識別部104により識別されたものとする。この場合には、高頻度変更領域識別部104は、図6Cに示す網掛け部分の高頻度変更領域の左上の頂点の座標(x,y)と、高頻度変更領域の幅wおよび高さhとを高頻度変更領域の属性情報として第1の送信部107及び第2の送信部108に通知する。
なお、ここでは、高頻度変更領域の位置を特定する点として左上の頂点の座標を採用する場合を説明したが、他の頂点を採用することとしてもかまわない。また、高頻度変更領域の位置を特定することができる点であれば、頂点以外の任意の点、例えば重心などを採用できる。また、ここでは、画面上の左上を座標軸XYの原点とする場合を説明したが、画面内および画面外の任意の点を原点とすることができる。
また、高頻度変更領域識別部104は、画面生成部102により更新矩形が生成される度に、その更新矩形が作業用の内部メモリに記憶された高頻度変更領域、すなわち後述の第2の送信部108により送信中の動画領域に含まれるか否かを判定する。
このとき、高頻度変更領域識別部104は、更新矩形が高頻度変更領域に含まれない場合には、更新矩形の画像および更新矩形のサイズ、位置情報を含む属性情報を第1のエンコーダ105に出力する。一方、高頻度変更領域識別部104は、更新矩形が高頻度変更領域に含まれる場合には、原則として、後述の第1の送信部107に更新矩形の画像を送信させない。なお、更新矩形がOS実行制御部11aにより描画されたマウスのものである場合には、マウスに関する更新矩形の画像および属性情報を例外的に送信させることとしてもよい。
また、高頻度変更領域識別部104は、フレームバッファ13にビットマップデータが描画される度に、作業用の内部メモリに高頻度変更領域の属性情報が登録されているか否かを判定する。
そして、高頻度変更領域識別部104は、高頻度変更領域の属性情報が登録されている場合に、フレームバッファ13に描画されたビットマップデータのうち高頻度変更領域に対応する部分のビットマップ画像を切り出した上で後述の第2のエンコーダ106に出力する。
これにより、サーバ装置10は、高頻度変更領域以外の領域については変更があった部分の画像を送信し、高頻度変更領域については動画向けの圧縮を行ったデータを送信することができる。よって、クライアント端末20へ送信するデータ量を削減し、操作レスポンスを向上させることができる。さらに、クライアント端末20へ送信するデータ量を削減することができるので、サーバ装置10及びクライアント端末20間の伝送遅延を低減し、クライアント端末20で表示される画像がコマ落ちする可能性も低減できる。
《移動領域内における動画化判定処理》
次に、表示画面内で検出された移動領域内の部分領域に対し、動画向けの圧縮方式を用いる領域を高頻度変更領域として特定のアプリケーションに依存せずに識別する処理について説明する。この処理は、移動領域が検出された場合の処理である。まず、なぜ、移動領域内で変更される部分領域を判定するかについて説明する。
図7は、移動領域の問題点を説明するための図である。図7に示す表示画面80Aは、クライアント端末20でマウス操作を行ってウィンドウを移動した場合を示す画面である。図7に示す表示画面80Bは、サーバ装置10で、移動領域を検出したときの画面である。表示画面80Bに示すように、移動前のウィンドウ領域81Aから移動後のウィンドウ領域81Bにウィンドウが移動している。ウィンドウは移動領域の一例である。
ウィンドウ内に変更される部分がなければ、移動前のウィンドウの左上の座標p1と、移動後のウィンドウの左上の座標p2とを含む移動情報と、ウィンドウの高さ(height)と幅(width)とを含むサイズ情報とをクライアント端末20に送信すれば、送信するデータ量を削減することができる。また、クライアント端末20では、移動情報とサイズ情報を受信できれば、フレームバッファ24の画像データを利用して、移動後のウィンドウを生成できる。
しかし、移動領域が、例えば図7に示すウィンドウ82である場合、アニメーション広告83が移動領域内に含まれ、移動領域内の一部が変更されるとき、単純に移動領域をコピーすることができない。
また、上述したように、画面内で動画化判定を行えば、移動前のウィンドウ領域81Aと移動後のウィンドウ領域81Bとを含む領域を動画化するため、移動情報を適切に利用することができず、データ量を削減する余地が残る。
そこで、以下では、画面内で移動領域が検出された場合に、上述した動画化判定を停止し、移動領域内での変更判定を行い、移動領域内の変更量に応じて静止画又は動画処理を組み合わせてクライアント端末20に対して画像に関するデータを送信する。これにより、クライアント端末20に送信するデータ量をより削減することができる。上記処理を実現するため、サーバ装置10は、以下の機能を有する。
移動領域検出部109は、画像内の移動領域を検出する処理部である。例えば、移動領域検出部109は、OS実行制御部11aにより実行される描画命令を監視し、コピーを示す命令(例えばCopyRectコマンド)を検出する。
移動領域検出部109は、コピーを示す命令を検出すると、コピーして移動される移動領域を検出する。ここでは、移動前後の移動領域の左上の座標を示す移動情報(p1:移動前の座標、p2:移動後の座標)、サイズ情報(h:height,w:width)が検出される。移動領域検出部109は、検出した移動情報及びサイズ情報を変更判定部110及び第3の送信部111に出力する。
なお、移動領域検出部109は、その他の移動領域の検出処理として、フレームバッファ13に記憶されたフレーム間で画像処理を行ってエッジを抽出し、抽出されたエッジ領域の移動を検出することで、移動領域を検出してもよい。
また、移動領域検出部109により移動領域が検出された場合、サーバ側リモート画面制御部14は、画面全体における動画化判定処理を停止する。
変更判定部110は、検出された移動領域内で、移動前後で変更される部分領域があるか否かを判定する処理部である。例えば、変更判定部110は、フレームバッファ13から前回のフレーム生成時にクライアント端末20で表示させていた表示画面の画像と、今回のフレーム生成時にフレームバッファ13へ書き込まれた表示画面の画像とを取得する。
変更判定部110は、移動情報及びサイズ情報に基づき、移動前の移動領域と、移動後の移動領域とを比較する。そして、変更判定部110は、前回のフレームから変更があった部分の画素をつなぎ合わせた上で矩形に整形した部分領域を生成する。
なお、変更判定部110は、移動領域内で変更がないと判定した場合、移動発生直前の画面F'と、前回クライアント端末20に送信した画面Fi−1との差分データを送信するよう第1の送信部107に指示する。また、変更判定部110は、移動情報(p1,p2)及びサイズ情報(w:width,h:height)をクライアント端末20に送信するよう第3の送信部111に指示する。
変更頻度判別部103は、移動領域を分割した領域ごとにフレーム間の変更の頻度を判別する処理部である。例えば、変更頻度判別部103は、変更判定部110により変更があると判定された移動領域を図示しない作業用の内部メモリへ所定の期間にわたって蓄積する。その後の処理は、判別対象を移動領域にすれば、上述した処理と同様である。
例えば、変更頻度判別部103は、移動領域の画像を蓄積してから所定の期間が経過した場合に、クライアント端末20に表示させる移動領域をメッシュ(mesh)状に分割したマップ(map)を用いて、移動領域の変更頻度を判別する。
このとき、変更頻度判別部103は、部分領域の位置および大きさを特定可能な属性情報、例えば部分領域の左上の頂点の座標と部分領域の幅および高さとを蓄積する。このとき、部分領域の座標は、移動領域内の相対座標が用いられる。
高頻度変更領域識別部104は、クライアント端末20に表示される移動領域のうち高頻度で変更される部分領域を高頻度変更領域として識別する処理部である。識別対象が、移動領域内の部分領域に変わる以外は、上述した処理と同様である。
例えば、高頻度変更領域識別部104は、変更頻度判別部103により変更回数が閾値を超えるメッシュが取得された場合に、隣接するメッシュ同士を連結したメッシュ連結体を矩形に補正する。例えば、高頻度変更領域識別部104は、メッシュ連結体に補間する補間領域を導出した上でメッシュ連結体に補間領域を足し合わせることによりメッシュ連結体を矩形に補正する。この補間領域の導出には、メッシュの連結体が最小の補間で矩形に整形される領域を導出するアルゴリズム(algorithm)が適用される。
高頻度変更領域識別部104は、補間領域から前述したように高頻度変更領域を識別し、高頻度変更領域の頂点(例えば左上)の相対座標、幅及び高さの情報を第2の送信部108に出力する。
図8は、移動領域から部分領域を抽出する例を説明するための図である。図8に示す表示画面90で、ウィンドウ91Aがウィンドウ91Bの位置に移動したことを想定する。図8に示す例では、移動領域検出部109は、移動されたウィンドウを検出し、移動情報p1、p2)、ウィンドウのサイズ情報(w,h)を検出する。
次に、変更判定部110は、ウィンドウ内で変更される領域があるか否かを判定し、図8に示す例では、部分領域92で変更があったことを判定する。変更頻度判別部103は、部分領域92の変更回数をカウントする。高頻度変更領域識別部104は、所定期間内に変更回数が閾値以上となる高頻度変更領域を識別する。
高頻度変更領域識別部104は、高頻度変更領域として識別した領域の相対座標、サイズ情報を第2の送信部108及び第2のエンコーダ106に出力する。また、高頻度変更領域識別部104により、高頻度変更領域に識別されなかった領域の相対座標、サイズ情報を含む属性情報を第1の送信部107、第1のエンコーダ105に出力する。
これにより、表示画面内で移動領域が検出された場合、移動情報を送信することによる送信データ量の削減効果を維持しつつ、移動領域内で変更される部分領域があっても適切に対応することで、ユーザに違和感の無い操作を実現することができる。
なお、変更判定部110は、移動領域内に変更された部分領域が複数あると判定する場合がある。このとき、高頻度変更領域識別部104は、移動領域内に複数の高頻度変更領域を識別した場合、これらの全てで動画化処理を行うと、かえってデータ量が多くなってしまう場合がある。
そこで、高頻度変更領域識別部104は、識別された高頻度変更領域の数が所定値以上ある場合、上述したように、移動前後の移動領域を含む領域を高頻度変更領域として識別する。所定値は、例えば「3」とする。
図9は、移動領域内の動画化判定処理における例外処理を説明するための図である。図9に示すウィンドウ95は、部分領域96A〜C全てで高頻度変更領域であると識別されたとする。
図9に示すように、移動領域(ウィンドウ95)内に3つの高頻度変更領域がある場合、比較的小さい高頻度変更領域を複数動画化するよりも、表示画面97内で、移動前後のウィンドウを含む領域98を動画化した方が、データ量が削減される可能性がある。このとき、サーバ側リモート画面制御部14は、停止していた画面全体における動画化判定を再開する。
これにより、移動領域内で、比較的小さい高頻度変更領域が増えることで、クライアント端末20に送信するデータ量が増加してしまうことを防止することができる。
上述したように、表示画面の一部に高頻度変更領域が検出された場合には、表示画面内の高頻度変更領域の動画化が開始される。この場合には、フレームバッファ13に描画されたビットマップ画像のうち高頻度変更領域に対応する部分のビットマップ画像が後述の第2のエンコーダ106に入力される。
一方、高頻度変更領域に含まれない更新矩形については、動画化が開始される前と同様に、静止画圧縮方式で圧縮される。すなわち、フレームバッファ13に描画されたビットマップ画像のうち高頻度変更領域に含まれない更新矩形の画像が後述の第1のエンコーダ105に入力される。
また、表示画面内に移動領域が検出された場合には、移動領域の移動情報及びサイズ情報が後述の第3の送信部111に入力される。移動領域内に高頻度変更領域が検出された場合には、移動領域内の高頻度変更領域の動画化が開始される。この場合には、フレームバッファ13に描画されたビットマップ画像のうち、高頻度変更領域に対応する部分のビットマップ画像が後述する第2のエンコーダ106に入力される。
一方、高頻度判定領域と識別されなかった部分領域については、変更前後の部分領域の画像が、後述の第1のエンコーダ105に入力される。
図1の説明に戻り、第1のエンコーダ105は、高頻度変更識別部104から入力される更新矩形の画像を静止画の圧縮方式でエンコードする処理部である。例えば、第1のエンコーダ105は、各更新矩形の画像をJPEGで圧縮することによって静止画の符号化データへエンコードする。なお、ここでは、静止画の圧縮方式としてJPEGを例示したが、GIF(Graphic Interchange Format)やPNG(Portable Network Graphics)などの他の方式を適用することもできる。
また、第1のエンコーダ105は、高頻度変更識別部104から入力される移動領域内の部分領域の画像を静止画の圧縮方式でエンコードする。
第1の送信部107は、第1のエンコーダ105によってエンコードされた更新矩形又は部分領域の符号化データをクライアント端末20へ送信する処理部である。例えば、第1の送信部107は、更新矩形又は部分領域の符号化データをクライアント端末20へ送信するにあたってフレームID及び送信時刻のタイムスタンプ等のヘッダ情報を符号化データに付加した上でクライアント端末20に送信する。
このとき、第1の送信部107は、第1のエンコーダ105によってエンコードされた全ての更新矩形又は部分領域の符号化データにヘッダ情報を付加することもできる。また、第1の送信部107は、更新矩形又は部分領域の符号化データのうち少なくとも1つの符号化データにヘッダ情報を付加してもよい。ヘッダ情報には、更新矩形又は部分領域の位置やサイズを示す属性情報を含め、また、高頻度変更領域の属性情報を含めてもよい。この更新矩形又は部分領域を送信する場合の通信プロトコルには、一例としてTCP/IPプロトコルが採用される。また、通信プロトコルとして、UDPを採用してもよい。
第2のエンコーダ106は、高頻度変更領域識別部104から入力される高頻度変更領域の画像を動画の圧縮方式でエンコードする処理部である。例えば、第2のエンコーダ106は、高頻度変更領域の画像をMPEGで圧縮することによって動画の符号化データへエンコードする。なお、ここでは、動画の圧縮方式としてMPEGを例示したが、Motion−JPEGなどの他の方式を適用することもできる。この高頻度変更領域には、移動領域内の高頻度変更領域も含まれる。
第2の送信部108は、第2のエンコーダ106によってエンコードされた動画の符号化データをクライアント端末20に送信する処理部である。例えば、第2の送信部108は、動画の符号化データのうち少なくともいずれか1つの符号化データにヘッダ情報を付加する。ヘッダ情報には、高頻度変更領域の属性情報を含めてもよい。この高頻度変更領域のエンコード画像を送信する場合の通信プロトコルには、一例として、RTP(Real-time Transport Protocol)を採用できる。
第3の送信部111は、移動領域検出部109から入力された移動情報及びサイズ情報をクライアント端末20に送信する処理部である。例えば、第3の送信部111は、移動情報及びサイズ情報にヘッダ情報や移動領域であるか否かのフラグを付加してクライアント端末20に送信する。
図10は、クライアント端末20に送信されるデータのデータ構造の一例を示す図である。以下では、クライアント端末20に送信されるデータを送信データとも呼ぶ。図10に示す例では、送信データには、ヘッダ、移動領域フラグ、動画フラグ、座標、サイズ、画像データの何れか複数又は全てが含まれる。
ヘッダには、例えば高頻度変更領域や更新矩形などの属性情報が含まれる。移動領域フラグは、例えば「0」は移動領域なし、「1」「2」は移動領域ありを表す。動画フラグは、例えば「0」は静止画、「1」は動画を表す。
図10に示すデータAは、移動領域が検出されていない場合の送信データの一例を示す。データAは、移動領域が検出されていない場合に、第1の送信部107又は第2の送信部108から送信される。
例えば、第1の送信部107は、移動領域フラグを「0」にし、動画フラグを「0」にし、静止画の頂点座標及びサイズ、画像データには静止画の符号化データを含めてクライアント端末20に送信する。また、第2の送信部108は、移動領域フラグを「0」にし、動画フラグを「1」にし、動画の頂点座標及びサイズ、画像データには動画の符号化データを含めてクライアント端末20に送信する。
図10に示すデータBは、第3の送信部111から送信される送信データの一例を示す。第3の送信部111から送信されるデータBは、移動領域フラグが「1」であり、移動領域の移動情報(変更前の頂点座標(X1,Y1),変更後の頂点座標(X2,Y2)、移動領域のサイズ情報(width,height)が含まれる。
図10に示すデータCは、移動領域が検出された場合の送信データの一例を示す。図10に示すデータCは、移動領域が検出された場合に、第1の送信部107又は第2の送信部108から送信される。
例えば、第1の送信部107は、移動領域フラグを「2」にし、動画フラグを「0」にし、静止画の頂点の相対座標及びサイズ、画像データには静止画の符号化データを含めてクライアント端末20に送信する。また、第2の送信部108は、移動領域フラグを「2」にし、動画フラグを「1」にし、動画の頂点の相対座標及びサイズ、画像データには動画の符号化データを含めてクライアント端末20に送信する。
移動領域内の変更される部分領域に対しては、例えば、移動領域の左上を原点とする相対座標で表現される。クライアント端末20では、部分領域の位置を示すデータを、移動領域の絶対座標に部分領域の相対座標を足して絶対座標に変換する。
そのため、データの整合性を保つため、第3の送信部111により送信されるデータは、第1の送信部107及び第2の送信部108により送信されるデータよりも、先に送信される。
なお、OS実行制御部11a、アプリ実行制御部11b、グラフィックドライバ12、サーバ側リモート画面制御部14には、各種の集積回路や電子回路を採用できる。また、サーバ側リモート画面制御部14に含まれる機能部の一部を別の集積回路や電子回路とすることもできる。例えば、集積回路としては、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)が挙げられる。また、電子回路としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などが挙げられる。
<クライアント端末の構成>
次に、実施例に係るクライアント端末の構成について説明する。図1に示すように、クライアント端末20は、入力部21と、表示部22と、クライアント側リモート画面制御部23と、フレームバッファ24とを有する。なお、図1に示す例では、図1に示した機能部以外にも既知のコンピュータが有する各種の機能部、例えば音声出力部などの機能を有するものとする。
入力部21は、各種の情報、例えば後述のクライアント側リモート画面制御部23に対する指示入力を受け付ける入力デバイスであり、一例としては、キーボードやマウス(mouse)などを適用できる。なお、後述の表示部22も、マウスと協働して、ポインティングデバイス(pointing device)機能を実現する。
表示部22は、各種の情報、例えばサーバ装置10から送信された表示画面などを表示する表示デバイスであり、一例としては、モニタ(monitor)、ディスプレイ(display)やタッチパネル(touch panel)などを適用できる。
フレームバッファ24は、表示部22により表示されたビットマップデータを記憶する記憶デバイスである。フレームバッファ24の一態様としては、VRAMを始めとするRAM、ROMやフラッシュメモリなどの半導体メモリ素子が挙げられる。なお、フレームバッファ24は、ハードディスク、光ディスクなどの記憶装置を適用してもかまわない。
クライアント側リモート画面制御部23は、クライアント側リモート画面制御用アプリを通じて、サーバ装置10によるリモート画面制御サービスの提供を受ける処理部である。このクライアント側リモート画面制御部23は、図1に示すように、操作情報通知部201と、第1の受信部202と、第1のデコーダ203と、第1の表示制御部204と、第2の受信部205と、第2のデコーダ206と、第2の表示制御部207と、第3の受信部208と、第3の表示制御部209とを有する。
操作情報通知部201は、入力部21による操作情報をサーバ装置10へ通知する処理部である。例えば、操作情報通知部201は、マウスの左右のクリックを始め、ダブルクリックやドラッグ、マウスの移動操作を介して得られたマウスカーソルの移動量などを操作情報として通知する。他の例としては、操作情報通知部201は、マウスホイールの回転量、キーボードのうち押下されたキーの種別なども操作情報として通知する。
第1の受信部202は、サーバ装置10の第1の送信部107により送信された更新矩形又は移動領域内の部分領域の符号化データ及び属性情報を受信する処理部である。例えば、第1の受信部202は、受信した符号化データを第1のデコーダ203に出力する。
第1のデコーダ203は、第1の受信部202により受信された更新矩形又は部分領域の符号化データをデコードする処理部である。第1のデコーダ203は、サーバ装置10に搭載されるエンコード方式に適合するデコード方式のデコーダが搭載される。
第1の表示制御部204は、第1のデコーダ203によってデコーダされた更新矩形又は部分領域の画像を表示部22に表示させる処理部である。例えば、第1の表示制御部204は、第1の受信部202により受信された更新矩形の属性情報に含まれる位置および大きさに対応する表示部22の画面領域に更新矩形のビットマップ画像を表示させる。
また、第1の表示制御部204は、第1の受信部202により高頻度変更領域の属性情報が受信された場合には、次のような処理を行う。すなわち、第1の表示制御部204は、高頻度変更領域の属性情報に含まれる高頻度変更領域の位置および大きさに対応する表示部22の画面領域をビットマップ画像の表示対象外のブランク領域とする。
また、第1の表示制御部204は、第3の受信部208がデータを受信していた場合、第1の受信部202により受信されたデータは、移動領域内の部分領域であると判断する。よって、第1の表示制御部204は、静止画を示す部分領域の相対座標を、第3の受信部208で受信された移動後の移動領域の座標に加算して絶対座標に変換し、この絶対座標に部分領域を表示する。
第2の受信部205は、サーバ装置10の第2の送信部108により送信された高頻度変更領域のエンコード画像及び属性情報を受信する処理部である。
第2のデコーダ206は、第2の受信部205により受信された高頻度変更領域のエンコード画像をデコードする処理部である。なお、第2のデコーダ206には、サーバ装置10に搭載されるエンコード方式に適合するデコード方式のデコーダが搭載される。
第2の表示制御部207は、第2の受信部205によって受信された高頻度変更領域の属性情報に基づき、第2のデコーダ206によりデコードされた高頻度変更領域のデコード画像を表示部22に表示させる処理部である。例えば、第2の表示制御部207は、高頻度変更領域の属性情報に含まれる高頻度変更領域の位置および大きさに対応する表示部22の画面領域に高頻度変更領域のデコード画像を表示させる。高頻度変更領域には、移動領域内の高頻度変更領域も含まれる。
また、第2の表示制御部207は、第3の受信部208がデータを受信していた場合、第2の受信部205により受信されたデータは、移動領域内の部分領域であると判断する。よって、第2の表示制御部207は、動画を示す部分領域の相対座標を、第3の受信部208で受信された移動後の移動領域の座標に加算して絶対座標に変換し、この絶対座標に部分領域を表示する。
第3の受信部208は、サーバ装置10の第3の送信部111により送信された移動領域のデータを受信する処理部である。第3の受信部208は、受信したデータを第3の表示制御部209に出力する。
第3の表示制御部209は、第3の受信部208により受信されたデータに含まれる移動情報、サイズ情報に基づき、フレームバッファ24に記憶される領域を取得し、移動情報が示す移動後の位置に領域を移動させて表示部22に表示させる処理部である。
ここで、クライアント端末20で受信されるデータの順番について説明する。以下では、クライアント端末20で受信されるデータを受信データとも呼ぶ。図11は、受信データの順番の一例を示す図である。図11に示すA、B、Cは、図10に示すA、B、Cのデータに対応する。
(1)移動領域がない場合で画面変更がある場合
クライアント端末20は、サーバ装置10で移動領域が検出されなかった場合で画面変更がある場合、データAを連続して受信する。
(2)移動領域があり、かつ移動領域内で変更がない場合
クライアント端末20は、サーバ装置10で移動領域が検出され、移動領域内で変更がないと判定された場合、第3の送信部111により送信されたデータBを受信し、次に、第1の送信部107により送信されたデータAを受信する。データAには、移動領域の移動で、新たに画面に現れた部分の画像を示すデータが含まれる。
(3)移動領域があり、かつ移動領域内で変更がある場合
クライアント端末20は、サーバ装置10で移動領域が検出され、移動領域内で変更があると判定された場合、(2)同様、第3の受信部111により送信されたデータBを受信し、次に、第1の送信部107により送信されたデータAを受信する。その後に、クライアント端末20は、第1の送信部107又は第2の送信部108により、移動領域内の部分領域に対する画像データが含まれるデータCを受信する。
データC内の座標は相対座標であるが、クライアント装置20は、データBに含まれる移動領域の座標に相対座標を加算することで、部分領域の座標を絶対座標に変換することができる。
これにより、クライアント端末20は、データの整合性を保つ順番でデータを受信することができる。
なお、クライアント側リモート画面制御部23には、各種の集積回路や電子回路を採用できる。また、クライアント側リモート画面制御部23に含まれる機能部の一部を別の集積回路や電子回路とすることもできる。例えば、集積回路としては、ASICやFPGAが挙げられる。また、電子回路としては、CPUやMPUなどが挙げられる。
<動作>
次に、シンクライアントシステム1に用いられる各装置の動作について説明する。まず、サーバ装置10の動作について説明する。
《サーバ装置の処理》
図12A及び図12Bは、サーバ装置10の情報処理の一例を示すフローチャートである。図12に示す例では、移動領域の検出は、描画コマンドを用いて行われる。
ステップS101で、移動領域検出部109は、描画コマンドを監視して、表示画面中の領域の移動を検出する。例えば、移動領域検出部109は、CopyRectコマンドを検出することで領域の移動(例えばコピー)を検出する。
ステップS102で、移動領域検出部109は、移動領域が検出された否かを判定する。移動領域が検出された場合(ステップS102−YES)ステップS108に進み、移動領域が検出されない場合(ステップS102−NO)ステップS103に進む。
ステップS103で、変更頻度判別部103は、画面変更があるか否かを判定する。ここでは、変更頻度判別部103は、画面全体での変更を判定する。画面変更がある場合(ステップS103−YES)ステップS104に進み、画面変更がない場合(ステップS104−NO)ステップS107に進む。
ステップS104で、高頻度変更領域識別部104は、高頻度の変更領域があるか否かを判定する。高頻度の変更領域がある場合(ステップS104−YES)ステップS105に進み、高頻度の変更領域がない場合(ステップS104−NO)ステップS106に進む。
ステップS105で、第2のエンコーダ106は、高頻度変更領域を動画化し、動画圧縮を行う。第2の送信部108は、動画圧縮されたデータをクライアント端末20に送信する。
ステップS106で、第1のエンコーダ107は、変更領域に対し、静止画の圧縮処理を行う。第1の送信部107は、静止画圧縮されたデータをクライアント端末20に送信する。
ステップS107で、サーバ側リモード画面制御部14は、所定時間待機し、ステップS101に戻る。
ステップS108で、サーバ側リモート画面制御部14は、移動領域が発生する直前の動画化領域があれば、動画化処理を停止(無効化)する。
ステップS109で、画面生成部102は、移動領域が発生する直前の表示画面と、前回クライアント端末20に送信した表示画面の内容を比較する。
ステップS110で、画面生成部102は、差分があるか否かを判定する。差分がある場合(ステップS110−YES)ステップS111に進み、差分がない場合(ステップS110−NO)ステップS112に進む。
ステップS111で、例えば、第1の送信部107は、移動領域発生直前の未送信の変更差分をクライアント端末20に送信する。これにより、クライアント端末20で表示される表示画面を、移動領域が移動する前の最新の状態にすることができる。
ステップS112で、第3の送信部111は、移動情報及びサイズ情報をクライアント端末20に送信する。
ステップS113で、変更頻度判別部103は、画面変更があるか否かを判定する。ここでは、変更頻度判別部103は、画面全体の画面変更を判別する。画面変更がある場合(ステップS113−YES)ステップS114に進み、画面変更がない場合(ステップS113−NO)ステップS107に進む。
ステップS114で、第1のエンコーダ107は、変更領域に対し、静止画の圧縮処理を行う。第1の送信部107は、静止画圧縮されたデータをクライアント端末20に送信する。これにより、移動領域の移動後に新たに現れる領域の画像データを送信することができる。
ステップS115で、変更判定部110は、移動領域の座標を起点にし、移動前後での各移動領域間で画面変更を判定する。
ステップS116で、変更判定部110は、移動領域内で変更される部分があるかを判定する。移動領域間で画面変更がある場合(ステップS116−YES)ステップS117に進み、移動領域間で画面変更がない場合(ステップS116−NO)ステップS107に進む。
ステップS117で、高頻度変更領域識別部104は、移動領域内で高頻度の変更領域を検出する。
ステップS118で、高頻度変更領域識別部104は、高頻度の画面変更があるか否かを判定する。高頻度変更領域がある場合(ステップS118−YES)ステップS119に進み、高頻度変更領域がない場合(ステップS118−NO)ステップS121に進む。
ステップS119で、高頻度変更領域識別部104は、移動領域の原点(例えば左上の点)からの相対位置(座標)を取得する。
ステップS120で、第2のエンコーダ106は、移動領域内の高頻度変更領域を動画化し、動画圧縮を行う。第2の送信部108は、動画圧縮されたデータをクライアント端末20に送信する。
ステップS121で、高頻度変更領域識別部104は、移動領域の原点からの相対位置を取得する。
ステップS122で、第1のエンコーダ107は、移動領域内の変更領域に対し、静止画の圧縮処理を行う。第1の送信部107は、静止画圧縮されたデータをクライアント端末20に送信する。ステップS120、ステップS122の処理後はステップS107に進む。
なお、ステップS118で識別される高頻度変更領域が所定値以上であれば、例外処理として、ステップS103に進むようにしてもよい。これは、移動領域内で比較的小さな部分領域が動画化され、データ量が増加することを防止するためである。
《クライアント端末の処理》
図13は、クライアント端末20の情報処理の一例を示すフローチャートである。図13に示すステップS201で、各受信部は、サーバ装置10からデータを受信する。
ステップS202で、クライアント側リモート画面制御部23は、第3の受信部208で移動情報を含むデータを受信したか否かを判定する。データを受信した場合(ステップS202−YES)ステップS207に進み、データを受信していない場合(ステップS202−NO)ステップS203に進む。
ステップS203で、クライアント側リモート画面制御部23は、変更された画像データを含むデータ(図10に示すデータA)を受信したか否かを判定する。以下では、変更された画像データを変更画像データとも呼ぶ。
ステップS204で、クライアント側リモート画面制御部23は、変更画像データが、動画データであるか否かを判定する。これは、動画フラグにより判定可能である。動画データである場合(ステップS204−YES)ステップS205に進み、動画データでない場合(ステップS204−NO)ステップS206に進む。
ステップS205で、第2のデコーダ206は、受信された動画データを復号する。第2の表示制御部207は、復号された動画データを属性情報に含まれる所定位置に描画し、表示部22に表示する。
ステップS206で、第1のデコーダ203は、受信された静止画データを復号する。第1の表示制御部204は、復号された静止画データを属性情報に含まれる所定位置に描画し、表示部22に表示する。
ステップS207で、第3の表示制御部209は、移動情報及びサイズ情報により指定された領域を、フレームバッファ24から取得し、この領域を移動情報により指定される指定位置に移動して描画し、表示部22に表示する。
ステップS208で、クライアント側リモート画面制御部23は、移動領域内で変更画像データがあるか否かを判定する。これは、例えばデータBの後にデータCを受信したか否かで判定可能である。移動領域内に変更画像データがある場合(ステップS208−YES)ステップS209に進み、移動領域内に変更画像データがない場合(ステップS208−NO)ステップS203に進む。
ステップS209で、クライアント側リモート画面制御部23は、移動領域内の部分領域を示す描画位置を、表示画面の絶対値に変換する。例えば、クライアント側リモート画面制御部23は、移動領域の頂点の座標に、部分領域の頂点を示す相対位置を足すことで、画面全体の絶対位置に変換することができる。
ステップS210で、クライアント側リモート画面制御部23は、変更画像データが、動画データであるか否かを判定する。これは、動画フラグにより判定可能である。動画データである場合(ステップS210−YES)ステップS211に進み、動画データでない場合(ステップS210−NO)ステップS212に進む。
ステップS211で、第2のデコーダ206は、受信された移動領域内の動画データを復号する。第2の表示制御部207は、復号された動画データを、変換された絶対位置に描画し、表示部22に表示する。
ステップS212で、第1のデコーダ203は、受信された移動領域内の静止画データを復号する。第1の表示制御部204は、復号された静止画データを変換された絶対位置に描画し、表示部22に表示する。
ステップS213で、入力部21は、ユーザ入力があるか否かを判定する。ユーザ入力がある場合(ステップS213−YES)ステップS214に進み、ユーザ入力がない場合(ステップS213−NO)ステップS201に戻る。
ステップS214で、操作情報通知部201は、ユーザ入力された入力データをサーバ装置10に送信する。ステップS214の処理後、ステップS201に戻る。
以上、実施例によれば、画面の更新が頻繁に行われる領域に対しては動画化することにより、クライアント端末に送信するデータ量を削減することができる。また、実施例によれば、例えばウィンドウ移動を検出した場合、ウィンドウ内で変更される部分があっても、変更の程度に応じてクライアント端末に送信するデータを適切に生成することで、送信データ量を削減することができる。
[変形例]
図14は、情報処理装置300の構成の一例を示すブロック図である。情報処理装置300は、各実施例で説明したサーバ装置10及びクライアント端末20の一例である。図14に示すように、情報処理装置300は、制御部301、主記憶部302、補助記憶部303、ドライブ装置304、ネットワークI/F部306、入力部307、表示部308を含む。これら各構成は、バスを介して相互にデータ送受信可能に接続されている。
制御部301は、コンピュータの中で、各装置の制御やデータの演算、加工を行うCPUである。また、制御部301は、主記憶部302や補助記憶部303に記憶されたプログラムを実行する演算装置である。このプログラムは、上記実施例で図12及び図13で説明した情報処理を実行するプログラムである。
制御部301は、このプログラムを実行することで、実施例で説明した情報処理を実現できる。
主記憶部302は、ROM(Read Only Memory)やRAM(Random Access Memory)などであり、制御部301が実行する基本ソフトウェアであるOSやアプリケーションソフトウェアなどのプログラムやデータを記憶又は一時保存する記憶装置である。
補助記憶部303は、HDD(Hard Disk Drive)などであり、アプリケーションソフトウェアなどに関連するデータを記憶する記憶装置である。
ドライブ装置304は、記録媒体305、例えばフレキシブルディスクからプログラムを読み出し、記憶装置にインストールする。
また、記録媒体305に、所定のプログラムを格納し、この記録媒体305に格納されたプログラムはドライブ装置304を介して情報処理装置300にインストールされる。インストールされた所定のプログラムは、情報処理装置300により実行可能となる。
ネットワークI/F部306は、有線及び/又は無線回線などのデータ伝送路により構築されたLAN(Local Area Network)、WAN(Wide Area Network)などのネットワークを介して接続された通信機能を有する周辺機器と情報処理装置300とのインターフェースである。
入力部307は、カーソルキー、数字入力及び各種機能キー等を備えたキーボード、表示部308の表示画面上でキーの選択等を行うためのマウスやスライスパット等を有する。また、入力部307は、ユーザが制御部301に操作指示を与えたり、データを入力したりするためのユーザインターフェースである。
表示部308は、CRT(Cathode Ray Tube)やLCD(Liquid Crystal Display)等により構成され、制御部301から入力される表示データに応じた表示が行われる。
このように、上述した実施例で説明した情報処理は、コンピュータに実行させるためのプログラムとして実現されてもよい。このプログラムをサーバ等からインストールしてコンピュータに実行させることで、上述した情報処理を実現することができる。
また、このプログラムを記録媒体305に記録し、このプログラムが記録された記録媒体305をコンピュータや携帯端末に読み取らせて、上述した情報処理を実現させることも可能である。なお、記録媒体305は、CD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的,電気的或いは磁気的に記録する記録媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。記録媒体には、搬送波は含まれない。また、上述した実施例で説明した情報処理は、1つ又は複数の集積回路に実装してもよい。
また、今後、モバイル環境からもシンクライアントシステムを使ってオフィス業務を利用するニーズが広がってくる。このニーズに応えるためには、動画の扱いに限らず、リモート画面制御の性能改善が求められる。上記実施例は、モバイル環境においてもシンクライアントシステムを適用可能にするものである。
以上、実施例について詳述したが、上記実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、上記変形例以外にも種々の変形及び変更が可能である。
なお、以上の各実施例に関し、さらに以下の付記を開示する。
(付記1)
ネットワークを介して接続された端末に、該端末で表示される画像を生成して、該画像に関するデータを送信する情報処理装置であって、
画像内の移動領域を検出する移動領域検出部と、
前記検出された移動領域内に、移動前後で変更される部分領域があるか否かを判定する判定部と、
前記変更される部分領域がある場合、該部分領域の変更回数が所定期間内で閾値以上となる高頻度の変更領域を識別する識別部と、
前記高頻度の変更領域であると識別されなかった部分領域の画像データを前記端末に送信する第1送信部と、
識別された前記高頻度の変更領域が動画圧縮されたデータを前記端末に送信する第2送信部と、
前記移動領域の移動情報及び前記移動領域のサイズ情報を前記端末に送信する第3送信部と、
を備える情報処理装置。
(付記2)
前記判定部により、複数の部分領域があると判定された場合、
前記識別部は、
識別された前記高頻度の変更領域の数が所定値以上であるとき、移動前後の前記移動領域を含む領域を前記高頻度の変更領域であると識別する付記1記載の情報処理装置。
(付記3)
前記第3送信部により送信されるデータは、前記第1送信部及び前記第2送信部により送信されるデータよりも先に送信される付記1又は2記載の情報処理装置。
(付記4)
ネットワークを介して接続された端末に、該端末で表示される画像を生成して、該画像に関するデータを送信する情報処理装置が実行する情報処理方法であって、
画像内の移動領域を検出し、
前記検出された移動領域内に、移動前後で変更される部分領域があるか否かを判定し、
前記変更される部分領域がある場合、該部分領域の変更回数が所定期間内で閾値以上となる高頻度の変更領域を識別し、
前記移動領域の移動情報及び前記移動領域のサイズ情報を前記端末に送信し、
前記高頻度の変更領域であると識別されなかった部分領域の画像データを前記端末に送信し、
識別された前記高頻度の変更領域が動画圧縮されたデータを前記端末に送信する
処理を有する情報処理方法。
(付記5)
前記判定する処理で、複数の部分領域があると判定された場合、
前記識別する処理は、
識別された前記高頻度の変更領域の数が所定値以上であるとき、移動前後の前記移動領域を含む領域を前記高頻度の変更領域であると識別する付記4記載の情報処理方法。
(付記6)
ネットワークを介して接続された端末に、該端末で表示される画像を生成して、該画像に関するデータを送信する情報処理装置に実行させるためのプログラムであって、
画像内の移動領域を検出し、
前記検出された移動領域内に、移動前後で変更される部分領域があるか否かを判定し、
前記変更される部分領域がある場合、該部分領域の変更回数が所定期間内で閾値以上となる高頻度の変更領域を識別し、
前記移動領域の移動情報及び前記移動領域のサイズ情報を含む移動情報を前記端末に送信し、
前記高頻度の変更領域であると識別されなかった部分領域の画像データを前記端末に送信し、
識別された前記高頻度の変更領域が動画圧縮されたデータを前記端末に送信する
処理を情報処理装置に実行させるためのプログラム。