(58)【調査した分野】(Int.Cl.,DB名)
前記描画可能領域はHTML5によって定義されているキャンバスであり、前記ウェブページは、前記ブラウザプログラムに、前記キャンバス上に前記リダイレクト画像を表示し、前記表示されたリダイレクト画像上に前記第1のタイル画像をパッチするよう命令するようにプログラムされている、請求項3に記載の方法。
前記タイルパラメータは、前記描画可能領域上の位置を示す座標、前記各変化したタイル画像の幅、および、前記各変化したタイル画像の高さを含む、請求項6に記載の方法。
前記ウェブページは、前記ブラウザプログラムに、前記描画可能領域上で発生した第1のイベントを捕捉し、前記第1のイベントのイベントデータを前記ウェブサーバに送信するよう命令するようにプログラムされており、前記第1のイベントはマウスイベントまたはキーボードイベントであり、前記方法は、
前記ウェブソケット接続を通じて前記ブラウザプログラムから前記イベントデータを受信することと、
前記ホストコンピュータに適合している、前記イベントデータを表す入力データを生成することと、
前記ホストコンピュータの入力コントローラに前記入力データを送信することとを含む、請求項1に記載の方法。
前記BMCにおいて、所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、前記所与のピクセルおよび前記周囲のピクセルに対応する前記第1のビデオフレーム中のピクセルのピクセル値に基づいて、前記第2のビデオフレームの所与のピクセルの予測値を生成することと、
符号化画像を生成するために、損失または無損失要件に基づいて、前記所与のピクセルのピクセル値を前記予測値で選択的に置き換えることとを含む、請求項1に記載の方法。
前記方法は、前記処理済み画像を生成するために前記ウェブサーバにおいて前記符号化画像を圧縮することを含み、前記ウェブページは、前記ブラウザプログラムに、JavaScriptルーチンを呼び出して前記処理済み画像を解凍および復号し、前記描画可能領域に前記解凍および復号された画像を表示するよう命令するようにプログラムされている、請求項11に記載の方法。
前記BMCにおいて、所与のピクセルを取り囲む複数の周囲のピクセルのピクセル値、および、前記所与のピクセルおよび前記周囲のピクセルに対応する前記第1のビデオフレーム中の前記ピクセルのピクセル値に基づいて、前記第2のビデオフレームの前記所与のピクセルの予測値を生成することと、
符号化画像を生成するために、損失または無損失要件に基づいて、前記所与のピクセルのピクセル値を前記予測値で選択的に置き換えることとを含む、請求項13に記載の方法。
コンピュータ実行可能命令が記憶されている持続性コンピュータ記憶媒体であって、ベースボード管理コントローラ(BMC)のプロセッサによって命令が実行されると、前記命令は、前記プロセッサに、
ホストコンピュータからリダイレクトされる第1のビデオフレームおよび第2のビデオフレームを受信することであって、前記BMCは、前記ホストコンピュータの管理機能を実施する、ことと、
ウェブサーバにおいてウェブページを生成するとともに、ネットワーク内のコンピューティングデバイス上で作動するブラウザプログラムに前記ウェブページを送信することであって、前記ウェブページは、前記ブラウザプログラムに、描画可能領域を起動して、前記ウェブサーバとのウェブソケット接続を確立するよう命令するようにプログラムされている、ことと、
前記第2のビデオフレームを表す処理済み画像を生成することと、
前記ウェブサーバと前記ブラウザプログラムとの間にウェブソケット接続を確立することと、
前記ウェブソケット接続を通じて前記ブラウザプログラムに前記処理済み画像を送信することとを行わせる、持続性コンピュータ記憶媒体。
前記ウェブページは、前記ブラウザプログラムに、前記描画可能領域上で発生した第1のイベントを捕捉し、前記第1のイベントのイベントデータを前記ウェブサーバに送信するよう命令するようにプログラムされており、前記第1のイベントはマウスイベントまたはキーボードイベントであり、前記命令は、実行されると、前記プロセッサに、
前記ウェブソケット接続を通じて前記ブラウザプログラムから前記イベントデータを受信することと、
前記ホストコンピュータに適合している、前記イベントデータを表す入力データを生成することと、
前記ホストコンピュータの入力コントローラに前記入力データを送信することとを行わせる、請求項20に記載の持続性コンピュータ記憶媒体。
前記第1のイベントはマウスイベントであり、前記イベントデータは、前記イベントが発生した、前記描画可能領域上のイベント位置を示し、前記命令は、実行されると、前記プロセッサに、
前記イベント位置に基づいて前記ホストコンピュータの位置座標を求めることと、
前記マウスイベントおよび前記位置座標を表す前記入力データを生成することとを行わせる、請求項21に記載の持続性コンピュータ記憶媒体。
前記第1のイベントはキーボードイベントであり、前記イベントデータはキーストロークを示し、前記命令は、実行されると、前記プロセッサに、前記キーストロークを表す前記入力データを生成することを行わせる、請求項21に記載の持続性コンピュータ記憶媒体。
前記命令は、実行されると、前記プロセッサに、前記処理済み画像を生成するために前記ウェブサーバにおいて前記符号化画像を圧縮することを行わせ、前記ウェブページは、前記ブラウザプログラムに、JavaScriptルーチンを呼び出して前記処理済み画像を解凍および復号し、前記描画可能領域に前記解凍および復号された画像を表示するよう命令するようにプログラムされている、請求項24に記載の持続性コンピュータ記憶媒体。
【発明を実施するための形態】
【0017】
本開示は、多数の修正および変形が当業者に明らかになるため例示としてのみ意図されている以下の例により詳細に説明される。ここで、本開示の様々な実施形態を詳細に説明する。図面を参照すると、同様の参照符号がある場合、これらは、図面全体を通じて同様の構成要素を示す。本明細書において、および、添付の特許請求の範囲全体を通じて使用されている場合、「a」、「an」、および「the」の意味するところは、文脈が明確に別途示していない限り、複数への参照を含む。また、本明細書において、および、添付の特許請求の範囲全体を通じて使用されている場合、「中(in)」の意味するところは、文脈が明確に別途示していない限り、「中(in)」および「上(on)」を含む。さらに、本明細書においては読者の便宜のために表題または副題が使用されている場合があるが、これは本開示の範囲には影響を及ぼさないものとする。加えて、本明細書において使用されているいくつかの用語を、下記により詳細に定義する。
【0018】
本明細書において使用される用語は概して、本開示の文脈内、および、各用語が使用される特定の文脈において、当該技術分野におけるそれらの一般的な意味を有する。本開示の説明に関して実践者にさらに助言を与えるために、本開示を説明するために使用される特定の用語を、下記に、または本明細書の他の箇所に説明する。便宜のために、特定の用語を、たとえば、斜字体および/または引用符を使用して強調している場合がある。強調が使用されても用語の範囲および意味に影響はなく、用語の範囲および意味は、強調されていようとされていまいと、同じ文脈の中では同じである。同じ物事が2通り以上に表現されている場合がある。したがって、代替的な文言および同義語が本明細書において説明されている用語いずれか1つまたは複数に使用されている場合があり、用語が本明細書において詳述または説明されているか否かにはいかなる特別な重要性もおかれるべきではない。特定の用語の同義語が与えられている。1つまたは複数の同義語の記載は、他の同義語の使用を除外しない。本明細書において説明されている任意の用語の例を含む、本明細書の任意の箇所における例の使用は例示に過ぎず、本開示または任意の説明されている用語の範囲および意味を決して限定するものではない。同様に、本開示は、本明細書において与えられている様々な実施形態には限定されない。
【0019】
別途定義されていない限り、本明細書において使用されているすべての技術用語および科学用語は、本開示が属する技術分野における当業者によって一般的に理解されているものと同じ意味を有する。不一致がある場合、定義を含め、本明細書が統制する。
【0020】
本明細書において使用される場合、「前後(around)」、「約(about)」または「おおよそ(approximately)」は、概して、与えられている値または範囲の20パーセント以内、好ましくは10パーセント以内、より好ましくは5パーセント以内を意味するものとする。本明細書において与えられている数量は近似であり、つまり、用語「前後(around)」、「約(about)」または「おおよそ(approximately)」は、明示的に述べられていない場合は推測され得る。
【0021】
本明細書において使用される場合、「複数」は2つ以上を意味する。
【0022】
本明細書において使用される場合、「備える(comprising)」、「含む(including)」、「保持する(carring)」、「有する(having)」、「含む(containing)」、「含む(involving)」などの用語は、制約がない、すなわち、含むが限定されないことを意味するものとして理解されるべきである。
【0023】
本明細書において使用される場合、A、B、およびCのうちの少なくとも1つという語句は、非排他的論理ORを使用して論理(AまたはBまたはC)を意味するものとして解釈されるべきである。方法内の1つまたは複数のステップは、本開示の原理を変更することなく異なる順序で(または同時に)実行されてもよいことが理解されるべきである。
【0024】
本明細書において使用される場合、モジュールという用語は、特定用途向け集積回路(ASIC)、電子回路、組み合わせ論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、コードを実行するプロセッサ(共有、専用、グループ)、記載されている機能を提供する他の適切なハードウェア構成要素、または、システムオンチップにあるような、上記のいくつかもしくはすべての組み合わせを指す場合があり、それらの一部である場合があり、またはそれらを含む場合がある。モジュールと言う用語は、プロセッサによって実行されるコードを記憶するメモリ(共有、専用、またはグループ)を含み得る。
【0025】
上記で使用されているものとしてのコードという用語は、ソフトウェア、ファームウェア、および/またはマイクロコードを含む場合があり、プログラム、ルーチン、機能、クラス、および/またはオブジェクトを指す場合がある。上記で使用されているものとしての共有という用語は、複数のモジュールからいくつかのまたはすべてのコードを、単一の(共有)プロセッサを使用して実行することができることを意味する。加えて、複数のモジュールからのいくつかのまたはすべてのコードを、単一の(共有)メモリによって記憶することができる。上記で使用されているものとしてのグループという用語は、単一のモジュールからいくつかのまたはすべてのコードを、プロセッサのグループを使用して実行することができることを意味する。加えて、単一のモジュールからのいくつかのまたはすべてのコードを、メモリのグループを使用することによって記憶することができる。
【0026】
本明細書に記載されている装置および方法は、1つまたは複数のプロセッサによって実行される1つまたは複数のコンピュータプログラムによって実装することができる。コンピュータプログラムは、持続性有形コンピュータ可読媒体上に記憶されるプロセッサ実行可能命令を含む。コンピュータプログラムはまた、記憶されているデータをも含み得る。持続性有形コンピュータ可読媒体の非限定例は、不揮発性メモリ、磁気記憶装置、および光学式記憶装置である。
【0027】
ここで、本開示の実施形態が示されている添付の図面を参照して、本開示を以降より十分に説明する。しかしながら、本開示は、多くの異なる形態で具現化されてもよく、本明細書に記載されている実施形態に限定されるものとして解釈されるべきではなく、むしろ、これらの実施形態は、本開示が完全かつ完璧なものになり、本開示の範囲を当業者に完全に伝達するように提供される。同様の参照符号は、本明細書全体を通じて同様の要素を指す。
【0028】
本開示はコンピュータシステムに関する。図面に示されているように、コンピュータ構成要素は、実線のブロックとして図示されている物理ハードウェア構成要素、および、破線のブロックとして図示されている仮想ソフトウェア構成要素を含み得る。別途指示されていない限り、これらのコンピュータ構成要素は、限定ではないが、ソフトウェア、ファームウェアもしくはハードウェア構成要素、またはそれらの組み合わせにおいて実装されてもよいことを、当業者は諒解されよう。
【0029】
図1は、本開示の一実施形態によるウェブベースのKVMリダイレクトシステムを概略的に示す。
図1に示すように、システム100は、ホストコンピュータ110と、ネットワーク130を介してホストコンピュータ110に接続されているコンピューティングデバイス140とを含む。システム100は、クライアント―サーバネットワークのような、2つ以上の相互接続されたシステムを組み込んでいるシステムであってもよい。ネットワーク130は、有線またはワイヤレスネットワークであってもよく、ローカル・エリア・ネットワーク(LAN)、または、インターネットを含む広域ネットワーク(WAN)のような様々な形態のものであってもよい。
【0030】
ホストコンピュータ110は、汎用コンピュータシステムであってもよい。ホストコンピュータ110は、ベースボード111、すなわち「マザーボード」を含む。ベースボード111は、システムバスまたは他の電気通信経路によって複数の構成要素またはデバイスがそれに接続され得るプリント回路基板である。
図1には明示的に示されていないが、ベースボード111上の構成要素は相互接続されており、ベースボード111上の構成要素のレイアウトおよびベースボード111上の構成要素間の相互接続の様態を、本明細書においてはベースボード111の構成と称する。ベースボード111の構成は、必要な設計または製造要件に従って調整または変更することができることが、当業者には諒解されよう。
【0031】
ベースボード111上の構成要素は、限定ではないが、中央処理装置(CPU)112と、メモリ113と、ベースボード管理コントローラ(BMC)120と、他の必要とされるメモリおよび入出力(I/O)モジュール(図示せず)とを含む。CPU112、メモリ113、およびBMC120は、ベースボード111上に組み込まれてもよく、または、インターフェースを通じてベースボード111に接続されてもよい。特定の実施形態において、インターフェースは、電気コネクタ、バス、ポート、ケーブル、端子、または他のI/Oデバイスのような物理ハードウェアインターフェースであってもよい。
【0032】
CPU112は、ホストコンピュータ110の動作を制御するように構成されているホストプロセッサである。ホストプロセッサは、ホストコンピュータ110のオペレーティングシステム(OS)または他のアプリケーションを実行することができる。いくつかの実施形態において、ホストコンピュータ110は、2つのCPU、4つのCPU、8つのCPU、または任意の適切な数のCPUのような、2つ以上のCPUをホストプロセッサとして有してもよい。
【0033】
メモリ113は、ホストコンピュータ110の動作中にデータおよび情報を記憶するための、ランダムアクセスメモリ(RAM)のような揮発性メモリとすることができる。
【0034】
BMC120とは、システム管理ソフトウェアとプラットフォームハードウェアとの間のインターフェースを管理する専用マイクロコントローラを指す。種々のタイプのセンサをシステム100に内蔵することができ、BMC120は、これらのセンサを読み取って、温度、冷却ファン速度、電力ステータス、OSステータスのようなパラメータを得る。BMC120は、センサをモニタリングして、いずれかのパラメータがプリセットの制限内に留まっておらず、システム100が故障した可能性を示す場合、ネットワークを介してシステム管理者に警告を送信することができる。管理者もまた、BMC120と遠隔通信して、ハングしたOSを再び作動させるためにシステムをリセットするかまたは電源を入れ直すことのような、何らかの修正措置をとることができる。さらに、BMC120は、コンピューティングデバイス140とホストコンピュータ110との間でビデオおよび入力信号をリダイレクトするKVMリダイレクトモジュール122を含むことができる。したがって、ユーザは、コンピューティングデバイス140からKVMセッションを開始して、ホストコンピュータ110のビデオ出力を見て、コンピューティングデバイス140の入力デバイスを通じてホストコンピュータ110にデータを入力することができる。
【0035】
特定の実施形態において、BMC120のファームウェアは、システムモニタリングおよびイベント回復のためのインテリジェントプラットフォーム管理インターフェース(IPMI)産業規格に従う。IPMIプロトコルは、コンピュータシステムの帯域外管理、および、セッションベースである動作のモニタリングのための標準コンピュータシステム・インターフェース・プロトコルであり、アプリケーションモジュールが標的IPMIデバイスと通信することができるようになる前に、アプリケーションモジュールと標的IPMIデバイスとの間のIPMIセッションが確立されることを必要とする。IPMI仕様は、適合するコンピュータ内の管理可能な機構のすべてにアクセスするための共通のメッセージベースのインターフェースをもたらし、温度、電圧、ファン速度、シャーシ侵入、および他のパラメータを読み取るための所定コマンドの豊富なセットを含む。システム・イベント・ログ、ハードウェアウォッチドッグ、および電力制御も、IPMIを通じてアクセスされ得る。このように、IPMIは、オペレーティングシステムを通じて、または、ネットワークもしくは直列接続のような外部接続を通じてBMCによって収集される様々なパラメータにアクセスするためのプロトコルを定義する。BMCは、ローカルに接続されている管理コンピュータからシステムインターフェースを通じて、または、ネットワークインターフェースを通じた外部要求として、IPMI命令または要求を受信することができる。
【0036】
特定の実施形態において、BMC120は、中でも、KVMリダイレクトモジュール122と、ウェブ・ソケット・モジュール124と、ウェブ・サーバ・モジュール126とを含む。KVMモジュール122は、KVMリダイレクト機能を実装する。ウェブ・ソケット・モジュール124は、単一の伝送接続プロトコル(TCP)接続を介してウェブ・ソケット・プロトコルの下で全二重通信チャネルを確立することができる。ウェブ・サーバ・モジュール126は、インターネットを通じてアクセス可能なウェブコンテンツを提供することができる。モジュールの詳細は後述する。
【0037】
さらに、ホストコンピュータ110は、ホストコンピュータ110のOS(図示せず)および他のアプリケーションを記憶するためのデータ記憶媒体である記憶装置114と、少なくとも1つのI/Oデバイス116とを含む。記憶装置114の例は、フラッシュメモリ、メモリカード、USBドライブ、ハードドライブ、フロッピーディスク、光学式ドライブ、または任意の他のタイプのデータ記憶デバイスを含んでもよい。I/Oデバイス116の例は、キーボード、タッチパッド、マウス、マイクロフォン、表示スクリーン、タッチスクリーン、またはホストコンピュータ110に適用可能な他のI/Oデバイスを含む。
【0038】
コンピューティングデバイス140は、ネットワーク130を介してホストコンピュータ110に遠隔して接続される。システム100は、ホストコンピュータ110に同時に遠隔して接続される複数のコンピューティングデバイス140を含んでもよいことを、当業者は諒解されよう。コンピューティングデバイス140の例は、たとえば、スマートフォン、タブレットまたは他のモバイル・コンピュータ・デバイスのような携帯デバイスを含んでもよい。
【0039】
コンピューティングデバイス140は、CPU171と、メモリ173と、記憶装置142とを含む。記憶装置142は、コンピューティングデバイス140のOSおよび他のアプリケーションを記憶するためのデータ記憶媒体である。コンピューティングデバイス140の記憶装置142の例は、フラッシュメモリ、メモリカード、USBドライブ、ハードドライブ、フロッピーディスク、光学式ドライブ、または任意の他のタイプのデータ記憶デバイスを含んでもよい。
【0040】
ブラウザプログラム143がメモリ173内にロードされ、コンピューティングデバイス140のCPU171によって実行され得る。ブラウザプログラム143は、ユーザに対する情報資源を取り出し、提示し、トラバースするためのソフトウェアアプリケーションである。さらに、ブラウザプログラム143は、BMC120と通信するための、システム100のKVMリダイレクトクライアントとしての役割を果たすことができる。概して、ブラウザプログラム143は、インターネットのようなオープンネットワーク上で提供される情報資源を取り出すことができる。情報資源は、ウェブページ、画像、ビデオまたは他のタイプのデータコンテンツを含んでもよい。
【0041】
さらに、メモリ173は、OS144およびウェブ・ソケット・モジュール145をロードすることができる。ウェブ・ソケット・モジュール145は、ホストコンピュータ110上のBMC120のウェブ・ソケット・モジュール124に対応するモジュールであり、それによって、BMC120とコンピューティングデバイス140との間にウェブ・ソケット・プロトコルの下での全二重通信チャネルを確立することができる。
【0042】
さらに、コンピューティングデバイス140は、少なくとも1つのI/Oデバイス146を有する。I/Oデバイス146の例は、キーボード、タッチパッド、マウス、マイクロフォン、表示スクリーン、タッチスクリーン、またはコンピューティングデバイス140に適用可能な他のI/Oデバイスを含む。タッチスクリーンのようないくつかのI/Oデバイスは、コンピューティングデバイス140のための二重入出力を目的として提供される。
【0043】
ブラウザプログラム143を使用したウェブページおよび他のデータコンテンツのような情報資源の表示に関して、ハイパーテキストマークアップ言語(HTML)が、ウェブページ、および、ブラウザプログラム143において表示することができる他の情報を表示するためのウェブベース言語フォーマットにおける標準的なマークアップ言語である。HTMLフォーマットにあるデータは、ウェブページコンテンツ内で、山括弧に囲まれているHTML要素または「タグ」の形式(<html>など)で書かれる。現在、HTMLフォーマットは、市場でのブラウザプログラムのほぼすべてによって広く採用されており、したがって、コンピューティングデバイス140側のブラウザプログラム143とホストコンピュータ110側のBMC120のウェブサーバ126との間の通信命令のウェブベース言語フォーマットとして適している。
【0044】
概して、JavaScriptのようなスクリプト言語が、ユーザインターフェースの入力および出力を制御するために、HTMLフォーマット言語に加えて使用される。さらに、HTML言語の現在開発されている改正であるHTML5が、ウェブ・アプリケーション・ソフトウェア・メソッド、および、ウェブブラウザを通じてデータを記憶するために使用されるプロトコルを利用する、ウェブストレージのための幅広い機能を提供する。より古い一般的に使用されているブラウザプログラムはHTML5フォーマットをサポートしていないが、HTML5フォーマットをサポートしているブラウザプログラムは、MOZILLA FIREFOX 1.5、GOOGLE CHROME 4.0、SAFARI 3.1、SAFARI MOBILE 3.2、OPERA 9.0、OPERA MOBILE 10.0、ANDROID BROWSER 2.1、およびINTERNET EXPLORER 9.0または、これらのブラウザプログラムのより新しいバージョンを含む。
したがって、ブラウザプログラム143は、HTML5をサポートすることができ、上記に挙げたブラウザプログラムのうちの1つとすることができる。
【0045】
ブラウザプログラム143は、ハイパーテキスト転送プロトコル(HTTP)を使用してBMCにあるウェブサーバ126と通信することができる。具体的には、ブラウザプログラム143は、ウェブサーバ126にHTTP要求を送信することができる。HTTP要求を受信すると、サーバは、ブラウザプログラムに、HTTP要求に応答したHTTP応答を送信する。
【0046】
ウェブサーバ126は一般的に、HTTPの下でのブラウザプログラム143へのデータ送信を開始することができない。ウェブソケットが、単一のTCP接続を介した全二重通信チャネルを提供することができ、それによって、サーバはクライアントに命令または情報をアクティブに送信することができる。ウェブソケットはHTML5に組み込まれており、したがって、HTML5を実装するウェブブラウザおよびサーバによってサポートされる。
【0047】
図2は、本開示の一実施形態による、ホストコンピュータ110とコンピューティングデバイス140との間にウェブソケット接続を確立するプロセスを示す。ウェブソケット接続は、HTTP接続と同様に開始するが、ホストコンピュータ110とブラウザプログラム124との間に連続的な双方向ウェブベース接続を提供する。ブラウザプログラム143がウェブソケット接続を確立しようとするとき、ブラウザプログラム143は、ウェブ・ソケット・モジュール145に、BMC120のウェブ・ソケット・モジュール124のポート80(デフォルトHTTPポート)またはポート443(HTTPSポート)にウェブ・ソケット・ハンドシェイク要求を送信するよう命令する。ウェブ・ソケット・ハンドシェイク要求は、HTTP要求において使用されるGETコマンドに類似しているが、より多くのウェブソケット命令を含み、「アップグレード」された要求と考えることができる。ウェブ・ソケット・ハンドシェイク要求を受信すると、ウェブサーバ126は、ウェブ・ソケット・ハンドシェイク要求内のアップグレードされた情報に従って、この要求がHTTP要求ではなくウェブ・ソケット・ハンドシェイク要求であると識別することができる。ウェブサーバ126は、ブラウザプログラム143にハンドシェイク応答メッセージを送信する。したがって、ブラウザプログラム143とウェブサーバ126との間にウェブソケット接続150を確立することができる。
【0048】
図3Aおよび
図3Bは、ウェブ・ソケット・ハンドシェイク要求とHTTP要求との間の比較を可能にし、
図3AはGETコマンドを使用したHTTP要求の一例を示し、
図3Bは、ウェブ・ソケット・ハンドシェイク要求の一例を示す。
図3Aに示すように、HTTP要求の応答メッセージのヘッダ部分は、応答メッセージ内のコンテンツの情報を示し、text/htmlファイルであるコンテンツのタイプ、コンテンツファイルの長さ、およびコンテンツにおいて使用されている言語を含む。HTTP要求に対する応答メッセージのヘッダ部分の最後の行は、ホストコンピュータ110とブラウザプログラム124との間の接続が応答の終わりに閉じられることを示す。比較すると、
図3Bに示すウェブ・ソケット・ハンドシェイク要求の最初の2行は、HTTP要求と同じGET命令を含む。ウェブ・ソケット・ハンドシェイク要求の以下の行は、ウェブ・ソケット・モジュール124に、通常のHTTP要求からウェブ・ソケット・プロトコルにアップグレードまたは切り替えるように通知するアップグレードされた情報を含む。さらに、HTTP要求に対する応答メッセージとは異なり、ウェブ・ソケット・ハンドシェイク要求に対するハンドシェイク応答メッセージのヘッダ部分は、応答の終わりに接続が閉じられることを示さない。
【0049】
ウェブソケット接続150が設定されると、ウェブ・ソケット・モジュール124およびウェブ・ソケット・モジュール145の両方が、この接続を通じて他端へデータを送信することができる。データフォーマットは、JSONまたはXMLのような、任意の有効なUTF−8ストリングフォーマットであることができるが、所望に応じて他のデータフォーマットが使用されてもよい。
【0050】
ウェブ・ソケット・モジュール124および145は、PHP Web Sockets、Java j Web Socket、Web−Socket−ruby、Socket IO−node、または他のタイプのウェブ・ソケット・アプリケーションのような、様々なタイプおよび設計のものとすることができる。ウェブ・ソケット・モジュール124をホストコンピュータ110側のウェブ・ソケット・サーバとして設定するためには、ホストコンピュータ110および使用されるポート(ポート80およびポート443など)のドメイン名またはIPアドレスが、ホストコンピュータ110の位置を示すために提供されなければならず、ソケットの開放(すなわち、ウェブソケット接続)、ソケットにおけるハンドシェイク要求および他のメッセージの受信、またはソケットの閉鎖のような特定の「イベント」に応答して複数の命令が設定されなければならない。ウェブ・ソケット・サーバが設定されると、ウェブ・ソケット・クライアントは、通常のHTTPスキーム「http」の代わりにスキーム「ws」、または、通常のHTTPSスキーム「https」の代わりにスキーム「wss」で始まる統一資源位置指定子(URL)を使用してウェブ・ソケット・サーバに接続することができる。
【0051】
図4は、本開示の一実施形態によるウェブベースのKVMリダイレクトを概略的に示す。
図4に示すように、ウェブソケット接続150が、BMCとコンピューティングデバイス140との間に確立される。ホストコンピュータ110は、ビデオ信号を出力するビデオコントローラ117と、ビデオリダイレクトのためのI/Oポートとしてのリダイレクトコントローラ118とを含み得る。この実施形態におけるBMC120のKVMリダイレクトモジュール122は、リダイレクトコントローラ118およびI/Oコントローラ116に接続されている。KVMリダイレクトモジュールは、リダイレクトコントローラからリダイレクトされたビデオフレームを受信し、I/Oコントローラ116にキーボードおよびマウス入力信号を送信することができる。
【0052】
コンピューティングデバイス140は、表示デバイス147と、キーボード148、マウス149、およびタッチパネルのような入力デバイスとを含む。明示的に示されていないが、ホストコンピュータ110およびコンピューティングデバイス140は、ウェブベースのKVMリダイレクトを実施するための他の要素を含んでもよい。
【0053】
図5は、本開示の特定の実施形態によるウェブベースのKVMリダイレクトを概略的に示す。図示されているように、ホストコンピュータ110は、ビデオ信号を出力するビデオコントローラ117を有する。たとえば、ビデオ信号は、表示のために表示デバイスに出力され得る。ビデオコントローラ117は、ビデオ信号を捕捉しビデオフレームを生成するリダイレクトコントローラ118と通信している。リダイレクトコントローラはその後、BMC120のKVMリダイレクトモジュール122にビデオフレームを送信する。
【0054】
たとえば、KVMリダイレクトモジュール122は、ホストコンピュータからビデオフレーム152および154を受信し、ビデオフレームを処理してリダイレクト画像を生成し、ウェブサーバにリダイレクト画像を送信する。ウェブサーバは、コンピューティングデバイス140上で作動しているブラウザからの要求を受けて、ブラウザにKVMリダイレクトウェブページを送信する。ブラウザは、ウェブページの命令を受けて、ウェブサーバからリダイレクト画像を取り出すことができる。
【0055】
特定の実施形態において、ウェブサーバは、HTML5によってサポートされるキャンバスを利用してKVMリダイレクトウェブページを生成するように構成されている。リダイレクトウェブページは、ブラウザ表示ページの描画可能領域を画定するキャンバスタグを含む。キャンバスタグは、形状およびビットマップ画像の動的でスクリプト可能なレンダリングを可能にする、画像およびビデオファイルを処理するための、HTML5によって提供される要素の1つである。キャンバスタグは、描画可能領域の高さおよび幅属性を規定する。JavaScriptコードが、フルセットの描画機能を通じて描画可能領域にアクセスして、キャンバスタグによって画定される描画可能領域上に、動的に生成された画像を表示することができる。キャンバスタグは、それ自体は描画機能を有せず、画像の入れ物と考えることができる。一般的にキャンバスタグは、JavaScriptコードによって参照することができるIDを有する。
図5は、キャンバス160を有する、ブラウザプログラム143によってレンダリングされるKVMリダイレクトページを示す。
【0056】
ユーザによって入力される構成情報、または代替的に、デフォルト構成に基づいて、ウェブサーバは、KVMリダイレクトウェブページ内のキャンバスのサイズを設定することができる。たとえば、ユーザは、ビデオコントローラによって出力されるビデオフレームの解像度と同じ解像度を有することを所望する場合がある。言い換えれば、ビデオコントローラによって出力されるビデオフレームの各ピクセルが、キャンバス上でそれぞれの対応するピクセルを有する。たとえば、ビデオフレームのビデオ解像度が1024*768である場合、キャンバスタグによって画定されるキャンバスは、それに応じて、1024の幅および768の高さを有し得る。別の例として、ユーザは、ビデオフレームの半分の解像度を有することを所望する場合がある。したがって、ビデオフレームのビデオ解像度が1024*768である場合、キャンバスタグによって画定されるキャンバスは、512の幅および384の高さを有し得る。下記の説明は、概して、一例としてビデオフレームの解像度とキャンバスの解像度との間の1対1の対応関係を使用する。下記に説明する技法は、ビデオフレームの解像度に対する他の対応関係による解像度を有するキャンバスにも同様に適用されることを、当業者は諒解するはずである。
【0057】
KVMリダイレクトモジュール122は、ホストコンピュータ110のリダイレクトコントローラ118から第1のビデオフレーム152および第2のビデオフレーム154を受信する。第1のフレーム152がKVMリダイレクトモジュールによって受信される最初のフレームである。すなわち、以前にKVMリダイレクトモジュール122によってビデオフレームが受信されていないとき、KVMリダイレクトモジュールは、第1のフレーム152中のすべてのピクセルの情報を有する第1のリダイレクト画像157を生成し、第1のリダイレクト画像157をウェブサーバ126に送信する。リダイレクト画像は、ブラウザプログラム143によってレンダリングすることができるフォーマットにある。ウェブサーバ126はその後、下記に説明する技法を使用してブラウザプログラムに第1のリダイレクト画像157を送信する。
【0058】
第2のビデオフレーム154を受信した後、KVMリダイレクトモジュール122は、第2のフレーム154を、KVMリダイレクトモジュール122内に保持されている第1のフレーム152のコピーと比較し、第1のフレームおよび第2のフレーム中の任意の対応するピクセルが異なる値を有するか否かを検出する。差が検出されたとき、KVMリダイレクトモジュール122は、第1のフレーム152中の対応するピクセルとは異なる、第2のフレーム154中のピクセルのピクセル情報を含むパッチを生成し、ウェブサーバにパッチを送信する。下記に詳細に説明するように、ウェブサーバ126は、コンピューティングデバイス140上のブラウザプログラム143にパッチを送信し、それに応じて、ブラウザプログラム143は、対応する領域170、172においてキャンバスをパッチすることができる。
【0059】
図6は、第1のビデオフレーム152および第2のビデオフレーム154を示す。この例において、KVMリダイレクトモジュール122は、ビデオフレームの各々を、行列形式の5行および6列を構成する30個のタイルに分割する。タイルの数は設定可能である。たとえば、デフォルトのタイル構成は、16*16行列とすることができる。KVMリダイレクトモジュール122は、第1のビデオフレームのピクセル値と第2のビデオフレームのピクセル値とをピクセル毎に比較する。言い換えれば、KVMリダイレクトモジュール122は、第2のビデオフレームの任意のピクセルの値が第1のビデオフレームの対応するピクセルの値と異なるか否かを判定する。第2のビデオフレーム154のタイル中の任意のピクセルが第1の画像フレーム152の対応するピクセルから変化している場合、KVMリダイレクトモジュール122は、タイルが変化したと判定する。たとえば、
図6に示すように、第2のフレームのタイル615’、625’、622’、623’、632’、633’、642’および643’は、第1のフレーム152と比較して変化している。したがって、KVMリダイレクトモジュール122は、タイル622’、623’、632’、633’、642’、643’、615’および625’のピクセル値のみをタイル画像として、タイルパラメータとともにウェブサーバ126に送信する。タイル位置は、タイルパラメータに含まれるビデオフレーム上の座標によって示される。タイルの位置は、一般的にタイルの左上隅の位置(たとえば、座標)として定義される。
【0060】
ウェブサーバ126は、タイルパラメータの一部分としてタイル座標を受信し、その後、ブラウザプログラムが、現在レンダリングされているリダイレクト画像を正確にパッチするために、タイル画像のビデオフレーム座標をブラウザ座標に変換する必要があるか否かを判定する。たとえば、ウェブサーバによって受信されるタイルパラメータは、(x,y,W,H)であり得、これは、タイルの位置がビデオフレーム上の座標(x,y)にあること、ならびに、タイルがWの幅およびHの高さを有することを示す。幅および高さのパラメータは任意選択である。
【0061】
キャンバスの解像度がビデオフレームの解像度と1対1関係を有するように構成されている、すなわち、ビデオフレームの各ピクセルがキャンバス上にそれぞれの対応するピクセルを有するとき、ウェブサーバ126は、タイルパラメータ(x,y,W,H)を、キャンバス上のタイルにパッチするために変換することなく、キャンバスによっても直接使用することができると判定することができる。ウェブサーバは、KVMリダイレクトモジュール122から受信されるタイル画像を、ブラウザプログラム143によってレンダリングすることができる異なるフォーマットに変換することができる。タイル画像は、一般的に使用されているJPEG、PNGまたはBMPフォーマット、または、ブラウザプログラム143によって表示可能な他の画像ファイルフォーマットのような、様々な画像またはグラフィック・ファイル・フォーマットにあることができる。ウェブサーバ126はその後、下記に説明するように、ブラウザプログラム143にタイルパラメータとともにタイル画像を送信する。ブラウザプログラム143は、それに応じて、タイルパラメータによって示される領域においてタイル画像を使用してキャンバスをパッチする。たとえば、ウェブサーバによって生成されるリダイレクトウェブページは、ブラウザにキャンバス上にタイル画像をパッチするよう命令するcontext.drawlmage(tile,x,y,W,H)のようなJavaScriptコードを有することができる。キャンバスの解像度が、ビデオフレームの解像度に対する別の比(たとえば、1:2)を有するように構成されるとき、ウェブサーバ126は、その比に従って、ビデオフレーム座標をブラウザ座標(たとえば、x/2,y/2,W/2,H/2)に変換することができる。
図5は、ブラウザプログラム143が最初に、キャンバス160上に第1のリダイレクト画像157を表示することを示す。BMC120がブラウザプログラム143に1つまたは複数のタイル170、172を含むパッチを送信した後、ブラウザプログラム143はついで、第1のリダイレクト画像157をパッチして、第2のリダイレクト画像159を生成する。
【0062】
ウェブサーバ126は、様々な方法でブラウザプログラム143にタイル画像を送信することができる。たとえば、ウェブサーバ126は、ウェブサーバの所定の箇所にタイル画像およびタイルパラメータを記憶することができる。ウェブサーバ126によって生成されるリダイレクトウェブページは、ブラウザプログラム143に、新たなパッチが利用可能であるか否かを判定するために所定の箇所を定期的にチェックするよう命令することができる。代替的に、リダイレクトウェブページは、ブラウザプログラム143に、ウェブサーバとのウェブソケット接続を確立するよう命令することができ、その後、ウェブサーバは、ウェブソケット接続を通じてブラウザプログラム143に、タイルパラメータを有するタイル画像を送信することができる。
【0063】
特定の実施形態において、タイル画像は、PNG、BMP、JPEGなどのような様々なフォーマットにあることができる。ウェブサーバ126は、数または文字のような識別子によって、ビデオフレームの各タイルを識別することができる。ウェブサーバ126は、ウェブソケット接続150を通じてブラウザプログラム143に、タイル画像およびその識別子を送信することができる。たとえば、ウェブサーバ126は、ブラウザプログラム143にタイル画像#5を送信することができる。ブラウザプログラム143上のキャンバス160も、ビデオフレームのタイルに対応するタイルに分割することができる。言い換えれば、各タイル識別子は、キャンバス160上の単一のタイルも識別することができる。したがって、ブラウザプログラム143によってレンダリングされるリダイレクトウェブページは、識別子によって識別されるキャンバス160上のタイル領域に、受信されたタイル画像を描画することができるJavaScriptルーチンを有する。たとえば、キャンバスは、タイル#5として識別される特定の領域を有することができる。タイル画像#5を受信した後、リダイレクトウェブページはそれに応じて、ブラウザプログラムに、キャンバス上の#5として識別される領域にタイル画像(たとえば、PNG、JPEG、またはBMPフォーマットの)を描画するよう命令する。
【0064】
図7Aは、本開示の特定の実施形態による、ウェブソケット接続およびHTML5キャンバスを利用したビデオリダイレクトのための手順を示す。動作710において、ブラウザプログラム143が、ネットワーク130を介してBMC120に、KVMリダイレクトウェブページを求める要求を送信する。要求は、HTTPフォーマットにあってもよい。KVMリダイレクトウェブページを求める要求を受信すると、動作720において、BMC120のウェブサーバ126が、ブラウザプログラム143にKVMリダイレクトウェブページを送信する。したがって、ブラウザプログラム143は、ユーザにKVMリダイレクトウェブページを表示することができ、コンピューティングデバイス140のユーザが、動作722において、BMC120のKVMリダイレクトモジュール122のための構成情報を入力または選択することを可能にする。KVMリダイレクトモジュールの構成情報は、リダイレクト画像解像度情報、リダイレクト画像リフレッシュレート情報、機械およびネットワークの設定、認証設定、ならびに、KVMリダイレクトのための他の情報を含んでもよい。その後、動作724において、ブラウザプログラム143が、たとえば、HTTPプロトコルを使用して、BMC120のウェブサーバ126に構成情報を送信する。構成情報を受信すると、ウェブサーバ126は、それに応じて、KVMリダイレクトモジュールに構成情報を送信する。動作730において、BMC120が、それに応じてKVMリダイレクトモジュール122を設定する。KVMリダイレクトモジュールは、ホストコンピュータ110のリダイレクトコントローラ118との接続を確立することができる。
【0065】
動作760において、ブラウザプログラム143が、ウェブサーバ126に、ウェブ・ソケット・プロトコルの下での全二重通信を確立することを求めるウェブ・ソケット・ハンドシェイク要求を送信する。ウェブ・ソケット・ハンドシェイク要求を受信すると、動作762において、ウェブサーバ126は、ウェブ・ソケット・モジュール124に、ウェブソケットを開放するよう命令する。同様に、動作764において、ブラウザプログラム143は、ウェブ・ソケット・モジュール145に、ウェブソケットを開放するよう命令する。したがって、動作766において、ウェブ・ソケット・モジュール124とウェブ・ソケット・モジュール145との間にウェブソケット接続が確立される。
【0066】
ウェブソケット接続が確立されると、BMC120は、ホストコンピュータ110からウェブソケット接続を通じてブラウザプログラム143へのビデオ出力のリダイレクトを開始することができる。具体的には、動作770において、KVMリダイレクトモジュールが、ホストコンピュータ110から第1のビデオフレームを受信する。KVMリダイレクトモジュールはその後、第1のビデオフレームを処理して第1のリダイレクト画像を生成し、ウェブサーバ126に第1のリダイレクト画像を送信する。動作772において、ウェブサーバ126が、ウェブ・ソケット・モジュール124に第1のリダイレクト画像を送信する。動作774において、ウェブ・ソケット・モジュール124が、ウェブソケット接続を通じてコンピューティングデバイスのウェブ・ソケット・モジュール145に第1のリダイレクト画像を送信する。動作776において、ウェブ・ソケット・モジュール145が、ブラウザプログラム143に第1のリダイレクト画像を送信する。ブラウザプログラム143はその後、動作778において、リダイレクトウェブページによって命令されるように、キャンバス160上に第1のリダイレクト画像を表示することができる。
【0067】
その後、動作780において、KVMリダイレクトモジュール122が、ホストコンピュータ110から第2のビデオフレームを受信する。KVMリダイレクトモジュール122はその後、第2のビデオフレームを第1のビデオフレームと比較して、第2のビデオフレームの任意のピクセルが、第1のビデオフレーム中の対応するピクセルの値と異なる値を有するか否かを判定する。第2のビデオフレーム中のピクセルのいずれかが変更されている場合、KVMリダイレクトモジュール122は、それに応じて、1つまたは複数のタイル画像および関連するタイルパラメータを生成する。KVMリダイレクトモジュール122は、ウェブサーバ126にタイル画像およびタイルパラメータを送信する。ウェブサーバはその後、必要に応じて、タイル画像を、ブラウザプログラム143にサポートされるフォーマットに変換する。動作782において、BMC120のウェブサーバ126が、ウェブ・ソケット・モジュール124にタイル画像およびパラメータを送信する。動作784において、ウェブ・ソケット・モジュール124が、ウェブソケット接続を通じてウェブ・ソケット・モジュール145にタイル画像およびパラメータを送信する。動作786において、ウェブ・ソケット・モジュール145が、ブラウザプログラム143にタイル画像およびパラメータを送信する。ブラウザプログラム143は、動作788において、KVMリダイレクトウェブページによって命令されるように、キャンバス上で、タイルパラメータによって指示される領域に受信されたタイル画像をあてて第1のリダイレクト画像をパッチすることができる。
【0068】
図7Bは、本開示の特定の実施形態による、ウェブソケット接続150および特定の画像処理技法を利用したビデオリダイレクトのための手順を示す。この例において、KVMリダイレクトモジュール122は最初に、ブラウザプログラム143に、第1のフレームを表す第1のリダイレクト画像を転送する。ブラウザプログラムは、それに応じて、ブラウザプログラム143の表示領域161に第1のリダイレクト画像を表示することができる。その後、KVMリダイレクトモジュール122は、様々な符号化および圧縮技法を使用して、第2のフレーム154を表す第2のリダイレクト画像を処理することができる。
処理済みの(すなわち、符号化および圧縮された)第2のリダイレクト画像はその後、ウェブソケット接続150を通じてブラウザプログラム143に送信される。ブラウザプログラム143によって受信されるリダイレクトウェブページは、ブラウザプログラム143に、処理済みの第2のリダイレクト画像を解凍および復号するよう命令するのに利用することができるJavaScriptルーチンを含む。ブラウザプログラム143は、処理済みの第2のリダイレクト画像を解凍および復号して表示するための画像が得られた後、ブラウザプログラム143の表示領域にその画像を表示することができる。
【0069】
処理(すなわち、符号化/復号および圧縮/解凍)技法の1つが、参照により本明細書に明示的に組み込まれる、米国特許第7,567,717号明細書および米国特許第7,970,218号明細書に開示されている。簡潔には、KVMリダイレクトモジュール122は、それらの特許文献に開示されているように、第2のリダイレクト画像中の所与のピクセルを取り囲むいくつかのピクセルの値、および、第1のリダイレクト画像中の対応するピクセルの値に基づいて、第2のリダイレクト画像の所与のピクセルの予測値を生成することができる。さらに、KVMリダイレクトモジュール122は、損失または無損失要件に従って、第2のリダイレクト画像中の所与のピクセルの実際の値を、予測値と選択的に置き換え、その後、それに応じて第2のリダイレクト画像を符号化する。その後、KVMリダイレクトモジュール122は、所定のアルゴリズム、たとえば、単純化されたランレングス符号化(「RLE」)アルゴリズムを使用して、符号化された第2のリダイレクト画像を圧縮し、それによって、処理済みの第2のリダイレクト画像を得る。加えてまたは代替的に、KVMリダイレクトモジュール122は、DPCM、エントロピー符号化、デフレーションまたはチェーンコード圧縮のような可逆画像圧縮方法、および、色空間低減、サブサンプリング、または変換符号化のような不可逆画像圧縮方法を含む、何らかの一般的に使用されている画像圧縮技法を使用して第2のリダイレクト画像を処理することができる。
【0070】
具体的には、
図7Bに示す動作710〜776は、
図7Aに示す対応する動作と同様である。動作779において、ブラウザプログラム143が、ブラウザプログラム143のブラウザ表示領域161に第1のリダイレクト画像を表示する。動作781において、KVMリダイレクトモジュール122が、ホストコンピュータ110から第2のビデオフレームを受信し、第2のリダイレクト画像を生成する。KVMリダイレクトモジュール122はその後、上記で説明した技法を使用して第2のリダイレクト画像を処理して、処理済み(すなわち、符号化および圧縮された)画像を生成する。動作783において、BMC120のウェブサーバ126が、ウェブ・ソケット・モジュール124に処理済み画像を送信する。動作784において、ウェブ・ソケット・モジュール124が、ウェブソケット接続150を通じてウェブ・ソケット・モジュール145に処理済み画像を送信する。動作787において、ウェブ・ソケット・モジュール145が、ブラウザプログラム143に処理済み画像を送信する。動作78において、ブラウザプログラム143は、たとえば、リダイレクトウェブページにおいて定義されているJavaScriptルーチンによって命令されるように、処理済み画像を解凍および復号して表示するための画像を得、その後、表示領域161にその画像を表示することができる。
【0071】
図8は、本開示の別の実施形態によるウェブベースのKVMリダイレクトを概略的に示す。この実施形態において、コンピューティングデバイス140は、Javaバーチャルマシン(JVM)166を含む。代替的に、JVMは、ブラウザプログラム143によってBMC120のウェブサーバ126からダウンロードすることができる。
【0072】
最初に、ブラウザプログラム143は、BMC120にあるウェブサーバ126と接続して、リダイレクトウェブページを受信する。ユーザは、認証情報を入力し、リダイレクトウェブページを通じてウェブサーバに認証情報を送信することができる。ウェブサーバ126はユーザを認証し、その後、ブラウザプログラム143にセッショントークンを送信する。ウェブサーバ126は、コンピューティングデバイス140上のJVMによって実行することができる、コンパイル済みJavaオブジェクト164を記憶している。ブラウザプログラム143は、ブラウザプログラムを操作するユーザの許可を得てJavaオブジェクト164をダウンロードする。Javaオブジェクト164はその後、コンピューティングデバイス140のJVMにおいて実行される。Javaオブジェクトは、リダイレクト画像およびパッチを表示するのに使用することができるJave表示モジュール163を起動する。Java表示モジュール163は、表示デバイス147上に画像をレンダリングする。ブラウザプログラム143はウェブサーバ126から受信されたセッショントークンをJavaオブジェクト164に渡す。Javaオブジェクト164は、リダイレクトサーバ122との接続151を確立することができる。一般的に、接続151は、コンピューティングデバイス140にあるTCP/IPソケット195と、BMC120にあるTCP/IPソケット125との間に確立される。Javaオブジェクト164は、JVM166を通じて、オペレーティングシステム144に、Javaオブジェクト164のためにTCP/IPソケット195を開放するよう命令することができる。セッショントークンを使用して、Javaオブジェクト164は、KVMリダイレクトモジュール122とのセッションのための通信チャネルを確立することができる。
【0073】
通信チャネルが確立された後、KVMリダイレクトモジュール122は、通信チャネルを通じてJavaオブジェクトにリダイレクト画像およびパッチを送信することができる。Javaオブジェクト164は、Java表示モジュール163を呼び出して、リダイレクト画像およびパッチを表示する。リダイレクト画像の必要とされる解像度に関するユーザの構成に従って、Javaオブジェクト164は、Java表示モジュール163を所望の解像度に設定する。Javaオブジェクト164は、Java表示モジュール163に完全なリダイレクト画像を表示し、指定される領域にタイル画像をあててJava表示モジュール163をパッチするために呼び出すことができるdrawlmage()のような関数を定義することができる。キャンバス160と同様に、Javaオブジェクト164は、座標パラメータを使用して、Java表示モジュール163上にタイル画像を描画することができる。
【0074】
代替的に、KVMリダイレクトモジュール122が、
図7Bに関連して上述したように、リダイレクト画像を処理してもよい。その後、KVMリダイレクトモジュール122が、通信チャネルを通じてJavaオブジェクト164に処理済み画像を送信する。Javaオブジェクト164は、処理済み画像を解凍および復号して、表示するための画像を得ることができる。その後、Javaオブジェクト164は、Java表示モジュール163上に画像を表示することができる。
【0075】
図9は、本開示の特定の実施形態による、Javaオブジェクトを利用したビデオリダイレクトのための手順を示す。動作910において、ブラウザプログラム143が、ネットワークを介してBMC120に、KVMリダイレクトウェブページを求める要求を送信する。要求は、HTTPフォーマットにあってもよい。KVMリダイレクトウェブページを求める要求を受信すると、動作920において、BMC120のウェブサーバ126が、ブラウザプログラム143にKVMリダイレクトウェブページを送信する。したがって、ブラウザプログラム143は、ユーザにKVMリダイレクトウェブページを表示することができ、コンピューティングデバイス140のユーザが、動作922において、BMC120のKVMリダイレクトモジュール122のための構成情報を入力または選択することを可能にする。KVMリダイレクトモジュールの構成情報は、リダイレクト画像解像度情報、リダイレクト画像リフレッシュレート情報、機械およびネットワークの設定、認証設定、ならびに、KVMリダイレクトのための他の情報を含んでもよい。その後、動作924において、ブラウザプログラム143が、たとえば、HTTPプロトコルを使用して、BMC120のウェブサーバ126に構成情報を送信する。ウェブサーバ126は、それに応じて、KVMリダイレクトモジュール122に構成情報を送信する。ブラウザプログラム143はまた、ウェブサーバ126からJavaオブジェクトを要求する。構成情報を受信すると、手順926において、ウェブサーバ126は、必要に応じて、Javaオブジェクト164を設定し、その後、ブラウザプログラム143にJavaオブジェクト164およびセッショントークンを送信する。Javaオブジェクト164を受信すると、手順928において、ブラウザプログラム143は、JVM166上でJavaオブジェクト164を起動し、Javaオブジェクト164にセッショントークンを渡す。
【0076】
その間、動作930において、BMCが、それに応じてKVMリダイレクトモジュール122を設定する。KVMリダイレクトモジュール122は、ホストコンピュータ110のリダイレクトコントローラ118との接続を確立することができる。
【0077】
動作960において、Javaオブジェクト164は、セッショントークンを使用してKVMリダイレクトモジュール122との通信を開始する。動作966において、コンピューティングデバイス140のTCP/IPソケットモジュール195とBMC120のTCP/IPソケットモジュール125との間のTCP/IP接続が確立される。
【0078】
TCP/IP接続が確立されると、BMC120は、ホストコンピュータ110からTCP/IP接続を通じてJavaオブジェクト164へのビデオ出力のリダイレクトを開始することができる。具体的には、動作970において、KVMリダイレクトモジュールが、ホストコンピュータ110から第1のビデオフレーム、すなわちフレーム1を受信する。KVMリダイレクトモジュールは、第1のビデオフレームを処理(すなわち符号化および圧縮)して、処理済みの第1のリダイレクト画像を生成することができる。動作972において、KVMリダイレクトモジュール122が、TCP/IPソケットモジュール125に処理済みの第1のリダイレクト画像を送信する。動作974において、TCP/IPソケットモジュール125が、TCP/IP接続を通じてコンピューティングデバイス140のTCP/IPソケットモジュール195に処理済みの第1のリダイレクト画像を送信する。動作976において、TCP/IPソケットモジュール195が、Javaオブジェクト164に圧縮された第1の画像を送信する。動作978において、Javaオブジェクト164が、この圧縮画像を解凍する。動作979において、Javaオブジェクトが、Java表示モジュール163に解凍された画像を表示する。
【0079】
その後、動作980において、KVMリダイレクトモジュール122が、ホストコンピュータ110から第2のビデオフレームを受信する。KVMリダイレクトモジュール122はその後、第2のビデオフレームを処理(すなわち、符号化および圧縮)し、それに応じて、処理済みの第2のリダイレクト画像を生成する。動作982において、KVMリダイレクトモジュールが、TCP/IPソケットモジュール125に処理済みの第2のリダイレクト画像を送信する。動作984において、TCP/IPソケットモジュール125が、TCP/IP接続を通じてTCP/IPソケットモジュール195に処理済みの第2のリダイレクト画像を送信する。動作986において、TCP/IPソケットモジュール195が、Javaオブジェクト164に処理済みの第2のリダイレクト画像を送信する。動作988において、Javaオブジェクト164が、処理済みの第2のリダイレクト画像を解凍および復号し、表示するための第2の画像を生成する。動作989において、Javaオブジェクト164が、Java表示モジュール163上に第2の画像を表示する。
【0080】
図4に戻って参照すると、特定の実施形態において、キーボードおよびマウスリダイレクトを含む入力リダイレクトが、ビデオリダイレクトと同時に実施される。ブラウザプログラム143は、キーボード148、マウス149、およびタッチパネルのような入力デバイスから入力信号を受信することができる。ブラウザプログラム143は、ウェブソケット接続150を通じてBMC120のウェブソケット124に入力データを送信することができる。BMC120のウェブソケット124が入力データを受信すると、ウェブソケット124は、ウェブサーバ126に入力データを渡し、ウェブサーバ126は、入力データを処理してキーボードおよびマウス入力を取り出すことができる。ウェブサーバ126は、KVMリダイレクトモジュール122にキーボードおよびマウス入力を送信する。必要に応じて、KVMリダイレクトモジュール122は、キーボードおよびマウス入力を、ホストコンピュータ110によって使用されるフォーマットに変換することができ、その後、I/Oコントローラ116に入力を送信する。このように、ホストコンピュータ110は、ブラウザプログラム143から発せられる入力を、ローカル入力デバイスからの入力であると理解する。
【0081】
ブラウザプログラム143は、オペレーティングシステム144を利用して、ブラウザプログラム143に向けられたキーボード148およびマウス149からの入力を表す入力イベントを生成することができる。たとえば、キーボード148から、キーが押下されるときに、キーボード動作が発生する。いくつかのキーボード動作は、複数のキーから成る組み合わせが同時に押下されることを含み得る。そのようなキーボード動作は概して、他のキーと組み合わさって機能することになっているCtrlキー、AtlキーまたはShiftキーなどの、キーボード148上の特定の機能キーに関係する。そのような動作において、組み合わせが各別個のキー入力とは異なるキー入力を生成する。各キーボード動作は、文字コードまたはキーボードイベントに対応する他の代表値を含んでもよい対応する入力データを生成する。
【0082】
マウスは、特定の領域の上でのマウスカーソルの位置付け、マウスカーソルの移動、マウスホイールの回転、およびマウスボタンのクリック(シングルクリックまたはダブルクリック)のような、様々な異なる動作を実施することができる。いくつかの事例において、これらの動作は、マウスカーソルが特定の領域内に位置付けられたときにマウスボタンをクリックすること、または、マウスを「ドラッグ」する、すなわち、マウスボタンをクリックしてボタンを離すことなくマウスカーソルを移動させることのように、組み合わされ得る。概して、マウスイベントは、クリックイベント、ドラッグイベント、および動きイベントのようなタイプに分類され得る。
【0083】
JavaScriptは、これらのマウスおよびキーボード動作に対応する関数およびイベントオブジェクトを提供する。たとえば、クリック動作は、それぞれマウスボタンが押下される動作、および、押されていたマウスボタンが離されることを指すマウス・ダウン・イベントおよびマウスアップイベントを含み得る。動き動作は、マウスカーソルを1つの位置から別の位置へと移動させることを指すマウスムーブイベントを含み得る。ドラッグ動作は、マウス・ダウン・イベント、マウスムーブイベント、およびマウスアップイベントの組み合わせである。マウスイベントに関係する他のJavaScript関数およびイベントは、マウスカーソルを画面上の所定の領域の上に移動させることを含むマウスオーバーイベント、および、マウスカーソルを画面上の所定の領域の中に移動させることを含むマウスエンターイベントを含み得る。JavaScriptは、マウスムーブイベントと組み合わせて使用するためのgetMousePos()関数も提供する。各マウスイベントは、複数のパラメータを含み得る。たとえば、マウス・ダウン・イベントが発生すると、イベントは、マウス・ダウン・イベントを表すコード、および、マウス・ダウン・イベントが発生しているマウスカーソルの現在位置を表す座標パラメータを生成する。
【0084】
特定の実施形態において、KVMリダイレクトウェブページは、キャンバス160またはJava表示モジュール163上でマウスイベントが発生すると、そのマウスイベントの位置を捕捉する。たとえばブラウザプログラム143のキャンバス160上に表示されるリダイレクト画像は、ホストコンピュータ110によって出力されるユーザインターフェースを表示することができる。ユーザは、コンピューティングデバイス140のマウスを使用して、キャンバス上に示されているユーザインターフェースのボタンをクリックすることができる。リダイレクトウェブページは、キャンバス160またはJava表示モジュール163に対する、マウスイベントの位置およびマウスイベントの生成される座標を検出するJavaScriptルーチンを有することができる。キャンバス160またはJava表示モジュール163の解像度が、ホストコンピュータ110のビデオコントローラ117によって出力されるビデオフレームと1対1の関係を有する場合、これらのブラウザ座標は、ホストコンピュータ110上のリダイレクトされるマウスイベントの所望の位置をも示す。他の状況においては、ホストコンピュータ110上のリダイレクトされるマウスイベントの所望の位置を正確に示すために、ウェブサーバ126が、ブラウザプログラム143から受信されるブラウザ座標を、ホストコンピュータ110上のビデオフレーム座標に変換することができる。
【0085】
たとえば、
図5に戻って参照して、ブラウザプログラム140のキャンバス160がリダイレクト画像159を表示すると、コンピューティングデバイス140のユーザは、マウスを使用してキャンバス上の位置180でクリックすることができる。したがって、ブラウザプログラム143は、マウス・ダウン・イベントおよびgetMousePos()関数を含むJavaScriptを使用して、マウスクリック位置180の座標パラメータを得ることができ、BMC120にマウス・クリック・イベント・データを送信する。その後、BMC120は、必要に応じて、マウス・クリック・イベント・データを、ホストコンピュータ110によって使用されるフォーマットに変換し、ホストコンピュータ110の入力コントローラ116にイベントデータを送信する。
【0086】
本開示の例示的な実施形態の上記の記載は、例示および説明のみを目的として提示されており、網羅的であること、または、本発明の開示されている厳密な形式に限定するようには意図されていない。上記の教示に照らして多くの修正および変形が可能である。
【0087】
実施形態は、当業者が、本発明および様々な実施形態を、企図されている特定の用途に適するように様々な修正を施して利用するよう活性化するように、本発明の原理およびその実際の適用を説明するために選択および記載されている。代替的な実施形態が、本発明の技術思想および範囲から逸脱することなく、本発明が属する技術分野における当業者には明らかとなろう。たとえば、複数のプローブを同時に利用して本発明を実施してもよい。したがって、本開示の範囲は、上記の記載および本明細書に記載されている例示的な実施形態ではなく、添付の特許請求の範囲によって画定される。