(57)【特許請求の範囲】
【請求項１】
クライアント装置上で描画されるユーザインターフェイスをリモートするためのサーバ計算システム内の方法であって、
汎用映像符号器の動き予測プロセス中に、前記汎用映像符号器が
移動、スクロール、又は露出領域事象を検出するために前記サーバ計算システム上の仮想マシンのゲストオペレーティングシステムのグラフィックス・コマンド・ストリームについてのパターンマッチングを行い、
移動、スクロール、又は露出領域事象が検出されたとき、前記ユーザインターフェイスの更新部分を前記クライアント装置に関連する表示画面上に描画させる前に、前記ユーザインターフェイスの前記更新部分内で再利用可能な１組の画素を決定するとともに、移動、スクロール、又は露出領域事象によって生じる動きベクトルを特定し、ここで前記動きベクトルは、前記ユーザインターフェイスの前記更新部分内の前記１組の画素の新たな位置を指示するものであり、
前記クライアント装置のウェブブラウザによってサポートされた汎用映像符号化プロトコルを使用し、前記ユーザインターフェイスの前記更新部分内で再利用可能な、決定された１組の画素の再利用を示す前記ユーザインターフェイスの前記更新部分の映像表現、及び前記新たな位置を指示する前記動きベクトルを生成して符号化し、
前記ユーザインターフェイスの前記更新部分の生成及び符号化済みの映像表現を前記クライアント装置上の前記ウェブブラウザに送信して、前記クライアント装置の前記ウェブブラウザ上の前記汎用映像符号化プロトコルに関する復号器に、前記クライアント装置上にキャッシュされた１組の画素と、移動、スクロール、又は露出領域事象によって生じた前記動きベクトルとを用いることによって前記ユーザインターフェイスの前記更新部分を前記クライアント装置に関連する前記表示画面上に復号および描画させるようにすること
を含む、方法。
【請求項２】
前記サーバ計算システムが仮想化サーバ計算システムであり、前記ユーザインターフェイスの前記更新部分が仮想マシンへの接続に対応するデスクトップの一部である、請求項１に記載の方法。
【請求項３】
前記サーバ計算システムが物理計算システムである、請求項１に記載の方法。
【請求項４】
前記映像符号化プロトコルに関する前記復号器が、前記クライアント装置がユーザインターフェイス・リモーティングを行うことを可能にする汎用映像ストリーミングプロトコルを使用する汎用映像復号器である、請求項１から３のいずれか一項に記載の方法。
【請求項５】
再利用可能な１組の画素を決定することが、前記ユーザインターフェイスの前記更新部分内で再利用可能な前記１組の画素を決定するために、前記サーバ計算システムのフレームバッファ内の画素を解析することを含む、請求項１から４のいずれか一項に記載の方法。
【請求項６】
再利用可能な１組の画素を決定することが、前記ユーザインターフェイスの前記更新部分内で再利用可能な前記１組の画素を決定するために、グラフィックスコマンドストリームを解析すること、および前記ユーザインターフェイスによってストリーミングされている映像ストリームの少なくとも一部を再利用することのうちの少なくとも一方を含む、請求項１に記載の方法。
【請求項７】
前記映像符号化プロトコルがＨ．２６４プロトコル、Ｈ．２６５プロトコル、ＶＣ１プロトコル、又はＶＰ８プロトコルのうちの少なくとも１つである、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記ユーザインターフェイスの前記更新部分の生成済みの映像表現を前記クライアント装置に送信することが、前記映像符号化プロトコルに関する前記復号器に対して、符号化表現をウェブブラウザに転送させる方法で、前記ユーザインターフェイスの前記更新部分の生成済みの映像表現を前記クライアント装置上で実行される前記ウェブブラウザに送信することを更に含み、且つ／又は前記ユーザインターフェイスの前記更新部分の生成済みの映像表現を送信することがＴＣＰ／ＩＰを使用することを含み、又は前記ユーザインターフェイスの前記更新部分の生成済みの映像表現を前記クライアント装置に送信することが、前記ユーザインターフェイスの前記更新部分の生成済みの映像表現を前記映像符号化プロトコルに関する前記復号器にユーザインターフェースリモーティングプロトコルを使用して直接送信することを更に含む、請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記方法が、仮想化サーバ計算システムの仮想マシンプロセス及び仮想マシンモニタのうちの少なくとも一方によって実行される、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記サーバ計算システムを前記クライアント装置に接続するネットワーク内の、又は前記クライアント装置による符号化映像表現の処理における待ち時間を検出すること、
前記待ち時間に対処するために、検出された待ち時間に基づいて前記符号化映像表現の生成を調節すること
を更に含む、請求項１から９のいずれか一項に記載の方法。
【請求項１１】
前記調節することが、より少ない帯域幅を使用することを含み、且つ／又は前記調節することが、その後の符号化映像表現を更に圧縮すること、又はその後の符号化映像表現の前記生成及び送信を遅くすることを含み、且つ／又は前記調節することが、前記クライアント装置上のＣＰＵ使用率を最小限にすることを含み、且つ／又は前記調節することが、より少ないフレームを生成して送信することを含む、請求項１０に記載の方法。
【請求項１２】
前記クライアント装置が、パーソナルコンピュータ、無線装置又は無線接続された装置、電話、スマートテレビ、及び／又はタブレットのうちの少なくとも１つである、請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
サーバ内に格納されるコンピュータ可読媒体であって、請求項１から１２のいずれか一項に記載の方法を実行することによりクライアント装置上で描画されるユーザインターフェイスをリモートするためのコンテンツを含むコンピュータ可読媒体。
【請求項１４】
前記ユーザインターフェイスのアスペクトが、１つ以上のユーザインターフェイス操作を含み、且つ／又は映像ストリームおよび前記映像ストリームの少なくとも一部をそのまま転送することを含んで再利用可能な画素を含む、請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
サーバ計算システムであって、
サーバ計算システムからクライアント装置へのネットワーク接続と、
動き推定器を含む映像符号器と
を備え、前記映像符号器は、実行されるときに請求項１から１２のいずれか一項に記載の方法を実行するように構成される、サーバ計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ユーザインターフェイス・リモーティングのための方法、技法、及びシステムに関し、具体的には、映像ストリーミング及び映像符号化技術のうちの少なくとも一方を使用し、対話型ユーザインターフェイスを効率的にリモートするための方法、技法、及びシステムに関する。
【背景技術】
【０００２】
コンピュータ業界は、記憶及び計算の大部分がデータセンタ又は「クラウド」（例えばネットワーク化された、インターネットによってアクセス可能な記憶域）において行われ、多くの異なるフォームファクタのクライアント装置を使用し、豊かなユーザエクスペリエンスを利用者の位置にリモートすることができるコンピューティングモデルへと進化している。仮想化インフラ、ネットワーク化インフラが著しく進歩したこと、並びに極めて能力があり、携帯可能なクライアント装置が多様であり普及したことは、かかるリモートアクセスを非常に実行可能に及び望ましくした。例えば、とりわけ大きな組織の従業員が離れた場所で仕事をし、それでもなお本社にある自身のデスクトップ及びアプリケーションを使用したいということ、及び使用しなければならないことのうちの少なくともいずれかは珍しいことではない。この遠隔操作は、実際のユーザインターフェイス（デスクトップ及びアプリケーションへの入出力、「Ｉ／Ｏ」）をリモートクライアント装置上で模倣しながら、利用者のデスクトップ及びアプリケーションをデータセンタ内で実行できるようにする仮想化技術によって可能になった。ユーザインターフェイスの模倣は、ユーザインターフェイスを「リモート」すること、つまり画面出力をリモート装置（例えばクライアント装置に関連するディスプレイ）に導き（例えば送信、転送、伝送、伝達等し）、入力装置のデータ（例えばキーボード、マウス、タッチ又は他の装置入力による）をリモート装置から受け取ることによって実現される。デスクトップ全体（例えばホストコンピューティングシステム又は仮想化サーバ上で実行されるオペレーティングシステムのユーザインターフェイス）、又はデスクトップ上で実行される単一のアプリケーションを、スマートフォン、タブレット、ノートブックパーソナルコンピュータ（ＰＣ）、デスクトップＰＣ、スマートＴＶ、他のフォームファクタの計算装置等の装置上でリモートすることができる。
【０００３】
かかるクライアント装置との間でやり取りされるデータの待ち時間を含む、ユーザエクスペリエンスに影響を及ぼす幾つかの問題が残る。待ち時間は、デスクトップ及びアプリケーションのうちの少なくとも一方が動作している（又はホストされている）、クライアント装置及びクライアント装置をサーバに接続するネットワークのうちの少なくとも一方の制限によるものであり得る。更に、一部のネットワーク及びクライアント装置のうちの少なくとも一方には、応答的な方法で豊かなユーザインターフェイスエクスペリエンスを提供するのを困難にし得る帯域幅の制限がある。クライアント装置に素早くデータを転送する必要があればあるほど、待ち時間及び帯域幅の制限に見舞われる可能性が高くなる。
【発明の概要】
【課題を解決するための手段】
【０００４】
一例では、クライアント装置上で描画されるユーザインターフェイスをリモートするための方法がサーバ計算システム内で提供され、この方法は、ユーザインターフェイスの更新部分をクライアント装置に関連する表示画面上に描画させる前に、ユーザインターフェイスの更新部分内で再利用可能な１組の画素、及びユーザインターフェイスの更新部分内の１組の画素の１つ以上の新たな位置の指示をユーザインターフェイスのアスペクトから求めること、映像符号化プロトコルを使用し、ユーザインターフェイスの更新部分内で再利用可能な、求めた１組の画素の再利用を示すユーザインターフェイスの更新部分の映像表現、及び新たな位置への参照を生成して符号化すること、クライアント装置上の映像符号化プロトコルに関する復号器に、ユーザインターフェイスの更新部分をクライアント装置に関連する表示画面上に描画させる方法で、ユーザインターフェイスの更新部分の生成済みの映像表現をクライアント装置に送信することを含む。
【０００５】
一例では、ユーザインターフェイスの更新部分の映像表現を生成して符号化することが、更新部分内で再利用可能な求めた１組の画素を予測マクロブロックへの参照として符号化し、新たな位置を動きベクトルとして符号化する。
【０００６】
一例では、サーバ計算システムが仮想化サーバ計算システムであり、ユーザインターフェイスの更新部分が仮想マシンへの接続に対応するデスクトップの一部である。別の実施形態では、サーバ計算システムが物理計算システムである。
【０００７】
一例では、映像符号化プロトコルに関する復号器が、ユーザインターフェイス・リモーティング用に映像を復号するように最適化されていない汎用映像復号器である。
一例では、再利用可能な１組の画素をユーザインターフェイスのアスペクトから求めることが、ユーザインターフェイスの更新部分内で再利用可能な１組の画素を求めるために、ユーザインターフェイスのセマンティックスを解析することを含む。一例では、セマンティックスを解析することが、スクロール、移動、又は露出操作が行われるかどうかを解析することを含む。一例では、再利用可能な１組の画素をユーザインターフェイスのアスペクトから求めることが、ユーザインターフェイスの更新部分内で再利用可能な１組の画素を求めるために、サーバ計算システムのフレームバッファ内の画素を解析することを含む。一例では、再利用可能な１組の画素をユーザインターフェイスのアスペクトから求めることが、ユーザインターフェイスの更新部分内で再利用可能な１組の画素を求めるために、グラフィックス・コマンド・ストリームを解析することを含む。一例では、再利用可能な１組の画素をユーザインターフェイスのアスペクトから求めることが、ユーザインターフェイスによるストリームである映像ストリームの少なくとも一部を再利用することを含む。
【０００８】
一例では、映像符号化プロトコルがＨ．２６４プロトコル、Ｈ．２６５プロトコル、ＶＣ１プロトコル、又はＶＰ８プロトコルのうちの少なくとも１つである。
一例では、ユーザインターフェイスの更新部分の生成済みの映像表現をクライアント装置に送信することが、映像符号化プロトコルに関する復号器に対して、符号化表現をウェブブラウザに転送させる方法で、ユーザインターフェイスの更新部分の生成済みの映像表現をクライアント装置上で実行されるウェブブラウザに送信することを更に含む。一例では、送信することが、映像符号化プロトコルに関する復号器に符号化表現を転送するために、ウェブブラウザの＜ｖｉｄｅｏ＞タグを利用する。一例では、送信することがＴＣＰ／ＩＰを使用する。一例では、送信することが、ユーザインターフェイスの更新部分の生成済みの映像表現を映像符号化プロトコルに関する復号器に直接送信することを更に含む。
【０００９】
一例では、この方法が、仮想化サーバ計算システムの仮想マシンプロセス及び仮想マシンモニタのうちの少なくとも一方によって実行される。
一例では、この方法が、サーバ計算システムをクライアント装置に接続するネットワーク内の、又はクライアント装置による符号化映像表現の処理における待ち時間を検出すること、待ち時間に対処するために符号化映像表現を調節することを更に含む。一例では、調節することが、より少ない帯域幅を使用することを含む。一例では、調節することが、その後の符号化映像表現を更に圧縮すること、又はその後の符号化映像表現の生成及び送信を遅くすることを含む。一例では、調節することが、クライアント装置上のＣＰＵ使用率を最小限にすることを含む。一例では、調節することが、より少ないフレームを生成して送信することを含む。
【００１０】
一例では、クライアント装置が、パーソナルコンピュータ又はパーソナルコンピューティングシステム、無線装置又は無線接続された装置、電話、テレビ、スマートテレビ、及び／又はタブレットのうちの少なくとも１つである。
【００１１】
一例では、クライアント装置上で描画されるユーザインターフェイスをリモートするためのコンテンツを含む、サーバ内に格納されるコンピュータ可読媒体が提供され、このコンピュータ可読媒体は、ユーザインターフェイスの更新部分をクライアント装置に関連する表示画面上に描画させる前に、ユーザインターフェイスの更新部分内で再利用可能な画素、及びユーザインターフェイスの更新部分内の画素の１つ以上の新たな位置の指示をユーザインターフェイスのアスペクトから求めること、映像符号化プロトコルを使用し、ユーザインターフェイスの更新部分内で再利用可能な求めた画素の再利用を示すユーザインターフェイスの更新部分の映像表現、及び新たな位置への参照を生成して符号化すること、並びにクライアント装置上の映像符号化プロトコルに関する復号器に、ユーザインターフェイスの更新部分をクライアント装置に関連する表示画面上に描画させる方法で、ユーザインターフェイスの更新部分の生成済みの映像表現をクライアント装置に送信することを含む。
【００１２】
一例では、この媒体が計算システムのメモリであり、コンテンツがメモリ内に記憶されるコンピュータ命令である。
一例では、ユーザインターフェイスのアスペクトが１つ以上のユーザインターフェイス操作を含む。一例では、ユーザインターフェイスのアスペクトが、映像ストリームおよび映像ストリームの少なくとも一部をそのまま転送することを含んで再利用可能な画素を含む。
【００１３】
一例では、再利用可能な画素をユーザインターフェイスのアスペクトから求めることが、フレームバッファ又はグラフィックス・コマンド・ストリームの少なくとも一方を解析することを含む。
【００１４】
一例では、ユーザインターフェイスの更新部分の映像表現が、予測マクロブロックへの参照及び動きベクトルを含む。一例では、映像符号化プロトコルに関する復号器が、クライアント装置上にある汎用復号器である。
【００１５】
一例では、サーバ計算システムからクライアント装置へのネットワーク接続と、動き推定器を含む映像符号器とを含むサーバ計算システムが提供され、映像符号器は、実行されるとき、ユーザインターフェイスの更新部分をクライアント装置に関連するディスプレイ上で描画するためにリモートさせる前に、ユーザインターフェイスの更新部分内で再利用可能な１つ以上の画素をサーバ計算システム上で実行されるコードのユーザインターフェイスのアスペクトから求めること、映像符号化プロトコルを使用し、ユーザインターフェイスの更新部分内のどこに１つ以上の画素を配置するのかについての指示と共に再利用可能な１つ以上の画素への参照を含む、ユーザインターフェイスの更新部分の表現を符号化すること、及びネットワーク接続を使用して通信することにより、クライアント装置上で実行される対応する映像復号器に符号化表現を送信することを行うように構成される。
【００１６】
一例では、このサーバは、ホストコンピューティングシステム上で実行される仮想マシン計算環境である。一例では、この計算システムが、Ｗｉｎｄｏｗｓオペレーティングシステム、Ｌｉｎｕｘ、又はＭａｃＯＳのうちの少なくとも１つであるゲストオペレーティングシステムを含む。一例では、クライアント装置へのネットワーク接続が、ゲストオペレーティングシステムによって実装されるＴＣＰ／ＩＰ接続である。一例では、ＴＣＰ／ＩＰ接続が、ゲストオペレーティングシステムの一部ではないハイパーバイザ又は他の仮想化サポートによって実装される。
【００１７】
一例では、映像符号器が、ユーザインターフェイス・リモーティングを行うために修正された汎用映像符号器である。一例では、映像復号器が、ユーザインターフェイス・リモーティングのために映像を復号するように最適化されていない汎用映像復号器である。一例では、映像復号器が市販の映像復号器である。一例では、クライアント装置が利用者に流通するとき、映像復号器がクライアント装置に埋め込まれ、又はクライアント装置と共に流通する。
【００１８】
一例では、実行されるとき、動き推定器が、映像ストリームを解析することによってコードのユーザインターフェイスのアスペクトを解析し、映像ストリームを画素へと符号化することなしに再利用することに決めるように更に構成される。
【００１９】
一例では、実行されるとき、符号化映像表現を処理する際のネットワークの待ち時間又はクライアント装置の待ち時間を調節するように構成される、ユーザインターフェイス・リモーティング・コードをサーバが更に含む。
【図面の簡単な説明】
【００２０】
【図１】向上したユーザインターフェイス・リモーティングの実施形態例を実行するための、仮想化サーバ計算システムの一例のブロック図である。
【図２】ユーザインターフェイス・リモーティング及び最適化システムの一例の構成要素のブロック図の一例である。
【図３】汎用映像ストリーミング・プロトコルの一例を使用する、映像ストリーミングの一例の全体像のブロック図である。
【図４】Ｈ．２６４映像ストリーミング・プロトコルに従って実行される映像符号化技法の一例の全体像を示す。
【図５】ユーザインターフェイスの一操作例による画素移動の一例を示す。
【図６】一実施形態例による、向上したユーザインターフェイス・リモーティングのためのサーバロジックの一例の流れ図である。
【図７】一実施形態例による、再利用可能な画素データを求めるためにユーザインターフェイスを解析するためのロジックの一例の流れ図である。
【図８】一実施形態例による、映像ストリーミング・プロトコルを使用してユーザインターフェイスデータの符号化を求め、生成するためのロジックの一例の流れ図である。
【図９】一実施形態例による、受信映像ビットストリームを復号し、描画するためのクライアントロジックの一例の流れ図である。
【発明を実施するための形態】
【００２１】
本明細書に記載する実施形態は、映像ストリーミング技法を用いたユーザインターフェイス・リモーティングのための、向上したコンピュータ及びネットワークベースの方法、技法、及びシステムを提供する。本明細書で使用するとき、「ユーザインターフェイス・リモーティング」という語句は、別段の定めがない限り、全デスクトップ及びアプリケーションユーザインターフェイスのうちの少なくとも一方をリモートすることを指す。実施形態例は、ユーザインターフェイス・リモーティング及び最適化システム（「ＵＩＲＯＳ：Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｒｅｍｏｔｉｎｇ  ａｎｄ  Ｏｐｔｉｍｉｚａｔｉｏｎ  Ｓｙｓｔｅｍ」）を提供し、ＵＩＲＯＳは、圧縮されたユーザインターフェイス画像情報を映像フレームが符号化されたビットストリーム形式で送るために、良く知られているＨ．２６４映像符号化規格等の汎用映像ストリーミング技法を使用し、仮想化環境がそのゲスト（ゲストオペレーティングシステム及び／又はゲストアプリケーション）に代わってユーザインターフェイスを効率的にリモートできるようにする。汎用映像ストリーム技法（例えば形式、コーデック等）とは、ユーザインターフェイス・リモーティング向けに特別に最適化され又は設計されていないものを広く指し、従って、例えば市販の、専売の、規格化された、又は他の映像復号器（例えば汎用映像復号器）によって復号され得る形式を含む場合がある。これにより、汎用（多くの場合ハードウェア又は埋込型の）映像復号器を有するクライアント装置が、ユーザインターフェイス（ＵＩ）リモーティングを行うように具体的に又は特別にプログラムされることなしに、ユーザインターフェイス（ＵＩ）リモーティングを行えるようになる。
【００２２】
ＵＩＲＯＳは、ユーザインターフェイスが一般に示す高「フレーム」コヒーレンシを上手く利用するために、ユーザインターフェイス・セマンティックスを活用する。つまり、多くのユーザインターフェイス操作に関して、連続したフレーム（使用される映像ストリーミング・プロトコルによって規定されるフレーム）間で画素のほんの一部しか変わらない。一般に、例えばスクローリング、ウィンドウの移動、領域を明らかにすること等のユーザ活動において、既にクライアント装置に転送されている１組の画素がターゲットフレーム内で再配置される（例えば新たな位置に移される）が、他の点では変更されない。このことは、クライアント装置が、クライアント側で画素情報をキャッシュして再利用し、画素情報がターゲットフレーム内でどのように移動したのかに関する情報、及び描画する必要がある新たな任意の情報だけを受信することを可能にする。ＵＩＲＯＳの実施形態例では、これらの更新だけを映像フレームが符号化されたビットストリームとして有利に送信し、その結果、クライアント装置はよりコンパクト且つ高速の更新を受信し、それによりユーザインターフェイスをリモートする全体的な効率を高め、そうしてＵＩの待ち時間を減らす。クライアント装置は、例えばスマートフォン、タブレット、ノートブックコンピュータ、デスクトップコンピュータ、スマートテレビ（ＴＶ）等、使用される映像ストリーミング・プロトコルをサポートする任意の種類の装置を含み得る。
【００２３】
加えて、Ｈ．２６４（さもなければ、アドバンスド・ビデオコーディングとしても知られる）、Ｈ．２６５、ＭｉｃｒｏｓｏｆｔのＶＣ−１、ＧｏｏｇｌｅのＶＰ８等の汎用映像ストリーミング・プロトコルを使用することにより、ＵＩＲＯＳは、専用のことによると高価な専売デバイスドライバ、又は専用ハードウェアをクライアント上にインストールする必要なしに、最適化されたユーザインターフェイス・リモーティングデータをクライアント装置とやり取りすることができる。その理由は、多くのクライアント装置が既にこれらの規格を使用する映像復号を支援するハードウェア・アクセラレータと共に出荷されており、最も人気があるウェブブラウザ（インターネットエクスプローラ、グーグル及びクローム）が今やＨＴＭＬ５を使用するように構成されている（又は近い将来構成される）からであり、ＨＴＭＬ５は、Ｈ．２６４オーバＴＣＰ／ＩＰ等、映像ストリームを伝送するための標準的なネットワーク・プロトコルを提供する＜ｖｉｄｅｏ＞タグをサポートし、映像ストリームは可能な場合は常駐ハードウェアによって加速される復号器に通され得る。以下で更に説明するＨ．２６４規格は、ビットストリームを復号する技法に加え、符号化映像ビットストリームの構文を定める。Ｈ．２６４に関して説明を行ったが、本明細書に記載の技法、方法、及びシステムは他の任意の汎用映像規格でも機能し、Ｈ．２６４、ＶＣ１、及びＶＰ８は単にその例に過ぎないことが理解される。本明細書に記載の技法、方法、及びシステムは、専売の並びに規格化され又は公開された映像形式（例えば規格化組織によって承認されたものや公開されているもの）で機能するが、これらの技法の所望の結果の１つは、最適化されたユーザインターフェイス・リモーティングをあらゆる種類のクライアント装置に関与する全ての人にとって実行可能にするために、汎用映像復号器を含む修正されていないクライアント装置上で実行される標準的なウェブブラウザで機能させることである。汎用プロトコルを使用し、クライアント装置内の映像ストリーミングのビルトインサポートを提供するウェブブラウザ（又はネイティブビデオドライバ）に更新を宛てることは、ＵＩリモーティングのための専門の装置サポートを有する専用クライアント装置を作成する必要性をなくす。
【００２４】
典型的な映像ストリーミングでは、動き推定を求めるために（画素がフレームごとにどのように変化するのかを求めるために）、網羅的な検索を含む様々な技法が使用される。動き推定とは、ターゲット画素ブロックと同様の（規定の大きさの、例えば１６×１６や４×４の）画素ブロックを探すプロセスである。類似性は、様々なアルゴリズムにより様々な方法で規定される。同様の画素ブロックが見つかる場合、移動データ及び差異データのうちの少なくとも一方だけを伝送（例えば伝達、転送、送信等）すれば良く、全ての画素の代わりに同様の画素ブロックへの参照。動き推定を求めるための網羅的な検索技法はＣＰＵに高い負荷をかけ、非常に高額な場合もある。
【００２５】
以下で詳細に説明するように、ＵＩリモーティングに映像ストリーミング技法を使用することは、そのような網羅的な検索技法を使用しない最適化の機会を提供する。多くのユーザインターフェイス活動のフレームコヒーレンシにより、ＵＩＲＯＳは、動き推定プロセス中に同様のフレームをより容易に検索することができる。例えばＵＩＲＯＳは、以下で更に説明するように、ユーザが入力した装置の動きを解析することに加えてゲストによって使用されるフレームバッファ、ゲストにより仮想化支援コード（仮想化ロジックやその構成要素等）又はホスト計算システムに送られるグラフィックスコマンド、及びこの目的を対象にしたアプリケーション・プログラミング・インターフェイス（「ＡＰＩ」）を使用するゲストアプリケーションによって呼び出されるコマンド、のうちの１つ以上を調べることにより、画素の再利用性を明らかにすることができる。この検査プロセスは、再利用可能なブロックをもたらす、又はもたらすべき活動の「フィンガープリント」を与え得る。ＵＩＲＯＳは、映像の符号化及びストリーミングのタイミング及びコンテンツのうちの少なくとも一方を調節（例えば較正、調整等）するために、クライアントの負荷及びネットワーク状態に関するフィードバック情報も解析することができる。
【００２６】
図１は、向上したユーザインターフェイス・リモーティングの実施形態例を実行するための、仮想化サーバ計算システムの一例のブロック図である。仮想化サーバ計算システム１００は、パーソナルコンピュータ、ラップトップ、又はｘ８６アーキテクチャプラットフォーム等のサーバ（ホスト）ハードウェアプラットフォーム１０１上に構成することができる。仮想化サーバ計算システム１００を実装するために、適切に命令された汎用計算システム又は専用計算システムも使用できることに留意されたい。仮想化サーバ計算システム１００は、１つ以上のサーバ計算システムを含むことができ、分散した位置に及ぶことがある。加えて、図示の各ブロックは、１つ以上のかかるブロックを特定の実施形態に応じて適切に表すことができ、又は他のブロックと組合せられても良い。
【００２７】
図示の実施形態では、ホストハードウェア・プラットフォーム１０１が、コンピュータメモリ１０２、１つ以上の中央処理装置（「ＣＰＵ」）１０３、フレームバッファ（「ＦＢ」）１０４、及び例えばネットワークインターフェイスカード（「ＮＩＣ」）１０５を介してアクセス可能な１つ以上のネットワーク接続を含むことができる。加えて、ホストハードウェア・プラットフォーム１０１は、１つ以上のディスプレイ１０９、グラフィックス処理装置（「ＧＰＵ」）１０８、入出力（「Ｉ／Ｏ」）装置１１１（例えばキーボード、マウス、ＣＲＴ、又はＬＣＤディスプレイ等）、又は他のコンピュータ可読媒体１１０等、任意選択的に他の構成要素を含むことができる。
【００２８】
仮想化ロジック１２０が、ホストハードウェア・プラットフォーム１０１のメモリ１０２内にロードされ、１つ以上のＣＰＵ１０３上で実行され得る。仮想化ロジック１２０は、代わりにソフトウェア、ハードウェア、ファームウェア、又はそれらの何らかの組合せによって実装することができる。仮想化ロジック１２０は、同時にインスタンス化され、実行され得る複数の仮想マシン（ＶＭ）１４１ａ〜１４１ｃをサポート可能な、１つ以上の仮想マシンモニタ（ＶＭＭ）１４２ａ〜１４２ｃ及びＶＭＸプロセス１５１ａ〜１５１ｃを含む。本明細書で使用するとき、「仮想マシン」又はＶＭは、ＶＭ１４１ａ〜１４１ｃ等、ゲストオペレーティングシステム及びアプリケーション（「ゲスト」）がその中で実行され得る実行空間を表す抽象概念である。各仮想マシン１４１ａ〜１４１ｃは、ゲストオペレーティングシステム（ゲストＯＳ）、例えばゲストＯＳ１４３ａ〜１４３ｃ、及びそれぞれのゲストＯＳ１４３ａ〜１４３ｃ上で実行される１つ以上の対応するアプリケーション、例えばゲストアプリケーション１４４ａ〜１４４ｃを含むことができる。一実施形態例では、各ＶＭが、実行されているとき、別のクライアント接続から遠隔的に接続される別の利用者にとってアクセス可能にされる。或る特定のホストによってサポートされるＶＭの数は、例えばハードウェアの能力、仮想化ロジックの構成、所望の性能等の側面に基づいて異なり得る。仮想化ロジック１２０上では、他のコード１６１も実行され得る。
【００２９】
各ＶＭ１４１ａ〜１４１ｃは、仮想化ロジック１２０及びホストハードウェア・プラットフォーム１０１のうちの少なくとも一方によって実装される１つ以上の側面の仮想化を必要とし得る。つまり、仮想化ロジック１２０は、エミュレートされたハードウェア及びドライバを各ＶＭに提供することができる。例えば、ＶＭＸプロセス１５１ａ〜１５１ｃ及びＶＭＭ１４２ａ〜１４２ｃにより、仮想化ロジック１２０は、仮想ＣＰＵ（「ＶＣＰＵ」）、仮想メモリ（「ＶＭＥＭ」）、仮想デバイスドライバ（「ＶＤＤ」）、仮想ファイルシステムや仮想ディスク、仮想ネットワーク機能、及び仮想グラフィックス・アダプタ・ドライバやコマンド・エミュレーション等の仮想グラフィックス機能のうちの１つ以上を提供することができる。各仮想化環境は、標準的なｘ８６ハードウェア・アーキテクチャ・プラットフォームの等価物として機能することができ、その結果、インスタンス化された仮想マシン内でアプリケーションを実行するために、任意のオペレーティングシステム（例えばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）、Ｓｏｌａｒｉｓ（登録商標）８６、ＮｅｔＷａｒｅ、ＦｒｅｅＢＳＤ等）をゲストＯＳ（例えばゲストＯＳ１４３ａ〜１４３ｃ）として実装することができる。他の実施形態では、他のハードウェア・アーキテクチャの仮想化がサポートされ得ることに留意されたい。
【００３０】
一実施形態では、仮想化ロジック１２０が、分散ＶＭファイルシステム１３２、記憶スタック１３１、及び物理データドライブ１０６及び１０７と通信するデバイスドライバ１３０により、仮想化された記憶域のサポートを行う。加えて、仮想化ロジック１２０は、ホストハードウェア・プラットフォーム１０１のＮＩＣ１０５と通信するために、仮想スイッチ１３３及びネットワークスタック１３４により、仮想化されたネットワークのサポートも行う。このサポートは、本明細書の他の箇所で言及する仮想化ロジックレベルにおいてＴＣＰ／ＩＰ接続を提供するために使用され得る。更に、仮想化ロジック１２０は、グラフィックスコマンドを使用してホストハードウェア１０１のフレームバッファ１０４を管理し、かつ満たすグラフィックスドライバ１２２と通信するために、サーバグラフィックスＡＰＩ１２１を使用するＳＶＧＡ（又はＶＧＡ）グラフィックスアダプタ実装（ＯｐｅｎＧＩ、Ｘｓｅｒｖｅｒ実装等）により、仮想化されたグラフィックスのサポートも行う。特定の実施形態では、１つ以上のＧＰＵ１０８を使用することにより、ホストハードウェア・プラットフォーム１０１のグラフィックス機能を加速することができる。
【００３１】
一部の実施形態では、仮想化実行環境が、ＶＭＸプロセス（例えばＶＭＸプロセス１５１ａ〜１５１ｃ）と呼ばれるユーザにおいて実行されるプロセス（より特権が与えられていないモード）、及びより特権が与えられた状態で実行されるＶＭＭ（例えばＶＭＭ１４２ａ〜１４２ｃ）の両方によって提供される。各ＶＭ１４１ａ〜１４１ｃは、そのそれぞれのＶＭＸプロセス１５１ａ〜１５１ｃの処理空間内で効果的に実行される（つまりそのメモリがそれぞれのＶＭＸプロセスにマップされる）。ＶＭＸプロセス、例えばプロセス１５１ａ〜１５１ｃは、それぞれのＶＭ、例えばＶＭ１４１ａ〜１４１ｃからの入出力を処理するためのＭＫＳ（マウス、キーボード、画面）スレッド（例えばスレッド１５２ａ）を含むことができる。以下で詳細に説明するように、ＵＩＲＯＳの一例では、ここがＵＩリモーティング・ロジック及びサポートがあり、かつ実行される場所である。ＶＭＸプロセスは、仮想ＳＶＧＡドライバ１５３ａ等のユーザモードのグラフィックスレベルサポートも含む。ＶＭＸプロセスとＶＭＭとの各対は共同して、各ＶＭを実行するための効果的な（及び隔離された）仮想化実行環境を提供する。全体的な操作では、仮想化ロジック１２０が、ＶＭＭ及びＶＭＸプロセスによって実装される仮想化デバイスドライバから要求を受け取り、それらの要求を、ホストハードウェア・プラットフォーム１０１内にある実装置（フレームバッファ１０４、ＮＩＣ１０５等）と通信する実装置ドライバ１３０又は１２２への対応する要求に変換（さもなければ移送、転送、送信、又は伝達）する。
【００３２】
図１の仮想化サーバ計算システム１００を説明するために使用した様々な用語、レイヤ、カテゴリ分類、構成要素は、本開示のそれらの機能又は趣旨から逸脱することなしに異なるように呼んでも良い。更に、特定の任意の実装形態において、構成要素の１つ以上がなくても良い。例えば、各ＶＭＭ１４２ａ〜１４２ｃ内に含まれていない、仮想化ロジック１２０の一部として図示する仮想構成要素（例えば構成要素１３０〜１３４、１２１〜１２２の１つ以上等）を、他の実施形態ではＶＭＭ１４２ａ〜１４２ｃの一部と見なすことができる。加えて、一部の実施形態では、ＶＭＸプロセスが使用されず、代わりにＵＩリモーティング及び仮想グラフィックス・アダプタ・サポートを含むＭＫＳスレッド機能がＶＭＭ１４２ａ〜１４２ｃ内に、又は仮想化ロジック１２０の他の部分内に統合される。更に、一部の実施形態では、ＶＭＭ１４２ａ〜１４２ｃがＶＭ１０２と別であり、又はＶＭ１０２の一部であると見なすことができる。ＵＩＲＯＳの実施形態は、仮想化ロジック１２０がホストハードウェア上に直接ではなく、ホストハードウェア・プラットフォーム１０１上で実行されるオペレーティングシステムの上に実装される、ホスト仮想マシンシステム等の他の仮想化計算環境内で実施することができる。
【００３３】
更に、一部の実施形態では、仮想化サーバ計算システム１００の構成要素の一部又は全てを、これだけに限定されないが、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、標準的な集積回路、コントローラ（適切な命令を実行し、かつマイクロコントローラ及び埋込コントローラのうちの少なくとも一方を含む）、書替え可能ゲートアレイ（ＦＰＧＡ）、複合プログラム可能論理デバイス（ＣＰＬＤ）等を含むファームウェア及びハードウェアのうちの少なくとも一方によって少なくとも部分的に等、他の方法で実装し又は提供することができる。構成要素及びデータ構造のうちの少なくとも一方の一部若しくは全ては、記載の技法の少なくとも一部を実行するためにコンピュータ可読媒体がコンテンツを実行し又は他の方法で使用し若しくは提供することを可能にするコンピュータ可読媒体１１０等、コンピュータ可読媒体（例えばハードディスク、メモリ、ネットワーク、他のコンピュータ可読媒体、又はＤＶＤやフラッシュメモリデバイス等、適切なドライブ又は適切な接続によって読み取られる他の携帯型媒体物）上のコンテンツとして（例えば実行ファイル又は他の機械可読ソフトウェア命令や構造化データとして）記憶することもできる。
【００３４】
図２は、ユーザインターフェイス・リモーティング及び最適化システムの一例の構成要素のブロック図の一例である。一実施形態では、ユーザインターフェイス・リモーティング及び最適化システム（ＵＩＲＯＳ）が、映像圧縮及びストリーミング技法を使用し、共同してユーザインターフェイスの更新をクライアント装置に送信する１つ以上の機能上の構成要素／モジュールを含む。これらの構成要素は、ソフトウェア、ハードウェア、ファームウェア、又は組合せによって実装することができる。図２では、ＵＩＲＯＳが、１つ以上のホスト又はサーバ計算システム２０１上にあるサーバ側サポートと、１つ以上のクライアント装置２２０上にあるクライアント側サポートとを含む。
【００３５】
一実施形態例では、サーバ側サポートが、ＵＩリモーティング・サーバ２０４、映像符号器２０５、及びレンダリングサポート２０６を含む。一部の実施形態では、これらの構成要素がＶＭサポート２０３の一部として、例えばホスト／サーバ計算システム２０１によってホストされる仮想化ロジック２０２上で実行されるプロセス（例えばＶＭｗａｒｅの仮想化環境内のＶＭＸプロセス）の一部として実行される。例えば、これらの構成要素２０４〜２０６は、図１に関して説明したようにＶＭＸプロセス１５１ａ〜１５１ｃの一部として実行されるＭＫＳ（マウス、キーボード、画面ハンドリング）スレッド１５２ａの一部として実行され得る。他の実施形態では、各ＶＭＭ（仮想マシンモニタ、例えばＶＭＭ１４２ａ〜１４２ｃ）の一部としてや、仮想化ロジック２０２の他の部分として等、これらの構成要素が仮想化環境の他の部分内に実装され得る。レンダリングサポート２０６は、ゲスト２１０（ゲストオペレーティングシステム２１１を使用してデスクトップ２１２から実行されるゲストアプリケーション２１３）から仮想グラフィックスデバイスコマンドを受け取り、フレームバッファ１０４等、ホスト２０１に関連するグラフィックスハードウェアに対し、それらをグラフィックス・スタック（図１にグラフィックスＡＰＩ１２１及びグラフィックスドライバ１２２として示す）によって実行することを担う。映像符号器２０５は、本明細書で更に詳細に説明するように、ユーザインターフェイス・リモーティング（ＵＩＲ）サーバ２０４によって呼び出されるとき、ユーザインターフェイスの更新を符号化することを担う。ＵＩＲサーバ２０４は、ＶＭサポート２０３（仮想化ロジック２０２又はホスト２０１）内のＴＣＰ／ＩＰ接続２０７を介して、又は仮想化サポート２０１、２０２、若しくは２０３からではなくゲストＯＳ２１１からＵＩリモーティングを受け取るように最適化され得る、幾つかのクライアント装置インターフェイスに対するゲストオペレーティングシステム（ゲストＯＳ）２１１内のＴＣＰ／ＩＰ接続２１７を介して、ユーザインターフェイスの更新を被接続クライアント装置２２０に伝送することができる。
【００３６】
クライアント装置２２０は、自らのＴＣＰ／ＩＰ接続２２７及びユーザインターフェイス・リモーティング（ＵＩＲ）クライアント２２４を介し、ＵＩディスプレイの更新を受け取る。ＵＩディスプレイの更新は、ＴＣＰ／ＩＰ接続によって接続されるウェブブラウザコードを介して最初に受け取られても良く、ＴＣＰ／ＩＰ接続は、その情報をＵＩＲクライアント２２４及び／又は映像復号器２２５に伝える（例えばその情報を宛先変更、転送、伝達、又は送信する）。例えば一部の実施形態では、映像復号器２２５に更新を送るために、ＵＩディスプレイの更新が、例えばＨＴＭＬ５規格の下で入手可能なウェブブラウザコードの＜ｖｉｄｅｏ＞タグ実装によって処理される。例えばＵＩＲクライアント２２４等の媒介物を使用する他の実施形態では、ウェブブラウザコードが、映像ビットストリームをＵＩＲクライアント２２４に伝えることができる。ブラウザコードが＜ｖｉｄｅｏ＞タグについてサポートする何らかの実装を使用することとは対照的に、ＵＩＲクライアント２２４は、例えばＶＭへの接続時に（又は他の時点で）クライアント装置にダウンロードされるジャバ・スクリプトとして実装し、映像がどのように処理されるのかを測定することができる。次いで、ビットストリームを（例えば移動、スクロール、露出領域、又は同様の操作について前にキャッシュしたフレームから）再構築するために映像復号器２２５が（例えばウェブブラウザコード又はＵＩＲクライアント２２４によって）呼び出され、ディスプレイ２２６上に描画されるデータストリームを送る（例えば転送、伝送、伝達等する）。
【００３７】
実施形態例では、ＵＩＲＯＳのサーバ側サポート及びクライアント側サポートの構成要素を、標準的なプログラミング技法を使用して実装する。概して、かかる実施形態例を実装するために、オブジェクト指向言語、関数型言語、スクリプト言語、及び宣言言語を使用することを含め、当技術分野で知られている一連のプログラミング言語を使用することができる。加えて、他の実施形態では、引き続きＵＩＲＯＳの機能を果たしながらも、様々な構成要素の機能をそれらの構成要素間で異なる方法で分散させ、又は他の方法で分散させることができる。
【００３８】
先に述べたように、一部の実施形態では、ＵＩＲサーバ２０４、ＵＩＲクライアント２２４、映像符号器２０５、及び映像復号器２２５が、Ｈ．２６４規格で定められる映像ストリーミング及び圧縮技法を使用するが、他のストリーミング及び圧縮技法を代わりに使用しても良い。図３は、汎用映像ストリーミング・プロトコルの一例を使用する、映像ストリーミングの一例の全体像のブロック図である。この例では、現在のフレームを生成するために以前のデータが使用可能であると認識することに基づき更新を最小限にする技法を使用し、映像出力３１５を生成するために映像源３００を符号化し、伝送する。具体的には、予測ロジック３０１（例えばコード、構成要素、ブロック、プログラム、タスク等）が、動き推定として知られるプロセスを使用して映像源３００を検査し、描画される現在のブロックが他のどのデータに対応するのかを求める。一部の実施形態では、現在のブロック内のデータを予測するために、現在のフレーム内の他のデータを使用する（「フレーム内」予測）。他の実施形態では、現在のブロック内のデータを予測するために、前に伝送されたフレーム内のブロックのデータを使用する（「フレーム間」予測）。映像では、網羅的な検索を含む様々な動き推定アルゴリズムを使用することができる。Ｈ．２６４規格を使用する場合、１６×１６画素ブロックから４×４画素ブロックまでを含む、様々な大きさのブロックを使用することができる。予測ブロックを選択し、描画される現在の（所望の）ブロックをもたらすためにそのブロックをどのように再配置すべきかが決定されると、ストリーミング及び圧縮プロトコルの技法に従ってデータが変換構成要素３０２（例えばモジュール、ロジック、ブロック、コード、プログラム、タスク等）によって変換され、符号化構成要素３０３によってビットストリーム内に符号化される（及び典型的には圧縮される）。次いで、その符号化ビットストリームを、映像形式に基づき、ターゲット（例えばクライアント）装置に送るのに適切な構文で伝送し又は記憶する（３１０）。クライアント装置上で受信されると、符号化（及び典型的には圧縮された）ビットストリームが復号構成要素３１１によって復号され、変換構成要素３１２を使用してビットストリーム内の情報に対して逆変換が行われて、描画されるブロックを構築するための情報が復元される。変換データが、ビットストリームからの他のデータ（例えば予測ブロックに対するポインタ、参照等）と共に再構築構成要素３１３によって使用されて、描画用の映像出力３１５が生成される。
【００３９】
Ｈ．２６４規格を使用する場合、ＵＩＲＯＳは（「予測マクロブロック」と呼ばれる）予測ブロックを決定し、ＵＩリモーティングにおいて対処される多くのユーザインターフェイス活動を効率的に表すために、そのブロックをどのように動かすべきかを符号化する動きベクトルを計算する。図４は、Ｈ．２６４映像ストリーミング・プロトコルに従って実行される映像符号化技法の一例の全体像を示す。図示の例では、符号化を行うために（前に符号化され、伝送されたフレームを用いる）フレーム間予測を活用する。つまり、符号化され、伝送される現在のフレームＩ＋１  ４１０内のマクロブロック４１２と同様のマクロブロック４０２を見つけるために、前のフレームＩ  ４０１を使用する。前に伝送されたフレーム４０１内の予測マクロブロック４０２を、符号化されているマクロブロック４１２内で提示されるのと全く同じ画素データを含むものとして図示する。符号化されている現在のフレーム４１０内の動きベクトル４１３は、そのマクロブロックの前の位置（４１１）から目的の位置（４１２）までの動きを捕捉する。Ｈ．２６４規格によれば、予測マクロブロック４０２と符号化されているターゲットマクロブロック４１２との差を含む、残差マクロブロック４１４が計算される。ＵＩ符号化（ビットブリット操作）の性質により、情報は変更されておらず動かされただけなので、残差マクロブロック４１４は典型的にはヌル／空である。Ｈ．２６４規格は、動きベクトル４１３と共に予測マクロブロック４０２がどのように符号化されるのかを規定し、それにより、結果として生じるマクロブロック４１２を描画するために、復号器が既に受信済みのキャッシュされた画素データブロック（４１１）を再利用し、それを動きベクトル４１３によって指示される位置に移動し、残差マクロブロック４１４内に含まれる任意の情報を応用することができる。Ｈ．２６４規格は、コンパクト且つ効率的な圧縮ビットストリーム内にこの情報の全てをどのように符号化するのかを規定する。Ｈ．２６４規格に関する更なる情報は、参照によりその全体を本明細書に援用する、イアンリチャードソン（Ｉａｉｎ  Ｒｉｃｈａｒｄｓｏｎ）著、白書：Ｈ．２６４／ＡＶＣの技術概論（Ｗｈｉｔｅ  Ｐａｐｅｒ：Ａ  Ｔｅｃｈｎｉｃａｌ  Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ｈ．２６４／ＡＶＣ）、ＶＣｃｏｄｅｘ、２００２年〜２０１１年、及びイアンリチャードソン（Ｉａｉｎ  Ｒｉｃｈａｒｄｓｏｎ）著、白書：Ｈ．２６４アドバンスド・ビデオコーディングの概要（Ｗｈｉｔｅ  Ｐａｐｅｒ：Ａｎ  ｏｖｅｒｖｉｅｗ  ｏｆ  Ｈ．２６４  Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ）、Ｖｃｏｄｅｘ／ＯｎｃｅＣｏｄｅｃ、２００７年〜２０１１年の中に記載されている。
【００４０】
ＵＩリモーティングで使用する場合、（符号化され、クライアント装置に伝送されるブロックごとに適切な予測マクロブロックを求めるために）動き推定を行うために、ＵＩＲサーバ（例えば図２のＵＩＲサーバ２０４）がユーザインターフェイス活動の知識を組み込む。例えば、ユーザがデスクトップ上で文書をスクロールし、又は何か、例えばウィンドウを動かすとき、ＵＩＲサーバはどの画素が同じままであり、どの画素が、クライアント装置が描画する新たなコンテンツ（追加の画素）なのかを計算することができる。Ｈ．２６４（又は他の任意の同様の映像符号化）を使用し、ＵＩＲサーバは、引き続き描画すべきだが、別の位置に描画すべきユーザインターフェイスの部分に対応するように、予測マクロブロックの指示及びその動きベクトルをクライアント装置に送信することができる。その後、ＵＩＲサーバは、（クライアント装置によって描画される）表示画面上に今表示される画素を新規データとして符号化するだけで良い。
【００４１】
図５は、ユーザインターフェイスの一操作例による画素移動の一例を示す。この場合、操作例はスクロール操作である。この例は、フレームＩ  ５０１内の文書が仮想化サーバ上で操作されていることを示す。現在表示されている（ユーザインターフェイス操作前の）文書の内容をフレームＩ  ５０１内に示す。これらは、クライアント装置に既にリモートされている画素である。まだ表示されていないが、表示されようとする文書内で入手可能なコンテンツをテキスト５０４として示す。利用者がスクロールダウン操作を行うと（テキストは上にスクロールされる）、フレームＩ  ５０１内の点線の四角形５０３を伴うコンテンツは、既にクライアント装置上にキャッシュされており、従って、フレームＩ＋１  ５１０内の新たな位置の中のコンテンツ（点線の枠５１３内に示す）を反映する予測マクロブロック及び動きベクトル５０５として符号化され得る。四角形５１５内の画素は、このスクロール操作の描画を完了するために符号化され、クライアント装置に伝送されなければならない画素である。従って、ＵＩＲサーバがスクロール操作の結果を符号化するために映像符号化を使用する場合、ＵＩＲサーバは、フレームＩ  ５０１からの予測マクロブロック及び動きベクトル５０５を使用して、クライアントと通信し、新たな位置に移動した点線の四角形５１３内に示す画素データを再利用して、新たな（符号化され伝送される）コンテンツ５１５を描画する。
【００４２】
本明細書に記載の例は、ユーザインターフェイス・デスクトップのリモーティング、及びスクロール、移動、取込み、ピンチ操作、領域や画素を露出すること等の動作にしばしば言及するが、本明細書に記載の技法は如何なる種類のディスプレイ表示を描画するためにも使用することができる。加えて、記載した概念及び技法は、他の種類の映像符号化技術及びその技術をサポートするブラウザを含む、他の映像符号化技法にも適用することができる。更に、本明細書では特定の用語を主に使用するが、等価の実施形態及び例をもたらすために他の用語を区別なく使用することができる。加えて、用語には明示的に言及する場合もそうでない場合もある代わりの綴りがある場合があり、そのような用語の全ての異体が含まれることを意図する。
【００４３】
本明細書に記載の実施形態例は、映像符号化技術を使用してＵＩをリモートするために使用される、ユーザインターフェイス・リモーティング及び最適化システムを実装するための、アプリケーション、ツール、データ構造、及び他のサポートを提供する。以下の説明では、記載する技法の完全な理解を与えるために、データ形式やコードロジックシーケンス等の数多くの具体的詳細を記載する。記載する実施形態は、本明細書に記載の具体的詳細の一部を欠いて、又はロジックの順序に関する変更、別のロジック等、他の具体的詳細と共に実施することもできる。従って、記載する技法及び機能のうちの少なくとも一方の範囲は、或る特定のルーチン、モジュール、構成要素等に関して記載する態様の、特定の順序、選択、又は分解によって限定されることはない。例えば、ＵＩリモーティングに関与する動作の時間の重要度を所与として、図６〜図９に示す複数のシーケンスへの分解は実際の実装形態では反映される可能性が低いかもしれないが、説明しやすくするためにそのように図示している。
【００４４】
図６は、一実施形態例による、向上したユーザインターフェイス・リモーティングのためのサーバロジックの一例の流れ図である。ロジック６００は、例えば図１の仮想化ロジック１２０の、図２内のＵＩＲサーバ２０４のＭＫＳスレッド１５２ａ内で実行することができる。このロジックは、クライアント装置にＵＩ（ユーザデスクトップ等）をリモートするための全体的な流れを示す。
【００４５】
ブロック６０１で、このロジックは、ユーザインターフェイスの変化した部分内の再利用可能な画素情報を得るために、リモーティングの影響下にあるユーザインターフェイスを解析する。図７に関してこの解析を詳細に説明する。概要では、ＵＩコマンドが、ことによると修正された位置に既に転送された画素データのビットブリット操作（画素データのブロック転送）をもたらすコマンドかどうかをＵＩＲサーバが判定する。そうである場合、その操作は、記載した映像符号化技法を使用する、最適化されたＰフレームによって表すことができるものである可能性が高い。そうでない場合、その操作は、新たな画素データを有する１つ以上のマクロブロックを送信することにより、変更領域を符号化することができる。ＵＩの変化した部分（ディスプレイの「調子外れの（ｄｉｒｔｙ）」領域又は変化した部分）に関して、図７に関して説明する再利用可能な画素の技法を実行する。ＵＩの不変化部分は、前のフレームのマクロブロックを再利用することにより、又は一部の実施形態では映像ストリーム内の不変化領域を指示することにより（例えば、どのマクロブロックを飛ばすことができるのかを示す構成体を使用することにより）、映像符号化技法を使用して符号化することができる。
【００４６】
ブロック６０２で、このロジックは、作成される映像ストリームの生成を較正する。ＵＩＲサーバは、クライアント装置に送信するフレームが時宜を得た方法でクライアント装置に達し、過負荷状態のネットワーク待ち行列の場合にパイプ内で「陳腐化」しないように、それらのフレームをちょうど正しい周波数及び時点において生成しようとする。そうするために、ＵＩＲサーバロジックは、映像ストリームがクライアント装置に送られている間に（その前に及びことによるとその間に）映像ストリームの生成を較正する。較正は、例えばネットワーク状態及びクライアントの負荷に関するクライアント装置からのフィードバック情報を（例えばバックチャネル上で）得る結果として行われ得る。フィードバックは、ネットワーク遅延時間及び帯域幅情報並びにクライアントの過負荷状態を含み得る。ＵＩＲサーバは、この情報を装置の種類、モデル等、クライアント装置に関する他の情報と共に使用し、映像ストリームの合成的且つ実時間の生成を較正することができる。ネットワークが過負荷状態にある（例えば伝送バッファが過負荷になっている）とＵＩＲサーバが判定すると、ＵＩＲサーバは、より強く圧縮し（例えば符号化を更に圧縮し）又は映像フレームの生成を遅くすることができる。一部の実施形態では、符号化／復号にもよるが、帯域幅が限られている場合、ＵＩＲは残差フレームを利用して、クライアントが累積的に描画できるプログレッシブ・エンハンスメントを送ることができ、従って残差フレームの付加的な構成体を活用する。他方で（ネットワークではなく）クライアント装置が過負荷状態にあるとＵＩＲサーバが判定する場合、ＵＩＲサーバはより少ないフレームを伝送することができる。同様に、クライアント装置にデータを送るのに十分な帯域幅があるとＵＩＲサーバが判定する場合、ＵＩＲサーバはより弱く圧縮して、画素データの圧縮を行うのに必要なホストサーバ上のＣＰＵ処理を減らすことができる。他の較正も同様に取り入れることができる。ブロック６０１のロジックは、様々な時点で実行することができるが、典型的にはブロック６０９で映像符号化をクライアント装置に伝送する前に行われる。
【００４７】
ブロック６０３で、前に転送されたデータのかかるビットブリット操作が（例えば移動、スクロール、露出、又は他のＵＩ操作により）生じているという指示をブロック６０１の解析が返す場合、ロジックはブロック６０４に進み、さもなければロジックはブロック６０５に進む。
【００４８】
ブロック６０４で、ロジックが映像符号化プロトコル、例えば上記のＨ．２６４に従って符号化を計算し、ブロック６０９に進む。映像符号化の計算の一例は、図８で更に説明し、再利用可能な画素情報並びに新たに送信しなければならないデータに対応する。
【００４９】
ブロック６０５で、前に転送されたデータに関する操作が行われていないという指示をブロック６０１の解析が返す場合、ロジックは、映像を再生する操作が指示されているかどうかを判定する。指示されている場合、ロジックはブロック６０６に進み、さもなければブロック６０８に進む。
【００５０】
ブロック６０６で、ロジックが、指示された映像再生をリモートするための符号化を計算し、その後ブロック６０９に進む。この操作は、例えば利用者がＹｏｕＴｕｂｅ等のビデオオンデマンド・アプリケーションやＳｋｙｐｅ等のテレビ会議アプリケーションを使用する場合に生じ得る。この場合、ロジックは、リモートされた映像ストリームを構築する際にソース映像ストリームを活用しようと試みる。このような手法は、ＵＩの一部として別の映像ストリーム上に再符号化するためだけに、映像ストリームを画素へと復号するよりもはるかにＣＰＵ効率が良い。何らかの理由でクライアント装置が元の映像ストリームを復号できない場合、又はクライアント装置が利用可能な帯域幅がソース映像ストリームを受信するのに不十分である場合（又は他の理由で）、ロジックは、ソースストリームをリモートするのに適した形式にトランスコードする。一部の実施形態では、元の映像符号化の少なくとも一部を活用できるように、元の映像ストリームからの動きベクトル情報及びマクロブロックを少なくとも部分的に再利用して、トランスコードプロセスを加速することができる。例えば、映像ストリームのために確保されるＵＩ領域の座標系は、ＵＩリモーティングに使用される座標系と全体として異なる可能性があるが、映像ストリームの動きベクトルの計算により、新たな動きベクトルの計算が依然として知らされ得る。
【００５１】
リモーティングを必要とするが、動き推定アルゴリズムが使用されず又は効果的でない他の何らかのＵＩ操作が生じたとロジックが判定した場合、ブロック６０８で、ロジックは引き続き標準的な手順を使用して、例えばデータが変化した場合は新たなデータを有するマクロブロックを使用して画素データを符号化し、前のフレームのマクロブロックを再利用し、又はデータが変化していない場合は必要に応じてマクロブロックを飛ばし、ブロック６０９に進む。
【００５２】
ブロック６０９で、ロジックが、（使用される映像プロトコルによって決定づけられる符号化ビットストリーム内の）符号化データをＵＩリモーティング・コード（例えば図２のクライアント装置２２０内のＵＩＲクライアント２２４）に伝送する。一部の実施形態では、これはクライアント装置上で実行されるウェブブラウザ（不図示）へのネットワーク接続（例えば仮想化ロジック又はホスト内のＴＣＰ／ＩＰ接続２０７）を使用して実現され、その接続は、サーバのＴＣＰ／ＩＰ接続との認証接続を前に確立している。ウェブブラウザは、薄いベニヤ（ｔｈｉｎ  ｖｅｎｅｅｒ）として機能することができ、映像ストリームを直接（多くの場合ハードウェアによって支援される）映像復号器、例えば映像復号器２２５に伝え、映像復号器はそのデータをクライアント装置のディスプレイ上に描画する。一部の実施形態では、映像ストリームの処理速度を制御するように、ブラウザによる＜ｖｉｄｅｏ＞タグ処理への映像ストリームの供給を測定するためのコードが、例えばジャバ・スクリプトとしてクライアント装置にダウンロードされる。他の実施形態では、ゲストＯＳ２１１内のＴＣＰ／ＩＰ接続２１７等、ウェブブラウザへのＴＣＰ／ＩＰ接続がゲストＯＳによって動作する。更に他の実施形態では、符号化データが、クライアント装置にとってネイティブな映像復号器用のドライバ（不図示）にＴＣＰ／ＩＰによって直接送られる。他の実施形態では、ＴＣＰ／ＩＰ以外の他のネットワーキング・プロトコルを使用しても良い。図２では、これらの異なる接続を「ＵＩＲプロトコル」として示す。
【００５３】
図７は、再利用可能な画素データを求めるためにユーザインターフェイスを解析するためのロジックの一例の流れ図である。ロジック７００は、例えば図１に示す仮想化ロジック１２０の、図２内のＵＩＲサーバ２０４のＭＫＳスレッド１５２内で実行することができる。ロジック７００は、例えば図６のブロック６０１から呼び出され得る。このロジックは、例えば利用者が画面全体にわたるアプリケーションを開くとき、符号化しようとする次の変化領域を最適化して既存のマクロブロック情報を再利用し、ＵＩフレームコヒーレンスを上手く利用できるのか、又はキーフレーム（新たなフレーム）として送信しなければならないのかを判定する。このロジックシーケンス内で使用される技法の１つ以上は、如何なる実施形態においても実装することができる。例えば、図示の実施形態では、再利用性を判定するために各技法を（連続して）検査する。他の技法では、１つ以上の技法を代替的に検査する。一実施形態例では、汎用映像符号器を修正し、これらの技法の１つ以上をそのロジックの動き推定部分内に実装する。
【００５４】
ブロック７０２で、このロジックは、スクロール又は移動型の事象が生じたかどうかを検出し（スクロール又は移動の「フィンガープリント」を探し）、再利用可能な画素情報をそこから求めるためにフレームバッファを検査する。一部の実施形態では、この操作は、マウスの移動、矢印キー、スクロールダイヤル事象、及び前に目に見えた画素の「移動」を知らせる他のユーザ入力を受け付けるとき、フレームバッファのコンテンツをフレームバッファの前のコンテンツと比較することにより、ビットブリットを検出することによって行われる。ビットブリットが検出される場合、適切な予測マクロブロック及びそれらの対応する動きベクトルが生成される。ここでは、フレームバッファが、典型的には実行アプリケーションに対応するＶＭによって利用される仮想フレームバッファである。或る時間間隔中に変化し又は或る操作によって変化したフレームバッファ内の領域があるかどうかを判定するのを支援するために、仮想映像アダプタドライバによって実装されるもの等、「ブリットマップ」構成体（不図示）等の他の構成体を使用しても良い（ブリットマップ構造の作成及び（他の）使用についての説明が、２０１０年１０月２８日に刊行され、「リモートディスプレイに伝送するためにフレームバッファをコピーする方法及びシステム（Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｃｏｐｙｉｎｇ  ａ  Ｆｒａｍｅｂｕｆｆｅｒ  ｆｏｒ  Ｔｒａｎｓｍｉｓｓｉｏｎ  ｔｏ  ａ  Ｒｅｍｏｔｅ  Ｄｉｓｐｌａｙ）」と題された、バイフォード（Ｂｙｆｏｒｄ）ら著、米国特許出願公開第２０１０／０２７１３７９号明細書の中で示されている）。更に、一部のシステムでは、再利用可能な画素情報を求める比較のために、フレームバッファの前の状態を（部分的に又は全体として）キャッシュすることができる。次いでこのロジックは、既に生成したものを追跡し、更なる可能な最適化を求めるためにブロック７０４に進む。
【００５５】
ブロック７０４で、ロジックがゲストのグラフィックス・コマンド・ストリームを検査し、移動、スクロール、露出、又は他の種類の関連するＵＩ事象を（例えば特定のコマンドに一致するパターンによって）検出する。そうである場合、例えば図２の映像符号器２０５によって保持される、例えば前に符号化されたフレームの情報を使用し、適切な予測マクロブロック及びそれらの対応する動きベクトルが生成される。次いで、このロジックは、既に生成したものを追跡し、更なる可能な最適化を求めるためにブロック７０６に進む。
【００５６】
ブロック７０６で、ロジックが、画素情報を再利用する任意のＵＩセマンティックスの通知を（例えばＡＰＩによって）受け取ったかどうかを判定する。一部の実施形態では、このロジックは、ＵＩコヒーレンス情報及びそのＵＩが例えば仮想化環境内でリモートされ得るという知識をアプリケーションが活用できるようにするＡＰＩをサポートする。ＵＩリモーティングの認識を有するアプリケーションは、画素情報、例えばスクロール画素の次の新たなコンテンツブロックやスライドショーの次の写真を、表示画面上に描画する前に好都合にキャッシュすることができる。例えば、アプリケーション（又はＵＩリモーティングを支援する他の構成要素）は、画素情報を事前ロードして一種の「先読み」を行い、クライアント装置上のＵＩの待ち時間を減らすために、Ｈ．２６４復号器フレームキャッシングを活用することができる。
【００５７】
ロジックがＵＩセマンティックスの通知を受け取ったと判定する場合、ロジックはブロック７０８に進み、さもなければブロック７１０に進む。ブロック７０８で、ロジックは、受け取った通知がこれらのコマンドの１つに関係するかどうかを判定し、関係する場合はブロック７０９に進み、さもなければブロック７１０に進む。ブロック７０９で、ロジックが、以下で説明する適切な再利用可能画素及び他の情報のうちの少なくとも一方を生成し、その後ブロック７１０に進む。
【００５８】
ブロック７１０で、ロジックが、予測マクロブロック及びそれらの対応する動きベクトルを含む生成済みの画素情報を返す。最適化が可能でない場合、新たな画素情報（１つ以上のマクロブロック）が返される。
【００５９】
図８は、一実施形態例による、映像ストリーミング・プロトコルを使用してユーザインターフェイスデータの符号化を求め、生成するためのロジックの一例の流れ図である。ロジック８００は、例えば仮想化ロジック１２０の、図２内のＵＩＲサーバ２０４のＭＫＳスレッド１５２内で実行することができる。ロジック８００は、少なくとも一部の画素の再利用性があり得る場合、例えば図６のブロック６０４から呼び出され得る。このロジックは、図３に関して説明したプロセスに従って符号化を求め、使用される映像符号化プロトコルに特有である。
【００６０】
図７のロジックの解析によって示し、図４で説明したように、ブロック８０１で、このロジックは、前に伝送されたフレームから再利用することができる１つ以上の予測マクロブロックを求める。一部の例では表示画面全体がリモートされ又はリモートされない場合があるので、これはリモートされているディスプレイの何らかの部分に対して行われる。図７の動き推定の結果は、どの矩形が再利用可能なのかを示す。例えば文書をスクロールしている場合、再利用可能であると判定されるディスプレイの一部の変化領域（例えばマクロブロック）と、新たなデータとして送らなければならない変化領域の他の部分（例えば新たなマクロブロック）とがある。
【００６１】
図７のロジックの解析によって示し、図４で説明したように、ブロック８０３で、このロジックは、予測マクロブロックに適用可能な１つ以上の対応する動きベクトルを求める。
【００６２】
この画素情報について再利用性が明らかにされていないので、ブロック８０５で、このロジックは変化領域の残りの矩形を新たなマクロブロックとして符号化する。
ブロック８０６で、このロジックは、リモートされている表示部分の不変化領域を符号化する。上記のように、この符号化は、どのマクロブロックを「飛ばす」ことができるのかを示すことにより、又は他のメカニズムにより、前に伝送された既存のマクロブロックを参照することで行うことができる。
【００６３】
ブロック８０７で、このロジックは、１つ以上の予測マクロブロック、それらの対応する動きベクトル、並びに残りのマクロブロック及び情報を圧縮して符号化し、その情報を映像符号化プロトコルの要件に応じたビットストリームへと変換して圧縮する。この符号化ビットストリームは、ブロック８０８で返される。
【００６４】
図９は、一実施形態例による、受信映像ビットストリームを復号し、描画するためのクライアントロジックの一例の流れ図である。ロジック９００は、例えばクライアント装置２２０内で実行されている図２の映像復号器２２５によって実行され得る。ロジック９００は、図３に関して説明したプロセスに従い、図６及び図８の結果として生じる符号化ビットストリームを受け取って処理する。
【００６５】
ブロック９０１で、ロジックが符号化ビットストリームを（例えばＴＣＰ／ＩＰ接続により、ウェブブラウザを介してＵＩＲクライアント２２４から）受け取る。
ブロック９０３で、ロジックが、そのビットストリームを映像ストリーム・プロトコルに従って復元しおよび復号し、１つ以上の予測マクロブロック及びそれらの関連する動きベクトル並びに残差マクロブロックを求める。これは、残差マクロブロック情報を再現するために逆変換を行うことを含み得る。
【００６６】
ブロック９０４で、このロジックは、指示された予測マクロブロックに基づいてキャッシュ済みの画素情報を検索することによって描画する画素を計算し、画素をそのそれぞれの動きベクトルに従って移動し、残差マクロブロック情報内に符号化される任意の差異情報を追加する。典型的な事例では、ビットブリットは情報の変化を引き起こさないので、残差マクロブロック情報は存在しない（即ちゼロである）ことに留意されたい。例えば帯域幅が不足している一部の実施形態では、残差マクロブロックがプログレッシブ・リファインメントに使用される。場合によっては、Ｉフレーム（キーフレーム）が符号化され、圧縮され、伝送され、それによりそのまま描画される。
【００６７】
ブロック９０７で、計算された画素情報をクライアント装置に関連する表示装置上で描画する。
次いでロジックが終了する。
【００６８】
本明細書で言及し且つ／又は出願データシートに列記した上記の米国特許、米国特許出願公開、米国特許出願、外国特許、外国特許出願、及び非特許文献の全ては、参照によりその全体を本明細書に援用する。
【００６９】
上記の内容から、特定の実施形態を例示目的で本明細書に記載してきたが、本開示の趣旨及び範囲から逸脱することなく様々な修正を加えても良いことが理解される。例えば、本明細書で解説したＵＩリモーティングのための映像符号化を行うための方法、技法、及びシステムは、ｘ８６アーキテクチャ以外の他のアーキテクチャにも適用可能である。更に、本明細書で論じた方法及びシステムは、異なるプロトコル、通信媒体（光学、無線、ケーブル等）、及び装置（無線ハンドセット、電子手帳、携帯情報端末、携帯型電子メール機、タブレット、ノートブック、ゲーム機、ページャ、ＧＰＳ受信機等のナビゲーション装置等）にも適用可能である。
【図１】
0006051303.tif 000002
【図２】
0006051303.tif 000003
【図３】
0006051303.tif 000004
【図４】
0006051303.tif 000005
【図５】
0006051303.tif 000006
【図６】
0006051303.tif 000007
【図７】
0006051303.tif 000008
【図８】
0006051303.tif 000009
【図９】
0006051303.tif 000010