以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、図1〜4を参照して第1実施形態について説明する。次に、図5を参照して、第1〜第4実施形態のいずれにも適用可能なハードウェア構成について説明する。その後、図6〜12を参照して第2実施形態について説明し、図13を参照して第3実施形態について説明し、図14を参照して第4実施形態について説明する。また、いくつかの変形例についても説明する。
図1は、第1実施形態の動作例を示すシーケンス図である。図1には、コンピュータ101と、コンピュータ102と、ユーザ103の動作が例示されている。図1にはステップS101〜S124が例示されているが、これらのステップについて順に説明する前に、まず、コンピュータ101と102の動作の概要を説明する。
コンピュータ101と102はネットワークを介して接続されている。例えば、コンピュータ101は、シンクライアントシステムにおけるクライアントであってもよく、コンピュータ102はサーバであってもよい。より具体的には、コンピュータ102は、シンクライアントシステムにおいて、コンピュータ101の画面の更新を遠隔制御するサーバ(換言すれば、リモートデスクトップサービスを提供するサーバ)であってもよい。
例えば、図1のステップS104、S109、およびS120に例示するように、コンピュータ101には、コンピュータ101の入力装置を介して、ユーザ103から入力が与えられる。すると、例えばステップS105、S110、およびS121に例示するように、コンピュータ101は、与えられた入力についての通知をコンピュータ102に送信し、コンピュータ102は当該通知を受信する。
コンピュータ102は、通知された入力に応じて1つ以上のプログラムを実行する。そして、コンピュータ102は、それらの1つ以上のプログラムの実行に応じて、コンピュータ101の画面に表示するための画像を生成する。
例えば、あるアプリケーションを起動するための入力操作をユーザ103が行うと、当該入力操作をコンピュータ101がコンピュータ102に通知する。よって、コンピュータ102は当該アプリケーションの実行を開始する。アプリケーションの実行の開始にともない、例えば、コンピュータ102は、あるウィンドウを画面に表示するための処理(つまり、当該ウィンドウを含む画面全体の画像を生成する処理)を行うこともある。
また、起動済みのアプリケーションのウィンドウ上でユーザ103が入力操作を行うと、当該入力操作をコンピュータ101がコンピュータ102に通知する。そして、コンピュータ102は、当該アプリケーションの実行の過程において、当該入力操作に応じた処理を実行する。
例えば、テキストエディタがフォアグラウンドで実行されている状況において、ユーザがキー入力操作を行う場合がある。この場合、コンピュータ102は、コンピュータ101からの通知に応じて、テキストエディタのウィンドウ内のカーソル位置に文字を表示させるための処理(つまり、カーソル位置に新たに文字が追加されているような画像を生成する処理)を実行する。
起動済みのアプリケーションの種類によっては、コンピュータ101からの入力の通知がない間は、コンピュータ102は、当該アプリケーションの実行をサスペンドしてもよい。もちろん、コンピュータ102は、コンピュータ101から入力の通知がなくても、プログラムの実行を続行する場合もある。
例えば、動画像を視聴するためのメディアプレイヤが起動されている場合、ユーザ103が再生ボタンをクリックすると、クリック操作がコンピュータ101からコンピュータ102に通知される。すると、コンピュータ102は、動画像を再生するために、メディアプレイヤのウィンドウ内を更新するための処理を開始する。ユーザ103が再生ボタンをクリックした後、仮に何も操作を行わないとしても、コンピュータ102は、メディアプレイヤのウィンドウ内を更新し続ける。また、例えば、画面上に時刻を表示する機能をOS(Operating System)が提供する場合、コンピュータ102は、時間の経過に応じて画面上の時刻表示を更新する処理を、入力の通知とは関係なく行ってもよい。
コンピュータ102は、例えば上記に例示したようにして1つ以上のプログラムを実行し、それらの1つ以上のプログラムの実行に応じて、コンピュータ101の画面に表示するための画像を繰り返し生成する。例えば、コンピュータ101の画面の解像度が1280×1024画素の場合、コンピュータ102は、1280×1024画素の画像を繰り返し生成する。
そして、コンピュータ102は、生成した画像をコンピュータ101の画面上に表示させるための情報(以下、便宜上「画面情報」という)をコンピュータ101に送信する。コンピュータ102は、さらに、コンピュータ102が画面情報をコンピュータ101に送信する第1の時刻を示す時刻情報も、コンピュータ101に送信する。
コンピュータ102は、画面情報と時刻情報を1つのパケットに含めてもよい。図1の例では、ステップS101、S106、S111、S114、S117、およびS122において、コンピュータ102がコンピュータ101に画面情報と時刻情報を送信する。
また、コンピュータ101は、画面情報を受信すると、画面情報にしたがって画面を更新する。例えば、図1の例では、コンピュータ101が、ステップS102、S107、S112、S115、S118、およびS123において、受信した画面情報にしたがって画面を更新する。
なお、画面情報の具体的な形式は、実施形態に応じて様々であってよい。以下に、画面情報の形式の例を3つ挙げる。
第1の形式は、画面の少なくとも一部を更新するためのコマンドを1つ以上含む形式である。例えば、第1の形式の画面情報には、以下の(1a)〜(1c)のようなコマンドが1つ以上含まれていてもよい。
(1a)ある点からある点へ線を引くよう命じるコマンドなど、ベクタオブジェクトの描画のためのコマンド。
(1b)ある特定の座標に、ある特定の文字を、ある特定のフォントで、表示するよう命じるコマンド。
(1c)画面内のある特定の領域を、ある静止画像に置き換えるよう命じるコマンド。
第1の形式の画面情報が使われる実施形態においては、コンピュータ101は、画面情報を受信すると、画面情報に含まれるコマンドにしたがって画面を更新する。
第2の形式は、コンピュータ101の画面全体を、動画像用の圧縮アルゴリズムにしたがって圧縮したデータを含む形式である。例えば、30fps(frames per second)というフレームレートでコンピュータ101の画面を更新するために、30fpsというフレームレートの動画像のデータが、画面情報として送信されてもよい。例えば、MPEG(Moving Picture Expert Group)形式などのデータ形式が利用可能である。
第2の形式の画面情報が使われる実施形態においては、コンピュータ101は、画面情報を受信すると、画面情報に含まれる圧縮された動画像データをデコードし、フレーム画像を画面に表示する。コンピュータ101は、次々にフレーム画像を画面に表示することにより、画面を更新する。
第3の形式は、以下に詳しく説明するとおり、第1の形式と第2の形式のハイブリッド形式である。第3の形式には、画面の更新が高頻度で生じても遅延の累積を防げるという効果と、コンピュータ102における圧縮処理の負荷を減らす効果がある。よって、画面情報は、第3の形式で送信されることが好ましい。
例えば、メディアプレイヤが利用されて動画像が再生される場合など、画面の更新が高頻度で生じる場合がある。画面の更新が高頻度で生じる場合、第1の形式では、ある程度大きなサイズの画面情報が、高頻度でコンピュータ102からコンピュータ101へ送信されることになる。
すると、コンピュータ101と102の間の可用帯域幅によっては、コンピュータ102からコンピュータ101への経路上(例えば、コンピュータ102内の送信バッファや、経路上のルータ内のバッファなど)に画面情報が滞留してしまうことがある。その結果、遅延時間が次第に長くなってゆき、ユーザビリティが低下してしまうおそれがある。
他方、第2の形式では、動画像用の圧縮アルゴリズムが使われる。動画像の圧縮では、フレーム間予測や動き補償などが行われる。そのため、画面の更新が高頻度で生じる場合、第2の形式の方が第1の形式よりもデータ量が少なくて済むことがほとんどである。よって、第2の形式が使われる場合、上記のような遅延の累積のおそれはあまりない。
ところが、動画像の圧縮は比較的高負荷の処理である。よって、例えば、多数のクライアントの画面を1台のサーバが遠隔制御するシステムにおいて第2の形式が使われると、サーバの負荷が非常に高くなる場合があり得る。換言すれば、コンピュータ101と同様の多数のコンピュータの画面を1台のコンピュータ102が遠隔制御するシステムにおいて第2の形式が使われると、コンピュータ102の負荷が非常に高くなる場合があり得る。
高負荷に対処するため、コンピュータ102には、動画像の圧縮用の専用ハードウェア回路(例えばASIC(Application-Specific Integrated Circuit)など)が設けられてもよい。しかし、専用ハードウェア回路をコンピュータ102に設けることは、コンピュータ102の製造コストの増加につながるので、あまり好ましくない。
そこで、遅延の累積を防ぎつつ、コンピュータ102の処理負荷の軽減を図るために、第1の形式と第2の形式を適宜に組み合わせたハイブリッド形式である第3の形式が使われてもよい。第3の形式が使われる場合、具体的には、第1の形式と第2の形式は次のように組み合わされてもよい。
画面内において高頻度で更新が生じる領域には、第2の形式が適用される。それにより、遅延の累積を防ぐことができる。
他方、更新の頻度が低い領域には、第1の形式が適用される。つまり、第2の形式を適用する範囲が限定される。多くの場合、画面上の小さな範囲を占める動画像を圧縮する処理は、画面上の大きな範囲を占める動画像を圧縮する処理よりも負荷が低い。よって、第2の形式を適用する範囲を限定することで、コンピュータ102の負荷を軽減することができる。
動画像の圧縮の負荷がそれほど高くない場合、コンピュータ102は、圧縮用の専用ハードウェア回路なしでも、汎用のプロセッサによって、十分、動画像の圧縮に対処することができる。したがって、第2の形式を適用する範囲を限定することは、コンピュータ102の製造コストの増加を回避することにもつながる。
以上のように、第3の形式は、更新が発生する頻度に応じて第1の形式と第2の形式を組み合わせた形式である。ここで、第3の形式の画面情報のより具体的な例について説明するため、図2を参照する。図2は、画面の更新について説明する図である。
図2に示すように、画面110は、横方向にH個に分割され、縦方向にV個に分割されてもよい。この場合、画面110は合計でV×H個のブロックを含む。図2の例ではV=6かつH=8であるが、2≦Vかつ2≦Hであれば、VとHの値は任意である。
図2には、参照の便宜上、横方向のh軸と縦方向のv軸が示されている。また、図2には、各ブロックを参照するための、h軸方向のインデックス番号とv軸方向のインデックス番号も示されている。以下では、2つのインデックス番号を使って、例えば「ブロック(1,2)」などと表記することがある。
図2の例は、具体的には、第1の時点の画面110と、第1の時点より後の第2の時点の画面110とを比較すると、以下の(2a)〜(2c)に示す領域111〜113で変更が検出される場合の例である。
(2a)ブロック(4,1)とブロック(5,1)とブロック(6,1)とブロック(4,2)とブロック(5,2)とブロック(6,2)とブロック(4,3)とブロック(5,3)とブロック(6,3)からなる領域111。
(2b)ブロック(1,2)からなる領域112。
(2c)ブロック(7,5)からなる領域113。
説明の便宜上、第1の時点よりも前のある時点を「第3の時点」といい、以下の(3a)〜(3c)のように仮定する。
(3a)第3の時点から第2の時点までの間の期間において、領域111では高頻度で変更が生じている。例えば、領域111に含まれるどのブロックにおいても、当該期間中には、ある閾値以上の回数の変更が生じている。
(3b)第3の時点から第2の時点までの期間において、領域112で変更が生じた頻度は低い。例えば、ブロック(1,2)において当該期間中に生じた変更の回数は上記閾値未満である。
(3c)第3の時点から第2の時点までの期間において、領域113で変更が生じた頻度は低い。例えば、ブロック(7,5)において当該期間中に生じた変更の回数は上記閾値未満である。
図2では、第1の時点から第2の時点までに変更が生じていないブロックを白で示している。また、図2では、第1の時点から第2の時点までに変更が生じているが上記期間中での変更頻度が低いブロックは網点パターンで示している。そして、図2では、第1の時点から第2の時点までに変更が生じており、かつ上記期間中での変更頻度が高いブロックは斜線パターンで示している。
上記の(3a)〜(3c)の仮定のもとでは、領域111に第2の形式が適用され、領域112と113には第1の形式が適用される。より具体的には、第2の時点の画面110をコンピュータ101に表示させるための第3の形式の画面情報は、以下の(4a)〜(4c)のデータを含んでもよい。
(4a)動画像用の圧縮アルゴリズムにしたがって領域111を圧縮したデータであって、第2の時点の領域111をフレーム画像(例えば1枚のピクチャ)として含むデータ。
(4b)第2の時点の領域112の静止画像のデータ。
(4c)第2の時点の領域113の静止画像のデータ。
もちろん、領域112と113に関しては、(4b)と(4c)の静止画像のデータの代わりに、ベクタオブジェクトまたは文字を表示するためのコマンドが使われてもよい。
なお、第2の形式の適用対象の領域を矩形に整えるために、第1の時点から第2の時点までの間に変更が生じていないブロック、または第3の時点から第2の時点までの期間における変更頻度が低いブロックが、第2の形式の適用対象に含められてもよい。例えば、図2の例では、領域111が9個のブロックを含むが、9個のブロックでの変更頻度が同じであるとは限らない。例えば、以下の(5a)と(5b)がともに成り立つような場合もあり得る。
(5a)ブロック(6,1)では、第1の時点から第2の時点までの間に変更が生じていない。または、ブロック(6,1)では、第1の時点から第2の時点までの間に変更が生じているが、第3の時点から第2の時点までの期間における変更頻度が低い。
(5b)残りの8つのブロックでは、第1の時点から第2の時点までの間に変更が生じており、しかも、第3の時点から第2の時点までの期間における変更頻度が高い。
上記の(5a)と(5b)がともに成り立つ場合、コンピュータ102は、(5b)に述べた8つのブロックにブロック(6,1)を加えることにより、第2の形式の適用対象の領域を矩形に整えてもよい。そして、コンピュータ102は、矩形の領域111に対して、動画像の圧縮アルゴリズムによる圧縮を適用してもよい。
以上のように、画面情報は、第1の形式と第2の形式を変更頻度に応じて適宜に組み合わせた第3の形式であることが好ましい。しかし、画面情報は、第1の形式または第2の形式であってもよい。
ところで、画面情報がいずれの形式であっても、第1実施形態においては、コンピュータ102が、コンピュータ101から通知される値に基づく頻度で画面情報を送信する。つまり、第1実施形態では、コンピュータ101は、コンピュータ102に通知する値を決めることにより、コンピュータ102が画面情報を送信する頻度を間接的に制御することができる。
ここで、コンピュータ102が画面情報を送信する頻度を制御することは、換言すれば、単位時間当たりにコンピュータ102からコンピュータ101に送信される画面情報の量を制御することである。したがって、コンピュータ101は、コンピュータ102に通知する値をネットワークの状況に応じて適切に決めることにより、通信トラフィックの量をネットワークの状況に応じて制御することができる。
具体的には、第1実施形態では、コンピュータ101は、コンピュータ101と102との間のネットワークの可用帯域幅の推定値、または、推定値の更新を反映する指標値を、コンピュータ102に通知する。そして、コンピュータ102は、通知された推定値または指標値に基づく頻度で、画面情報を送信する。
コンピュータ101は、状況に応じて、可用帯域幅の推定値を決定する。
例えば、コンピュータ101は、最初に画面情報を受信したときに、可用帯域幅の推定値を初期化してもよい。より具体的には、コンピュータ101は、最初に画面情報を受信したときに、以下の(6a)と(6b)の値を用いて受信ビットレートを算出し、受信ビットレートを可用帯域幅の推定値の初期値として用いてもよい。
(6a)最初の画面情報をコンピュータ101が受信した時刻と、最初の画面情報に対応する時刻情報が示す時刻(つまり最初の画面情報をコンピュータ102が送信した時刻)との差。
(6b)最初の画面情報のサイズ。
また、コンピュータ101は、2回目以降に画面情報を受信したときに、下記の(7a)の時刻と(7b)の時刻の差に応じて、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。
(7a)コンピュータ101が画面情報を実際に受信した時刻。
(7b)コンピュータ101が画面情報を受信するものと推定される(estimated)時刻。
換言すれば、画面情報の送信から受信までに実際にかかる時間と、画面情報の送信から受信までにかかると推定される時間との差に応じて、コンピュータ101は、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。
上記(7a)の時刻はネットワーク状況に依存する。また、可用帯域幅の推定値がどの程度良くネットワーク状況を反映しているかに応じて、(7a)の時刻と(7b)の時刻の差も変動する。よって、(7a)の時刻と(7b)の時刻の差に応じて可用帯域幅の推定値を決めることは、換言すれば、ネットワーク状況に応じて可用帯域幅の推定値を決めることである。
なお、上記(7b)の時刻は、具体的には、以下の(8a)〜(8c)の値から推定される時刻である。
(8a)可用帯域幅の現在の推定値。
(8b)コンピュータ101が受信した画面情報のサイズ。
(8c)当該画面情報に対応する時刻情報により示される時刻。すなわち、当該画面情報がコンピュータ102から送信された時刻。
例えば、上記の(7a)の時刻と(7b)の時刻の差が正の第1の閾値より大きい場合、コンピュータ101は、可用帯域幅の推定値を減少させてもよい。なぜなら、推定される受信時刻よりも実際の受信時刻が大幅に遅い場合、可用帯域幅が過大に推定されている可能性が高いからである。よって、この場合、コンピュータ101は、可用帯域幅の推定値を減少させてもよい。
また、第1の閾値未満の適宜の値が、第2の閾値として定められているものとする。上記の(7a)の時刻と(7b)の時刻の差が、第2の閾値以下の場合、可用帯域幅が過小に推定されている可能性がある。よって、この場合、コンピュータ101は、可用帯域幅の推定値を増加させてもよい。第2の閾値は、より具体的には、0または負であることが好ましい。
そして、上記の(7a)の時刻と(7b)の時刻の差が、第2の閾値より大きく第1の閾値以下の場合は、コンピュータ101は、可用帯域幅の推定値を維持してもよい。
なお、コンピュータ101は、可用帯域幅の推定値を減少させる場合には、具体的には、以下の(9a)と(9b)の値から算出される受信ビットレートに基づいて、可用帯域幅の推定値を減少させる。
(9a)ある期間内にコンピュータ101が1回以上受信した画面情報それぞれのサイズ。
(9b)上記期間の長さ。
コンピュータ101と102の間のポイント・ツー・ポイントの実際の可用帯域幅を正確に観測することは困難である。しかし、ある期間における実際の可用帯域幅の平均値は、少なくとも、当該期間における平均受信ビットレート以上である。よって、コンピュータ101は、当該期間における可用帯域幅の下限値として、当該期間における実際の平均受信ビットレートを利用してもよい。具体的には、コンピュータ101は、上記のように受信ビットレートに基づいて推定値を減少させることが好ましい。
他方、コンピュータ101は、可用帯域幅の推定値を増加させる場合は、例えば、推定値を所定の割合で増加させてもよい。あるいは、コンピュータ101は、推定値に所定の値を足すことにより、推定値を増加させてもよい。
また、以下の(10a)〜(10c)の値から算出される直近の受信ビットレートが、ある程度大きい場合、コンピュータ101は、直近の受信ビットレートに応じて可用帯域幅の推定値を増加させてもよい。
(10a)コンピュータ101が直近に受信した画面情報に関しての時刻情報により示される送信時刻。
(10b)コンピュータ101が直近に画面情報を受信した時刻。
(10c)コンピュータ101が直近に受信した画面情報のサイズ。
例えば、可用帯域幅の推定値に基づいて、推定値よりも大きな判定基準値が定められていてもよい。例えば、1より大きい定数を使って、判定基準値が、現在の推定値の定数倍と定められていてもよい。直近の受信ビットレートが判定基準値よりも大きい場合、実際の可用帯域幅が最近急増した可能性がある。また、直近の受信ビットレートは、直近の可用帯域幅の下限値と見なせる。
よって、コンピュータ101は、(7a)の時刻と(7b)の時刻の差とは関係なく、直近の受信ビットレートに応じて可用帯域幅の推定値を増加させてもよい。もちろん、コンピュータ101は、(7a)の時刻と(7b)の時刻の差と、直近の受信ビットレートの双方を考慮に入れて、可用帯域幅の推定値を増加させてもよい。
コンピュータ101は、少なくとも可用帯域幅の推定値を増加または減少させることで更新した場合には、推定値または推定値の更新を反映する指標値をコンピュータ102に通知する。指標値は、例えば、更新後の推定値と更新前の推定値の差分を示す値でもよい。
例えば、図2の例では、ステップS103、S108、S113、S116、S119、およびS124に示すように、コンピュータ101は、画面情報と時刻情報を受信するたびに、推定値をコンピュータ102に通知する。実施形態によっては、コンピュータ101は、推定値を維持する場合には、推定値をコンピュータ102に通知しなくてもよい。
また、コンピュータ101は、推定値を増加させた場合に、推定値の増加を強調して示す指標値をコンピュータ102に通知してもよい。例えば、コンピュータ101は、増加させた推定値よりもさらに大きく指標値を定めて、指標値をコンピュータ102に通知してもよい。
実施形態によっては、コンピュータ101は、推定値を維持する場合に、推定値自体の代わりに、推定値よりも大きな値をコンピュータ102に通知してもよい。例えば、(7a)の時刻と(7b)の時刻の差が所定の閾値以下の場合、コンピュータ101は、推定値自体は変えずに、推定値よりも大きな値をコンピュータ102に通知してもよい。
コンピュータ102は、推定値自体をコンピュータ101がコンピュータ102に通知したのか、それとも推定値とは別の値をコンピュータ101がコンピュータ102に通知したのかを区別しなくてもよい。コンピュータ102は、単に、コンピュータ101から通知された値に応じて、画面情報を送信する頻度を調整してもよい。具体的には、コンピュータ101から通知される値が大きいほど、コンピュータ102は、画面情報を送信する頻度を上げる。ただし、頻度には上限があってもよい。
以上のようにして、第1実施形態によれば、ネットワーク状況を反映する可用帯域幅の推定値に応じて、コンピュータ102がコンピュータ101に画面情報を送信する頻度が調整される。つまり、第1実施形態では、通信トラフィックの量がネットワークの状況に応じて調整される。よって、過剰な通信トラフィックのせいで遅延が累積する事態は回避される。つまり、遅延が累積することによるユーザビリティの低下は回避される。
また、以上説明したとおり、第1実施形態では、画像(静止画像、動画像、またはその双方)の品質を落とすことで通信トラフィックの量を減らすのではなく、画面情報を送信する頻度を落とすことで通信トラフィックの量を減らすアプローチが採用されている。そのため、個々の瞬間においてコンピュータ101の画面に表示される画像の品質は保たれる。画像の品質を保つことは、ユーザビリティの低下を防止する効果がある。
例えば、色深度を減少させたり、圧縮符号化において量子化を粗くしたりするなど、画質を落とすことで通信トラフィックの量の低減を図ることも可能ではある。しかしながら、画質が落ちると、例えば、「コンピュータ101の画面に文字がぼやけて表示されるため、ユーザ103が文字を読み取れない」などの問題が起きるおそれがある。文字が読み取れないことはユーザビリティの低下に直結する。また、高精細な(high-definition)画像(静止画像、動画像、またはその双方)を扱うアプリケーションをユーザ103が使いたい場合も、画質の低下はユーザビリティを大きく損ねる。
したがって、ユーザビリティの観点からは、画質を落とすことは好ましくない。換言すれば、第1実施形態のように頻度の調整により通信トラフィックの量の低減を図るアプローチには、ネットワーク状況が悪くてもユーザビリティの悪化を抑える効果がある。
続いて、コンピュータ101と102が以上説明したように動作することによって生じ得る具体的な動作シーケンスの例について、図1を参照しながら説明する。
ステップS101より前の時間は図1では省略されているが、上記のとおりコンピュータ102は、コンピュータ101からの通知に応じて1つ以上のプログラムを実行しており、コンピュータ101の画面に表示するための画像を生成する。そして、ステップS101でコンピュータ102は、生成した画像に基づいて画面情報を生成し、画面情報と時刻情報を送信する。
すると、ステップS102でコンピュータ101は、画面情報にしたがって画面を更新する。また、ステップS103でコンピュータ101は、上記の(8a)〜(8c)の値から(7b)の時刻を推定し、(7a)の時刻と(7b)の時刻の差に応じて、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。そして、コンピュータ101は、可用帯域幅の推定値をコンピュータ102に通知する。
なお、コンピュータ101は、ステップS102とS103のどちらを先に実行してもよい。以下のステップにおいても、コンピュータ101は、画面情報と時刻情報を受信したとき、画面の更新と推定値の通知のどちらを先に実行してもよい。
一方、ユーザ103は、コンピュータ101の画面の更新とは独立したタイミングで、入力装置を介してコンピュータ101に入力を与える。例えば、ステップS104でユーザ103は入力操作を行う。すると、ステップS105でコンピュータ101は、入力操作の内容をコンピュータ102に通知する。コンピュータ102は、プログラムを実行する過程において、通知された入力に応じて適宜の処理を行う。
また、コンピュータ102は、ステップS103で通知された値に応じた頻度で画面情報をコンピュータ101に送信しようとする。具体的には、ステップS101での送信からある時間A1が経過した後、コンピュータ102は、ステップS106において、コンピュータ101の画面に表示するための画像を生成し、画像に基づいて画面情報を生成し、画面情報と時刻情報を送信する。
すると、ステップS107でコンピュータ101は、画面情報にしたがって画面を更新する。また、ステップS108でコンピュータ101は、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。そして、コンピュータ101は、可用帯域幅の推定値をコンピュータ102に通知する。
また、ユーザ103はステップS109においても何らかの入力操作を行う。すると、ステップS110でコンピュータ101は、入力操作の内容をコンピュータ102に通知する。コンピュータ102は、プログラムを実行する過程において、通知された入力に応じて適宜の処理を行う。
コンピュータ102は、ステップS108で通知された値に応じた頻度で画面情報をコンピュータ101に送信しようとする。具体的には、ステップS106での送信からある時間A2が経過した後、コンピュータ102は、ステップS111において、コンピュータ101の画面に表示するための画像を生成し、画像に基づいて画面情報を生成し、画面情報と時刻情報を送信する。
すると、ステップS112でコンピュータ101は、画面情報にしたがって画面を更新する。また、ステップS113でコンピュータ101は、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。
例えば、ステップS111で今までよりもネットワーク状況が悪化した場合、ステップS111での画面情報と時刻情報の送信から受信までにかかる時間は、コンピュータ101が可用帯域幅の推定値から推定する時間よりも長い。よって、この場合、コンピュータ101は、ステップS113で可用帯域幅の推定値を減少させてもよく、減少させた推定値をコンピュータ102に通知してもよい。
コンピュータ102は、ステップS113で通知された値に応じた頻度で画面情報をコンピュータ101に送信しようとする。具体的には、ステップS111での送信からある時間A3が経過した後、コンピュータ102は、ステップS114において、コンピュータ101の画面に表示するための画像を生成し、画像に基づいて画面情報を生成し、画面情報と時刻情報を送信する。
例えば上記のように、ステップS113で今までよりも小さな値がコンピュータ101から通知された場合、コンピュータ102は、画面情報を送信する頻度を下げる。よって、時間A3は、時間A1やA2よりも長い。
さて、コンピュータ101は、ステップS114で送信された画面情報と時刻情報を受信すると、ステップS115で、画面情報にしたがって画面を更新する。また、ステップS116でコンピュータ101は、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。そして、コンピュータ101は、可用帯域幅の推定値をコンピュータ102に通知する。
ところで、ステップS116の送信からしばらく時間が経った後、ネットワーク状況が好転したとする。ステップS117でコンピュータ102は画面情報と時刻情報を送信するが、当該送信にかかる時間は、ネットワーク状況の好転の結果として、短くて済む。例えば、説明の便宜上、コンピュータ101が可用帯域幅の推定値から推定する時間よりも短い時間で、画面情報と時刻情報はコンピュータ101に到着したとし、その結果、コンピュータ101は推定値を増加させるものとする。
具体的には、コンピュータ101はステップS118で画面情報にしたがって画面を更新し、ステップS119で上記のように増加させた推定値をコンピュータ102に通知する。
また、ユーザ103は好きなタイミングで入力操作を行い得るので、例えばステップS120においてもユーザ103から入力装置を介してコンピュータ101に入力が与えられる。すると、ステップS121でコンピュータ101は、入力操作の内容をコンピュータ102に通知する。コンピュータ102は、プログラムを実行する過程において、通知された入力に応じて適宜の処理を行う。
そして、コンピュータ102は、ステップS119で通知された値に応じた頻度で画面情報をコンピュータ101に送信しようとする。具体的には、ステップS117での送信からある時間A4が経過した後、コンピュータ102は、ステップS122において、コンピュータ101の画面に表示するための画像を生成し、画像に基づいて画面情報を生成し、画面情報と時刻情報を送信する。
例えば、上記のように、ネットワーク状況が悪かった間にコンピュータ101がコンピュータ102に通知していた値よりも大きな値をステップS119でコンピュータ101がコンピュータ102に通知した場合、コンピュータ102は、画面情報を送信する頻度を上げる。よって、時間A4は、時間A3よりも短い。
コンピュータ101は、ステップS122で送信された画面情報と時刻情報を受信すると、ステップS123で、画面情報にしたがって画面を更新する。また、ステップS124でコンピュータ101は、可用帯域幅の推定値を、増加させるか、維持するか、または減少させる。そして、コンピュータ101は、可用帯域幅の推定値をコンピュータ102に通知する。
例えば以上例示したステップS101〜S124のようにして、画面情報の送信頻度はネットワーク状況に応じて調整される。よって、ネットワーク状況がたとえ悪化しても、遅延の累積によるユーザビリティの低下は回避される。また、個々の瞬間における画質は保たれるので、画質の低下によるユーザビリティの低下は生じない。
ところで、図1には、コンピュータ101が可用帯域幅の推定値をコンピュータ102に通知するステップが破線矢印で描かれており、それ以外のステップが実線矢印で描かれている。上記の説明から明らかなとおり、破線矢印で描かれたステップは、画面情報の送信頻度の調整のために追加的に生じる通信であるが、可用帯域幅の推定値のデータサイズはごくわずかである。また、画面情報の送信頻度の調整のために、時刻情報がコンピュータ102からコンピュータ101へと送信されるが、時刻情報のデータサイズもごくわずかである。
よって、第1実施形態には、「ネットワーク状況の把握のために追加的に生じる通信トラフィックの量が、ネットワーク状況に影響を与えない程度のごくわずかな量に過ぎない」という利点もある。換言すれば、第1実施形態では、「ネットワークに大きな追加的負荷をかけなくても、ネットワーク状況を推定することができ、推定したネットワーク状況に応じて通信トラフィックの量を調整することができる」という利点がある。
以上説明したような種々の利点のある第1実施形態は、シンクライアントシステムに好適である。以下に、シンクライアントシステムへの第1実施形態の適用に関して補足説明を行う。
シンクライアントシステムでは、クライアントとサーバがネットワークを介して接続される。そのため、クライアントにおける操作レスポンス性能はネットワーク状況に依存する。換言すれば、ユーザビリティがネットワーク状況に依存する。しかし、常にネットワーク状況が良好であるとは限らない。
第1実施形態によれば、たとえネットワーク状況が悪くてもユーザビリティの低下を緩和することができるような方法で、クライアントの画面更新が制御される。なぜなら、ネットワーク状況に応じて画面情報の送信頻度が調整され、ネットワーク状況の把握のためにネットワークに追加的に生じる負荷は無視して構わない程度のレベルであり、個々の瞬間での画質の低下は生じないからである。
また、シンクライアントシステムの利用が広まるのにつれて、ユーザがシンクライアントを行って行う作業の種類も、多様化が進むと予測される。よって、シンクライアントの画面の更新は、作業の種類によらずにユーザが快適にシンクライアントを使って作業を進めることができるように制御されることが好ましい。
例えば、ユーザは、テキスト文書の作成や電子メールの送受信などの作業だけでなく、高精細な画像(静止画像、動画像、または双方)を扱うアプリケーションを使った作業も、シンクライアント上で行いたい場合があり得る。高精細な画像を扱うアプリケーションの例として、例えば、CAD(Computer Aided Design)アプリケーションや、フォトレタッチアプリケーションなどがある。
高精細な画像のデータサイズは大きいため、ある種の遠隔制御方法では、実用上満足の得られる操作レスポンス性能が達成されないことがしばしば起こり得る。つまり、クライアントとサーバ間の可用帯域幅が、実用上満足の得られる短い時間内に高精細な画像のデータをサーバからクライアントに送信するには、不十分な場合が多々ある。
しかし、第1実施形態では、高精細な画像を扱うアプリケーションが使われる場合でも、ユーザビリティの低下は比較的軽度である。なぜなら、第1実施形態によれば、画面情報のデータサイズが大きくても、画面情報をネットワーク状況に応じた頻度で送信することにより、遅延の累積による操作レスポンス性能の悪化を防ぐことができ、しかも、個々の時点での画質は保たれるからである。
なお、画面情報が送信される頻度は、換言すれば、ユーザが見ているクライアントの画面が更新される頻度である。そして、当該頻度が低くなることで、多少ユーザビリティが低下する可能性はある。なぜなら、画面の更新頻度が低い場合、動画像の動きがぎくしゃくして見えることがあるからである。
しかしながら、遅延の累積による操作レスポンス性能の悪化や、個々の瞬間における画質の低下がユーザビリティに与える悪影響と比べると、画面の更新頻度の低下がユーザビリティに与える悪影響は小さい。よって、第1実施形態は、ユーザビリティの低下を抑制または緩和するという点において、優れている。
また、仮に高精細な画像を扱うアプリケーションをユーザが使わないとしても、クライアントとサーバ間の可用帯域幅が狭ければ、ある種の遠隔制御方法では、実用上満足の得られる操作レスポンス性能が達成されないおそれが高い。そして、スマートフォンやタブレット端末やノート型PC(Personal Computer)などの携帯端末をモバイル環境下で利用するユーザにとっては、可用帯域幅は必ずしも十分に広いわけではない。例えば、社内の有線LAN(Local Area Network)でクライアントとサーバが接続されている環境と比較すると、クライアントが公衆無線LANを介してサーバと接続されている環境では、可用帯域幅がかなり狭い。
しかし、第1実施形態によれば、可用帯域幅が狭ければ、画面情報の送信頻度が、狭い可用帯域幅に応じた小さな値に調整される。その結果、遅延の累積は回避される。よって、第1実施形態によれば、モバイル環境下でも、実用上問題ない操作レスポンス性能が得られる。
以上説明したように、第1実施形態は、今後利用の拡大が見込まれるシンクライアントシステムにも好適である。
続いて、図3と4を参照して、第1実施形態の効果についてさらに説明する。
図3には、5つの模式的なタイミングチャート121〜125が示されている。タイミングチャート121は、コンピュータ102が画面情報F1〜F7を送信するタイミングを示す。説明の便宜上、図3には、コンピュータ102がある一定の頻度で画面情報F1〜F7を送信する場合のタイミングチャート121が示されている。
コンピュータ101と102の間の実際の可用帯域幅が十分な場合は、画面情報F1〜F7は、タイミングチャート122に示すようにコンピュータ101に受信される。つまり、送信から受信まで(より具体的には、送信の開始から受信の完了まで)、ある程度の遅延は生じるものの、「遅延が累積して次第に遅延時間が長くなる」という事態は生じない。よって、ある程度満足な操作レスポンス性能が得られる。タイミングチャート122に示す受信頻度は、換言すれば、コンピュータ101における表示フレームレートである。
他方、タイミングチャート123は、第1実施形態と比較するための比較例において、コンピュータ101と102の間の実際の可用帯域幅が不十分な場合に、コンピュータ101が画面情報F1〜F5を受信するタイミングを示す。比較例では、コンピュータ102が画面情報F1〜F7を送信する頻度を調整しないものとする。つまり、比較例では、コンピュータ102は、コンピュータ101と102の間の実際の可用帯域幅が不十分な場合にも、タイミングチャート121と同じ頻度で画面情報F1〜F5を送信するものとする。
可用帯域幅が不十分な場合、例えば画面情報F1がコンピュータ102からコンピュータ101への経路上のノードにおいて、当該経路上のリンクが空くのを待つために滞留してしまうことがある。具体的には、画面情報F1は、コンピュータ102内の送信バッファや、経路上のルータ内のバッファなどで、しばらく滞留することがある。同様に、画面情報F2〜F5も、コンピュータ102からコンピュータ101への経路上のどこかで滞留することがある。
このように、比較例においては、可用帯域幅が不十分な場合にコンピュータ102がタイミングチャート121の頻度で画面情報F1〜F5を送信すると、コンピュータ101は、タイミングチャート123に示すように画面情報F1〜F5を受信する。タイミングチャート121と123を比較すると分かるように、滞留の結果として、画面情報F1〜F5の送信間隔よりも画面情報F1〜F5の受信間隔の方が長い。
そして、受信間隔が長くなると、遅延の累積によって次第にレスポンス性能が悪化し、時間の進み方が遅くなったようにユーザに感じられる。つまり、下記の(11a)〜(11e)の遅延時間D1〜D5は、D1<D2<D3<D4<D5という関係にある。
(11a)画面情報F1の送信から受信までにかかる遅延時間D1。
(11b)画面情報F2の送信から受信までにかかる遅延時間D2。
(11c)画面情報F3の送信から受信までにかかる遅延時間D3。
(11d)画面情報F4の送信から受信までにかかる遅延時間D4。
(11e)画面情報F5の送信から受信までにかかる遅延時間D5。
なお、遅延時間D1は、より具体的には、画面情報F1の送信が開始されてから画面情報F1の受信が完了するまでにかかる時間である。他の遅延時間D2〜D5も同様である。
タイミングチャート123に示すようにコンピュータ101が画面情報F1〜F5を受信する場合、ユーザ103にとっては、時間の進み方が遅くなったように感じられる。例えば、「1秒間かけてユーザ103がマウス操作を行うと、当該マウス操作に応じて画面上のマウスポインタが1.5秒間かけて移動する」といったような事態が生じ得る。つまり、比較例では、「入力と表示の間で時間の進み方が異なる」という違和感をユーザ103に感じさせてしまうおそれが多いにある。
さらに、上記のとおり次第に遅延時間が長くなるので、やがては、例えば、「入力操作を行ってから10秒以上もたってから、やっと、当該入力操作に応じて画面が変化する」といった事態も生じ得る。つまり、遅延の累積によって、やがては操作レスポンス性能が非常に悪化してしまいかねない。
以上のとおりなので、タイミングチャート123に示すような比較例は、ユーザビリティを大きく悪化させるおそれがある。しかし、第1実施形態では、比較例とは異なり、画面情報の送信頻度が調整される。
例えば、コンピュータ101がコンピュータ102に通知する可用帯域幅の推定値に応じて、コンピュータ102は、タイミングチャート121に示す頻度の半分の頻度で画面情報を送信してもよい。タイミングチャート124は、そのように頻度を半減させる調整を第1実施形態においてコンピュータ102が行う場合を示す。
タイミングチャート121と124を比較すると分かるように、タイミングチャート124の例では、画面情報F2、F4、およびF6は送信されない。タイミングチャート124の例では、コンピュータ102が画面情報の送信頻度を落とすことで、単位時間当たりの通信トラフィックの量が減る。
その結果、遅延の累積は回避される。具体的には、コンピュータ101は、タイミングチャート125に示すように画面情報F1、F3、F5およびF7を受信することができる。つまり、各画面情報の送信から受信まで、ある程度の遅延は生じるものの、遅延の累積による遅延の長期化は回避される。よって、ある程度満足な操作レスポンス性能が得られる。
また、画面情報F1、F3、F5およびF7がそれぞれ示す個々の時点の画面の品質は、第1実施形態では落とされない。よって、高精細な画像や細かい文字でも、くっきりとコンピュータ101の画面上に表示される。
続いて、図4を参照して第1実施形態の効果についてさらに説明する。図4には、あるCADアプリケーションが利用される場合についての、遅延時間に関するグラフ131とフレームレートに関するグラフ132が示されている。グラフ131と132において、白い棒グラフは、コンピュータ102が画面情報の送信頻度を調整しない比較例を示し、斜線パターンの棒グラフは、第1実施形態を示す。
具体的には、図4に関して、比較例と第1実施形態は、次の(12a)〜(12c)の点で共通である。
(12a)ユーザ103は、CADアプリケーションを起動する入力操作と、CADアプリケーション上での拡大、縮小、回転などのための入力操作を行う。
(12b)コンピュータ102は、コンピュータ101から通知される入力操作の内容に応じて、CADアプリケーションを実行し、コンピュータ101の画面に表示するための画像を生成する。そして、コンピュータ102は、生成した画像をコンピュータ101に表示させるための画面情報を生成し、画面情報をコンピュータ101に送信する。
(12c)コンピュータ101は、受信した画面情報にしたがって画面を更新する。
しかし、比較例では下記の(13a)〜(13c)の処理は行われないのに対して、第1実施形態では、下記の(13a)〜(13c)の処理が行われる。
(13a)コンピュータ102は、画面情報とともに時刻情報もコンピュータ101に送信する。
(13b)コンピュータ101は、時刻情報を用いて、可用帯域幅の推定値を増加させるか、維持するか、それとも減少させるかを決定する。そして、コンピュータ101は、可用帯域幅の推定値(または推定値の更新を反映する指標値)をコンピュータ102に通知する。
(13c)コンピュータ102は、通知された値に応じて、画面情報の送信頻度を調整する。
具体的には、グラフ131には、拡大、縮小、および回転という入力操作の種類ごとに、ユーザ103が入力操作をそれぞれ複数回行ったときの平均遅延時間が示されている。なお、グラフ131における遅延時間は、ユーザ103が入力操作を行った時点から、当該入力操作に応じた画像がコンピュータ101の画面に表示されるまでの時間である。白い棒グラフと斜線パターンの棒グラフを比較すると分かるように、比較例よりも第1実施形態の方が、遅延時間が短い。よって、第1実施形態はユーザビリティの改善に有益である。
また、グラフ132には、拡大、縮小、および回転という入力操作の種類ごとに、ユーザ103が入力操作をそれぞれ複数回行ったときの平均表示フレームレートが示されている。白い棒グラフが示す比較例での表示フレームレートは、例えば図3のタイミングチャート123に例示するように、遅延の累積の結果として送信フレームレートよりも下がってしまった表示フレームレートを示す。他方、斜線パターンの棒グラフが示す第1実施形態の表示フレームレートは、コンピュータ101から通知される値に応じてコンピュータ102が画面情報の送信頻度を調整した結果として下がったフレームレートを示す。
グラフ132では、比較例と第1実施形態のフレームレートの差があまりない。このことは、画面情報の送信頻度(換言すれば送信フレームレート)の調整(すなわち可用帯域幅の推定に基づく調整)が適切であり、実際の可用帯域幅が十分に活用されていることを示す。つまり、第1実施形態によれば、フレームレートが過度に下げられてしまうこと(そして、その結果として画面の表示が必要以上にぎくしゃくしてしまうこと)も防げる。
さて、図5は、ハードウェア構成例を示す図である。図5に示すハードウェア構成は、第1〜第4実施形態のいずれにも適用可能である。図5には、ネットワーク220を介して互いに接続されたコンピュータ200と240が例示されている。
例えば、第1実施形態に関して図1に示したコンピュータ101は、図5のコンピュータ200であってもよい。この場合、図1のコンピュータ102は、図5のコンピュータ240であってもよい。
また、第2〜第4実施形態に関して後述する図6のサーバ310は、図5のコンピュータ240であってもよい。この場合、図6のクライアント320は、図5のコンピュータ200であってもよい。
コンピュータ200と240の種類は任意である。例えば、コンピュータ200は、エンドユーザが使うユーザ端末でもよい。また、コンピュータ240は、クラウドサービスの一種としてリモートデスクトップサービスを提供するサーバでもよい。ユーザ端末の例としては、デスクトップ型のPC、ノート型のPC、タブレット端末、PDA(Personal Digital Assistant)、スマートフォン、ネットワーク機能を持つメディアプレイヤなどが挙げられる。
ネットワーク220の種類は任意である。ネットワーク220は、例えば、LAN、WAN(Wide Area Network)、インターネット、および、それらの組み合わせのいずれであってもよい。また、ネットワーク220は、有線ネットワークでもよく、無線ネットワークでもよく、両者の組み合わせであってもよい。
図5のコンピュータ200は、CPU(Central Processing Unit)201と、ROM(Read Only Memory)202と、RAM(Random Access Memory)203と、通信インタフェイス204を有する。コンピュータ200はさらに、入力装置205と、出力装置206と、記憶装置207と、コンピュータ読み取り可能な記憶媒体210の駆動装置208を有する。コンピュータ200の各構成要素は、バス209によって互いに接続されている。
CPU201は、シングルコアまたはマルチコアのプロセッサである。コンピュータ200は、複数のプロセッサを有していてもよい。例えば、コンピュータ200は、2台以上のCPU201を有していてもよいし、CPU201に加えてGPU(Graphics Processing Unit)などのプロセッサを有していてもよい。CPU201は、プログラムをRAM203にロードし、RAM203をワーキングエリアとしても利用しながら、プログラムを実行する。
通信インタフェイス204は、例えば、有線LANインタフェイス、無線LANインタフェイス、またはその組み合わせである。コンピュータ200は、通信インタフェイス204を介してネットワーク220に接続される。
通信インタフェイス204は、具体的には、外付けのNIC(Network Interface Card)でもよいし、オンボード型のネットワークインタフェイスコントローラでもよい。例えば、通信インタフェイス204は、物理層の処理を行う「PHYチップ」と呼ばれる回路と、MAC(Media Access Control)副層の処理を行う「MACチップ」と呼ばれる回路を含んでいてもよい。
入力装置205は、例えば、キーボード、ポインティングデバイス、またはその組み合わせである。ポインティングデバイスは、例えば、マウスでもよいしタッチパッドでもよいしタッチスクリーンでもよい。出力装置206は、ディスプレイ、スピーカ、またはその組み合わせである。ディスプレイはタッチスクリーンであってもよい。
記憶装置207は、例えばHDD(Hard Disk Drive)やSSD(Solid-State Drive)などの不揮発性の記憶装置である。
記憶媒体210の例は、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、光磁気ディスク、磁気ディスク、フラッシュメモリなどの半導体メモリカードなどである。
CPU201が実行するプログラムは、予めROM202または記憶装置207にインストールされていてもよい。あるいは、プログラムは、記憶媒体210に格納されて提供され、記憶媒体210から駆動装置208により読み取られて記憶装置207にコピーされ、その後、RAM203にロードされてもよい。または、ネットワーク220上のプログラム提供者230から、ネットワーク220と通信インタフェイス204を介して、プログラムがコンピュータ200にダウンロードされ、インストールされてもよい。プログラム提供者230は、具体的には、コンピュータ200ともコンピュータ240とも異なる、他のコンピュータである。
さて、コンピュータ240は、CPU241と、ROM242と、RAM243と、通信インタフェイス244と、入力装置245と、出力装置246と、記憶装置247と、コンピュータ読み取り可能な記憶媒体250の駆動装置248を有する。コンピュータ240の各構成要素は、バス249によって互いに接続されている。コンピュータ240の構成はコンピュータ200の構成と類似なので、詳しい説明は省略するが、何点か補足すると下記のとおりである。
図5には1台のCPU241のみが描かれているが、コンピュータ240は、コンピュータ200と同様に、複数のプロセッサを有していてもよい。コンピュータ240は、CPU241に加えて、さらに、動画像の圧縮用の専用ハードウェア回路を有していてもよい。
CPU241が実行するプログラムは、予めROM242または記憶装置247にインストールされていてもよい。あるいは、プログラムは、記憶媒体250に格納されて提供され、記憶媒体250から駆動装置248により読み取られて記憶装置247にコピーされてもよい。または、プログラム提供者230から、ネットワーク220と通信インタフェイス244を介して、プログラムがコンピュータ240にダウンロードされ、インストールされてもよい。
なお、ROM202、RAM203、記憶装置207、記憶媒体210、ROM242、RAM243、記憶装置247、および記憶媒体250は、いずれも、有形の(tangible)記憶媒体であり、信号搬送波のような一時的な(transitory)媒体ではない。
続いて、図6〜12を参照して第2実施形態について説明する。詳しくは後述するとおり、図6〜8および10〜12は、第3〜第4実施形態とも関わる。第2〜第4実施形態のいずれにおいても、第1実施形態と同様の効果が得られる。
図6は、システムのブロック構成図である。図6のシステム300は、サーバ310とクライアント320を含む。上記のとおり、サーバ310は例えば図5のコンピュータ240であってもよく、クライアント320は図5のコンピュータ200でもよい。図6ではネットワークが省略されているが、図5に例示したように、サーバ310とクライアント320はネットワークを介して接続されている。
サーバ310は、受信部311と、生成部312と、送信部313と、調整部314と、付加部315を有する。また、サーバ310は、送信制御データ316を保持する。
受信部311は、クライアント320からデータを受信する。クライアント320からサーバ310に送信されるデータには、少なくとも2種類ある。
第1の種類のデータは、ユーザからクライアント320への入力をサーバ310に通知するためのデータである。受信部311は、第1の種類のデータを受信すると、受信したデータを生成部312に出力する。
第2の種類のデータは、後述するように可用帯域幅と過剰遅延時間をサーバ310に通知するためのデータである。過剰遅延時間は、実際の受信時刻が、可用帯域幅から推定される受信時刻よりもどの程度遅延しているかを示す。受信部311は、第2の種類のデータを受信すると、受信したデータを調整部314に出力する。
生成部312は、クライアント320の画面に表示するための画像を生成する。具体的には、生成部312は、クライアント320への入力の通知(つまり上記の第1の種類のデータ)に基づいて、1つまたは複数のプログラムを実行し、プログラムの実行に応じて画像を生成する。そして、生成した画像に基づいて、生成部312は、クライアント320に画像を画面上に表示させるための画面情報(具体的には後述の描画コマンド)を生成する。送信部313は、画面情報をクライアント320に送信する。
より具体的には、画面情報がクライアント320に送信される頻度は、調整部314により調整される。換言すれば、調整部314は、生成部312が画面情報を出力する頻度を制御する。調整部314は、送信制御データ316を用いて頻度の調整を行う。送信制御データ316の具体例は図7とともに後述する。
また、画面情報がクライアント320に送信されるときには、現在時刻を示す時刻情報が付加部315により画面情報に付加され、画面情報は時刻情報とともに送信部313から送信される。すなわち、画面情報は、画面情報が送信される時刻を示す時刻情報とともに、送信される。
なお、サーバ310が図5のコンピュータ240により実現される場合、受信部311は、CPU241と通信インタフェイス244により実現されてもよい。同様に、送信部313も、CPU241と通信インタフェイス244により実現されてもよい。生成部312と調整部314と付加部315は、いずれも、CPU241により実現されてもよい。送信制御データ316は、RAM243に記憶されることが好ましいが、記憶装置247に記憶されてもよい。
一方、クライアント320は、入力部321と、表示部322と、送信部323と、受信部324と、描画部325と、推定部326を有する。また、クライアント320は、受信履歴データ327と、時刻差データ328と、可用帯域幅データ329を保持する。
入力部321は、ユーザからの入力を受け付ける。例えば、入力部321は図5の入力装置205であってもよい。
表示部322は、画面を表示する。例えば、表示部322は図5の出力装置206であってもよい。
送信部323は、入力部321を介してユーザからクライアント320に与えられた入力をサーバ310に通知するためのデータや、可用帯域幅と過剰遅延時間をサーバ310に通知するためのデータを、サーバ310に送信する。送信部323は、例えば、図5のCPU201と通信インタフェイス204によって実現されてもよい。
受信部324は、サーバ310から、時刻情報とともに画面情報を受信する。また、詳しくは後述するように、サーバ310は、クライアント320の時計が示す時刻と、サーバ310の時計が示す時刻との時刻差を算出するためのデータ(以下では説明の便宜上、「時刻合わせコマンド」ともいう)も送信する。よって、受信部324は、画面情報だけでなく時刻合わせコマンドも受信する。
受信部324は、サーバ310からデータを受信するたびに、受信履歴データ327を更新する。また、受信部324は、時刻合わせコマンドを受信すると、クライアント320の時計が示す時刻と、サーバ310の時計が示す時刻との時刻差を算出し、算出結果を時刻差データ328として記憶する。
受信履歴データ327と時刻差データ328の具体例は図7とともに後述する。なお、クライアント320が図5のコンピュータ200により実現される場合、受信履歴データ327と時刻差データ328は、RAM203に記憶されることが好ましいが、記憶装置207に記憶されてもよい。なお、送信部323と同様に、受信部324も、CPU201と通信インタフェイス204によって実現されてもよい。
描画部325は、受信部324が受信した画面情報に基づいて、画面の一部または全部を描画する。描画部325は、CPU201(または、不図示のGPUなどの他のプロセッサ)によって実現されてもよい。
推定部326は、受信履歴データ327と時刻差データ328を用いて、サーバ310とクライアント320の間のネットワークの可用帯域幅を推定する。可用帯域幅の推定値は、可用帯域幅データ329として記憶される。可用帯域幅データ329の具体例は図7とともに後述する。
より詳しくは、可用帯域幅の推定に際して、推定部326は、過剰遅延時間を算出する。過剰遅延時間は、実際に受信部324が画面情報を受信した時刻と、現在の可用帯域幅データ329から推定される受信時刻との差である。推定部326は、過剰遅延時間に応じて、可用帯域幅の推定値を増加させるか、維持するか、または減少させる。
また、推定部326は、可用帯域幅と過剰遅延時間を送信部323に出力する。すると、送信部323は、可用帯域幅と過剰遅延時間をサーバ310に通知するためのデータ(上記の第2の種類のデータ)をサーバ310に送信する。
なお、推定部326は、図5のCPU201によって実現されてもよい。また、可用帯域幅データ329は、RAM203に記憶されることが好ましいが、記憶装置207に記憶されてもよい。
続いて、図7を参照して、図6中の各種データの詳細について説明する。図7には、参照の便宜のため、後述の数式で用いる記号も併記してある。
なお、以下では説明の便宜上、サーバ310における時刻は、サーバ310が起動してから経過した時間の長さにより示されるものとする。同様に、クライアント320における時刻は、クライアント320が起動してから経過した時間の長さにより示されるものとする。そのため、図7では、時刻がms(millisecond)単位で示されている。
サーバ310における時刻は、例えば、サーバ310を実現するコンピュータ240のCPU241に内蔵されたタイマにより、カウントされてもよい。同様に、クライアント320における時刻は、例えば、クライアント320を実現するコンピュータ200のCPU201に内蔵されたタイマにより、カウントされてもよい。
さて、サーバ310が保持する送信制御データ316は、具体的には、可用帯域幅と、過剰遅延解消時刻と、送信フレームレートと、最終送信時刻を含む。図7の例では、可用帯域幅が3500kbps(kilobit per second)、過剰遅延解消時刻が101000ms、送信フレームレートが30fps、最終送信時刻が100010msである。
送信制御データ316中の可用帯域幅は、クライアント320から通知された推定値を示す。可用帯域幅の初期値は、例えば0kbpsなどの無効な値である。
また、過剰遅延解消時刻は、「過剰遅延を解消するためには、サーバ310がいつまで画面情報の送信を控えるのが好ましいか」という目安を示す時刻である。後述するとおり、過剰遅延解消時刻は、クライアント320から通知される過剰遅延時間に基づいて算出される。過剰遅延解消時刻の初期値は、例えば0msなどの無効な値である。
送信フレームレートは、画面情報を送信する頻度の、現在の値を示す。送信フレームレートの初期値は、例えば30fpsなどの所定の値である。送信フレームレートの初期値は、実施形態に応じた適宜の値でよい。
最終送信時刻は、サーバ310が最後にクライアント320に画面情報を送信した時刻である。最終送信時刻の初期値は、例えば0msなどの無効な値である。
さて、クライアント320が保持する受信履歴データ327は、1つ以上のエントリを含み得る。各エントリは、受信時刻と、当該受信時刻に受信部324が受信したデータのサイズとのペアである。図7の例は、受信部324が、1200msという時刻に1000バイトのデータを受信し、1240msという時刻に1500バイトのデータを受信し、1270msという時刻に1200バイトのデータを受信したことを示す。
受信履歴データ327は、初期状態ではエントリを1つも持たない。また、現在時刻から所定の範囲よりも受信時刻が古くなったエントリは、受信部324により削除される。以下では説明の便宜上、上記「所定の範囲」を、「現在から6秒間以内」という範囲だとするが、所定の範囲は実施形態に応じて適宜決められてよい。
また、クライアント320が保持する時刻差データ328は、クライアント320の時計が示す時刻と、サーバ310の時計が示す時刻との時刻差を示す。第2〜第4実施形態では、具体的には、時刻差の近似値が使われる。図7の例では、時刻差は−98740msである。
ところで、クライアント320が保持する図6の可用帯域幅データ329は、第2〜第3実施形態では、具体的には図7の可用帯域幅データ329aのように、推定部326が推定した可用帯域幅の推定値を含むデータである。図7の例では、可用帯域幅データ329aは、3500kbpsという推定値を含む。
他方、後述の第4実施形態では、図6の可用帯域幅データ329は、具体的には図7の可用帯域幅データ329bのように、推定部326が推定した可用帯域幅の推定値だけでなく、さらに、前回通知帯域幅を含む。図7の例では、可用帯域幅は3500bpsであり、前回通知帯域幅は3850bpsである。前回通知帯域幅の詳細については、第4実施形態とともに後述する。
さて、図8〜9は、第2実施形態のクライアント320の動作フローチャートである。クライアント320は、電源が入れられて起動すると、図8〜9の処理を開始する。
ステップS201で、クライアント320は、サーバ310に接続要求を送信してサーバ310との間の接続を確立し、リモートデスクトップ初期化処理を行う。リモートデスクトップ初期化処理は、サーバ310からクライアント320がリモートデスクトップサービスを受けるための初期化処理である。例えば、ステップS201でクライアント320は、表示部322の解像度や、使用するインプットメソッドなどの情報をサーバ310に通知してもよい。
次に、ステップS202でクライアント320は、イベントの発生を待つ。
そして、入力部321を介してユーザから入力が与えられるという入力イベントが発生すると、処理はステップS203に移行する。入力イベントの具体例は、例えば、キーボードのキーの押鍵、マウスポインタの移動、ドラッグ、クリック(またはタップ)、ダブルクリック(またはダブルタップ)、フリック、ピンチイン、ピンチアウト、などの操作である。
他方、受信部324がサーバ310から何らかのデータを受信するというデータ受信イベントが発生すると、処理はステップS204に移行する。
ステップS203で送信部323は、入力部321を介して与えられた入力の内容を、サーバ310に通知する。そして、処理はステップS202に戻る。
ステップS204で受信部324は、受信時刻とデータサイズの組を受信履歴データ327に追加する。つまり、受信部324は、現在時刻を取得し、サーバ310から受信したデータのサイズを調べ、現在時刻と調べたサイズを組にした新たなエントリを受信履歴データ327に追加する。
なお、サーバ310がクライアント320に送信するデータの形式は実施形態に応じて適宜決められていてよい。例えば、TCP/IP(Transmission Control Protocol/Internet Protocol)上でリモートデスクトップサービスが提供される場合、サーバ310がクライアント320に送信するデータは、以下の(14a)〜(14d)のフィールドを含むパケットであってもよい。
(14a)IPヘッダ。
(14b)TCPヘッダ。
(14c)リモートデスクトップサービス用のアプリケーション層のヘッダ。
(14d)リモートデスクトップサービス用のアプリケーション層のペイロード。
例えば(14a)〜(14d)のフィールドを含むパケットを受信部324が受信した場合、受信履歴データ327に記録されるデータサイズは、(14a)〜(14d)のフィールドを含むパケット全体の長さである。
次に、ステップS205で受信部324は、受信したデータの種類を判定する。例えば、(14c)のアプリケーション層のヘッダが、データの種類を示すフィールドを含んでいてもよい。その場合、受信部324は、アプリケーション層のヘッダを参照することにより、データの種類を判定することができる。以下では説明の便宜上、サーバ310がクライアント320に送信するデータには、少なくとも、「時刻合わせコマンド」と「描画コマンド」の2種類があるものとする。
時刻合わせコマンドは、クライアント320の時計が示す時刻と、サーバ310の時計が示す時刻との時刻差を算出するためのデータである。具体的には、時刻合わせコマンドは、サーバ310が時刻合わせコマンドを送信した時刻を示すタイムスタンプを含む。
なお、(14c)のアプリケーション層のヘッダの形式は、実施形態に応じて様々であってよい。(14c)のヘッダの形式に応じて、タイムスタンプは、(14c)のヘッダに含まれていてもよいし、(14d)のペイロードに含まれていてもよい。
描画コマンドは、サーバ310がクライアント320に画像を画面上に表示させるための画面情報を含むデータである。詳しくは後述するように、描画コマンドのペイロードは、画面の一部または全部を静止画像形式で圧縮したデータ、画面の一部または全部を動画像形式で圧縮したデータ、または両者の組み合わせを含む。換言すれば、描画コマンドは、第1実施形態に関して説明した第3の形式の画面情報を含む。
例えば、静止画像用の形式としては、JPEG(Joint Photographic Experts Group)形式が利用可能であり、動画像用の形式としては、MPEG形式が利用可能である。もちろん、実施形態に応じて、他の画像圧縮形式が使われてもよい。
また、描画コマンドも、サーバ310が描画コマンドを送信した時刻を示すタイムスタンプを含む。アプリケーション層のヘッダの形式に応じて、タイムスタンプは、ヘッダに含まれていてもよいし、ペイロードに含まれていてもよい。
受信したデータが時刻合わせコマンドの場合、処理はステップS207に移行する。受信したデータが描画コマンドの場合、処理はステップS210に移行する。受信したデータが他の種類のデータである場合、処理はステップS206に移行する。
ステップS206でクライアント320は、受信したデータの種類に応じた適宜の処理を行う。そして、図8〜9の処理はステップS202に戻る。
ステップS207で受信部324は、受信した時刻合わせコマンドから、時刻合わせコマンドの送信時刻を取得する。取得される送信時刻は、サーバ310での時計で表された時刻である。以下では説明の便宜上、ステップS207で取得される送信時刻を「T_sent」と表記することがある。
次に、ステップS208で受信部324は、現在時刻を取得し、現在時刻とステップS207で取得した送信時刻の差を算出する。そして、受信部324は、算出した時刻差を時刻差データ328として記憶する。
ステップS208で取得される現在時刻は、クライアント320の時計で表された時刻である。以下では説明の便宜上、ステップS208で取得される現在時刻を「T_now_c」と表記し、ステップS208で算出される時刻差を「T_diff」と表記する。すなわち、式(1)の時刻差T_diffが時刻差データ328として記憶される。
T_diff = T_now_c-T_sent (1)
式(1)から明らかなように、第2実施形態における時刻差T_diffは、クライアント320の時計で表される時刻とサーバ310の時計で表される時刻との差そのものを厳密に示す値ではなく、当該時刻差の近似値である。時刻合わせコマンドのような短いデータに関しては、サーバ310が当該データを送信し始めてから、クライアント320が当該データを受信し終わるまでの転送時間も短い。よって、短い転送時間を無視することによって、クライアント320の時計で表される時刻とサーバ310の時計で表される時刻との差は、式(1)のように近似される。
なお、参照の便宜上、図7には時刻がミリ秒単位で示されているが、式(1)および後述の各数式における時刻と時間の単位は秒であるものとする。
以上のようにして受信部324が時刻差データ328を更新した後、処理はステップS202に戻る。
さて、ステップS209では、描画部325が、受信部324により受信された描画コマンドにしたがって、画面上の更新された領域を描画する。
具体的には、描画コマンドのペイロードには、画面の中で更新された領域を描画部325に描画させるためのデータが含まれる。例えば、表示部322の画面は、図2に例示するように、横方向にH個に分割され、縦方向にV個に分割されてもよい(2≦Hかつ2≦V)。この場合、画面は合計でH×V個のブロックを含む。これらのH×V個のブロックのすべてに変化が生じる場合もあるし、どのブロックにも変化が生じない場合もあるし、1個以上のあるブロックには変化があり残りのブロックには変化がない場合もある。
少なくとも1個のブロックに変化がある場合、描画コマンドのペイロードには、変化したブロックを静止画像形式で圧縮したデータ、変化したブロックを含む矩形の領域を動画像形式で圧縮したデータ、またはその両者が含まれる。よって、描画部325は、描画コマンドのペイロードに含まれるデータをデコードし、更新された各領域を画面上に描画する。
例えば、図2の例では、描画コマンドのペイロードには、領域111を動画像形式で圧縮したデータと、領域112を静止画像形式で圧縮したデータと、領域113を静止画像形式で圧縮したデータが含まれる。よって、描画部325は、描画コマンドのペイロードに含まれるデータをデコードし、領域111〜113を更新する。例えば、描画部325は、VRAM(Video Random Access Memory)上に記憶されている、領域111〜113中の各画素のデータを、デコード結果に応じて更新する。それにより、描画部325は、画面上の領域111〜113を更新する。
次のステップS210では、推定部326が、受信履歴データ327を用いて、最近の6秒間以内の期間における平均受信ビットレートを算出する。図7に関して説明したとおり、第2実施形態では、受信時刻から6秒が経過した後は、受信履歴データ327からエントリが削除される。よって、受信履歴データ327のどのエントリの受信時刻も、現在から6秒以内である。
説明の便宜上、受信履歴データ327のエントリの個数をRとする(1≦R)。また、1≦j≦Rなる各jについて、受信履歴データ327のj番目のエントリにおける受信時刻とデータサイズをそれぞれ「T_rcvj」と「Size_rcvj」と表記する。なお、1番目のエントリの受信時刻が最も古く、R番目のエントリの受信時刻が最も新しいものとする。
ステップS210で推定部326は、より具体的には、例えば式(2)にしたがって最近の6秒間以内の期間における平均受信ビットレート(以下では「BPS_avr」と表記する)を算出してもよい。
なお、式(2)における8の乗算は、バイトからビットへの換算を示す。また、式(2)における「T_now_c」は、推定部326がステップS210で取得する現在時刻を示す。なお、参照の便宜上、図7には帯域幅がkbps単位で示されているが、式(2)および後述の各数式における、帯域幅および受信ビットレートの単位は、bps(bit per second)であるものとする。
実施形態によっては、上記の「最近6秒間」という所定の期間の長さに合わせて、式(2)の分母は、「6」という定数に置き換えられてもよい。もちろん、所定の期間の長さ自体も、実施形態に応じて適宜変更されてよい。
続いて、ステップS211で推定部326は、可用帯域幅データ329を参照し、可用帯域幅が初期値(例えば0kbps)であるか否かを判断する。可用帯域幅が初期値の場合、処理はステップS212に移行し、可用帯域幅が初期値ではない場合、処理はステップS213に移行する。
ステップS212で推定部326は、ステップS210で算出した平均受信ビットレートBPS_avrを可用帯域幅として記憶する。すなわち、推定部326は、可用帯域幅データ329を平均受信ビットレートBPS_avrで上書きする。
なお、可用帯域幅データ329は、サーバ310とクライアント320の間のエンド・ツー・エンドの可用帯域幅の推定値を示す。そして、実際の可用帯域幅は時間とともに変化し得るが、ある期間における可用帯域幅の実際の値の平均値は、当該期間における平均受信ビットレート以上であると推定される。よって、ステップS212では、平均受信ビットレートBPS_avrが可用帯域幅の推定値として使われる(すなわち、平均受信ビットレートBPS_avrが可用帯域幅データ329として記憶される)。
以下では説明の便宜上、可用帯域幅(より正確には可用帯域幅の推定値)を「EstBW」と表記することがある。具体的には、表記の簡単化のために単に「可用帯域幅EstBW」と表記する場合もあるし、可用帯域幅の実際の値と推定値との区別を明示するために「可用帯域幅の推定値EstBW」のように表記する場合もある。
ステップS212の処理は、式(3)のように表される。ある観点から見れば、ステップS212の処理は、無効な値に設定されている可用帯域幅EstBWを、式(3)により有効な値に初期化する処理である。
EstBW = BPS_avr (3)
以上のようにして可用帯域幅が更新された後、処理はステップS213に移行する。
ステップS213で推定部326は、受信部324が今回受信したデータ(つまり描画コマンド)のサイズと可用帯域幅から、今回受信したデータの転送にかかった時間の推定値を算出する。以下では説明の便宜上、ステップS213で算出される時間を「推定転送時間」といい、「EstT_trans」と表記する。
具体的には、推定部326は、受信履歴データ327の最新のエントリに記憶されているデータサイズSize_rcvRと、可用帯域幅データ329として記憶されている可用帯域幅Est_BWを用いて、式(4)の計算を行う。
EstT_trans = 8×Size_rcvR/EstBW (4)
そして、次に図9のステップS214で推定部326は、受信部324により受信された描画コマンドから、描画コマンドがサーバ310から送信された時刻を示す時刻情報(すなわち上記のタイムスタンプ)を取得する。
以下ではステップS214で取得される時刻情報が示す送信時刻を、説明の便宜上、「T_sent」とも表記する。送信時刻T_sentは、サーバ310の時計で表される時刻である。推定部326は以上のようにして送信時刻T_sentを取得する。
次のステップS215で推定部326は、式(5)に示すとおり、送信時刻T_sentに時刻差T_diffを足し、推定送信時刻(以下では「EstT_sent」と表記する)を算出する。
EstT_sent = T_sent+T_diff (5)
式(1)から分かるように、サーバ310の時計で表された時刻に時刻差T_diffを足すことで、サーバ310の時計で表された時刻は、クライアント320の時計で表された時刻に換算される。また、時刻差T_diffは上記のとおり近似値である。よって、式(5)により算出される推定送信時刻EstT_sentは、描画コマンドがサーバ310から送信された時刻T_sentをクライアント320の時計で示した時刻の推定値を示す。
そして、次にステップS216で推定部326は、式(6)に示すとおり、受信履歴データ327の最新のエントリに記憶されている受信時刻T_rcvRから、推定送信時刻EstT_sentと推定転送時間EstT_transを引く。式(6)の減算により、推定部326は、過剰遅延時間を算出する。なお、式(6)に示すように、以下では便宜上、過剰遅延時間を「ExtraDelay」とも表記する。
ExtraDelay = T_rcvR-EstT_sent-EstT_trans (6)
過剰遅延時間ExtraDelayは、可用帯域幅Est_BWから推定される受信時刻(EstT_sent+EstT_trans)よりも実際の受信時刻T_rcvRがどれくらい遅延しているかを示す。
可用帯域幅データ329に基づいて推定される受信時刻よりも早くに描画コマンドが受信された場合は、過剰遅延時間ExtraDelayは負である。逆に、可用帯域幅データ329に基づいて推定される受信時刻よりも遅くに描画コマンドが受信された場合は、過剰遅延時間ExtraDelayは正である。
続いて、ステップS217で推定部326は、過剰遅延時間ExtraDelayが300msより長いのか、0msより長く300ms以下なのか、それとも0ms以下なのかを判断する。
なお、ステップS217における「300ms」という第1の閾値は、実施形態に応じて、適宜、他の正の値に置き換えられてよい。また、ステップS217における「0ms」という第2の閾値も、実施形態に応じて、適宜、他の値に置き換えられてよい。
第2の閾値は、ゼロか負の値であることが望ましいが、ゼロに近い小さな正の値が第2の閾値として使われてもよい。ただし、いずれにせよ、第2の閾値は、第1の閾値より小さい。
なお、2つの閾値は、ユーザ定義可能な変数であってもよいし、推定部326が可用帯域幅EstBWに応じて変更する可変の閾値であってもよい。しかし、以下では説明の簡単化のため、固定的な2つの閾値が使われるものとする。
これらの2つの閾値の意味を説明すれば、以下のとおりである。第1と第2の閾値は、以下に説明する意味をよく反映するように、例えば予備実験などに基づいて、適切に定められることが好ましい。
実際の可用帯域幅は、時間とともに変動し得る。例えば、サーバ310とクライアント320以外の他のコンピュータによるネットワーク通信の量に応じて、実際の可用帯域幅は変動し得る。また、サーバ310とクライアント320の間のネットワークの少なくとも一部が無線ネットワークである場合、遮蔽物や干渉源など、環境中のいくつかの要因によっても、実際の可用帯域幅は変動し得る。
実際の可用帯域幅の変動に応じて、描画コマンドの受信時刻が影響を受けるので、過剰遅延時間ExtraDelayも実際の可用帯域幅の変動に応じて変動し得る。しかし、偶発的に起こり得る小さな変動は無視しても差し支えない。
式(6)から分かるように、可用帯域幅データ329として記憶されている推定値が実際の可用帯域幅に近ければ、過剰遅延時間ExtraDelayの絶対値も比較的小さい。よって、過剰遅延時間ExtraDelayの絶対値が比較的小さい場合、過剰遅延時間ExtraDelayは、偶発的に起こり得る小さな変動に起因すると見なして差し支えない。つまり、この場合、可用帯域幅データ329として記憶されている推定値は、更新されなくてもよい。
しかし、もし過剰遅延時間ExtraDelayが第2の閾値以下ならば、可用帯域幅データ329として記憶されている推定値は、更新されることが好ましい(具体的には、大きくされることが好ましい)。なぜなら、過剰遅延時間ExtraDelayが第2の閾値以下ならば、「可用帯域幅データ329として記憶されている推定値が過小である」という可能性が残っているからである。つまり、実際の可用帯域幅の一部が活用されずに遊んでいる可能性がある。
すなわち、過剰遅延時間ExtraDelayが第2の閾値以下ならば、実際の可用帯域幅によっては、サーバ310からクライアント320に描画コマンドが送信される頻度を上昇させる余地があり得る。換言すれば、クライアント320における表示フレームレートを上げて、画面表示をより滑らかにし、ひいてはユーザビリティをさらに向上させることが可能な場合もあり得る。
よって、過剰遅延時間ExtraDelayが第2の閾値以下ならば、以上のような可能性が実際に成り立つか否かを試すために、推定部326は可用帯域幅の推定値を増加させてもよい。クライアント320は、より大きな可用帯域幅の推定値をサーバ310に通知することで、間接的に、サーバ310からクライアント320に描画コマンドが送信される頻度を上昇させることができる。
つまり、第2の閾値は、可用帯域幅データ329を更新しないで推定値を維持する場合と、上記のような可能性が成り立つか否かを積極的に試す場合とを分かつための閾値である。
逆に、もし過剰遅延時間ExtraDelayが非常に長ければ(具体的には、第1の閾値より長ければ)、可用帯域幅データ329として記憶されている推定値が過大だと考えられる。また、この場合、「偶発的に起こり得る小さな変動に起因して、過剰遅延時間ExtraDelayが、偶然、正になった」という蓋然性は低い。むしろ、この場合、「描画コマンドの送信が繰り返されるうちに遅延が次第に累積してゆく過程(例えば図3のタイミングチャート123のような過程)に起因して、過剰遅延時間ExtraDelayが第1の閾値を超えた」という蓋然性が高い。
よって、過剰遅延時間ExtraDelayが第1の閾値より長ければ、可用帯域幅データ329として記憶されている推定値を減少させる(すなわち推定値を実際の可用帯域幅に近づける)ことが適切である。つまり、第1の閾値は、偶然起こり得る小さな変動と、可用帯域幅の過大な推定に起因する遅延の累積とを見分けるための閾値である。
さて、ここでステップS217の説明に戻る。過剰遅延時間ExtraDelayが300msより長ければ、可用帯域幅EstBWを減少させるために、処理はステップS218に移行する。過剰遅延時間ExtraDelayが0msより長く300ms以下であれば、推定部326は、可用帯域幅EstBWを変えずにそのまま維持し、処理はステップS220に移行する。過剰遅延時間ExtraDelayが0ms以下ならば、可用帯域幅EstBWを増加させるために、処理はステップS221に移行する。
ステップS218で推定部326は、過大な推定値を小さくするために、可用帯域幅EstBWの現在の値と、ステップS210で算出した平均受信ビットレートBPS_avrとの平均値を、新たに可用帯域幅EstBWとして記憶する。すなわち、推定部326は、式(7)にしたがって可用帯域幅データ329を更新する。式(7)の右辺の「EstBW」は可用帯域幅の現在の値を示し、左辺の「EstBW」は更新後の可用帯域幅の値を示す。
EstBW = (EstBW+BPS_avr)/2 (7)
なお、実施形態によっては、推定部326は、式(7)以外の式にしたがって可用帯域幅データ329を更新してもよい。例えば、推定部326は、0<C1≦1なる適宜の定数C1を用いて、式(8)にしたがって可用帯域幅データ329を更新してもよい。
EstBW = (1-C1)×EstBW+C1×BPS_avr (8)
式(7)は、式(8)における定数C1が1/2の場合の例である。定数C1が小さいほど、可用帯域幅EstBWの変化は緩やかになる。
続いて、ステップS219で推定部326は、ステップS218で更新した可用帯域幅EstBWを用いて、過剰遅延時間ExtraDelayを再計算する。
具体的には、推定部326は、更新後の可用帯域幅EstBWを用いて、式(4)により推定転送時間EstT_transを再計算する。そして、推定部326は、再計算した推定転送時間EstT_transを用いて、式(6)により過剰遅延時間ExtraDelayを再計算する。
過剰遅延時間ExtraDelayの再計算の後、処理はステップS220に移行する。なお、ステップS216で算出される過剰遅延時間ExtraDelayと、ステップS219で再計算される過剰遅延時間ExtraDelayの差は、それほど顕著でない場合も多い。よって、処理の簡素化のため、実施形態によっては、ステップS219が省略されてもよい。
ステップS220では、推定部326が可用帯域幅EstBWと過剰遅延時間ExtraDelayを送信部323に出力する。すると、送信部323は、可用帯域幅EstBWと過剰遅延時間ExtraDelayを含む通知をサーバ310に送信する。そして、処理は図8のステップS202に戻る。
ステップS221で推定部326は、可用帯域幅EstBWの値を増加させる。具体的には、推定部326は、比較的小さな正の適宜の定数C2を用いて、式(9)により、新たな可用帯域幅EstBWの値を算出し、可用帯域幅データ329を更新する。式(9)の右辺の記号「EstBW」は、可用帯域幅の現在の推定値を示し、左辺の記号「EstBW」は、可用帯域幅の新たな推定値を示す。
EstBW = EstBW×(1+C2) (9)
図9には、C2=0.1の場合が例示されている。上記のとおり、ステップS221が実行されるのは過剰遅延時間ExtraDelayが0ms以下の場合であり、この場合、フレームレートを上げる余地があり得る。よって、ステップS221では、フレームレートを上げる余地が実際にあるか否かを試すため、推定部326が可用帯域幅EstBWの値を増加させる。
なお、推定部326は、式(9)のように1より大きい所定の値を可用帯域幅の現在の推定値に掛ける代わりに、所定の正の値を可用帯域幅の現在の推定値に足すことで、可用帯域幅の新たな推定値を算出してもよい。
次に、ステップS222で推定部326は、ステップS221で更新した可用帯域幅EstBWを用いて、過剰遅延時間ExtraDelayを再計算する。
具体的には、推定部326は、更新後の可用帯域幅EstBWを用いて、式(4)により推定転送時間EstT_transを再計算する。そして、推定部326は、再計算した推定転送時間EstT_transを用いて、式(6)により過剰遅延時間ExtraDelayを再計算する。
過剰遅延時間ExtraDelayの再計算の後、処理はステップS220に移行する。なお、ステップS216で算出される過剰遅延時間ExtraDelayと、ステップS222で再計算される過剰遅延時間ExtraDelayの差は、それほど顕著でない場合も多い。よって、処理の簡素化のため、実施形態によっては、ステップS219が省略されてもよい。
さて、図10〜11は、第2〜第4実施形態に共通のサーバ310の動作フローチャートである。サーバ310は、クライアント320からの接続要求を受信すると、図10〜11の処理を開始する。
ステップS301でサーバ310は、クライアント320との間の接続を確立し、リモートデスクトップ初期化処理を行う。例えば、サーバ310は、クライアント320から、表示部322の解像度や、使用するインプットメソッドなどの情報を受信してもよい。そして、サーバ310は、クライアント320用に1つ以上のプログラムを実行するための実行環境(runtime environment)をサーバ310内に作成し、クライアント320から受信した情報に応じて、実行環境の環境設定を行ってもよい。
サーバ310内に生成される上記実行環境は、実施形態に応じて、例えば、サーバ310上のプロセスであってもよいし、サーバ310(すなわち物理マシン)上の仮想マシンであってもよい。また、クライアント320用にサーバ310が実行する上記1つ以上のプログラムは、具体的には、OSを含み、さらにアプリケーションプログラムを含んでもよい。
次に、ステップS302で付加部315は、現在時刻を取得し、現在時刻を示す時刻情報(すなわちタイムスタンプ)を含む時刻合わせコマンドを生成する。そして、送信部313が時刻合わせコマンドをクライアント320に送信する。
次に、ステップS303でサーバ310は、イベントの発生を待つ。
そして、受信部311がクライアント320から入力通知を受信したというイベントが発生すると、処理はステップS304に移行する。入力通知は、図8のステップS203でクライアント320から送信される通知である。
あるいは、受信部311がクライアント320から可用帯域幅と過剰遅延時間の通知を受信したというイベントが発生すると、処理はステップS305に移行する。可用帯域幅と過剰遅延時間の通知は、図9のステップS220でクライアント320から送信される通知である。
ところで、サーバ310の生成部312は、所定の間隔で発火する(expire)画面取得タイマを有する。画面取得タイマは、具体的には、図5のCPU241の内蔵タイマにより実現されてもよい。
第2〜第4実施形態では、送信フレームレートの最大値が予め決められており、画面取得タイマが発火する間隔は、送信フレームレートの最大値に応じて予め設定される。以下では説明の便宜上、送信フレームレートの最大値が30fpsであるものとする。したがって、画面取得タイマの発火間隔は、1/30秒である。
画面取得タイマの発火というイベントが発生すると、処理はステップS303からステップS308へと移行する。
さて、入力通知が受信された場合、ステップS304で生成部312は、受信部311により受信された入力通知の内容に応じた入力割り込みを発生させる。そして、処理はステップS303に戻る。
なお、説明の簡略化のため図10〜11では省略しているが、ステップS301でのリモートデスクトップ初期化処理の完了後、生成部312は、上記実行環境上でOSの実行を開始する。生成部312がステップS304で発生させる入力割り込みは、アプリケーションプログラムを起動するトリガになる場合もあり得る(例えば、所定のアイコン上でのダブルクリック操作が通知された場合など)。この場合、生成部312は、発生させた入力割り込みに応じて、新たにアプリケーションプログラムの実行を開始する。
あるいは、生成部312がステップS304で発生させる入力割り込みは、起動済みのプログラム(例えば、OSでもよいし、アプリケーションプログラムでもよい)に対する入力を表す場合もあり得る。この場合、生成部312は、起動済みのプログラムを実行する過程において、入力割り込みに応じた処理を行う。
例えば、テキストエディタが起動済みで、かつ、入力割り込みがキー入力に対応する場合があり得る。この場合、生成部312は、テキストエディタのプログラムを実行する過程において、入力割り込みに応じて、カーソル位置に文字を表示させるための処理を行ってもよい。
また、CADアプリケーションが起動済みで、かつ、入力割り込みが、CADアプリケーション内の「回転」などのコマンドの呼び出しのための入力(例えばメニューバーからのメニュー選択操作)に対応する場合があり得る。この場合、生成部312は、CADアプリケーションのプログラムを実行する過程において、入力割り込みに応じて、CADアプリケーション内のコマンドを呼び出してもよい。
また、入力割り込みが、起動済みのアプリケーションプログラムを終了させるための入力(例えば「終了」メニューを選択する操作)に対応する場合もあり得る。この場合、生成部312は、入力割り込みに応じて、当該アプリケーションプログラムの実行を終了する。
例えば上記に例示したようにして、生成部312は、クライアント320からの入力通知の内容に応じて、入力割り込みを発生させ、入力割り込みの内容に応じて、プログラムを実行する。
ここで、図10〜11の説明に戻る。ステップS305で調整部314は、受信部311により受信された可用帯域幅と過剰遅延時間の通知から、可用帯域幅を読み取る。そして、調整部314は、通知された可用帯域幅を記憶する。つまり、調整部314は、送信制御データ316中の可用帯域幅を、通知された値に書き換える。
次に、ステップS306で調整部314は、可用帯域幅と過剰遅延時間の通知から過剰遅延時間を読み取り、通知された過剰遅延時間が正か否かを判断する。過剰遅延時間が正ならば、処理はステップS307に移行する。逆に、過剰遅延時間が0以下ならば、処理はステップS303に戻る。
ステップS307で調整部314は、現在時刻を取得し、現在時刻に過剰遅延時間を足して、過剰遅延解消時刻を算出する。そして、調整部314は、送信制御データ316中の過剰遅延解消時刻を、算出した値に書き換える。
ステップS307で取得される現在時刻は、サーバ310の時計で表された時刻である。以下では説明の便宜上、ステップS307で取得される現在時刻を「T_now_s」と表記し、ステップS307で算出される過剰遅延解消時刻を「T_solved」と表記する。ステップS307での過剰遅延解消時刻T_solvedの算出は、式(10)のとおりである。
T_solved = T_now_s+ExtraDelay (10)
過剰遅延解消時刻T_solvedの算出後、処理はステップS303に戻る。
さて、画面取得タイマが発火した場合は、ステップS308で生成部312が画面全体の画像(すなわちフレーム画像)を取得する。
上記のとおり生成部312は1つ以上のプログラムの実行を続けており、プログラムの実行に応じて、クライアント320の表示部322の画面に表示するための画像を生成する。例えば、画像のデータは、サーバ310を実現するコンピュータ240のRAM243内の第1のメモリ領域に、無圧縮のビットマップ形式で記憶されていてもよい。第1のメモリ領域は、具体的には、クライアント320用に割り当てられたフレームバッファ中の領域であり、ある観点から見れば、クライアント320のVRAMをエミュレートするためのメモリ領域である。
生成部312は、プログラムを実行する過程において、プログラムの実行の進捗に応じて第1のメモリ領域内の一部または全部のデータを書き換えることで、画像を更新してもよい。生成部312は、ステップS308では、第1のメモリ領域から画像のデータを読み出すことで、画面全体の画像を取得してもよい。
そして、次のステップS309で生成部312は、今回ステップS308で取得した画像と、前回画面取得タイマが発火したときに取得した画像との差分を検出する。
例えば、RAM243内において第1のメモリ領域とは別の第2のメモリ領域に、前回画面取得タイマが発火したときに生成部312が取得した画像のデータが格納されていてもよい。生成部312は、第1のメモリ領域と第2のメモリ領域の画像同士を比較することで、今回取得した画像と前回の画面の画像との差分を検出してもよい。なお、生成部312は、後述の動画圧縮におけるフレーム間予測や動き補償のために、第1と第2のメモリ領域とは別のメモリ領域に、さらに過去のフレーム画像を保持していてもよい。
次に、ステップS310で生成部312は、動画像用の圧縮アルゴリズムで圧縮する対象の領域(以下、「動画領域」という)を検出する。図2の例では領域111が動画領域である。動画領域を検出する方法は公知なので、詳しい説明は省略するが、例えば、生成部312は以下のようにして動画領域を検出してもよい。
図2に例示するように、画面がH×V個のブロックに分割されていてもよい。この場合、生成部312は、H×V個のブロックのそれぞれについて、ステップS309において当該ブロックで差分が検出された回数をカウントし、カウント結果を所定の閾値と比較してもよい。生成部312は、カウント結果が閾値以上のブロックを、高頻度で変更が生じているブロックだと判断し、カウント結果が閾値未満のブロックを、変更が生じる頻度が低いブロックだと判断してもよい。
例えば、生成部312は、各ブロックについて、ステップS308の直近のQ回(Q>1)の実行においてそれぞれ差分が検出されたか否かを記憶してもよい。そして、生成部312は、各ブロックについて、Q回のうち何回差分が検出されたかをカウントして、上記の閾値と比較してもよい。
以上のようにして、高頻度で変更が生じていることが検出されるブロックの個数は、0個の場合もあり得るし、1個の場合もあり得るし、複数個の場合もあり得る。
生成部312は、複数のブロックにおいて高頻度で変更が生じていることを検出した場合は、それら複数のブロックの各々を個別に動画領域と決定してもよい。
あるいは、高頻度で変更が生じていることが検出されたいくつかのブロック同士が、隣接または近接している場合もあり得る。この場合、生成部312は、隣接または近接するそれらのブロックを包含する矩形領域(例えば、隣接または近接するそれらのブロックを包含する最小の矩形領域)を、動画領域と決定してもよい。
例えば以上のようにして、生成部312は、ステップS310で動画領域を検出する。したがって、場合によっては、1つも動画領域が検出されないこともあり得るし、1つの動画領域が検出されることもあり得るし、離れ離れの複数の動画領域が検出されることもあり得る。
次に、ステップS311で調整部314は、送信制御データ316を参照して、現在の送信フレームレート(以下では「FPS_cur」と表記する)を取得する。そして、調整部314は、現在の送信フレームレートFPS_curから、式(11)により、送信時間間隔(以下では「Int」と表記する)を算出する。
Int = 1/FPS_cur (11)
次に、ステップS312で調整部314は、現在時刻(以下では「T_now_s」と表記する)を取得する。また、調整部314は、送信制御データ316を参照して、最終送信時刻(以下では「T_last」と表記する)を取得する。そして、調整部314は、現在時刻T_now_sと最終送信時刻T_lastの差が、ステップS311で算出した送信時間間隔Intより大きいか否かを判断する。すなわち、調整部314は、不等式(12)が成り立つか否かを判断する。
T_now_s-T_last > Int (12)
不等式(12)が成り立たない場合は、まだクライアント320に描画コマンドを送信しなくてよい。よって、処理はステップS303に戻る。逆に、不等式(12)が成り立つ場合、クライアント320に描画コマンドを送信するか否かを決定するために、処理は図11のステップS313に移行する。
ステップS313で調整部314は、過剰遅延解消時刻T_solvedを算出済みか否かを判断する。具体的には、調整部314は、送信制御データ316を参照して、過剰遅延解消時刻T_solvedとして有効な値(すなわち初期値とは別の値)が記憶されているか否かを判断する。
過剰遅延解消時刻T_solvedとして有効な値が記憶されていれば、過剰遅延解消時刻T_solvedは算出済みである。この場合、クライアント320に描画コマンドを送信するか否かは、過剰遅延解消時刻T_solvedによる。よって、描画コマンドを送信するか否かを過剰遅延解消時刻T_solvedに応じて決定するために、処理はステップS314に移行する。
逆に、過剰遅延時刻として無効な値が記憶されていれば、過剰遅延時刻はまだ算出されていない。この場合、クライアント320に描画コマンドを送信するか否かは、単に現在時刻T_now_sと最終送信時刻T_lastの差による。また、不等式(12)が成り立つことは、ステップS312において確認済みである。よって、描画コマンドの生成と送信のために、処理はステップS315に移行する。
ステップS314で調整部314は、現在時刻T_now_sが過剰遅延解消時刻T_solved以降であるか否かを判断する。現在時刻T_now_sが過剰遅延解消時刻T_solvedよりも前であれば、まだクライアント320に描画コマンドを送信しない方がよいので、処理はステップS303に戻る。逆に、現在時刻T_now_sが過剰遅延解消時刻T_solved以降であれば、描画コマンドの生成と送信のために、処理はステップS315に移行する。
ところで、以下では説明の便宜上、ステップS309で生成部312が差分を検出した領域を「差分領域」という。例えば、ステップS310に関して例示したように、画面がH×V個のブロックに分割されている場合、ステップS309では、H×V個のブロックのうち、0個、1個、または複数個のブロックにおいて、差分が検出される。差分が検出された各ブロックが、1つの差分領域である。
ステップS315で生成部312は、各差分領域について、当該差分領域を動画像用の圧縮アルゴリズムで圧縮するか、それとも静止画像用の圧縮アルゴリズムで圧縮するかを、ステップS310での動画領域の検出結果に基づいて決定する。具体的には、差分領域が動画領域に含まれる場合、生成部312は、当該差分領域を動画像用の圧縮アルゴリズムで圧縮することに決める。逆に、差分領域が動画領域に含まれない場合、生成部312は、当該差分領域を静止画像用の圧縮アルゴリズムで圧縮することに決める。
例えば、図2の例では、領域112と113は、差分領域である。しかし、領域112と領域113は、動画領域である領域111に含まれない。よって、生成部312は、領域112と113の各々を静止画像用の圧縮アルゴリズムで圧縮することに決める。
そして、次のステップS316で生成部312は、各動画領域を動画像用の圧縮アルゴリズムで圧縮し、静止画像用の圧縮アルゴリズムで圧縮することに決めた各差分領域を、静止画像用の圧縮アルゴリズムで圧縮する。
なお、ステップS310に関して例示したように、いくつか差分領域を包含する矩形領域が動画領域として決定される場合もある。この場合、差分の検出されていないブロックが動画領域に含まれることもあり得るが、生成部312は矩形の動画領域全体を動画像用の圧縮アルゴリズムで圧縮する。例えば、図2の例では、生成部312は、領域111を動画像用の圧縮アルゴリズムで圧縮する。
続いて、ステップS317で調整部314は、送信制御データ316を参照して、可用帯域幅の通知をクライアント320から受信済みか否かを判断する。可用帯域幅として有効な値(すなわち初期値以外の値)が記憶されていれば、可用帯域幅の通知は受信済みなので、処理はステップS318に移行する。逆に、可用帯域幅として無効な値が記憶されていれば、可用帯域幅の通知はまだ受信されていないので、処理はステップS320に移行する。
ステップS318で調整部314は、送信制御データ316を参照して、可用帯域幅EstBWの値を取得する。また、調整部314は、生成部312がステップS316で圧縮したデータの合計サイズを認識する。例えば、生成部312が調整部314に圧縮後のデータの合計サイズを通知してもよい。
そして、調整部314は、圧縮後のデータの合計サイズから、当該データをペイロードに含む描画コマンドのサイズを算出する。具体的には、描画コマンドの形式に応じて、調整部314は、各種ヘッダの長さなどを圧縮後のデータの合計サイズに足すことで、描画コマンドのサイズを算出する。以下では説明の便宜上、算出されるサイズを「Size_cmd」と表記し、当該サイズはバイト単位で表されるものとする。
ここで、以下の(15a)と(15b)の2点を仮定した場合に、可用帯域幅EstBWの範囲内で各フレームに対応する描画コマンドの送信を繰り返すことが可能な最大のフレームレートのことを、「送信可能フレームレート」ということにする。
(15a)各フレームに対応する描画コマンドのサイズが一定である。
(15b)具体的には、当該一定のサイズが、上記のようにして算出されたサイズSize_cmdである。
調整部314は、可用帯域幅EstBWと描画コマンドのサイズSize_cmdから、送信可能フレームレート(以下、「FPS_feasible」と表記する)を算出する。上記の定義より、送信可能フレームレートFPS_feasibleは、不等式(13)を満たす最大の値である。よって、調整部314は、式(14)にしたがって送信可能フレームレートFPS_feasibleを算出する。
8×Size_cmd×FPS_feasible≦EstBW (13)
FPS_feasible = EstBW/(8×Size_cmd) (14)
以上のようにしてステップS318で送信可能フレームレートFPS_feasibleが算出された後、処理はステップS319に移行する。すると、ステップS319で調整部314は、送信制御データ316を参照して、現在の送信フレームレートFPS_curを読み取る。そして、調整部314は、送信フレームレートFPS_curと送信可能フレームレートFPS_feasibleに基づいて、新たな送信フレームレートを設定する。例えば、調整部314は以下のようにして新たな送信フレームレートを設定してもよい。
ステップS308に関して説明したように、第2〜第4実施形態では、送信フレームレートの最大値が予め決められている。以下では説明の便宜上、送信フレームレートの最大値を「FPS_max」と表記する。調整部314は、送信フレームレートの現在の値FPS_curと送信可能フレームレートFPS_feasibleの平均値と、送信フレームレートの最大値FPS_maxのうち、小さい方の値を、新たに送信フレームレートとして設定してもよい。
すなわち、調整部314は、式(15)の右辺にしたがって新たな送信フレームレートを算出し、算出した値を、送信制御データ316中の送信フレームレートとして記憶してもよい。式(15)の左辺の「FPS_cur」という記号は、算出された新たな送信フレームレートを示す。
FPS_cur = min(FPS_max, (FPS_cur+FPS_feasible)/2) (15)
あるいは、調整部314は、0<C3≦1なる適宜の定数C3を用いて、式(15)の代わりに式(16)にしたがって、送信フレームレートFPS_curを更新してもよい。式(15)は、定数C3が1/2の場合の例である。
FPS_cur = min(FPS_max, (1-C3)×FPS_cur+C3×FPS_feasible) (16)
また、ステップS320では、付加部315が現在時刻を取得する。付加部315はさらに、生成部312により圧縮されたデータに現在時刻を付加し、描画コマンドを生成する。
なお、上記のとおり、実施形態に応じて描画コマンドの形式は適宜定められていてよい。例えば、アプリケーション層のヘッダに時刻情報を含むよう定義された形式の描画コマンドが使われる実施形態では、付加部315は、ステップS320でアプリケーション層のヘッダ中の時刻情報用の所定のフィールドに、現在時刻を書き込む。あるいは、ペイロードに時刻情報を含むよう定義された形式の描画コマンドが使われる実施形態では、付加部315は、ステップS320でペイロード中の時刻情報用の所定のフィールドに、現在時刻を書き込む。
そして、ステップS321で付加部315は、送信制御データ316中の最終送信時刻を、ステップS320で現在時刻として取得した時刻で上書きする。
さらに、ステップS322で送信部313は、付加部315により生成された描画コマンドをクライアント320に送信する。そして、処理は図10のステップS303に戻る。なお、ステップS321とS322の実行順序は入れ替えられてもよい。
以上説明した第2実施形態によれば、クライアント320とサーバ310の間のネットワークの可用帯域幅が狭くても、可用帯域幅に応じたフレームレートで画面情報が送信される。よって、遅延の累積を回避することができ、ある程度満足な操作レスポンス性能が得られる。つまり、ネットワーク状況が悪くても、ユーザビリティの低下は抑えられる。このような第2実施形態の利点について、図12を参照してさらに説明する。
図12は、過剰遅延時間と受信ビットレートの変化の例を示すグラフである。図12のグラフ400には、過剰遅延時間を示す曲線401と、クライアント320における受信ビットレートを示す曲線402が描かれている。
図12の例では、受信ビットレートはあまり大きく変動はしていない。しかし、例えばデフォルトの送信フレームレートが実際の可用帯域幅に対して過大である場合などに、曲線401に示すように、過剰遅延時間が次第に増加していく事態に陥ることがあり得る。図12の例では、時刻T1において、過剰遅延時間は閾値(図9の例では300ms)を超える。
しかし、第2実施形態によれば、過剰遅延時間が閾値を超えると、クライアント320がサーバ310に通知する可用帯域幅の推定値が下がるので、それに応じて送信フレームレートも下がる。また、サーバ310は、クライアント320から通知された過剰遅延時間に応じて、画面情報の送信を省略することがある(つまり、処理が図11のステップS314から図10のステップS303へと戻ることがある)。
よって、時刻T1の後、少し時間が経つと、サーバ310からクライアント320への通信トラフィックも減り、次第に過剰遅延時間は短くなってゆく。そして、曲線401に示すように、過剰遅延時間は、やがて小さな値で安定する。つまり、第2実施形態によれば、ネットワーク状況によって仮に一時的に過剰遅延時間が長くなってユーザビリティが多少悪化するとしても、フレームレートの調整により、ユーザビリティは、ある程度満足なレベルにまで回復する。
続いて、第3実施形態について説明する。図13は、第3実施形態のクライアントの動作フローチャートである。なお、図8のステップS201〜S213は第3実施形態にも共通である。図13と図9を比較すれば分かるように、第3実施形態では、ステップS215とS216の間にステップS401〜S404が追加されている。
推定部326は、ステップS214で送信時刻T_sentを取得し、ステップS215で式(5)により推定送信時刻EstT_sentを算出する。ステップS214とS215は図9と同様である。
その後、ステップS401で推定部326は、以下の(16a)〜(16c)の値を用いて、直近の受信ビットレートを算出する。
(16a)受信部324が、今回データ(つまり描画コマンド)を受信した時刻。換言すれば、受信履歴データ327の最新のエントリに記憶されている受信時刻T_rcvR。
(16b)ステップS215で算出した推定送信時刻EstT_sent。
(16c)受信部324が今回受信したデータのサイズ。換言すれば、受信履歴データ327の最新のエントリに記憶されているデータサイズSize_rcvR。
以下では説明の便宜上、ステップS401で算出される直近の受信ビットレートを「BPS_latest」とも表記する。推定部326は、具体的には、式(17)にしたがって直近の受信ビットレートBPS_latestを算出する。
BPS_latest = 8×Size_rcvR/(T_rcvR-EstT_sent) (17)
次に、ステップS402で推定部326は、直近の受信ビットレートBPS_latestが現在の可用帯域幅EstBWと比べて十分に大きいか否かを判断する。具体的には、推定部326は、不等式(18)が成立するか否かを判断する。
BPS_latest > (1+C4)×EstBW (18)
なお、不等式(18)における「C4」は、適宜の正の定数である。図13には、定数C4が0.1の場合が例示されている。図13に示すように、定数C4が例えば0.1の場合、推定部326は、具体的には、直近の受信ビットレートBPS_latestが現在の可用帯域幅EstBWの1.1倍を超えるか否かを判断する。
不等式(18)が成り立つ場合、処理はステップS403に移行する。不等式(18)が成り立たない場合、処理はステップS216に移行する。
なお、不等式(18)では、可用帯域幅EstBWに1より大きい所定の値を掛けた値が、直近の受信ビットレートBPS_latestと比較するための判定基準値として使われている。しかし、実施形態によっては、可用帯域幅EstBWに所定の正の値を足した値が、判定基準値として使われてもよい。
ステップS403で推定部326は、直近の受信ビットレートBPS_latestに応じて、可用帯域幅EstBWの値を大きくする。例えば、式(19)に示すように、推定部326は、直近の受信ビットレートBPS_latestを新たな可用帯域幅EstBWとして記憶してもよい。
EstBW = BPS_latest (19)
あるいは、式(20)に示すように、推定部326は、現在の可用帯域幅EstBWと直近の受信ビットレートBPS_latestとの平均値を、新たな可用帯域幅EstBWとして記憶してもよい。
EstBW = (EstBW+BPS_latest)/2 (20)
なお、推定部326は、0<C5≦1なる適宜の定数C5を用いて、式(21)にしたがって新たな可用帯域幅EstBWを算出してもよい。
EstBW = (1-C5)×EstBW+C5×BPS_latest (21)
式(19)は、式(21)における定数C5が1の場合の具体例である。また、式(20)は、式(21)における定数C5が1/2の場合の具体例である。
定数C5の値が1に近いほど、実際の可用帯域幅が急激に増加した場合に、可用帯域幅の推定値EstBWを実際の可用帯域幅の増加に素早く追従させることができる。例えば式(19)が使われる場合、ネットワーク状況の好転に素早く対応して、フレームレートを上昇させ、フレームレートの上昇によってクライアント320の表示部322の表示をより滑らかにすることが可能である。
また、定数C5が小さいほど、可用帯域幅EstBWの変化は緩やかになる。例えば式(20)を使うことには、可用帯域幅の変動が激しい場合にも安定した制御を可能とする効果がある。
なお、不等式(18)が成り立つので、式(19)〜(21)のいずれが使われる場合も、可用帯域幅EstBWの値は増加する。具体的には、可用帯域幅EstBWの値は、今までの値の(1+C4×C5)倍の値を超えることになる。
続いて、ステップS404で推定部326は、ステップS403で更新した可用帯域幅EstBWを用いて、式(4)により推定転送時間EstT_transを再計算する。そして、処理はステップS216に移行する。
ステップS216で推定部326は、式(6)により、過剰遅延時間ExtraDelayを算出する。式(4)と(6)から分かるように、上記のステップS403で可用帯域幅EstBWが更新された場合は、ステップS216で算出される過剰遅延時間ExtraDelayにも可用帯域幅EstBWの更新が反映される。
そして、ステップS217で推定部326は、過剰遅延時間ExtraDelayが300msより長いのか、0msより長く300ms以下なのか、それとも0ms以下なのかを判断する。
過剰遅延時間ExtraDelayが300msより長ければ、推定部326は、ステップS218で式(7)にしたがって可用帯域幅データ329を更新する(すなわち可用帯域幅EstBWの値を減少させる)。実施形態によっては、式(7)の代わりに式(8)が使われてもよい。そして、推定部326は、ステップS219で過剰遅延時間ExtraDelayを再計算する。その後、ステップS220で可用帯域幅EstBWと過剰遅延時間ExtraDelayが送信部323からサーバ310に通知される。
過剰遅延時間ExtraDelayが0msより長く300ms以下であれば、ステップS220で可用帯域幅EstBWと過剰遅延時間ExtraDelayが送信部323からサーバ310に通知される。
過剰遅延時間ExtraDelayが0ms以下ならば、推定部326は、ステップS221で式(9)にしたがって可用帯域幅データ329を更新する(すなわち可用帯域幅EstBWの値を増加させる)。そして、推定部326は、ステップS222で過剰遅延時間ExtraDelayを再計算する。その後、ステップS220で可用帯域幅EstBWと過剰遅延時間ExtraDelayが送信部323からサーバ310に通知される。
ステップS220での通知の後、処理は図8のステップS202に戻る。
なお、図13から分かるように、第3実施形態では、以下の(17a)〜(17c)のいずれの場合もあり得る。以下の(17a)〜(17c)のいずれの場合も、推定部326が可用帯域幅EstBWを増加させるという点と、増加した可用帯域幅EstBWがサーバ310に通知されるという点では共通である。
(17a)ステップS403とS221の両方が実行される場合。
(17b)ステップS403は実行され、ステップS221は実行されない場合。
(17c)ステップS403は実行されず、ステップS221が実行される場合。
また、ステップS402の式(18)における定数C4と、ステップS403の式(21)における定数C5と、ステップS221の式(9)における定数C2は、実施形態に応じて適宜に決められてよい。例えば、3つの定数は、不等式(22)を満たすように決められていてもよい。
C2 ≦ C4×C5 (22)
不等式(22)は、可用帯域幅の推定値EstBWの算出において、ステップS221に相当する下記(18a)の判断よりも、ステップ403に相当する下記(18b)の追従の方を重視することを意味する。
(18a)過剰遅延時間が所定の閾値(具体的には、ステップS217で使われる0msという値)以下の場合における、「可用帯域幅の実際の値は、現在の推測値よりも大きい可能性がある」という判断。
(18b)実際の直近のビットレートの増加への追従。
なお、第3実施形態は以下のように変形されてもよい。具体的には、ステップS403が実行された場合、ステップS404とS216の実行後、推定部326は、ステップS217の判断を省略して、可用帯域幅EstBWと過剰遅延時間ExtraDelayを送信部323に出力してもよい。そして、ステップS220で送信部323が可用帯域幅EstBWと過剰遅延時間ExtraDelayをサーバ310に通知してもよい。
続いて、第4実施形態について説明する。以下に述べるように、第4実施形態には、可用帯域幅の推定精度を向上させる効果がある。
具体的には、第4実施形態では、過剰遅延時間ExtraDelayが所定の閾値(例えば0ms)以下の場合に、クライアント320は、すぐに可用帯域幅の推定値EstBWを増加させる代わりに、今までの推定値よりも大きな値をサーバ310に通知する。クライアント320は、大きな値をサーバ310に通知することにより、間接的に送信フレームレートを制御する(具体的には、上昇させる)。
サーバ310が送信する描画コマンドのデータサイズは、実行中のアプリケーションやユーザからの入力に応じて変動する。しかし、大まかな傾向としては、送信フレームレートが高いほど、単位時間あたりにサーバ310がクライアント320に送信するデータの量も多い。
よって、実際の可用帯域幅が可用帯域幅の現在の推定値よりも大きければ、送信フレームレートが上昇しても経路上でデータが滞留することはないと考えられる。つまり、実際の可用帯域幅が可用帯域幅の現在の推定値よりも大きければ、送信フレームレートの上昇に応じて受信ビットレートも上昇すると考えられる。
よって、クライアント320は、上記のように大きな値をサーバ310に通知した後に、実際にクライアント320における受信ビットレートの上昇を確認したら、そのときに可用帯域幅の推定値EstBWを増加させる。つまり、クライアント320は、送信フレームレートの上昇に対処するだけの余裕が実際の可用帯域幅にあったことを確認してから、可用帯域幅の推定値EstBWを増加させる。
以上のように、第4実施形態では、実際の受信ビットレートの上昇に基づいて可用帯域幅の推定値EstBWをクライアント320が増加させるため、可用帯域幅の推定精度が向上する。可用帯域幅の推定精度の向上により、過剰遅延時間ExtraDelayの精度も向上する。よって、第4実施形態では、より実際の可用帯域幅に即した頻度で、画面情報(具体的には描画コマンド)が送信される。
なお、第4実施形態では、上記のように可用帯域幅の推定値EstBWよりも大きな値をクライアント320がサーバ310に通知する場合もあるし、可用帯域幅の推定値EstBW自体をクライアント320がサーバ310に通知する場合もある。いずれの場合も、クライアント320は、通知した値を記憶する。
具体的には、第4実施形態においては、図6の可用帯域幅データ329は、図7の可用帯域幅データ329bのように、可用帯域幅だけでなく前回通知帯域幅を含む。クライアント320は、サーバ310に通知した値を、前回通知帯域幅として記憶する。以下では便宜上、前回通知帯域幅を「PrevRepBW」と表記することがある。
続いて、図14を参照して第4実施形態についてさらに詳しく説明する。図14は、第4実施形態のクライアントの動作フローチャートである。なお、図8のステップS201〜S213は第4実施形態にも共通である。
図14と図13を比較すれば分かるように、第4実施形態では、図13のステップS217とステップS220で挟まれた処理が、図14の処理に置き換わる。つまり、第4実施形態では、図8のステップS213の後、図13のステップS214、S215、S401、およびS402が実行される。さらに、ステップS402の判定結果によっては、ステップS403とS404も実行される。その後、ステップS216が実行されて過剰遅延時間ExtraDelayが算出されてから、図14のステップS217が実行される。
よって、図14のステップS217が実行される時点における可用帯域幅EstBWの値は、以下の(19a)〜(19c)のいずれかである。
(19a)ステップS212で式(3)により算出された値。
(19b)ステップS403で式(21)により更新された値。
(19c)今回の描画コマンドが受信された時点で既に可用帯域幅データ329bに可用帯域幅として記憶されていたままの値。
また、ステップS217において参照される過剰遅延時間ExtraDelayは、式(4)と(6)に示すように、可用帯域幅EstBWに依存する。ステップS217では、第2〜第3実施形態と同様に、推定部326が、過剰遅延時間ExtraDelayが0ms以下なのか、0msより長く300ms以下なのか、それとも300msより長いのかを判断する。
過剰遅延時間ExtraDelayが0ms以下の場合、処理はステップS501に移行する。過剰遅延時間ExtraDelayが0msより長く300ms以下の場合、処理はステップS502に移行する。過剰遅延時間ExtraDelayが300msより長い場合、処理はステップS503に移行する。
ステップS501で推定部326は、図9や図13のステップS221のように可用帯域幅EstBWの値を増加させる代わりに、可用帯域幅EstBWよりも大きな値を通知帯域幅として設定する。以下では便宜上、通知帯域幅を「RepBW」とも表記する。
通知帯域幅RepBWは、クライアント320がサーバ310に通知する値である。後述のように、可用帯域幅EstBW自体が通知帯域幅RepBWとして使われる場合もある。
具体的には、ステップS501で推定部326は、比較的小さな正の適宜の定数C6を用いて、式(23)により通知帯域幅RepBWの値を決定する。図14には、C6=0.1の場合が例示されている。
RepBW = (1+C6)×EstBW (23)
なお、上記(19b)に示すとおり、式(23)の可用帯域幅EstBWは、ステップS403で増加した値の場合もあり得る。この場合、ある観点から見れば、式(23)により算出される通知帯域幅RepBWは、可用帯域幅EstBWの増加を強調して示す1種の指標値でもある。
実施形態によっては、推定部326は、式(23)のように1より大きい所定の値を可用帯域幅EstBWに掛ける代わりに、所定の正の値を可用帯域幅EstBWに足すことで、通知帯域幅RepBWを算出してもよい。
なお、ステップS501が実行されるのは過剰遅延時間ExtraDelayが0ms以下の場合である。この場合、「可用帯域幅の現在の推定値EstBWが実際の値と比べて過小である」という可能性がある。よって、この可能性が実際に成り立つのか否かを検証するため、推定部326は、ステップS501で通知帯域幅RepBWを可用帯域幅EstBWよりも大きく設定する。ステップS501の実行後、処理はステップS505へと移行する。
ステップS502で推定部326は、可用帯域幅EstBWの現在の値を通知帯域幅RepBWとして設定する。つまり、ステップS502は式(24)のように表される。ステップS502の実行後、処理はステップS505へと移行する。
RepBW = EstBW (24)
ステップS503で推定部326は、可用帯域幅データ329bを参照し、可用帯域幅EstBWが前回通知帯域幅PrevRepBW未満か否かを判断する。すなわち、推定部326は、不等式(25)が成り立つか否かを判断する。
EstBW < PrevRepBW (25)
不等式(25)が成り立つ場合、処理はステップS502に移行する。逆に、不等式(25)が成り立たない場合、処理はステップS218に移行する。なお、ステップS503での判断の意味については、ステップS506まで説明してから述べる。
ステップS218で推定部326は、以下に再掲する式(7)にしたがって(あるいは、式(7)を一般化した式(8)にしたがって)、可用帯域幅EstBWを更新する。図14には、ステップS218で式(7)が使われる場合が例示されている。
EstBW = (EstBW+BPS_avr)/2 (7)
EstBW = (1-C1)×EstBW+C1×BPS_avr (8)
そして、次のステップS219で推定部326は、ステップS218で更新した可用帯域幅EstBWを用いて、過剰遅延時間ExtraDelayを再計算する。第2実施形態に関して説明したように、再計算による値の変化は比較的小さいので、ステップS219での再計算は省略されてもよい。
さらに、次のステップS504で推定部326は、ステップS218で更新した可用帯域幅EstBWの値を、通知帯域幅RepBWとして設定する。ステップS504は式(26)のように表される。
RepBW = EstBW (26)
通知帯域幅RepBWの設定後、処理はステップS505に移行する。なお、実施形態によっては、ステップS219とS504の実行順序が入れ替えられてもよい。
ステップS505では、推定部326が通知帯域幅RepBWと過剰遅延時間ExtraDelayを送信部323に出力する。すると、送信部323は、通知帯域幅RepBWと過剰遅延時間ExtraDelayを含む通知をサーバ310に送信する。
なお、サーバ310は、クライアント320から通知された通知帯域幅RepBWを可用帯域幅EstBWとして扱う。よって、クライアント320が通知した通知帯域幅RepBWは、図10のステップS305において、サーバ310の送信制御データ316における可用帯域幅EstBWとして記憶される。
さて、ステップS505の実行後、ステップS506で推定部326は、通知帯域幅RepBWを、可用帯域幅データ329b中の前回通知帯域幅PrevRepBWとして記憶する。そして、処理は図8のステップS202に戻る。なお、実施形態によっては、ステップS505とS506の実行順序が入れ替えられてもよい。
ここで、ステップS503の判断の意味を説明する。ステップS503で不等式(25)が成り立つ場合とは、具体的には、前回ステップS501で可用帯域幅EstBWよりも大きく設定された値が、前回通知帯域幅PrevRepBWとして記憶されている場合である。また、ステップS503が実行されるのは、過剰遅延時間ExtraDelayが300msより長い場合である。
したがって、ステップS503において不等式(25)が成り立つことは、「可用帯域幅の推定値EstBWが実際の値と比べて過小なのか否かを検証したら、可用帯域幅の推定値EstBWが過小でないことが判明した」ということを意味する。より詳しくは以下のとおりである。
上記のように、ステップS501で、推定部326は、可用帯域幅の推定値EstBWが実際の値と比べて過小なのか否かを検証するために、可用帯域幅の推定値EstBWよりも大きく通知帯域幅RepBWを設定することがある。クライアント320は、こうして大きく設定した通知帯域幅RepBWをサーバ310に通知する。
その結果、サーバ310が送信フレームレートを上昇させ、単位時間当たりの通信トラフィックが増える。一方、もし可用帯域幅の推定値EstBWが実際の値と比べて過小でないならば、以上のような単位時間当たりの通信トラフィックの増加の結果として、サーバ310からクライアント320への経路上でデータの滞留が生じ、過剰遅延時間も長くなる。
このようにして過剰遅延時間が300msという閾値を超えてしまう場合、可用帯域幅EstBWは、クライアント320が以前サーバ310に通知した通知帯域幅RepBWより小さい。なぜなら、推定部326はまだ可用帯域幅EstBWを増加させてはいないからである。
また、このようにして過剰遅延時間が300msを超えてしまう場合は、クライアント320が前回サーバ310に通知した通知帯域幅RepBWは、実際の可用帯域幅と比べて過大である。つまり、現在可用帯域幅データ329bに記録されている前回通知帯域幅PrevRepBWは過大なのであって、むしろ可用帯域幅EstBWが適正である。換言すれば、可用帯域幅EstBWは過小ではない。
ステップS503からステップS502への処理の流れは、以上のようにして可用帯域幅EstBWが過小ではなく適正であることが確認された場合に、その適正な可用帯域幅EstBWをクライアント320がサーバ310に通知しなおすことを意味する。
他方、たとえステップS501が実行されることがないとしても、ネットワークの状況の変化によっては、過剰遅延時間が300msを超えてしまう場合もあり得る。その場合は、現在の可用帯域幅EstBWですら過大であるから、クライアント320は、現在の可用帯域幅EstBWよりも小さな値をサーバ310に通知することが望ましい。
ステップS503からステップS218への処理の流れは、以上のようにクライアント320によるステップS501の処理とは無関係に起こり得るネットワーク状況の悪化に起因する過剰遅延時間の増大への対処を意味する。
クライアント320の動作とは関係なくネットワーク状況が悪化した場合は、以前ステップS502またはS504で設定された通知帯域幅RepBWが前回通知帯域幅PrevRepBWとして現在記憶されている。よって、推定部326は、ステップS503で可用帯域幅EstBWが前回通知帯域幅PrevRepBW以上であると判断し、ステップS218で可用帯域幅EstBWを減少させる。そして、推定部326は、ステップS504で、減少させた可用帯域幅EstBWを、新たに通知帯域幅RepBWとして設定する。その結果、ステップS505では、減少させた可用帯域幅EstBWがサーバ310に通知される。
なお、可用帯域幅の推定値EstBWが実際の値と比べて過小なのか否かを検証するために推定部326がステップS501で通知帯域幅RepBWを大きく設定した後、可用帯域幅の推定値EstBWが過小だと判明する場合もあり得る。具体的には、次のような場合である。
もし可用帯域幅の推定値EstBWが過小ならば、ステップS501で可用帯域幅の推定値EstBWよりも大きく設定された通知帯域幅RepBWがサーバ310に通知されると、クライアント320における実際の受信ビットレートが上昇する。つまり、ステップS501の実行後の受信ビットレートの上昇により、可用帯域幅の推定値EstBWが過小であることが判明する。
具体的には、ステップS402で受信ビットレートの上昇が検出される場合、可用帯域幅の推定値EstBWが過小であることが判明する。よって、この場合、ステップS403で推定部326は、上昇した実際の受信ビットレートに基づいて、可用帯域幅の推定値EstBWを増加させる。
以上のように、第4実施形態では、ステップS402の判断は、ステップS501での通知帯域幅RepBWの設定と関連する場合がある。よって、ステップS402の式(18)の定数C4と、ステップS501の式(23)の定数C6は、定数C4が定数C6よりもわずかに小さくなるように定められていることが好ましい。
ところで、以上説明した第4実施形態では、図7の可用帯域幅データ329bに含まれる通知帯域幅の履歴は、過去の1つの通知帯域幅(すなわち前回通知帯域幅PrevRepBW)のみである。しかし、実施形態によっては、過去の2つ以上の通知帯域幅を可用帯域幅データ329bが含んでいてもよい。この場合、ステップS503で推定部326は、例えば、過去の2つ以上の通知帯域幅のうち、1つでも可用帯域幅より大きいものがあるか否かを判断してもよい。
そして、過去の2つ以上の通知帯域幅のうち、1つでも可用帯域幅より大きいものがあれば、処理がステップS503からステップS502へと移行する。逆に、過去の2つ以上の通知帯域幅のすべてが可用帯域幅以下ならば、処理はステップS503からS218へと移行する。
あるいは、ステップS503で推定部326は、1より大きい所定の定数C7を用いて、過去の2つ以上の通知帯域幅のうち、1つでも、定数C7を可用帯域幅に乗じた基準値より大きいものがあるか否を判断してもよい。そして、過去の2つ以上の通知帯域幅のうち、1つでも基準値より大きいものがあれば、処理がステップS503からステップS502へと移行する。逆に、過去の2つ以上の通知帯域幅のすべてが基準値以下ならば、処理はステップS503からS218へと移行する。
なお、所定の定数C7は、例えば、ステップS501で使われる定数C6との間に不等式(27)の関係が成り立つように定められていてもよい。
1 < C7 < (1+C6) (27)
また、過去の2つ以上の通知帯域幅を可用帯域幅データ329bに記憶するために、リングバッファが使われてもよい。ステップS506では、推定部326は、今回設定した通知帯域幅を、1番近い過去の通知帯域幅として記憶すればよい。
以上のように、過去の2つ以上の通知帯域幅を含む可用帯域幅データ329bを利用する実施形態は、通知帯域幅の上昇から送信フレームレートの上昇を経て遅延の累積に至るまでにある程度のタイムラグが生じる場合にも好適である。
なお、本発明は上記の第1〜第4実施形態に限られるものではなく、上記の第1〜第4実施形態は様々に変形可能である。以下に、変形に関するいくつかの観点を例示する。例えば、上記の第1〜第4実施形態は、下記の観点から様々に変形することができ、これらの変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
上記の第1〜第4実施形態におけるいくつかの処理は、閾値との比較を含む。例えば、図9のステップS217、図10のステップS306とS312、図11のステップS314、図13のステップS402とS217、図14のステップS217とS503では、閾値との比較が行われる。
閾値との比較は、実施形態により「比較対象の数値が、閾値を超えるか否か」を判断する処理でもよいし、「比較対象の数値が、閾値以上か否か」を判断する処理でもよい。また、上記の説明では様々な用途の閾値を例示したが、各閾値の具体的な値は、実施形態に応じて適宜任意に決められてよい。
図7にはテーブル形式で各種データを示したが、実施形態に応じて他のデータ形式が使われてもよい。
また、第2〜第4実施形態では時刻合わせコマンドが使われるが、実施形態によっては、時刻合わせコマンドが使われなくてもよい。代わりに、NTP(Network Time Protocol)またはSNTP(Simple Network Time Protocol)などのプロトコルにしたがって、クライアント320の時計をサーバ310の時計に同期させる処理が事前に行われてもよい。例えば、図8のステップS201と図10のステップS301に示すリモートデスクトップ初期化処理が、NTPまたはSNTPによる同期処理を含んでいてもよい。
また、時刻合わせコマンドが使われる実施形態において、サーバ310は、時刻合わせコマンドを1回だけ送信するのではなく、定期的に、または不定期に、複数回、時刻合わせコマンドを送信してもよい。その場合、クライアント320の受信部324は、時刻合わせコマンドを受信するたびに時刻差データ328を更新する。
なお、図6には1台のクライアント320が描かれているが、サーバ310は、複数のクライアント320のそれぞれに対して画像を生成し、画面情報と時刻情報を含む描画コマンドを送信してもよい。その場合、サーバ310は、クライアント320ごとに送信制御データ316を管理する。クライアント320ごとの管理のために、送信制御データ316は、クライアント320を識別する識別情報をさらに含んでいてもよい。
また、クライアント320が複数台の場合、サーバ310は、複数のクライアント320のそれぞれに対応して独立に図10〜11の処理を実行する。例えば、サーバ310は、複数のスレッドで並行してそれぞれ図10〜11の処理を実行してもよい。つまり1つのスレッドが1台のクライアント320に対応していてもよい。
また、図8〜11、13、および14のように、いくつか具体的なフローチャートを例示したが、矛盾が生じない限り、実施形態に応じて、ステップの実行順序が入れ替えられてもよい。また、入れ替え可能なステップ同士(すなわち互いに独立したステップ同士)は、並列に実行されてもよい。
ステップの実行順序の入れ替えやステップの省略については、いくつかの例を上記の説明においても述べたが、さらに、例えば以下のような変更も可能である。
例えば、クライアント320は、第2〜第4実施形態のように過剰遅延時間をサーバ310に通知することが好ましいが、過剰遅延時間をサーバ310に通知しなくてもよい。過剰遅延時間が通知されない実施形態では、ステップS307、S313、およびS314は省略される。
また、クライアント320は、第2〜第4実施形態のように、描画コマンドの受信のたびに、可用帯域幅と過剰遅延時間の算出と通知を行ってもよい。しかし、可用帯域幅と過剰遅延時間の通知に起因するネットワーク負荷を減少させるため、クライアント320は、描画コマンドをN1回受信するごとに1回だけ、可用帯域幅と過剰遅延時間の算出と通知を行ってもよい(N1>1)。クライアント320が可用帯域幅と過剰遅延時間の算出と通知を行わない場合には、図8のステップS209の実行後、処理はステップS202に戻る。
あるいは、クライアント320は、描画コマンドの受信のたびに可用帯域幅と過剰遅延時間を算出し、直近のN2回の描画コマンドの受信のときに算出した可用帯域幅と過剰遅延時間の値の履歴を保持してもよい(N2≧1)。そして、クライアント320は、履歴を参照して、可用帯域幅の変化の大きさまたは変化の傾向を判断してもよく、過剰遅延時間の変化の大きさまたは変化の傾向を判断してもよい。
クライアント320は、可用帯域幅の変化の大きさもしくは変化の傾向が所定の基準を満たす場合か、または、過剰遅延時間の変化の大きさもしくは変化の傾向が所定の基準を満たす場合にだけ、可用帯域幅と過剰遅延時間をサーバ310に送信してもよい。例えば、上記の所定の基準は、以下の(20a)〜(20c)に例示するような基準であってもよいし、その他の基準であってもよい。
(20a)履歴中のN2個の値のうちのいずれか(例えば最大値または最小値)と比べて、今回算出された値は、所定のパーセンテージ以上に大きく変化している。
(20b)履歴中のN2個の値の平均値と比べて、今回算出された値は、所定のパーセンテージ以上に大きく変化している。
(20c)値がN2回連続して増加しているか、または、N2回連続して減少している。
例えば以上のようにして、可用帯域幅と過剰遅延時間を通知する場合を制限することにより、クライアント320は、可用帯域幅と過剰遅延時間の通知に起因するネットワーク負荷を抑えてもよい。
また、ステップS209での描画処理と、ステップS210以降の処理は、並列に実行されてもよい。ステップS210以降の処理(つまり、ステップS220またはS506までの処理)の後に、ステップS209が実行されてもよい。
あるいは、ステップS210がステップS204の直後に移動されてもよい。ステップS213がステップS215とS216の間に移動されてもよい。
送信制御データ316中の送信フレームレートの更新に関わるステップS317〜S319の処理は、描画コマンドの生成と送信に関わるステップS315〜S316およびS320〜S322の処理とは独立している。よって、これら2つの処理は、並列に実行されてもよい。
また、図10〜11に示すように、第2〜第4実施形態のサーバ310は、所定の間隔でステップS308を実行し、画面全体の画像を取得する。しかし、ステップS312またはS314の判断結果によっては、サーバ310は、取得した画像に対応する描画コマンドを送信しない場合がある。
このように、「描画コマンドを送信しない条件が成り立つにもかかわらず、画像が取得される」という場合がある理由は、ステップS310での動画領域の検出が、固定された間隔での画面の変化に基づいて行われるようにするためである。しかし、実施形態によっては、ステップS308〜S310は、例えばステップS315の直前に移動されてもよい。つまり、可変の送信フレームレートに応じた間隔で、動画領域の検出が行われてもよい。
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
(付記1)
第1のコンピュータに、
ネットワークを介して前記第1のコンピュータと接続された第2のコンピュータであって、
前記第1のコンピュータの入力装置を介して前記第1のコンピュータに与えられた入力についての通知を前記第1のコンピュータから受信し、
前記入力に応じて1つ以上のプログラムを実行し、
前記1つ以上のプログラムの実行に応じて、前記第1のコンピュータの画面に表示するための画像を生成し、
前記第1のコンピュータに前記画像を前記画面上に表示させるための画面情報を送信するとともに、前記画面情報を送信する第1の時刻を示す時刻情報を送信し、
前記第1のコンピュータから通知される値に基づいて、前記画面情報を送信する頻度を調整しながら、前記画像の生成ならびに前記画面情報および前記時刻情報の送信を繰り返す
ことを特徴とする第2のコンピュータから、前記画面情報と前記時刻情報を受信し、
前記第1のコンピュータと前記第2のコンピュータとの間の前記ネットワークの可用帯域幅の推定値を、
前記第1のコンピュータが前記画面情報を受信した第2の時刻と、
前記推定値と、受信した前記画面情報のサイズと、受信した前記時刻情報により示される前記第1の時刻から、前記第1のコンピュータが前記画面情報を受信するものと推定される第3の時刻と
の差に応じて、増加させるか、維持するか、または、ある期間内に1回以上受信した前記画面情報それぞれのサイズと前記期間の長さから算出される第1の受信ビットレートに基づいて減少させ、
少なくとも前記推定値を増加または減少させることで更新した場合には、前記推定値または前記推定値の更新を反映する指標値を前記第2のコンピュータに通知する
ことを含む画面更新制御処理を実行させる画面更新制御プログラム。
(付記2)
前記推定値を前記差に応じて増加させるか、維持するか、または、減少させる処理は、
前記差が正の第1の閾値より大きいとき、前記第1の受信ビットレートに基づいて前記推定値を減少させ、
前記差が前記第1の閾値未満の第2の閾値以下のとき、前記推定値を増加させ、
前記差が前記第2の閾値より大きく前記第1の閾値以下のとき、前記推定値を維持する
ことを含むことを特徴とする付記1に記載の画面更新制御プログラム。
(付記3)
前記推定値を増加させる処理が、前記推定値を所定の割合で増加させるかまたは所定の値だけ増加させる処理である
ことを特徴とする付記1または2に記載の画面更新制御プログラム。
(付記4)
直近に受信された前記画面情報に関しての、
前記第1の時刻と
前記第2の時刻と
前記サイズ
から算出される第2の受信ビットレートが、前記推定値に基づいて前記推定値よりも大きく定められる判定基準値よりも大きい場合、前記第2の受信ビットレートに応じて前記推定値を増加させる
ことを前記画面更新制御処理が含むことを特徴とする付記1から3のいずれか1項に記載の画面更新制御プログラム。
(付記5)
前記差が所定の閾値以下の場合に、
前記推定値を維持するとともに、
前記推定値よりも大きな値を前記第2のコンピュータに通知する
ことを前記画面更新制御処理が含むことを特徴とする付記1、3、または4に記載の画面更新制御プログラム。
(付記6)
前記画面更新制御処理は、前記差を前記第2のコンピュータに通知することを含む
ことを特徴とする付記1から5のいずれか1項に記載の画面更新制御プログラム。
(付記7)
最初に受信された前記画面情報に関しての、
前記第1の時刻と
前記第2の時刻と
前記サイズ
から算出される第3の受信ビットレートを用いて、前記推定値を初期化することを前記画面更新処理が含む
ことを特徴とする付記1から6のいずれか1項に記載の画面更新制御プログラム。
(付記8)
前記ある期間は、現在から所定範囲内に含まれる期間である
ことを特徴とする付記1から7のいずれか1項に記載の画面更新制御プログラム。
(付記9)
第1のコンピュータが、前記第1のコンピュータの入力装置を介して前記第1のコンピュータに与えられた入力を、ネットワークを介して前記第1のコンピュータと接続された第2のコンピュータに通知し、
前記第2のコンピュータが、前記通知された入力に応じて1つ以上のプログラムを実行し、
前記第2のコンピュータが、前記1つ以上のプログラムの実行に応じて、前記第1のコンピュータの画面に表示するための画像を生成し、
前記第2のコンピュータが、前記第1のコンピュータに前記画像を前記画面上に表示させるための画面情報を送信するとともに、前記画面情報を送信する第1の時刻を示す時刻情報を送信し、
前記第1のコンピュータが、前記画面情報と前記時刻情報を受信し、
前記第1のコンピュータが、前記第1のコンピュータと前記第2のコンピュータとの間の前記ネットワークの可用帯域幅の推定値を、
前記第1のコンピュータが前記画面情報を受信した第2の時刻と、
前記推定値と、受信した前記画面情報のサイズと、受信した前記時刻情報により示される前記第1の時刻から、前記第1のコンピュータが前記画面情報を受信するものと推定される第3の時刻
の差に応じて、増加させるか、維持するか、または、ある期間内に1回以上受信した前記画面情報それぞれのサイズと前記期間の長さから算出される受信ビットレートに基づいて減少させ、
前記第1のコンピュータが、少なくとも前記推定値を増加または減少させることで更新した場合には、前記推定値または前記推定値の更新を反映する指標値を前記第2のコンピュータに通知し、
前記第2のコンピュータが、通知された前記推定値または通知された前記指標値に基づいて、前記画面情報を送信する頻度を調整しながら、前記画像の生成ならびに前記画面情報および前記時刻情報の送信を繰り返す
ことを含む画面更新制御方法。
(付記10)
前記画面更新制御方法は、前記第1のコンピュータが前記差を前記第2のコンピュータに通知することを含み、
前記第2のコンピュータは、通知された前記差にも基づいて前記頻度を調整する
ことを特徴とする付記9に記載の画面更新制御方法。
(付記11)
前記差が所定の閾値以下の場合に、前記第1のコンピュータが、
前記推定値を維持するとともに、
前記推定値よりも大きな値を前記第2のコンピュータに通知する
ことを特徴とする付記9または10に記載の画面更新制御方法。
(付記12)
ネットワークを介して接続された第1の情報処理装置と第2の情報処理装置を含むシステムで使われる前記第1の情報処理装置であって、
前記第1の情報処理装置と前記第2の情報処理装置との間の前記ネットワークの可用帯域幅の推定値または前記推定値の更新を反映する指標値を示す通知を、前記第2の情報処理装置に送信し、前記第1の情報処理装置に入力が与えられると、前記入力についての通知を前記第2の情報処理装置に送信する送信部と、
前記第2の情報処理装置が、前記入力についての前記通知に基づいて1つ以上のプログラムを実行し、前記1つ以上のプログラムの実行に応じて、前記第1の情報処理装置の画面に表示するための画像を生成し、前記第1の情報処理装置に前記画像を前記画面上に表示させるための画面情報を送信するとともに、前記画面情報を送信する第1の時刻を示す時刻情報を送信し、前記推定値または前記指標値に基づいて前記画面情報を送信する頻度を調整しながら前記画像の生成ならびに前記画面情報および前記時刻情報の送信を繰り返すと、前記第2の情報処理装置から、順次送信される前記画面情報と前記時刻情報をそれぞれ受信する受信部と、
前記推定値を、
前記画面情報が前記受信部により受信された第2の時刻と、
前記推定値と、前記受信部が受信した前記画面情報のサイズと、前記受信部が受信した前記時刻情報により示される前記第1の時刻から、前記受信部が前記画面情報を受信するものと推定される第3の時刻と
の差に応じて、増加させるか、維持するか、または、ある期間内に1回以上前記受信部により受信された前記画面情報それぞれのサイズと前記期間の長さから算出される受信ビットレートに基づいて減少させる推定部と、
を備えることを特徴とする第1の情報処理装置。