(57)【要約】  本開示の特定の態様は、ベースボード管理コントローラ（ＢＭＣ）によって実施される、ウェブベースのキーボード、ビデオ、およびマウス（ＫＶＭ）リダイレクトを実施する方法に関する。方法は、（ａ）ＢＭＣにおいて、ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、ＢＭＣは、ホストコンピュータの管理機能を実施する、（ｂ）ＢＭＣのウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムにウェブページを送信することであって、ウェブページは、ブラウザプログラムに、描画可能領域を起動して、ウェブサーバとのウェブソケット接続を確立するよう命令するようにプログラムされている、（ｃ）第２のビデオフレームを表す処理済み画像を生成することと、（ｄ）ウェブサーバとブラウザプログラムとの間にウェブソケット接続を確立することと、（ｅ）ウェブソケット接続を通じてブラウザプログラムに処理済み画像を送信することとを含む。【選択図】  図１
2016517564.tif 000002
【特許請求の範囲】
【請求項１】
ベースボード管理コントローラ（ＢＭＣ）によって実施される、ウェブベースのキーボード、ビデオおよびマウス（ＫＶＭ）リダイレクトを実施する方法であって、
ＢＭＣにおいて、ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、前記ＢＭＣは、前記ホストコンピュータの管理機能を実施する、ことと、
前記ＢＭＣのウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムに前記ウェブページを送信することであって、前記ウェブページは、前記ブラウザプログラムに、描画可能領域を起動して、前記ウェブサーバとのウェブソケット接続を確立するよう命令するようにプログラムされている、ことと、
前記第２のビデオフレームを表す処理済み画像を生成することと、
前記ウェブサーバと前記ブラウザプログラムとの間にウェブソケット接続を確立することと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記処理済み画像を送信することとを含む、方法。
【請求項２】
前記処理済み画像を生成することは、
前記ＢＭＣにおいて、前記第２のビデオフレームの第１のピクセルを決定するために前記第２のビデオフレームを前記第１のビデオフレームと比較することであって、前記第１のピクセルは、前記第１のビデオフレームの対応するピクセルのピクセル値とは異なるピクセル値を有する、ことと、
第１のタイル画像および関連するタイルパラメータを生成することであって、前記第１のタイル画像は、前記第１のピクセルを含む前記第２のビデオフレームの一部分を表す、こととを含み、
前記処理済み画像を送信することは、前記ウェブソケット接続を通じて前記ブラウザプログラムに前記第１のタイル画像および前記タイルパラメータを送信することとを含み、
前記ウェブページは、前記ブラウザプログラムに、前記描画可能領域上で、前記タイルパラメータによって示される位置に前記第１のタイル画像をパッチするよう命令するようにプログラムされている、請求項１に記載の方法。
【請求項３】
前記第１のビデオフレームを表すリダイレクト画像を生成することと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記リダイレクト画像を送信することであって、前記ウェブページは、前記描画可能領域上に前記リダイレクト画像を表示するようにプログラムされている、こととを含む、請求項２に記載の方法。
【請求項４】
前記描画可能領域はＨＴＭＬ５によって定義されているキャンバスであり、前記ウェブページは、前記ブラウザプログラムに、前記キャンバス上に前記リダイレクト画像を表示し、前記表示されたリダイレクト画像上に前記第１のタイル画像をパッチするよう命令するようにプログラムされている、請求項３に記載の方法。
【請求項５】
前記第２のビデオフレームを複数のタイルに分割することと、
前記第２のビデオフレーム中の各ピクセルのピクセル値を、前記第１のビデオフレーム中の対応するピクセルのピクセル値と比較することと、
前記第２のビデオフレーム中の複数の変化したピクセルを判定することであって、前記変化したピクセルの各々の前記ピクセル値は、前記第１のビデオフレーム中の各前記変化したピクセルの前記対応するピクセルの前記ピクセル値と異なる、ことと、
複数の変化したタイルを判定することであって、前記変化したタイルの各々は、前記変化したピクセルのうちの少なくとも１つを含む、ことと、
複数の変化したタイル画像を生成することであって、前記変化したタイル画像の各々は、前記変化したタイルのそれぞれを表す、ことと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記複数の変化したタイル画像を送信することであって、前記ウェブページは、前記ブラウザプログラムに、前記描画領域上に前記変化したタイル画像をパッチするよう命令するようにプログラムされている、こととを含む、請求項３に記載の方法。
【請求項６】
前記第２のビデオフレーム上の前記変化したタイルの各々の位置を求めることと、
前記各変化したタイル画像によって表されるそれぞれの変化したタイルの位置に基づいて、前記変化したタイル画像の各々のタイルパラメータを生成することであって、前記ウェブページは、前記ブラウザプログラムに、前記描画領域上で、前記タイルパラメータによって示される位置に前記各変化したタイル画像をパッチするよう命令するようにプログラムされている、こととを含む、請求項５に記載の方法。
【請求項７】
前記タイルパラメータは、前記描画可能領域上の位置を示す座標、前記各変化したタイル画像の幅、および、前記各変化したタイル画像の高さを含む、請求項６に記載の方法。
【請求項８】
前記ウェブページは、前記ブラウザプログラムに、前記描画可能領域上で発生した第１のイベントを捕捉し、前記第１のイベントのイベントデータを前記ウェブサーバに送信するよう命令するようにプログラムされており、前記第１のイベントはマウスイベントまたはキーボードイベントであり、前記方法は、
前記ウェブソケット接続を通じて前記ブラウザプログラムから前記イベントデータを受信することと、
前記ホストコンピュータに適合している、前記イベントデータを表す入力データを生成することと、
前記ホストコンピュータの入力コントローラに前記入力データを送信することとを含む、請求項１に記載の方法。
【請求項９】
前記第１のイベントはマウスイベントであり、前記イベントデータは、前記イベントが発生した、前記描画可能領域上のイベント位置を示し、前記方法は、
前記イベント位置に基づいて前記ホストコンピュータの位置座標を求めることと、
前記マウスイベントおよび前記位置座標を表す前記入力データを生成することとを含む、請求項８に記載の方法。
【請求項１０】
前記第１のイベントはキーボードイベントであり、前記イベントデータはキーストロークを示し、前記方法は、
前記キーストロークを表す前記入力データを生成することを含む、請求項８に記載の方法。
【請求項１１】
前記ＢＭＣにおいて、所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、前記所与のピクセルおよび前記周囲のピクセルに対応する前記第１のビデオフレーム中のピクセルのピクセル値に基づいて、前記第２のビデオフレームの所与のピクセルの予測値を生成することと、
符号化画像を生成するために、損失または無損失要件に基づいて、前記所与のピクセルのピクセル値を前記予測値で選択的に置き換えることとを含む、請求項１に記載の方法。
【請求項１２】
前記方法は、前記処理済み画像を生成するために前記ウェブサーバにおいて前記符号化画像を圧縮することを含み、前記ウェブページは、前記ブラウザプログラムに、ＪａｖａＳｃｒｉｐｔルーチンを呼び出して前記処理済み画像を解凍および復号し、前記描画可能領域に前記解凍および復号された画像を表示するよう命令するようにプログラムされている、請求項１１に記載の方法。
【請求項１３】
ベースボード管理コントローラ（ＢＭＣ）によって実施される、ウェブベースのキーボード、ビデオおよびマウス（ＫＶＭ）リダイレクトを実施する方法であって、
ＢＭＣにおいて、ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、前記ＢＭＣは、前記ホストコンピュータの管理機能を実施する、ことと、
前記ＢＭＣのウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムに前記ウェブページを送信することと、
前記第２のビデオフレームを表す処理済み画像を生成することと、
前記ウェブサーバにＪａｖａオブジェクトを記憶することであって、前記ウェブページは、前記ブラウザプログラムに、前記Ｊａｖａオブジェクトをダウンロードするよう命令するようにプログラムされており、前記ＪａｖａオブジェクトはＪａｖａディスプレイを定義する、ことと、
前記ＢＭＣと、前記コンピューティングデバイスにあるＪａｖａバーチャルマシンにダウンロードされ、その上で実行される前記Ｊａｖａオブジェクトとの間にネットワーク接続を確立することと、
前記実行されているＪａｖａオブジェクトに前記処理済み画像を送信することとを含む、方法。
【請求項１４】
前記ＢＭＣにおいて、前記所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、前記所与のピクセルおよび前記周囲のピクセルに対応する前記第１のビデオフレーム中の前記ピクセルのピクセル値に基づいて、前記第２のビデオフレームの前記所与のピクセルの予測値を生成することと、
符号化画像を生成するために、損失または無損失要件に基づいて、前記所与のピクセルのピクセル値を前記予測値で選択的に置き換えることとを含む、請求項１３に記載の方法。
【請求項１５】
前記処理済み画像を生成するために前記ウェブサーバにおいて前記符号化画像を圧縮することと、
前記実行されているＪａｖａオブジェクトにおいて前記処理済み画像を解凍および復号することと、
前記Ｊａｖａディスプレイ上に前記解凍および復号された画像を表示することとを含む、請求項１４に記載の方法。
【請求項１６】
コンピュータ実行可能命令が記憶されている持続性コンピュータ記憶媒体であって、ベースボード管理コントローラ（ＢＭＣ）のプロセッサによって命令が実行されると、前記命令は、前記プロセッサに、
ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、前記ＢＭＣは、前記ホストコンピュータの管理機能を実施する、ことと、
ウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムに前記ウェブページを送信することであって、前記ウェブページは、前記ブラウザプログラムに、描画可能領域を起動して、前記ウェブサーバとのウェブソケット接続を確立するよう命令するようにプログラムされている、ことと、
前記第２のビデオフレームを表す処理済み画像を生成することと、
前記ウェブサーバと前記ブラウザプログラムとの間にウェブソケット接続を確立することと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記処理済み画像を送信することとを行わせる、持続性コンピュータ記憶媒体。
【請求項１７】
前記命令は、実行されると、前記プロセッサに、
前記第２のビデオフレームの第１のピクセルを決定するために前記第２のビデオフレームを前記第１のビデオフレームと比較することであって、前記第１のピクセルは、前記第１のビデオフレームの対応するピクセルのピクセル値とは異なるピクセル値を有する、ことと、
第１のタイル画像および関連するタイルパラメータを生成することであって、前記第１のタイル画像は、前記第１のピクセルを含む前記第２のビデオフレームの一部分を表す、ことと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記第１のタイル画像および前記タイルパラメータを送信することとを行わせ、
前記ウェブページは、前記ブラウザプログラムに、前記描画可能領域上で、前記タイルパラメータによって示される位置に前記第１のタイル画像をパッチするよう命令するようにプログラムされている、請求項１６に記載の持続性コンピュータ記憶媒体。
【請求項１８】
前記命令は、実行されると、前記プロセッサに、
前記第１のビデオフレームを表すリダイレクト画像を生成することと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記リダイレクト画像を送信することとを行わせ、
前記ウェブページは、前記描画可能領域上に前記リダイレクト画像を表示するようにプログラムされており、
前記描画可能領域はＨＴＭＬ５によって定義されているキャンバスであり、前記ウェブページは、前記ブラウザプログラムに、前記キャンバス上に前記リダイレクト画像を表示し、前記表示されたリダイレクト画像上に前記第１のタイル画像をパッチするよう命令するようにプログラムされている、請求項１７に記載の持続性コンピュータ記憶媒体。
【請求項１９】
前記命令は、実行されると、前記プロセッサに、
前記第２のビデオフレームを複数のタイルに分割することと、
前記第２のビデオフレーム中の各ピクセルのピクセル値を、前記第１のビデオフレーム中の対応するピクセルのピクセル値と比較することと、
前記第２のビデオフレーム中の複数の変化したピクセルを判定することであって、前記変化したピクセルの各々の前記ピクセル値は、前記第１のビデオフレーム中の各変化したピクセルの前記対応するピクセルのピクセル値と異なる、ことと、
複数の変化したタイルを判定することであって、前記変化したタイルの各々は、前記変化したピクセルのうちの少なくとも１つを含む、ことと、
複数の変化したタイル画像を生成することであって、前記変化したタイル画像の各々は、前記変化したタイルのそれぞれを表す、ことと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記複数の変化したタイル画像を送信することであって、前記ウェブページは、前記ブラウザプログラムに、前記描画領域上に前記変化したタイル画像をパッチするよう命令するようにプログラムされている、こととを行わせる、請求項１８に記載の持続性コンピュータ記憶媒体。
【請求項２０】
前記命令は、実行されると、前記プロセッサに、
前記第２のビデオフレーム上の前記変化したタイルの各々の位置を求めることと、
前記各変化したタイル画像によって表されるそれぞれの変化したタイルの位置に基づいて、前記変化したタイル画像の各々のタイルパラメータを生成することであって、前記ウェブページは、前記ブラウザプログラムに、前記描画領域上で、前記タイルパラメータによって示される位置に前記各変化したタイル画像をパッチするよう命令するようにプログラムされている、こととを行わせ、
前記タイルパラメータは、前記描画可能領域上の位置を示す座標、前記各変化したタイル画像の幅、および、前記各変化したタイル画像の高さを含む、請求項１７に記載の持続性コンピュータ記憶媒体。
【請求項２１】
前記ウェブページは、前記ブラウザプログラムに、前記描画可能領域上で発生した第１のイベントを捕捉し、前記第１のイベントのイベントデータを前記ウェブサーバに送信するよう命令するようにプログラムされており、前記第１のイベントはマウスイベントまたはキーボードイベントであり、前記命令は、実行されると、前記プロセッサに、
前記ウェブソケット接続を通じて前記ブラウザプログラムから前記イベントデータを受信することと、
前記ホストコンピュータに適合している、前記イベントデータを表す入力データを生成することと、
前記ホストコンピュータの入力コントローラに前記入力データを送信することとを行わせる、請求項２０に記載の持続性コンピュータ記憶媒体。
【請求項２２】
前記第１のイベントはマウスイベントであり、前記イベントデータは、前記イベントが発生した、前記描画可能領域上のイベント位置を示し、前記命令は、実行されると、前記プロセッサに、
前記イベント位置に基づいて前記ホストコンピュータの位置座標を求めることと、
前記マウスイベントおよび前記位置座標を表す前記入力データを生成することとを行わせる、請求項２１に記載の持続性コンピュータ記憶媒体。
【請求項２３】
前記第１のイベントはキーボードイベントであり、前記イベントデータはキーストロークを示し、前記命令は、実行されると、前記プロセッサに、前記キーストロークを表す前記入力データを生成することを行わせる、請求項２１に記載の持続性コンピュータ記憶媒体。
【請求項２４】
前記命令は、実行されると、前記プロセッサに、
前記ＢＭＣにおいて、所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、前記所与のピクセルおよび前記周囲のピクセルに対応する前記第１のビデオフレーム中の前記ピクセルのピクセル値に基づいて、前記第２のビデオフレームの前記所与のピクセルの予測値を生成することと、
符号化画像を生成するために、損失または無損失要件に基づいて、前記所与のピクセルのピクセル値を前記予測値で選択的に置き換えることとを行わせる、請求項１６に記載の持続性コンピュータ記憶媒体。
【請求項２５】
前記命令は、実行されると、前記プロセッサに、前記処理済み画像を生成するために前記ウェブサーバにおいて前記符号化画像を圧縮することを行わせ、前記ウェブページは、前記ブラウザプログラムに、ＪａｖａＳｃｒｉｐｔルーチンを呼び出して前記処理済み画像を解凍および復号し、前記描画可能領域に前記解凍および復号された画像を表示するよう命令するようにプログラムされている、請求項２４に記載の持続性コンピュータ記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連特許出願の相互参照）
本ＰＣＴ出願は、２０１３年３月１５日付けで提出された「ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＯＦ  ＷＥＢ−ＢＡＳＥＤ  ＫＥＹＢＯＡＲＤ，  ＶＩＤＥＯ  ＡＮＤ  ＭＯＵＳＥ  （ＫＶＭ）  ＲＥＤＩＲＥＣＴＩＯＮ  ＡＮＤ  ＡＰＰＬＩＣＡＴＩＯＮ  ＯＦ  ＴＨＥ  ＳＡＭＥ」と題する、Ｓａｎｊｏｙ  Ｍａｉｔｙ、Ｂａｓｋａｒ  Ｐａｒｔｈｉｂａｎ、Ｓａｍｖｉｎｅｓｈ  Ｃｈｒｉｓｔｏｐｈｅｒ、およびＶａｒａｄａｃｈａｒｉ  Ｓｕｄａｎ  Ａｙａｎａｍによる米国特許出願第１３／８３９，１５１号に対する優先権およびその利益を主張する。当該米国特許出願は、参照によりその全体が本明細書に組み込まれる。
本開示は、コンピュータシステムの分野に関し、より詳細には、ホストコンピュータとコンピューティングデバイスとの間でのウェブベースのキーボード、ビデオおよびマウス（ＫＶＭ）リダイレクトのシステムおよび方法に関する。
【背景技術】
【０００２】
本明細書において提供される背景技術の説明は、本開示のコンテキストを大まかに提示することを目的とする。この背景技術の節に記載されている範囲における、現在名前を挙げられている発明者らの研究、および、他の様態で出願時点において従来技術とみなされていない場合がある記載の諸態様は、明示的にも黙示的にも、本開示に対する従来技術とは認められない。
【０００３】
概して、「コンピュータシステム」という用語は、独立型システム、または、たとえば、クライアント―サーバネットワークのような複数の相互接続されたシステムを指す。
実施態様にかかわらず、コンピュータシステムを構成する様々な構成要素は、一般的には、性能プロトコルまたは規格によって定義されるパラメータ範囲内で動作する。たとえば、システムが特定の所定温度読み値を超えて上昇する可能性がある期間を検出するために、コンピュータシャーシ内の温度がモニタリングされることが多い。コンピュータシステム内でモニタリングされる場合がある他の形態の情報は、限定ではなく、システムのベースボード上に位置する半導体構成要素と関連付けられる電圧、ベースボード上またはシステムシャーシ内に位置する冷却ファンの速度（たとえば、ｒｐｍ）、および、ハード・ディスク・ドライブまたは光学式ドライブ内のスピンドルモータの速度を含む。
【０００４】
コンピュータシステムおよびその構成部品と関連付けられる動作および性能関連パラメータを検出するために、様々なタイプのセンサが使用されている。上記で与えられた例を参照すると、これらのセンサは、サーモスタット、電圧計および回転速度計を含む。コンピュータシステムは一般的に、１つまたは複数の管理モジュールを利用して、システム内の動作および性能関連パラメータを測定する様々なセンサによって検知される情報の収集および分析を補助する。これらの管理モジュールは、ソフトウェア構成要素またはハードウェア構成要素のいずれであってもよいが、一般的にハードウェアとソフトウェアの両方の構成要素を包含する。１つのそのような管理モジュールが、「ベースボード管理コントローラ」（ＢＭＣ）と称される。ＢＭＣは、コンピュータシステムのマイクロコントローラであり、それを通じて、様々なセンサによって検知される情報がＢＭＣによる分析のために受信される指定数のコンタクトピンを有している。この分析を実施するために、ＢＭＣは、システムモニタリングおよび復元に関連する手順を実施するためのファームウェアをプログラムされている。このファームウェアによって、ＢＭＣは、コンピュータシステム内で検知される様々な動作および性能関連パラメータをモニタリングし、この情報を分析して検知されたパラメータのいずれかが、現在、予測されるまたは推奨される動作範囲外であるか否かを判定するようにプログラムされている。範囲外のパラメータが発生することは、一般的に「イベント」と称される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＢＭＣは、キーボード、ビデオおよびマウス（ＫＶＭ）リダイレクトを実施することができる。しかしながら、ＫＶＭリダイレクトの実施には、対処されていない需要が存在する。
【課題を解決するための手段】
【０００６】
本開示の特定の態様は、ウェブベースのキーボード、ビデオ、およびマウス（ＫＶＭ）リダイレクトを実施する方法に関する。該方法は、ベースボード管理コントローラ（ＢＭＣ）によって実施される。方法は、（ａ）ＢＭＣにおいて、ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、ＢＭＣは、ホストコンピュータの管理機能を実施する、（ｂ）ＢＭＣのウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムにウェブページを送信することであって、ウェブページは、ブラウザプログラムに、描画可能領域を起動して、ウェブサーバとのウェブソケット接続を確立するよう命令するようにプログラムされている、（ｃ）第２のビデオフレームを表す処理済み画像を生成すること、（ｄ）ウェブサーバとブラウザプログラムとの間にウェブソケット接続を確立すること、（ｅ）ウェブソケット接続を通じてブラウザプログラムに処理済み画像を送信することを含む。特定の実施形態において、方法は、（ａ）ＢＭＣにおいて、第２のビデオフレームの第１のピクセルを決定するために第２のビデオフレームを第１のビデオフレームと比較することであって、第１のピクセルは、第１のビデオフレームの対応するピクセルのピクセル値とは異なるピクセル値を有する、（ｂ）第１のタイル画像および関連するタイルパラメータを生成することであって、第１のタイル画像は、第１のピクセルを含む第２のビデオフレームの一部分を表す、ことを含む。特定の実施形態において、本方法は、ウェブソケット接続を通じてブラウザプログラムに第１のタイル画像およびタイルパラメータを送信することを含む。特定の実施形態において、ウェブページは、ブラウザプログラムに、描画可能領域上で、タイルパラメータによって示される位置に第１のタイル画像をパッチするよう命令するようにプログラムされている。
【０００７】
特定の実施形態において、本方法は、（ａ）第１のビデオフレームを表すリダイレクト画像を生成すること、（ｂ）ウェブソケット接続を通じてブラウザプログラムにリダイレクト画像を送信することであって、ウェブページは、描画可能領域上にリダイレクト画像を表示するようにプログラムされている、ことを含む。描画可能領域は、ＨＴＭＬ５によって定義されているキャンバスである。ウェブページは、ブラウザプログラムに、キャンバス上にリダイレクト画像を表示し、表示されたリダイレクト画像上に第１のタイル画像をパッチするよう命令するようにプログラムされている。
【０００８】
特定の実施形態において、方法はまた、（ａ）第２のビデオフレームを複数のタイルに分割すること、（ｂ）第２のビデオフレーム中の各ピクセルのピクセル値を、第１のビデオフレーム中の対応するピクセルのピクセル値と比較すること、（ｃ）第２のビデオフレーム中の複数の変化したピクセルを判定することであって、変化したピクセルの各々のピクセル値は、第１のビデオフレーム中の各変化したピクセルの対応するピクセルのピクセル値と異なる、（ｄ）複数の変化したタイルを判定することであって、変化したタイルの各々は、変化したピクセルのうちの少なくとも１つを含む、（ｅ）複数の変化したタイル画像を生成することであって、変化したタイル画像の各々は、変化したタイルのそれぞれを表す、（ｆ）ウェブソケット接続を通じてブラウザプログラムに複数の変化したタイル画像を送信することであって、ウェブページは、ブラウザプログラムに、描画領域上に変化したタイル画像をパッチするよう命令するようにプログラムされている、ことも含む。
【０００９】
特定の実施形態において、本方法はまた、（ａ）第２のビデオフレーム上の変化したタイルの各々の位置を求めること、（ｂ）各変化したタイル画像によって表されるそれぞれの変化したタイルの位置に基づいて、変化したタイル画像の各々のタイルパラメータを生成することをも含む。ウェブページは、ブラウザプログラムに、描画領域上で、タイルパラメータによって示される位置に各変化したタイル画像をパッチするよう命令するようにプログラムされている。タイルパラメータは、描画可能領域上の位置を示す座標、各変化したタイル画像の幅、および、各変化したタイル画像の高さを含む。ウェブページは、ブラウザプログラムに、描画可能領域上で発生した第１のイベントを捕捉し、第１のイベントのイベントデータをウェブサーバに送信するよう命令するようにプログラムされており、第１のイベントはマウスイベントまたはキーボードイベントである。本方法は、（ａ）ウェブソケット接続を通じてブラウザプログラムからイベントデータを受信すること、（ｂ）ホストコンピュータに適合している、イベントデータを表す入力データを生成すること、（ｃ）ホストコンピュータの入力コントローラに入力データを送信することを含む。特定の実施形態において、第１のイベントはマウスイベントであり、イベントデータは、イベントが発生した、描画可能領域上のイベント位置を示す。本方法は、（ａ）イベント位置に基づいてホストコンピュータの位置座標を求めること、（ｂ）マウスイベントおよび位置座標を表す入力データを生成することを含む。特定の実施形態において、第１のイベントはキーボードイベントであり、イベントデータはキーストロークを示す。方法は、キーストロークを表す入力データを生成することを含む。
【００１０】
特定の実施形態において、本方法はまた、（ａ）ＢＭＣにおいて、所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、所与のピクセルおよび周囲のピクセルに対応する第１のビデオフレーム中のピクセルのピクセル値に基づいて、第２のビデオフレームの所与のピクセルの予測値を生成すること、（ｂ）符号化画像を生成するために、損失または無損失要件に基づいて、所与のピクセルのピクセル値を予測値で選択的に置き換えることをも含む。特定の実施形態において、本方法は、処理済み画像を生成するために、ウェブサーバにおいて符号化画像を圧縮することをさらに含む。ウェブページは、ブラウザプログラムに、ＪａｖａＳｃｒｉｐｔルーチンを呼び出して処理済み画像を解凍および復号し、描画可能領域に解凍および復号された画像を表示するよう命令するようにプログラムされている。
【００１１】
本開示の特定の態様は、ウェブベースのキーボード、ビデオ、およびマウス（ＫＶＭ）リダイレクトを実施する別の方法に関する。本方法はベースボード管理コントローラ（ＢＭＣ）によって実施され、（ａ）ＢＭＣにおいて、ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、ＢＭＣは、ホストコンピュータの管理機能を実施する、（ｂ）ＢＭＣのウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムにウェブページを送信すること、（ｃ）第２のビデオフレームを表す処理済み画像を生成すること、（ｄ）ウェブサーバにＪａｖａオブジェクトを記憶することであって、ウェブページは、ブラウザプログラムに、Ｊａｖａオブジェクトをダウンロードするよう命令するようにプログラムされており、ＪａｖａオブジェクトはＪａｖａディスプレイを定義する、（ｅ）ＢＭＣと、コンピューティングデバイスにあるＪａｖａバーチャルマシンにダウンロードされ、その上で実行されるＪａｖａオブジェクトとの間にネットワーク接続を確立すること、（ｆ）実行されているＪａｖａオブジェクトに処理済み画像を送信することとを含む。
【００１２】
特定の実施形態において、本方法はまた、（ａ）ＢＭＣにおいて、所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、所与のピクセルおよび周囲のピクセルに対応する第１のビデオフレーム中のピクセルの値に基づいて、第２のビデオフレームのピクセルの所与のものの予測値を生成すること、（ｂ）符号化画像を生成するために、損失または無損失要件に基づいて、所与のピクセルのピクセル値を予測値で選択的に置き換えることをも含む。特定の実施形態において、本方法は、（ａ）処理済み画像を生成するためにウェブサーバにおいて符号化画像を圧縮すること、（ｂ）実行されているＪａｖａオブジェクトにおいて処理済み画像を解凍および復号すること、（ｃ）Ｊａｖａディスプレイ上に解凍および復号された画像を表示することをさらに含む。
【００１３】
本開示の特定の態様は、持続性コンピュータ記憶媒体に関する。持続性コンピュータ記憶媒体は、コンピュータ実行可能命令を記憶している。ベースボード管理コントローラ（ＢＭＣ）のプロセッサによって命令が実行されると、命令は、ホストコンピュータに、（ａ）ＢＭＣにおいて、ホストコンピュータからリダイレクトされる第１のビデオフレームおよび第２のビデオフレームを受信することであって、ＢＭＣは、ホストコンピュータの管理機能を実施する、（ｂ）ＢＭＣのウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムにウェブページを送信することであって、ウェブページは、ブラウザプログラムに、描画可能領域を起動して、ウェブサーバとのウェブソケット接続を確立するよう命令するようにプログラムされている、（ｃ）第２のビデオフレームを表す処理済み画像を生成すること、（ｄ）ウェブサーバとブラウザプログラムとの間にウェブソケット接続を確立すること、（ｅ）ウェブソケット接続を通じてブラウザプログラムに処理済み画像を送信することを行わせる。
【００１４】
本開示のさらなる適用可能領域が、以降に与えられる詳細な説明から明らかとなる。詳細な説明および特定の例は、例示のみを目的として意図されており、本開示の範囲を限定するようには意図されていないことが理解されるべきである。
【００１５】
本開示は、詳細な説明および添付の図面からより十分に理解されることとなる。
【図面の簡単な説明】
【００１６】
【図１】本開示の一実施形態によるウェブベースのＫＶＭリダイレクトシステムを概略的に示す図である。
【図２】本開示の一実施形態によるウェブソケット接続を概略的に示す図である。
【図３Ａ】ＧＥＴコマンドおよびＨＴＴＰ応答を使用するＨＴＴＰ要求の一例を示す図である。
【図３Ｂ】本開示の一実施形態によるウェブ・ソケット・ハンドシェイク要求および応答の例を示す図である。
【図４】本開示の一実施形態によるウェブベースのＫＶＭリダイレクトを概略的に示す図である。
【図５】本開示の一実施形態によるウェブベースのビデオリダイレクトを概略的に示す図である。
【図６】本開示の一実施形態によるビデオフレームおよびタイルを概略的に示す図である。
【図７Ａ】本開示の一実施形態によるビデオリダイレクトのプロセスを概略的に示す図である。
【図７Ｂ】本開示の別の実施形態によるビデオリダイレクトのプロセスを概略的に示す図である。
【図８】本開示の別の実施形態によるウェブベースのビデオリダイレクトを概略的に示す図である。
【図９】本開示の別の実施形態によるビデオリダイレクトのプロセスを概略的に示す図である。
【発明を実施するための形態】
【００１７】
本開示は、多数の修正および変形が当業者に明らかになるため例示としてのみ意図されている以下の例により詳細に説明される。ここで、本開示の様々な実施形態を詳細に説明する。図面を参照すると、同様の参照符号がある場合、これらは、図面全体を通じて同様の構成要素を示す。本明細書において、および、添付の特許請求の範囲全体を通じて使用されている場合、「ａ」、「ａｎ」、および「ｔｈｅ」の意味するところは、文脈が明確に別途示していない限り、複数への参照を含む。また、本明細書において、および、添付の特許請求の範囲全体を通じて使用されている場合、「中（ｉｎ）」の意味するところは、文脈が明確に別途示していない限り、「中（ｉｎ）」および「上（ｏｎ）」を含む。さらに、本明細書においては読者の便宜のために表題または副題が使用されている場合があるが、これは本開示の範囲には影響を及ぼさないものとする。加えて、本明細書において使用されているいくつかの用語を、下記により詳細に定義する。
【００１８】
本明細書において使用される用語は概して、本開示の文脈内、および、各用語が使用される特定の文脈において、当該技術分野におけるそれらの一般的な意味を有する。本開示の説明に関して実践者にさらに助言を与えるために、本開示を説明するために使用される特定の用語を、下記に、または本明細書の他の箇所に説明する。便宜のために、特定の用語を、たとえば、斜字体および／または引用符を使用して強調している場合がある。強調が使用されても用語の範囲および意味に影響はなく、用語の範囲および意味は、強調されていようとされていまいと、同じ文脈の中では同じである。同じ物事が２通り以上に表現されている場合がある。したがって、代替的な文言および同義語が本明細書において説明されている用語いずれか１つまたは複数に使用されている場合があり、用語が本明細書において詳述または説明されているか否かにはいかなる特別な重要性もおかれるべきではない。特定の用語の同義語が与えられている。１つまたは複数の同義語の記載は、他の同義語の使用を除外しない。本明細書において説明されている任意の用語の例を含む、本明細書の任意の箇所における例の使用は例示に過ぎず、本開示または任意の説明されている用語の範囲および意味を決して限定するものではない。同様に、本開示は、本明細書において与えられている様々な実施形態には限定されない。
【００１９】
別途定義されていない限り、本明細書において使用されているすべての技術用語および科学用語は、本開示が属する技術分野における当業者によって一般的に理解されているものと同じ意味を有する。不一致がある場合、定義を含め、本明細書が統制する。
【００２０】
本明細書において使用される場合、「前後（ａｒｏｕｎｄ）」、「約（ａｂｏｕｔ）」または「おおよそ（ａｐｐｒｏｘｉｍａｔｅｌｙ）」は、概して、与えられている値または範囲の２０パーセント以内、好ましくは１０パーセント以内、より好ましくは５パーセント以内を意味するものとする。本明細書において与えられている数量は近似であり、つまり、用語「前後（ａｒｏｕｎｄ）」、「約（ａｂｏｕｔ）」または「おおよそ（ａｐｐｒｏｘｉｍａｔｅｌｙ）」は、明示的に述べられていない場合は推測され得る。
【００２１】
本明細書において使用される場合、「複数」は２つ以上を意味する。
【００２２】
本明細書において使用される場合、「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、「保持する（ｃａｒｒｉｎｇ）」、「有する（ｈａｖｉｎｇ）」、「含む（ｃｏｎｔａｉｎｉｎｇ）」、「含む（ｉｎｖｏｌｖｉｎｇ）」などの用語は、制約がない、すなわち、含むが限定されないことを意味するものとして理解されるべきである。
【００２３】
本明細書において使用される場合、Ａ、Ｂ、およびＣのうちの少なくとも１つという語句は、非排他的論理ＯＲを使用して論理（ＡまたはＢまたはＣ）を意味するものとして解釈されるべきである。方法内の１つまたは複数のステップは、本開示の原理を変更することなく異なる順序で（または同時に）実行されてもよいことが理解されるべきである。
【００２４】
本明細書において使用される場合、モジュールという用語は、特定用途向け集積回路（ＡＳＩＣ）、電子回路、組み合わせ論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、コードを実行するプロセッサ（共有、専用、グループ）、記載されている機能を提供する他の適切なハードウェア構成要素、または、システムオンチップにあるような、上記のいくつかもしくはすべての組み合わせを指す場合があり、それらの一部である場合があり、またはそれらを含む場合がある。モジュールと言う用語は、プロセッサによって実行されるコードを記憶するメモリ（共有、専用、またはグループ）を含み得る。
【００２５】
上記で使用されているものとしてのコードという用語は、ソフトウェア、ファームウェア、および／またはマイクロコードを含む場合があり、プログラム、ルーチン、機能、クラス、および／またはオブジェクトを指す場合がある。上記で使用されているものとしての共有という用語は、複数のモジュールからいくつかのまたはすべてのコードを、単一の（共有）プロセッサを使用して実行することができることを意味する。加えて、複数のモジュールからのいくつかのまたはすべてのコードを、単一の（共有）メモリによって記憶することができる。上記で使用されているものとしてのグループという用語は、単一のモジュールからいくつかのまたはすべてのコードを、プロセッサのグループを使用して実行することができることを意味する。加えて、単一のモジュールからのいくつかのまたはすべてのコードを、メモリのグループを使用することによって記憶することができる。
【００２６】
本明細書に記載されている装置および方法は、１つまたは複数のプロセッサによって実行される１つまたは複数のコンピュータプログラムによって実装することができる。コンピュータプログラムは、持続性有形コンピュータ可読媒体上に記憶されるプロセッサ実行可能命令を含む。コンピュータプログラムはまた、記憶されているデータをも含み得る。持続性有形コンピュータ可読媒体の非限定例は、不揮発性メモリ、磁気記憶装置、および光学式記憶装置である。
【００２７】
ここで、本開示の実施形態が示されている添付の図面を参照して、本開示を以降より十分に説明する。しかしながら、本開示は、多くの異なる形態で具現化されてもよく、本明細書に記載されている実施形態に限定されるものとして解釈されるべきではなく、むしろ、これらの実施形態は、本開示が完全かつ完璧なものになり、本開示の範囲を当業者に完全に伝達するように提供される。同様の参照符号は、本明細書全体を通じて同様の要素を指す。
【００２８】
本開示はコンピュータシステムに関する。図面に示されているように、コンピュータ構成要素は、実線のブロックとして図示されている物理ハードウェア構成要素、および、破線のブロックとして図示されている仮想ソフトウェア構成要素を含み得る。別途指示されていない限り、これらのコンピュータ構成要素は、限定ではないが、ソフトウェア、ファームウェアもしくはハードウェア構成要素、またはそれらの組み合わせにおいて実装されてもよいことを、当業者は諒解されよう。
【００２９】
図１は、本開示の一実施形態によるウェブベースのＫＶＭリダイレクトシステムを概略的に示す。図１に示すように、システム１００は、ホストコンピュータ１１０と、ネットワーク１３０を介してホストコンピュータ１１０に接続されているコンピューティングデバイス１４０とを含む。システム１００は、クライアント―サーバネットワークのような、２つ以上の相互接続されたシステムを組み込んでいるシステムであってもよい。ネットワーク１３０は、有線またはワイヤレスネットワークであってもよく、ローカル・エリア・ネットワーク（ＬＡＮ）、または、インターネットを含む広域ネットワーク（ＷＡＮ）のような様々な形態のものであってもよい。
【００３０】
ホストコンピュータ１１０は、汎用コンピュータシステムであってもよい。ホストコンピュータ１１０は、ベースボード１１１、すなわち「マザーボード」を含む。ベースボード１１１は、システムバスまたは他の電気通信経路によって複数の構成要素またはデバイスがそれに接続され得るプリント回路基板である。図１には明示的に示されていないが、ベースボード１１１上の構成要素は相互接続されており、ベースボード１１１上の構成要素のレイアウトおよびベースボード１１１上の構成要素間の相互接続の様態を、本明細書においてはベースボード１１１の構成と称する。ベースボード１１１の構成は、必要な設計または製造要件に従って調整または変更することができることが、当業者には諒解されよう。
【００３１】
ベースボード１１１上の構成要素は、限定ではないが、中央処理装置（ＣＰＵ）１１２と、メモリ１１３と、ベースボード管理コントローラ（ＢＭＣ）１２０と、他の必要とされるメモリおよび入出力（Ｉ／Ｏ）モジュール（図示せず）とを含む。ＣＰＵ１１２、メモリ１１３、およびＢＭＣ１２０は、ベースボード１１１上に組み込まれてもよく、または、インターフェースを通じてベースボード１１１に接続されてもよい。特定の実施形態において、インターフェースは、電気コネクタ、バス、ポート、ケーブル、端子、または他のＩ／Ｏデバイスのような物理ハードウェアインターフェースであってもよい。
【００３２】
ＣＰＵ１１２は、ホストコンピュータ１１０の動作を制御するように構成されているホストプロセッサである。ホストプロセッサは、ホストコンピュータ１１０のオペレーティングシステム（ＯＳ）または他のアプリケーションを実行することができる。いくつかの実施形態において、ホストコンピュータ１１０は、２つのＣＰＵ、４つのＣＰＵ、８つのＣＰＵ、または任意の適切な数のＣＰＵのような、２つ以上のＣＰＵをホストプロセッサとして有してもよい。
【００３３】
メモリ１１３は、ホストコンピュータ１１０の動作中にデータおよび情報を記憶するための、ランダムアクセスメモリ（ＲＡＭ）のような揮発性メモリとすることができる。
【００３４】
ＢＭＣ１２０とは、システム管理ソフトウェアとプラットフォームハードウェアとの間のインターフェースを管理する専用マイクロコントローラを指す。種々のタイプのセンサをシステム１００に内蔵することができ、ＢＭＣ１２０は、これらのセンサを読み取って、温度、冷却ファン速度、電力ステータス、ＯＳステータスのようなパラメータを得る。ＢＭＣ１２０は、センサをモニタリングして、いずれかのパラメータがプリセットの制限内に留まっておらず、システム１００が故障した可能性を示す場合、ネットワークを介してシステム管理者に警告を送信することができる。管理者もまた、ＢＭＣ１２０と遠隔通信して、ハングしたＯＳを再び作動させるためにシステムをリセットするかまたは電源を入れ直すことのような、何らかの修正措置をとることができる。さらに、ＢＭＣ１２０は、コンピューティングデバイス１４０とホストコンピュータ１１０との間でビデオおよび入力信号をリダイレクトするＫＶＭリダイレクトモジュール１２２を含むことができる。したがって、ユーザは、コンピューティングデバイス１４０からＫＶＭセッションを開始して、ホストコンピュータ１１０のビデオ出力を見て、コンピューティングデバイス１４０の入力デバイスを通じてホストコンピュータ１１０にデータを入力することができる。
【００３５】
特定の実施形態において、ＢＭＣ１２０のファームウェアは、システムモニタリングおよびイベント回復のためのインテリジェントプラットフォーム管理インターフェース（ＩＰＭＩ）産業規格に従う。ＩＰＭＩプロトコルは、コンピュータシステムの帯域外管理、および、セッションベースである動作のモニタリングのための標準コンピュータシステム・インターフェース・プロトコルであり、アプリケーションモジュールが標的ＩＰＭＩデバイスと通信することができるようになる前に、アプリケーションモジュールと標的ＩＰＭＩデバイスとの間のＩＰＭＩセッションが確立されることを必要とする。ＩＰＭＩ仕様は、適合するコンピュータ内の管理可能な機構のすべてにアクセスするための共通のメッセージベースのインターフェースをもたらし、温度、電圧、ファン速度、シャーシ侵入、および他のパラメータを読み取るための所定コマンドの豊富なセットを含む。システム・イベント・ログ、ハードウェアウォッチドッグ、および電力制御も、ＩＰＭＩを通じてアクセスされ得る。このように、ＩＰＭＩは、オペレーティングシステムを通じて、または、ネットワークもしくは直列接続のような外部接続を通じてＢＭＣによって収集される様々なパラメータにアクセスするためのプロトコルを定義する。ＢＭＣは、ローカルに接続されている管理コンピュータからシステムインターフェースを通じて、または、ネットワークインターフェースを通じた外部要求として、ＩＰＭＩ命令または要求を受信することができる。
【００３６】
特定の実施形態において、ＢＭＣ１２０は、中でも、ＫＶＭリダイレクトモジュール１２２と、ウェブ・ソケット・モジュール１２４と、ウェブ・サーバ・モジュール１２６とを含む。ＫＶＭモジュール１２２は、ＫＶＭリダイレクト機能を実装する。ウェブ・ソケット・モジュール１２４は、単一の伝送接続プロトコル（ＴＣＰ）接続を介してウェブ・ソケット・プロトコルの下で全二重通信チャネルを確立することができる。ウェブ・サーバ・モジュール１２６は、インターネットを通じてアクセス可能なウェブコンテンツを提供することができる。モジュールの詳細は後述する。
【００３７】
さらに、ホストコンピュータ１１０は、ホストコンピュータ１１０のＯＳ（図示せず）および他のアプリケーションを記憶するためのデータ記憶媒体である記憶装置１１４と、少なくとも１つのＩ／Ｏデバイス１１６とを含む。記憶装置１１４の例は、フラッシュメモリ、メモリカード、ＵＳＢドライブ、ハードドライブ、フロッピーディスク、光学式ドライブ、または任意の他のタイプのデータ記憶デバイスを含んでもよい。Ｉ／Ｏデバイス１１６の例は、キーボード、タッチパッド、マウス、マイクロフォン、表示スクリーン、タッチスクリーン、またはホストコンピュータ１１０に適用可能な他のＩ／Ｏデバイスを含む。
【００３８】
コンピューティングデバイス１４０は、ネットワーク１３０を介してホストコンピュータ１１０に遠隔して接続される。システム１００は、ホストコンピュータ１１０に同時に遠隔して接続される複数のコンピューティングデバイス１４０を含んでもよいことを、当業者は諒解されよう。コンピューティングデバイス１４０の例は、たとえば、スマートフォン、タブレットまたは他のモバイル・コンピュータ・デバイスのような携帯デバイスを含んでもよい。
【００３９】
コンピューティングデバイス１４０は、ＣＰＵ１７１と、メモリ１７３と、記憶装置１４２とを含む。記憶装置１４２は、コンピューティングデバイス１４０のＯＳおよび他のアプリケーションを記憶するためのデータ記憶媒体である。コンピューティングデバイス１４０の記憶装置１４２の例は、フラッシュメモリ、メモリカード、ＵＳＢドライブ、ハードドライブ、フロッピーディスク、光学式ドライブ、または任意の他のタイプのデータ記憶デバイスを含んでもよい。
【００４０】
ブラウザプログラム１４３がメモリ１７３内にロードされ、コンピューティングデバイス１４０のＣＰＵ１７１によって実行され得る。ブラウザプログラム１４３は、ユーザに対する情報資源を取り出し、提示し、トラバースするためのソフトウェアアプリケーションである。さらに、ブラウザプログラム１４３は、ＢＭＣ１２０と通信するための、システム１００のＫＶＭリダイレクトクライアントとしての役割を果たすことができる。概して、ブラウザプログラム１４３は、インターネットのようなオープンネットワーク上で提供される情報資源を取り出すことができる。情報資源は、ウェブページ、画像、ビデオまたは他のタイプのデータコンテンツを含んでもよい。
【００４１】
さらに、メモリ１７３は、ＯＳ１４４およびウェブ・ソケット・モジュール１４５をロードすることができる。ウェブ・ソケット・モジュール１４５は、ホストコンピュータ１１０上のＢＭＣ１２０のウェブ・ソケット・モジュール１２４に対応するモジュールであり、それによって、ＢＭＣ１２０とコンピューティングデバイス１４０との間にウェブ・ソケット・プロトコルの下での全二重通信チャネルを確立することができる。
【００４２】
さらに、コンピューティングデバイス１４０は、少なくとも１つのＩ／Ｏデバイス１４６を有する。Ｉ／Ｏデバイス１４６の例は、キーボード、タッチパッド、マウス、マイクロフォン、表示スクリーン、タッチスクリーン、またはコンピューティングデバイス１４０に適用可能な他のＩ／Ｏデバイスを含む。タッチスクリーンのようないくつかのＩ／Ｏデバイスは、コンピューティングデバイス１４０のための二重入出力を目的として提供される。
【００４３】
ブラウザプログラム１４３を使用したウェブページおよび他のデータコンテンツのような情報資源の表示に関して、ハイパーテキストマークアップ言語（ＨＴＭＬ）が、ウェブページ、および、ブラウザプログラム１４３において表示することができる他の情報を表示するためのウェブベース言語フォーマットにおける標準的なマークアップ言語である。ＨＴＭＬフォーマットにあるデータは、ウェブページコンテンツ内で、山括弧に囲まれているＨＴＭＬ要素または「タグ」の形式（＜ｈｔｍｌ＞など）で書かれる。現在、ＨＴＭＬフォーマットは、市場でのブラウザプログラムのほぼすべてによって広く採用されており、したがって、コンピューティングデバイス１４０側のブラウザプログラム１４３とホストコンピュータ１１０側のＢＭＣ１２０のウェブサーバ１２６との間の通信命令のウェブベース言語フォーマットとして適している。
【００４４】
概して、ＪａｖａＳｃｒｉｐｔのようなスクリプト言語が、ユーザインターフェースの入力および出力を制御するために、ＨＴＭＬフォーマット言語に加えて使用される。さらに、ＨＴＭＬ言語の現在開発されている改正であるＨＴＭＬ５が、ウェブ・アプリケーション・ソフトウェア・メソッド、および、ウェブブラウザを通じてデータを記憶するために使用されるプロトコルを利用する、ウェブストレージのための幅広い機能を提供する。より古い一般的に使用されているブラウザプログラムはＨＴＭＬ５フォーマットをサポートしていないが、ＨＴＭＬ５フォーマットをサポートしているブラウザプログラムは、ＭＯＺＩＬＬＡ  ＦＩＲＥＦＯＸ  １．５、ＧＯＯＧＬＥ  ＣＨＲＯＭＥ  ４．０、ＳＡＦＡＲＩ  ３．１、ＳＡＦＡＲＩ  ＭＯＢＩＬＥ  ３．２、ＯＰＥＲＡ  ９．０、ＯＰＥＲＡ  ＭＯＢＩＬＥ  １０．０、ＡＮＤＲＯＩＤ  ＢＲＯＷＳＥＲ  ２．１、およびＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ  ９．０または、これらのブラウザプログラムのより新しいバージョンを含む。
したがって、ブラウザプログラム１４３は、ＨＴＭＬ５をサポートすることができ、上記に挙げたブラウザプログラムのうちの１つとすることができる。
【００４５】
ブラウザプログラム１４３は、ハイパーテキスト転送プロトコル（ＨＴＴＰ）を使用してＢＭＣにあるウェブサーバ１２６と通信することができる。具体的には、ブラウザプログラム１４３は、ウェブサーバ１２６にＨＴＴＰ要求を送信することができる。ＨＴＴＰ要求を受信すると、サーバは、ブラウザプログラムに、ＨＴＴＰ要求に応答したＨＴＴＰ応答を送信する。
【００４６】
ウェブサーバ１２６は一般的に、ＨＴＴＰの下でのブラウザプログラム１４３へのデータ送信を開始することができない。ウェブソケットが、単一のＴＣＰ接続を介した全二重通信チャネルを提供することができ、それによって、サーバはクライアントに命令または情報をアクティブに送信することができる。ウェブソケットはＨＴＭＬ５に組み込まれており、したがって、ＨＴＭＬ５を実装するウェブブラウザおよびサーバによってサポートされる。
【００４７】
図２は、本開示の一実施形態による、ホストコンピュータ１１０とコンピューティングデバイス１４０との間にウェブソケット接続を確立するプロセスを示す。ウェブソケット接続は、ＨＴＴＰ接続と同様に開始するが、ホストコンピュータ１１０とブラウザプログラム１２４との間に連続的な双方向ウェブベース接続を提供する。ブラウザプログラム１４３がウェブソケット接続を確立しようとするとき、ブラウザプログラム１４３は、ウェブ・ソケット・モジュール１４５に、ＢＭＣ１２０のウェブ・ソケット・モジュール１２４のポート８０（デフォルトＨＴＴＰポート）またはポート４４３（ＨＴＴＰＳポート）にウェブ・ソケット・ハンドシェイク要求を送信するよう命令する。ウェブ・ソケット・ハンドシェイク要求は、ＨＴＴＰ要求において使用されるＧＥＴコマンドに類似しているが、より多くのウェブソケット命令を含み、「アップグレード」された要求と考えることができる。ウェブ・ソケット・ハンドシェイク要求を受信すると、ウェブサーバ１２６は、ウェブ・ソケット・ハンドシェイク要求内のアップグレードされた情報に従って、この要求がＨＴＴＰ要求ではなくウェブ・ソケット・ハンドシェイク要求であると識別することができる。ウェブサーバ１２６は、ブラウザプログラム１４３にハンドシェイク応答メッセージを送信する。したがって、ブラウザプログラム１４３とウェブサーバ１２６との間にウェブソケット接続１５０を確立することができる。
【００４８】
図３Ａおよび図３Ｂは、ウェブ・ソケット・ハンドシェイク要求とＨＴＴＰ要求との間の比較を可能にし、図３ＡはＧＥＴコマンドを使用したＨＴＴＰ要求の一例を示し、図３Ｂは、ウェブ・ソケット・ハンドシェイク要求の一例を示す。図３Ａに示すように、ＨＴＴＰ要求の応答メッセージのヘッダ部分は、応答メッセージ内のコンテンツの情報を示し、ｔｅｘｔ／ｈｔｍｌファイルであるコンテンツのタイプ、コンテンツファイルの長さ、およびコンテンツにおいて使用されている言語を含む。ＨＴＴＰ要求に対する応答メッセージのヘッダ部分の最後の行は、ホストコンピュータ１１０とブラウザプログラム１２４との間の接続が応答の終わりに閉じられることを示す。比較すると、図３Ｂに示すウェブ・ソケット・ハンドシェイク要求の最初の２行は、ＨＴＴＰ要求と同じＧＥＴ命令を含む。ウェブ・ソケット・ハンドシェイク要求の以下の行は、ウェブ・ソケット・モジュール１２４に、通常のＨＴＴＰ要求からウェブ・ソケット・プロトコルにアップグレードまたは切り替えるように通知するアップグレードされた情報を含む。さらに、ＨＴＴＰ要求に対する応答メッセージとは異なり、ウェブ・ソケット・ハンドシェイク要求に対するハンドシェイク応答メッセージのヘッダ部分は、応答の終わりに接続が閉じられることを示さない。
【００４９】
ウェブソケット接続１５０が設定されると、ウェブ・ソケット・モジュール１２４およびウェブ・ソケット・モジュール１４５の両方が、この接続を通じて他端へデータを送信することができる。データフォーマットは、ＪＳＯＮまたはＸＭＬのような、任意の有効なＵＴＦ−８ストリングフォーマットであることができるが、所望に応じて他のデータフォーマットが使用されてもよい。
【００５０】
ウェブ・ソケット・モジュール１２４および１４５は、ＰＨＰ  Ｗｅｂ  Ｓｏｃｋｅｔｓ、Ｊａｖａ  ｊ  Ｗｅｂ  Ｓｏｃｋｅｔ、Ｗｅｂ−Ｓｏｃｋｅｔ−ｒｕｂｙ、Ｓｏｃｋｅｔ  ＩＯ−ｎｏｄｅ、または他のタイプのウェブ・ソケット・アプリケーションのような、様々なタイプおよび設計のものとすることができる。ウェブ・ソケット・モジュール１２４をホストコンピュータ１１０側のウェブ・ソケット・サーバとして設定するためには、ホストコンピュータ１１０および使用されるポート（ポート８０およびポート４４３など）のドメイン名またはＩＰアドレスが、ホストコンピュータ１１０の位置を示すために提供されなければならず、ソケットの開放（すなわち、ウェブソケット接続）、ソケットにおけるハンドシェイク要求および他のメッセージの受信、またはソケットの閉鎖のような特定の「イベント」に応答して複数の命令が設定されなければならない。ウェブ・ソケット・サーバが設定されると、ウェブ・ソケット・クライアントは、通常のＨＴＴＰスキーム「ｈｔｔｐ」の代わりにスキーム「ｗｓ」、または、通常のＨＴＴＰＳスキーム「ｈｔｔｐｓ」の代わりにスキーム「ｗｓｓ」で始まる統一資源位置指定子（ＵＲＬ）を使用してウェブ・ソケット・サーバに接続することができる。
【００５１】
図４は、本開示の一実施形態によるウェブベースのＫＶＭリダイレクトを概略的に示す。図４に示すように、ウェブソケット接続１５０が、ＢＭＣとコンピューティングデバイス１４０との間に確立される。ホストコンピュータ１１０は、ビデオ信号を出力するビデオコントローラ１１７と、ビデオリダイレクトのためのＩ／Ｏポートとしてのリダイレクトコントローラ１１８とを含み得る。この実施形態におけるＢＭＣ１２０のＫＶＭリダイレクトモジュール１２２は、リダイレクトコントローラ１１８およびＩ／Ｏコントローラ１１６に接続されている。ＫＶＭリダイレクトモジュールは、リダイレクトコントローラからリダイレクトされたビデオフレームを受信し、Ｉ／Ｏコントローラ１１６にキーボードおよびマウス入力信号を送信することができる。
【００５２】
コンピューティングデバイス１４０は、表示デバイス１４７と、キーボード１４８、マウス１４９、およびタッチパネルのような入力デバイスとを含む。明示的に示されていないが、ホストコンピュータ１１０およびコンピューティングデバイス１４０は、ウェブベースのＫＶＭリダイレクトを実施するための他の要素を含んでもよい。
【００５３】
図５は、本開示の特定の実施形態によるウェブベースのＫＶＭリダイレクトを概略的に示す。図示されているように、ホストコンピュータ１１０は、ビデオ信号を出力するビデオコントローラ１１７を有する。たとえば、ビデオ信号は、表示のために表示デバイスに出力され得る。ビデオコントローラ１１７は、ビデオ信号を捕捉しビデオフレームを生成するリダイレクトコントローラ１１８と通信している。リダイレクトコントローラはその後、ＢＭＣ１２０のＫＶＭリダイレクトモジュール１２２にビデオフレームを送信する。
【００５４】
たとえば、ＫＶＭリダイレクトモジュール１２２は、ホストコンピュータからビデオフレーム１５２および１５４を受信し、ビデオフレームを処理してリダイレクト画像を生成し、ウェブサーバにリダイレクト画像を送信する。ウェブサーバは、コンピューティングデバイス１４０上で作動しているブラウザからの要求を受けて、ブラウザにＫＶＭリダイレクトウェブページを送信する。ブラウザは、ウェブページの命令を受けて、ウェブサーバからリダイレクト画像を取り出すことができる。
【００５５】
特定の実施形態において、ウェブサーバは、ＨＴＭＬ５によってサポートされるキャンバスを利用してＫＶＭリダイレクトウェブページを生成するように構成されている。リダイレクトウェブページは、ブラウザ表示ページの描画可能領域を画定するキャンバスタグを含む。キャンバスタグは、形状およびビットマップ画像の動的でスクリプト可能なレンダリングを可能にする、画像およびビデオファイルを処理するための、ＨＴＭＬ５によって提供される要素の１つである。キャンバスタグは、描画可能領域の高さおよび幅属性を規定する。ＪａｖａＳｃｒｉｐｔコードが、フルセットの描画機能を通じて描画可能領域にアクセスして、キャンバスタグによって画定される描画可能領域上に、動的に生成された画像を表示することができる。キャンバスタグは、それ自体は描画機能を有せず、画像の入れ物と考えることができる。一般的にキャンバスタグは、ＪａｖａＳｃｒｉｐｔコードによって参照することができるＩＤを有する。図５は、キャンバス１６０を有する、ブラウザプログラム１４３によってレンダリングされるＫＶＭリダイレクトページを示す。
【００５６】
ユーザによって入力される構成情報、または代替的に、デフォルト構成に基づいて、ウェブサーバは、ＫＶＭリダイレクトウェブページ内のキャンバスのサイズを設定することができる。たとえば、ユーザは、ビデオコントローラによって出力されるビデオフレームの解像度と同じ解像度を有することを所望する場合がある。言い換えれば、ビデオコントローラによって出力されるビデオフレームの各ピクセルが、キャンバス上でそれぞれの対応するピクセルを有する。たとえば、ビデオフレームのビデオ解像度が１０２４＊７６８である場合、キャンバスタグによって画定されるキャンバスは、それに応じて、１０２４の幅および７６８の高さを有し得る。別の例として、ユーザは、ビデオフレームの半分の解像度を有することを所望する場合がある。したがって、ビデオフレームのビデオ解像度が１０２４＊７６８である場合、キャンバスタグによって画定されるキャンバスは、５１２の幅および３８４の高さを有し得る。下記の説明は、概して、一例としてビデオフレームの解像度とキャンバスの解像度との間の１対１の対応関係を使用する。下記に説明する技法は、ビデオフレームの解像度に対する他の対応関係による解像度を有するキャンバスにも同様に適用されることを、当業者は諒解するはずである。
【００５７】
ＫＶＭリダイレクトモジュール１２２は、ホストコンピュータ１１０のリダイレクトコントローラ１１８から第１のビデオフレーム１５２および第２のビデオフレーム１５４を受信する。第１のフレーム１５２がＫＶＭリダイレクトモジュールによって受信される最初のフレームである。すなわち、以前にＫＶＭリダイレクトモジュール１２２によってビデオフレームが受信されていないとき、ＫＶＭリダイレクトモジュールは、第１のフレーム１５２中のすべてのピクセルの情報を有する第１のリダイレクト画像１５７を生成し、第１のリダイレクト画像１５７をウェブサーバ１２６に送信する。リダイレクト画像は、ブラウザプログラム１４３によってレンダリングすることができるフォーマットにある。ウェブサーバ１２６はその後、下記に説明する技法を使用してブラウザプログラムに第１のリダイレクト画像１５７を送信する。
【００５８】
第２のビデオフレーム１５４を受信した後、ＫＶＭリダイレクトモジュール１２２は、第２のフレーム１５４を、ＫＶＭリダイレクトモジュール１２２内に保持されている第１のフレーム１５２のコピーと比較し、第１のフレームおよび第２のフレーム中の任意の対応するピクセルが異なる値を有するか否かを検出する。差が検出されたとき、ＫＶＭリダイレクトモジュール１２２は、第１のフレーム１５２中の対応するピクセルとは異なる、第２のフレーム１５４中のピクセルのピクセル情報を含むパッチを生成し、ウェブサーバにパッチを送信する。下記に詳細に説明するように、ウェブサーバ１２６は、コンピューティングデバイス１４０上のブラウザプログラム１４３にパッチを送信し、それに応じて、ブラウザプログラム１４３は、対応する領域１７０、１７２においてキャンバスをパッチすることができる。
【００５９】
図６は、第１のビデオフレーム１５２および第２のビデオフレーム１５４を示す。この例において、ＫＶＭリダイレクトモジュール１２２は、ビデオフレームの各々を、行列形式の５行および６列を構成する３０個のタイルに分割する。タイルの数は設定可能である。たとえば、デフォルトのタイル構成は、１６＊１６行列とすることができる。ＫＶＭリダイレクトモジュール１２２は、第１のビデオフレームのピクセル値と第２のビデオフレームのピクセル値とをピクセル毎に比較する。言い換えれば、ＫＶＭリダイレクトモジュール１２２は、第２のビデオフレームの任意のピクセルの値が第１のビデオフレームの対応するピクセルの値と異なるか否かを判定する。第２のビデオフレーム１５４のタイル中の任意のピクセルが第１の画像フレーム１５２の対応するピクセルから変化している場合、ＫＶＭリダイレクトモジュール１２２は、タイルが変化したと判定する。たとえば、図６に示すように、第２のフレームのタイル６１５’、６２５’、６２２’、６２３’、６３２’、６３３’、６４２’および６４３’は、第１のフレーム１５２と比較して変化している。したがって、ＫＶＭリダイレクトモジュール１２２は、タイル６２２’、６２３’、６３２’、６３３’、６４２’、６４３’、６１５’および６２５’のピクセル値のみをタイル画像として、タイルパラメータとともにウェブサーバ１２６に送信する。タイル位置は、タイルパラメータに含まれるビデオフレーム上の座標によって示される。タイルの位置は、一般的にタイルの左上隅の位置（たとえば、座標）として定義される。
【００６０】
ウェブサーバ１２６は、タイルパラメータの一部分としてタイル座標を受信し、その後、ブラウザプログラムが、現在レンダリングされているリダイレクト画像を正確にパッチするために、タイル画像のビデオフレーム座標をブラウザ座標に変換する必要があるか否かを判定する。たとえば、ウェブサーバによって受信されるタイルパラメータは、（ｘ，ｙ，Ｗ，Ｈ）であり得、これは、タイルの位置がビデオフレーム上の座標（ｘ，ｙ）にあること、ならびに、タイルがＷの幅およびＨの高さを有することを示す。幅および高さのパラメータは任意選択である。
【００６１】
キャンバスの解像度がビデオフレームの解像度と１対１関係を有するように構成されている、すなわち、ビデオフレームの各ピクセルがキャンバス上にそれぞれの対応するピクセルを有するとき、ウェブサーバ１２６は、タイルパラメータ（ｘ，ｙ，Ｗ，Ｈ）を、キャンバス上のタイルにパッチするために変換することなく、キャンバスによっても直接使用することができると判定することができる。ウェブサーバは、ＫＶＭリダイレクトモジュール１２２から受信されるタイル画像を、ブラウザプログラム１４３によってレンダリングすることができる異なるフォーマットに変換することができる。タイル画像は、一般的に使用されているＪＰＥＧ、ＰＮＧまたはＢＭＰフォーマット、または、ブラウザプログラム１４３によって表示可能な他の画像ファイルフォーマットのような、様々な画像またはグラフィック・ファイル・フォーマットにあることができる。ウェブサーバ１２６はその後、下記に説明するように、ブラウザプログラム１４３にタイルパラメータとともにタイル画像を送信する。ブラウザプログラム１４３は、それに応じて、タイルパラメータによって示される領域においてタイル画像を使用してキャンバスをパッチする。たとえば、ウェブサーバによって生成されるリダイレクトウェブページは、ブラウザにキャンバス上にタイル画像をパッチするよう命令するｃｏｎｔｅｘｔ．ｄｒａｗｌｍａｇｅ（ｔｉｌｅ，ｘ，ｙ，Ｗ，Ｈ）のようなＪａｖａＳｃｒｉｐｔコードを有することができる。キャンバスの解像度が、ビデオフレームの解像度に対する別の比（たとえば、１：２）を有するように構成されるとき、ウェブサーバ１２６は、その比に従って、ビデオフレーム座標をブラウザ座標（たとえば、ｘ／２，ｙ／２，Ｗ／２，Ｈ／２）に変換することができる。図５は、ブラウザプログラム１４３が最初に、キャンバス１６０上に第１のリダイレクト画像１５７を表示することを示す。ＢＭＣ１２０がブラウザプログラム１４３に１つまたは複数のタイル１７０、１７２を含むパッチを送信した後、ブラウザプログラム１４３はついで、第１のリダイレクト画像１５７をパッチして、第２のリダイレクト画像１５９を生成する。
【００６２】
ウェブサーバ１２６は、様々な方法でブラウザプログラム１４３にタイル画像を送信することができる。たとえば、ウェブサーバ１２６は、ウェブサーバの所定の箇所にタイル画像およびタイルパラメータを記憶することができる。ウェブサーバ１２６によって生成されるリダイレクトウェブページは、ブラウザプログラム１４３に、新たなパッチが利用可能であるか否かを判定するために所定の箇所を定期的にチェックするよう命令することができる。代替的に、リダイレクトウェブページは、ブラウザプログラム１４３に、ウェブサーバとのウェブソケット接続を確立するよう命令することができ、その後、ウェブサーバは、ウェブソケット接続を通じてブラウザプログラム１４３に、タイルパラメータを有するタイル画像を送信することができる。
【００６３】
特定の実施形態において、タイル画像は、ＰＮＧ、ＢＭＰ、ＪＰＥＧなどのような様々なフォーマットにあることができる。ウェブサーバ１２６は、数または文字のような識別子によって、ビデオフレームの各タイルを識別することができる。ウェブサーバ１２６は、ウェブソケット接続１５０を通じてブラウザプログラム１４３に、タイル画像およびその識別子を送信することができる。たとえば、ウェブサーバ１２６は、ブラウザプログラム１４３にタイル画像＃５を送信することができる。ブラウザプログラム１４３上のキャンバス１６０も、ビデオフレームのタイルに対応するタイルに分割することができる。言い換えれば、各タイル識別子は、キャンバス１６０上の単一のタイルも識別することができる。したがって、ブラウザプログラム１４３によってレンダリングされるリダイレクトウェブページは、識別子によって識別されるキャンバス１６０上のタイル領域に、受信されたタイル画像を描画することができるＪａｖａＳｃｒｉｐｔルーチンを有する。たとえば、キャンバスは、タイル＃５として識別される特定の領域を有することができる。タイル画像＃５を受信した後、リダイレクトウェブページはそれに応じて、ブラウザプログラムに、キャンバス上の＃５として識別される領域にタイル画像（たとえば、ＰＮＧ、ＪＰＥＧ、またはＢＭＰフォーマットの）を描画するよう命令する。
【００６４】
図７Ａは、本開示の特定の実施形態による、ウェブソケット接続およびＨＴＭＬ５キャンバスを利用したビデオリダイレクトのための手順を示す。動作７１０において、ブラウザプログラム１４３が、ネットワーク１３０を介してＢＭＣ１２０に、ＫＶＭリダイレクトウェブページを求める要求を送信する。要求は、ＨＴＴＰフォーマットにあってもよい。ＫＶＭリダイレクトウェブページを求める要求を受信すると、動作７２０において、ＢＭＣ１２０のウェブサーバ１２６が、ブラウザプログラム１４３にＫＶＭリダイレクトウェブページを送信する。したがって、ブラウザプログラム１４３は、ユーザにＫＶＭリダイレクトウェブページを表示することができ、コンピューティングデバイス１４０のユーザが、動作７２２において、ＢＭＣ１２０のＫＶＭリダイレクトモジュール１２２のための構成情報を入力または選択することを可能にする。ＫＶＭリダイレクトモジュールの構成情報は、リダイレクト画像解像度情報、リダイレクト画像リフレッシュレート情報、機械およびネットワークの設定、認証設定、ならびに、ＫＶＭリダイレクトのための他の情報を含んでもよい。その後、動作７２４において、ブラウザプログラム１４３が、たとえば、ＨＴＴＰプロトコルを使用して、ＢＭＣ１２０のウェブサーバ１２６に構成情報を送信する。構成情報を受信すると、ウェブサーバ１２６は、それに応じて、ＫＶＭリダイレクトモジュールに構成情報を送信する。動作７３０において、ＢＭＣ１２０が、それに応じてＫＶＭリダイレクトモジュール１２２を設定する。ＫＶＭリダイレクトモジュールは、ホストコンピュータ１１０のリダイレクトコントローラ１１８との接続を確立することができる。
【００６５】
動作７６０において、ブラウザプログラム１４３が、ウェブサーバ１２６に、ウェブ・ソケット・プロトコルの下での全二重通信を確立することを求めるウェブ・ソケット・ハンドシェイク要求を送信する。ウェブ・ソケット・ハンドシェイク要求を受信すると、動作７６２において、ウェブサーバ１２６は、ウェブ・ソケット・モジュール１２４に、ウェブソケットを開放するよう命令する。同様に、動作７６４において、ブラウザプログラム１４３は、ウェブ・ソケット・モジュール１４５に、ウェブソケットを開放するよう命令する。したがって、動作７６６において、ウェブ・ソケット・モジュール１２４とウェブ・ソケット・モジュール１４５との間にウェブソケット接続が確立される。
【００６６】
ウェブソケット接続が確立されると、ＢＭＣ１２０は、ホストコンピュータ１１０からウェブソケット接続を通じてブラウザプログラム１４３へのビデオ出力のリダイレクトを開始することができる。具体的には、動作７７０において、ＫＶＭリダイレクトモジュールが、ホストコンピュータ１１０から第１のビデオフレームを受信する。ＫＶＭリダイレクトモジュールはその後、第１のビデオフレームを処理して第１のリダイレクト画像を生成し、ウェブサーバ１２６に第１のリダイレクト画像を送信する。動作７７２において、ウェブサーバ１２６が、ウェブ・ソケット・モジュール１２４に第１のリダイレクト画像を送信する。動作７７４において、ウェブ・ソケット・モジュール１２４が、ウェブソケット接続を通じてコンピューティングデバイスのウェブ・ソケット・モジュール１４５に第１のリダイレクト画像を送信する。動作７７６において、ウェブ・ソケット・モジュール１４５が、ブラウザプログラム１４３に第１のリダイレクト画像を送信する。ブラウザプログラム１４３はその後、動作７７８において、リダイレクトウェブページによって命令されるように、キャンバス１６０上に第１のリダイレクト画像を表示することができる。
【００６７】
その後、動作７８０において、ＫＶＭリダイレクトモジュール１２２が、ホストコンピュータ１１０から第２のビデオフレームを受信する。ＫＶＭリダイレクトモジュール１２２はその後、第２のビデオフレームを第１のビデオフレームと比較して、第２のビデオフレームの任意のピクセルが、第１のビデオフレーム中の対応するピクセルの値と異なる値を有するか否かを判定する。第２のビデオフレーム中のピクセルのいずれかが変更されている場合、ＫＶＭリダイレクトモジュール１２２は、それに応じて、１つまたは複数のタイル画像および関連するタイルパラメータを生成する。ＫＶＭリダイレクトモジュール１２２は、ウェブサーバ１２６にタイル画像およびタイルパラメータを送信する。ウェブサーバはその後、必要に応じて、タイル画像を、ブラウザプログラム１４３にサポートされるフォーマットに変換する。動作７８２において、ＢＭＣ１２０のウェブサーバ１２６が、ウェブ・ソケット・モジュール１２４にタイル画像およびパラメータを送信する。動作７８４において、ウェブ・ソケット・モジュール１２４が、ウェブソケット接続を通じてウェブ・ソケット・モジュール１４５にタイル画像およびパラメータを送信する。動作７８６において、ウェブ・ソケット・モジュール１４５が、ブラウザプログラム１４３にタイル画像およびパラメータを送信する。ブラウザプログラム１４３は、動作７８８において、ＫＶＭリダイレクトウェブページによって命令されるように、キャンバス上で、タイルパラメータによって指示される領域に受信されたタイル画像をあてて第１のリダイレクト画像をパッチすることができる。
【００６８】
図７Ｂは、本開示の特定の実施形態による、ウェブソケット接続１５０および特定の画像処理技法を利用したビデオリダイレクトのための手順を示す。この例において、ＫＶＭリダイレクトモジュール１２２は最初に、ブラウザプログラム１４３に、第１のフレームを表す第１のリダイレクト画像を転送する。ブラウザプログラムは、それに応じて、ブラウザプログラム１４３の表示領域１６１に第１のリダイレクト画像を表示することができる。その後、ＫＶＭリダイレクトモジュール１２２は、様々な符号化および圧縮技法を使用して、第２のフレーム１５４を表す第２のリダイレクト画像を処理することができる。
処理済みの（すなわち、符号化および圧縮された）第２のリダイレクト画像はその後、ウェブソケット接続１５０を通じてブラウザプログラム１４３に送信される。ブラウザプログラム１４３によって受信されるリダイレクトウェブページは、ブラウザプログラム１４３に、処理済みの第２のリダイレクト画像を解凍および復号するよう命令するのに利用することができるＪａｖａＳｃｒｉｐｔルーチンを含む。ブラウザプログラム１４３は、処理済みの第２のリダイレクト画像を解凍および復号して表示するための画像が得られた後、ブラウザプログラム１４３の表示領域にその画像を表示することができる。
【００６９】
処理（すなわち、符号化／復号および圧縮／解凍）技法の１つが、参照により本明細書に明示的に組み込まれる、米国特許第７，５６７，７１７号明細書および米国特許第７，９７０，２１８号明細書に開示されている。簡潔には、ＫＶＭリダイレクトモジュール１２２は、それらの特許文献に開示されているように、第２のリダイレクト画像中の所与のピクセルを取り囲むいくつかのピクセルの値、および、第１のリダイレクト画像中の対応するピクセルの値に基づいて、第２のリダイレクト画像の所与のピクセルの予測値を生成することができる。さらに、ＫＶＭリダイレクトモジュール１２２は、損失または無損失要件に従って、第２のリダイレクト画像中の所与のピクセルの実際の値を、予測値と選択的に置き換え、その後、それに応じて第２のリダイレクト画像を符号化する。その後、ＫＶＭリダイレクトモジュール１２２は、所定のアルゴリズム、たとえば、単純化されたランレングス符号化（「ＲＬＥ」）アルゴリズムを使用して、符号化された第２のリダイレクト画像を圧縮し、それによって、処理済みの第２のリダイレクト画像を得る。加えてまたは代替的に、ＫＶＭリダイレクトモジュール１２２は、ＤＰＣＭ、エントロピー符号化、デフレーションまたはチェーンコード圧縮のような可逆画像圧縮方法、および、色空間低減、サブサンプリング、または変換符号化のような不可逆画像圧縮方法を含む、何らかの一般的に使用されている画像圧縮技法を使用して第２のリダイレクト画像を処理することができる。
【００７０】
具体的には、図７Ｂに示す動作７１０〜７７６は、図７Ａに示す対応する動作と同様である。動作７７９において、ブラウザプログラム１４３が、ブラウザプログラム１４３のブラウザ表示領域１６１に第１のリダイレクト画像を表示する。動作７８１において、ＫＶＭリダイレクトモジュール１２２が、ホストコンピュータ１１０から第２のビデオフレームを受信し、第２のリダイレクト画像を生成する。ＫＶＭリダイレクトモジュール１２２はその後、上記で説明した技法を使用して第２のリダイレクト画像を処理して、処理済み（すなわち、符号化および圧縮された）画像を生成する。動作７８３において、ＢＭＣ１２０のウェブサーバ１２６が、ウェブ・ソケット・モジュール１２４に処理済み画像を送信する。動作７８４において、ウェブ・ソケット・モジュール１２４が、ウェブソケット接続１５０を通じてウェブ・ソケット・モジュール１４５に処理済み画像を送信する。動作７８７において、ウェブ・ソケット・モジュール１４５が、ブラウザプログラム１４３に処理済み画像を送信する。動作７８において、ブラウザプログラム１４３は、たとえば、リダイレクトウェブページにおいて定義されているＪａｖａＳｃｒｉｐｔルーチンによって命令されるように、処理済み画像を解凍および復号して表示するための画像を得、その後、表示領域１６１にその画像を表示することができる。
【００７１】
図８は、本開示の別の実施形態によるウェブベースのＫＶＭリダイレクトを概略的に示す。この実施形態において、コンピューティングデバイス１４０は、Ｊａｖａバーチャルマシン（ＪＶＭ）１６６を含む。代替的に、ＪＶＭは、ブラウザプログラム１４３によってＢＭＣ１２０のウェブサーバ１２６からダウンロードすることができる。
【００７２】
最初に、ブラウザプログラム１４３は、ＢＭＣ１２０にあるウェブサーバ１２６と接続して、リダイレクトウェブページを受信する。ユーザは、認証情報を入力し、リダイレクトウェブページを通じてウェブサーバに認証情報を送信することができる。ウェブサーバ１２６はユーザを認証し、その後、ブラウザプログラム１４３にセッショントークンを送信する。ウェブサーバ１２６は、コンピューティングデバイス１４０上のＪＶＭによって実行することができる、コンパイル済みＪａｖａオブジェクト１６４を記憶している。ブラウザプログラム１４３は、ブラウザプログラムを操作するユーザの許可を得てＪａｖａオブジェクト１６４をダウンロードする。Ｊａｖａオブジェクト１６４はその後、コンピューティングデバイス１４０のＪＶＭにおいて実行される。Ｊａｖａオブジェクトは、リダイレクト画像およびパッチを表示するのに使用することができるＪａｖｅ表示モジュール１６３を起動する。Ｊａｖａ表示モジュール１６３は、表示デバイス１４７上に画像をレンダリングする。ブラウザプログラム１４３はウェブサーバ１２６から受信されたセッショントークンをＪａｖａオブジェクト１６４に渡す。Ｊａｖａオブジェクト１６４は、リダイレクトサーバ１２２との接続１５１を確立することができる。一般的に、接続１５１は、コンピューティングデバイス１４０にあるＴＣＰ／ＩＰソケット１９５と、ＢＭＣ１２０にあるＴＣＰ／ＩＰソケット１２５との間に確立される。Ｊａｖａオブジェクト１６４は、ＪＶＭ１６６を通じて、オペレーティングシステム１４４に、Ｊａｖａオブジェクト１６４のためにＴＣＰ／ＩＰソケット１９５を開放するよう命令することができる。セッショントークンを使用して、Ｊａｖａオブジェクト１６４は、ＫＶＭリダイレクトモジュール１２２とのセッションのための通信チャネルを確立することができる。
【００７３】
通信チャネルが確立された後、ＫＶＭリダイレクトモジュール１２２は、通信チャネルを通じてＪａｖａオブジェクトにリダイレクト画像およびパッチを送信することができる。Ｊａｖａオブジェクト１６４は、Ｊａｖａ表示モジュール１６３を呼び出して、リダイレクト画像およびパッチを表示する。リダイレクト画像の必要とされる解像度に関するユーザの構成に従って、Ｊａｖａオブジェクト１６４は、Ｊａｖａ表示モジュール１６３を所望の解像度に設定する。Ｊａｖａオブジェクト１６４は、Ｊａｖａ表示モジュール１６３に完全なリダイレクト画像を表示し、指定される領域にタイル画像をあててＪａｖａ表示モジュール１６３をパッチするために呼び出すことができるｄｒａｗｌｍａｇｅ（）のような関数を定義することができる。キャンバス１６０と同様に、Ｊａｖａオブジェクト１６４は、座標パラメータを使用して、Ｊａｖａ表示モジュール１６３上にタイル画像を描画することができる。
【００７４】
代替的に、ＫＶＭリダイレクトモジュール１２２が、図７Ｂに関連して上述したように、リダイレクト画像を処理してもよい。その後、ＫＶＭリダイレクトモジュール１２２が、通信チャネルを通じてＪａｖａオブジェクト１６４に処理済み画像を送信する。Ｊａｖａオブジェクト１６４は、処理済み画像を解凍および復号して、表示するための画像を得ることができる。その後、Ｊａｖａオブジェクト１６４は、Ｊａｖａ表示モジュール１６３上に画像を表示することができる。
【００７５】
図９は、本開示の特定の実施形態による、Ｊａｖａオブジェクトを利用したビデオリダイレクトのための手順を示す。動作９１０において、ブラウザプログラム１４３が、ネットワークを介してＢＭＣ１２０に、ＫＶＭリダイレクトウェブページを求める要求を送信する。要求は、ＨＴＴＰフォーマットにあってもよい。ＫＶＭリダイレクトウェブページを求める要求を受信すると、動作９２０において、ＢＭＣ１２０のウェブサーバ１２６が、ブラウザプログラム１４３にＫＶＭリダイレクトウェブページを送信する。したがって、ブラウザプログラム１４３は、ユーザにＫＶＭリダイレクトウェブページを表示することができ、コンピューティングデバイス１４０のユーザが、動作９２２において、ＢＭＣ１２０のＫＶＭリダイレクトモジュール１２２のための構成情報を入力または選択することを可能にする。ＫＶＭリダイレクトモジュールの構成情報は、リダイレクト画像解像度情報、リダイレクト画像リフレッシュレート情報、機械およびネットワークの設定、認証設定、ならびに、ＫＶＭリダイレクトのための他の情報を含んでもよい。その後、動作９２４において、ブラウザプログラム１４３が、たとえば、ＨＴＴＰプロトコルを使用して、ＢＭＣ１２０のウェブサーバ１２６に構成情報を送信する。ウェブサーバ１２６は、それに応じて、ＫＶＭリダイレクトモジュール１２２に構成情報を送信する。ブラウザプログラム１４３はまた、ウェブサーバ１２６からＪａｖａオブジェクトを要求する。構成情報を受信すると、手順９２６において、ウェブサーバ１２６は、必要に応じて、Ｊａｖａオブジェクト１６４を設定し、その後、ブラウザプログラム１４３にＪａｖａオブジェクト１６４およびセッショントークンを送信する。Ｊａｖａオブジェクト１６４を受信すると、手順９２８において、ブラウザプログラム１４３は、ＪＶＭ１６６上でＪａｖａオブジェクト１６４を起動し、Ｊａｖａオブジェクト１６４にセッショントークンを渡す。
【００７６】
その間、動作９３０において、ＢＭＣが、それに応じてＫＶＭリダイレクトモジュール１２２を設定する。ＫＶＭリダイレクトモジュール１２２は、ホストコンピュータ１１０のリダイレクトコントローラ１１８との接続を確立することができる。
【００７７】
動作９６０において、Ｊａｖａオブジェクト１６４は、セッショントークンを使用してＫＶＭリダイレクトモジュール１２２との通信を開始する。動作９６６において、コンピューティングデバイス１４０のＴＣＰ／ＩＰソケットモジュール１９５とＢＭＣ１２０のＴＣＰ／ＩＰソケットモジュール１２５との間のＴＣＰ／ＩＰ接続が確立される。
【００７８】
ＴＣＰ／ＩＰ接続が確立されると、ＢＭＣ１２０は、ホストコンピュータ１１０からＴＣＰ／ＩＰ接続を通じてＪａｖａオブジェクト１６４へのビデオ出力のリダイレクトを開始することができる。具体的には、動作９７０において、ＫＶＭリダイレクトモジュールが、ホストコンピュータ１１０から第１のビデオフレーム、すなわちフレーム１を受信する。ＫＶＭリダイレクトモジュールは、第１のビデオフレームを処理（すなわち符号化および圧縮）して、処理済みの第１のリダイレクト画像を生成することができる。動作９７２において、ＫＶＭリダイレクトモジュール１２２が、ＴＣＰ／ＩＰソケットモジュール１２５に処理済みの第１のリダイレクト画像を送信する。動作９７４において、ＴＣＰ／ＩＰソケットモジュール１２５が、ＴＣＰ／ＩＰ接続を通じてコンピューティングデバイス１４０のＴＣＰ／ＩＰソケットモジュール１９５に処理済みの第１のリダイレクト画像を送信する。動作９７６において、ＴＣＰ／ＩＰソケットモジュール１９５が、Ｊａｖａオブジェクト１６４に圧縮された第１の画像を送信する。動作９７８において、Ｊａｖａオブジェクト１６４が、この圧縮画像を解凍する。動作９７９において、Ｊａｖａオブジェクトが、Ｊａｖａ表示モジュール１６３に解凍された画像を表示する。
【００７９】
その後、動作９８０において、ＫＶＭリダイレクトモジュール１２２が、ホストコンピュータ１１０から第２のビデオフレームを受信する。ＫＶＭリダイレクトモジュール１２２はその後、第２のビデオフレームを処理（すなわち、符号化および圧縮）し、それに応じて、処理済みの第２のリダイレクト画像を生成する。動作９８２において、ＫＶＭリダイレクトモジュールが、ＴＣＰ／ＩＰソケットモジュール１２５に処理済みの第２のリダイレクト画像を送信する。動作９８４において、ＴＣＰ／ＩＰソケットモジュール１２５が、ＴＣＰ／ＩＰ接続を通じてＴＣＰ／ＩＰソケットモジュール１９５に処理済みの第２のリダイレクト画像を送信する。動作９８６において、ＴＣＰ／ＩＰソケットモジュール１９５が、Ｊａｖａオブジェクト１６４に処理済みの第２のリダイレクト画像を送信する。動作９８８において、Ｊａｖａオブジェクト１６４が、処理済みの第２のリダイレクト画像を解凍および復号し、表示するための第２の画像を生成する。動作９８９において、Ｊａｖａオブジェクト１６４が、Ｊａｖａ表示モジュール１６３上に第２の画像を表示する。
【００８０】
図４に戻って参照すると、特定の実施形態において、キーボードおよびマウスリダイレクトを含む入力リダイレクトが、ビデオリダイレクトと同時に実施される。ブラウザプログラム１４３は、キーボード１４８、マウス１４９、およびタッチパネルのような入力デバイスから入力信号を受信することができる。ブラウザプログラム１４３は、ウェブソケット接続１５０を通じてＢＭＣ１２０のウェブソケット１２４に入力データを送信することができる。ＢＭＣ１２０のウェブソケット１２４が入力データを受信すると、ウェブソケット１２４は、ウェブサーバ１２６に入力データを渡し、ウェブサーバ１２６は、入力データを処理してキーボードおよびマウス入力を取り出すことができる。ウェブサーバ１２６は、ＫＶＭリダイレクトモジュール１２２にキーボードおよびマウス入力を送信する。必要に応じて、ＫＶＭリダイレクトモジュール１２２は、キーボードおよびマウス入力を、ホストコンピュータ１１０によって使用されるフォーマットに変換することができ、その後、Ｉ／Ｏコントローラ１１６に入力を送信する。このように、ホストコンピュータ１１０は、ブラウザプログラム１４３から発せられる入力を、ローカル入力デバイスからの入力であると理解する。
【００８１】
ブラウザプログラム１４３は、オペレーティングシステム１４４を利用して、ブラウザプログラム１４３に向けられたキーボード１４８およびマウス１４９からの入力を表す入力イベントを生成することができる。たとえば、キーボード１４８から、キーが押下されるときに、キーボード動作が発生する。いくつかのキーボード動作は、複数のキーから成る組み合わせが同時に押下されることを含み得る。そのようなキーボード動作は概して、他のキーと組み合わさって機能することになっているＣｔｒｌキー、ＡｔｌキーまたはＳｈｉｆｔキーなどの、キーボード１４８上の特定の機能キーに関係する。そのような動作において、組み合わせが各別個のキー入力とは異なるキー入力を生成する。各キーボード動作は、文字コードまたはキーボードイベントに対応する他の代表値を含んでもよい対応する入力データを生成する。
【００８２】
マウスは、特定の領域の上でのマウスカーソルの位置付け、マウスカーソルの移動、マウスホイールの回転、およびマウスボタンのクリック（シングルクリックまたはダブルクリック）のような、様々な異なる動作を実施することができる。いくつかの事例において、これらの動作は、マウスカーソルが特定の領域内に位置付けられたときにマウスボタンをクリックすること、または、マウスを「ドラッグ」する、すなわち、マウスボタンをクリックしてボタンを離すことなくマウスカーソルを移動させることのように、組み合わされ得る。概して、マウスイベントは、クリックイベント、ドラッグイベント、および動きイベントのようなタイプに分類され得る。
【００８３】
ＪａｖａＳｃｒｉｐｔは、これらのマウスおよびキーボード動作に対応する関数およびイベントオブジェクトを提供する。たとえば、クリック動作は、それぞれマウスボタンが押下される動作、および、押されていたマウスボタンが離されることを指すマウス・ダウン・イベントおよびマウスアップイベントを含み得る。動き動作は、マウスカーソルを１つの位置から別の位置へと移動させることを指すマウスムーブイベントを含み得る。ドラッグ動作は、マウス・ダウン・イベント、マウスムーブイベント、およびマウスアップイベントの組み合わせである。マウスイベントに関係する他のＪａｖａＳｃｒｉｐｔ関数およびイベントは、マウスカーソルを画面上の所定の領域の上に移動させることを含むマウスオーバーイベント、および、マウスカーソルを画面上の所定の領域の中に移動させることを含むマウスエンターイベントを含み得る。ＪａｖａＳｃｒｉｐｔは、マウスムーブイベントと組み合わせて使用するためのｇｅｔＭｏｕｓｅＰｏｓ（）関数も提供する。各マウスイベントは、複数のパラメータを含み得る。たとえば、マウス・ダウン・イベントが発生すると、イベントは、マウス・ダウン・イベントを表すコード、および、マウス・ダウン・イベントが発生しているマウスカーソルの現在位置を表す座標パラメータを生成する。
【００８４】
特定の実施形態において、ＫＶＭリダイレクトウェブページは、キャンバス１６０またはＪａｖａ表示モジュール１６３上でマウスイベントが発生すると、そのマウスイベントの位置を捕捉する。たとえばブラウザプログラム１４３のキャンバス１６０上に表示されるリダイレクト画像は、ホストコンピュータ１１０によって出力されるユーザインターフェースを表示することができる。ユーザは、コンピューティングデバイス１４０のマウスを使用して、キャンバス上に示されているユーザインターフェースのボタンをクリックすることができる。リダイレクトウェブページは、キャンバス１６０またはＪａｖａ表示モジュール１６３に対する、マウスイベントの位置およびマウスイベントの生成される座標を検出するＪａｖａＳｃｒｉｐｔルーチンを有することができる。キャンバス１６０またはＪａｖａ表示モジュール１６３の解像度が、ホストコンピュータ１１０のビデオコントローラ１１７によって出力されるビデオフレームと１対１の関係を有する場合、これらのブラウザ座標は、ホストコンピュータ１１０上のリダイレクトされるマウスイベントの所望の位置をも示す。他の状況においては、ホストコンピュータ１１０上のリダイレクトされるマウスイベントの所望の位置を正確に示すために、ウェブサーバ１２６が、ブラウザプログラム１４３から受信されるブラウザ座標を、ホストコンピュータ１１０上のビデオフレーム座標に変換することができる。
【００８５】
たとえば、図５に戻って参照して、ブラウザプログラム１４０のキャンバス１６０がリダイレクト画像１５９を表示すると、コンピューティングデバイス１４０のユーザは、マウスを使用してキャンバス上の位置１８０でクリックすることができる。したがって、ブラウザプログラム１４３は、マウス・ダウン・イベントおよびｇｅｔＭｏｕｓｅＰｏｓ（）関数を含むＪａｖａＳｃｒｉｐｔを使用して、マウスクリック位置１８０の座標パラメータを得ることができ、ＢＭＣ１２０にマウス・クリック・イベント・データを送信する。その後、ＢＭＣ１２０は、必要に応じて、マウス・クリック・イベント・データを、ホストコンピュータ１１０によって使用されるフォーマットに変換し、ホストコンピュータ１１０の入力コントローラ１１６にイベントデータを送信する。
【００８６】
本開示の例示的な実施形態の上記の記載は、例示および説明のみを目的として提示されており、網羅的であること、または、本発明の開示されている厳密な形式に限定するようには意図されていない。上記の教示に照らして多くの修正および変形が可能である。
【００８７】
実施形態は、当業者が、本発明および様々な実施形態を、企図されている特定の用途に適するように様々な修正を施して利用するよう活性化するように、本発明の原理およびその実際の適用を説明するために選択および記載されている。代替的な実施形態が、本発明の技術思想および範囲から逸脱することなく、本発明が属する技術分野における当業者には明らかとなろう。たとえば、複数のプローブを同時に利用して本発明を実施してもよい。したがって、本開示の範囲は、上記の記載および本明細書に記載されている例示的な実施形態ではなく、添付の特許請求の範囲によって画定される。
【図１】
2016517564.tif 000003
【図２】
2016517564.tif 000004
【図３Ａ】
2016517564.tif 000005
【図３Ｂ】
2016517564.tif 000006
【図４】
2016517564.tif 000007
【図５】
2016517564.tif 000008
【図６】
2016517564.tif 000009
【図７Ａ】
2016517564.tif 000010
【図７Ｂ】
2016517564.tif 000011
【図８】
2016517564.tif 000012
【図９】
2016517564.tif 000013
【国際調査報告】
2016517564.tif 000014
2016517564.tif 000015