(57)【要約】  本願は、１つ以上の処理コアを有するサーバシステムの処理能力を管理する方法に関し、１つ以上の処理コアは複数の処理スライスをさらに含む。サーバシステムは、オンラインゲーミングセッションの開始を求める要求を受信すると、処理コアの各処理スライスを、そこで実行されるオンラインゲーミングセッションのサブセットに割り当てる。第１の処理スライスは、第１のゲーミングセッションおよび第２のゲーミングセッションを含むオンラインゲーミングセッションの第１のサブセットに割り当てられる。第１の処理スライスにおいて、タイムシェアリング処理スケジュールがオンラインゲーミングセッションの第１のサブセットについて決定される。タイムシェアリング処理スケジュールに従い、第１および第２のゲーミングセッションは、第１の処理スライスのデューティサイクルを共有し、第１および第２のゲーミングセッションのリアルタイムデータ処理の必要性に従い、動的にかつ並列に実行される。
2021516071.tif 000002
【特許請求の範囲】
【請求項１】
サーバシステムの処理能力を管理する方法であって、
前記サーバシステムは、１つ以上の処理コアと、前記処理コアが実行するプログラムを格納するメモリとを含み、前記１つ以上の処理コアは複数の処理スライスを含み、前記方法は、前記サーバシステムにおいて、
複数のオンラインゲーミングセッションを開始することを求める要求を受信するステップを含み、前記オンラインゲーミングセッションの各々は、１つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応し、
前記１つ以上の処理コアの前記複数の処理スライスの各々を、実行される前記複数のオンラインゲーミングセッションのサブセットに割り当てるステップを含み、前記割り当てるステップは、第１の処理スライスを、第１のゲーミングセッションおよび第２のゲーミングセッションを含む前記オンラインゲーミングセッションの第１のサブセットに割り当てるステップを含み、前記方法はさらに、
前記第１の処理スライスにおいて、前記オンラインゲーミングセッションの前記第１のサブセットのためのタイムシェアリング処理スケジュールを、ゲーミングセッションの前記第１のサブセットの各々が前記第１の処理スライスのデューティサイクルに割り当てられるように、決定するステップと、
前記タイムシェアリング処理スケジュールに従い、前記第１の処理スライスの第１のデューティサイクルを、前記第１および第２のゲーミングセッションのリアルタイムデータ処理の必要性に従って前記第１および第２のゲーミングセッションを並列に実行することにより、共有するステップとを含む、方法。
【請求項２】
前記複数の処理スライスの各々は、前記複数のオンラインゲーミングセッションの目標フレームレートに対応する期間存続する、請求項１に記載の方法。
【請求項３】
前記第１のデューティサイクルは、前記第１の処理スライスの前記期間の５０％である、請求項２に記載の方法。
【請求項４】
前記第１および第２のゲーミングセッションを並列に実行するステップはさらに、前記１つ以上の処理コアのそれぞれのサブセットを、それぞれのリアルタイムデータ処理の必要性に従って前記第１および第２のゲーミングセッションの各々に割り当てるステップを含む、先行する請求項のいずれか１項に記載の方法。
【請求項５】
前記オンラインゲーミングセッションの前記第１のサブセットは、第３のゲーミングセッションおよび第４のゲーミングセッションをさらに含み、前記方法はさらに、
前記タイムシェアリング処理スケジュールに従い、前記第１の処理スライスの第２のデューティサイクルを、前記第３および第４のゲーミングセッションのリアルタイムデータ処理の必要性に従って前記第３および第４のゲーミングセッションを並列に実行することにより、動的に共有するステップを含み、前記第２のデューティサイクルは前記第１のデューティサイクルと異なる、先行する請求項のいずれか１項に記載の方法。
【請求項６】
前記オンラインゲーミングセッションの前記第１のサブセットは第３のゲーミングセッションをさらに含み、前記方法はさらに、
前記第１の処理スライスの前記第１のデューティサイクルに続く第２のデューティサイクルにおいて前記第３のゲーミングセッションを実行するステップを含み、前記第３のゲーミングセッションは、前記第２のデューティサイクルを他のいずれのゲーミングセッションとも共有しない、請求項１〜４のいずれか１項に記載の方法。
【請求項７】
前記オンラインゲーミングセッションの前記第１のサブセットは第３のゲーミングセッションをさらに含み、前記方法はさらに、
前記タイムシェアリング処理スケジュールに従い、前記第１の処理スライスの前記第１のデューティサイクルを、前記第３のゲーミングセッションのリアルタイムデータ処理の必要性に従って前記第３のゲーミングセッションを前記第１および第２のゲーミングセッションと並列に実行することにより、動的に共有するステップを含む、請求項１〜４のいずれか１項に記載の方法。
【請求項８】
前記第１および第２のゲーミングセッションの各々は、オープングラフィックスライブラリＯｐｅｎＧＬに基づいて実行され、グラフィックスパイプラインプロセスを含み、前記第１および第２のゲーミングセッションを並列に実行することはさらに、
前記第１の処理スライスの前記第１のデューティサイクル中に、
前記第１のオンラインゲーミングセッションが第１のパイプラインステージでスタンバイしている間に前記第２のオンラインゲーミングセッションの第２のパイプラインステージを実現するステップと、
前記第２のオンラインゲーミングセッションが第３のパイプラインステージでスタンバイしている間に前記第１のオンラインゲーミングセッションの第４のパイプラインステージを実現するステップとを含む、先行する請求項のいずれか１項に記載の方法。
【請求項９】
前記１つ以上の処理コアの前記複数の処理スライスの各々を、実行される前記複数のオンラインゲーミングセッションのサブセットに割り当てるステップはさらに、
各処理スライスごとに、ゲーミングレイテンシ基準を特定し、前記それぞれの処理スライスに対応するオンラインゲーミングセッションのサブセットの各々に、前記ゲーミングレイテンシ基準を満たす応答レイテンシを与えるステップを含む、先行する請求項のいずれか１項に記載の方法。
【請求項１０】
前記第１の処理スライスにおいて、ゲーミングセッションの前記第１のサブセットの各々についての前記第１の処理スライスの前記デューティサイクルは、前記ゲーミングレイテンシ基準を満たすそれぞれの処理時間に対応する、請求項９に記載の方法。
【請求項１１】
前記第１および第２のゲーミングセッションは、相互に関連し、それぞれのリアルタイムユーザインタラクティブアプリケーションの実行に使用されるアプリケーションデータの一部を共有するように構成されている、先行する請求項のいずれか１項に記載の方法。
【請求項１２】
前記第１および第２のゲーミングセッションは、第１のリアルタイムユーザインタラクティブゲーミングアプリケーションのシーンにおける２人のプレイヤーに対応する、請求項１１に記載の方法。
【請求項１３】
前記第１および第２のゲーミングセッションは、互いに独立しており、２つの異なるリアルタイムユーザインタラクティブアプリケーションを実行するように構成されている、請求項１〜１０のいずれか１項に記載の方法。
【請求項１４】
前記１つ以上の処理コアは、第１の制御レジスタおよび第２の制御レジスタを有する２つ以上の制御レジスタを含み、前記第１および第２の制御レジスタは、前記第１および第２のゲーミングセッションが前記第１の処理スライスの前記第１のデューティサイクルを動的に共有するときに前記第１および第２のゲーミングセッションを並列に制御するように構成されている、先行する請求項のいずれか１項に記載の方法。
【請求項１５】
サーバシステムであって、
複数の処理スライスを含む１つ以上の処理コアと、
前記１つ以上の処理コアが実行する１つ以上のプログラムを格納するメモリとを備え、前記１つ以上のプログラムは、請求項１〜１４のいずれか１項に記載の方法を実行するための命令を含む、サーバシステム。
【請求項１６】
サーバシステムの１つ以上の処理コアが実行する１つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体であって、前記１つ以上の処理コアは複数の処理スライスを含み、前記１つ以上のプログラムは、請求項１〜１４のいずれか１項に記載の方法を実行するための命令を含む、非一時的なコンピュータ読取可能媒体。
【請求項１７】
メディアストリームを並行して提供する方法であって、
エンコーダと、前記エンコーダが実行するプログラムを格納するメモリとを含むサーバにおいて、
前記エンコーダが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成するステップを含み、前記低レイテンシストリームはオンラインインタラクティブセッションに対応し、前記通常レイテンシストリームよりも速い応答レートおよび低い送信レイテンシを有し、前記生成するステップは、
前記低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを識別するステップと、
前記低レイテンシストリームの画像フレームの前記第１のシーケンスにおける各画像フレームごとに、
前記予め定められたフレームレートに対応する第１の時間間隔を求めるステップと、
前記第１の時間間隔中に前記画像フレームを符号化するステップと、
前記画像フレームを符号化した後で、前記第１の時間間隔において残された残余時間を求めるステップと、
前記第１の時間間隔において残された前記残余時間が前記通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、前記第１の時間間隔の前記残余時間中に前記通常レイテンシストリームの画像フレームの第２のシーケンスのサブセットを生成するステップと、
前記第１の時間間隔に残された前記残余時間が前記通常レイテンシ要件を満たさないという判断に従い、前記第１の時間間隔の前記残余時間中、画像フレームの前記第２のシーケンスのいずれの画像フレームの生成も中止するステップとを含む、方法。
【請求項１８】
ゲームプレイヤーの第１のクライアントデバイスに、前記オンラインインタラクティブセッション中、前記ゲームプレイヤーによる複数のインタラクティブアクションを可能にするために、前記低レイテンシストリームを送信するステップと、
１つ以上の第２のクライアントデバイスに、前記オンラインインタラクティブセッションをリアルタイムで１人以上の観客がレビューすることができるようにするために、前記通常レイテンシストリームを送信するステップとをさらに含む、請求項１７に記載の方法。
【請求項１９】
前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に取り込まれた前記ゲームプレイヤーのプレイヤーデモビデオストリームを取得するステップと、
前記プレイヤーデモビデオストリームを、前記プレイヤーデモビデオストリームが前記オンラインインタラクティブセッションの前記通常レイテンシストリームと並行して前記１人以上の観客に対してプレイされるように、前記通常レイテンシストリームに含めるステップとをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記通常レイテンシストリームが前記１つ以上の第２のクライアントデバイス上に表示されている間に前記プレイヤーデモビデオストリームを埋め込まれたウィンドウとして表示できるようにするステップをさらに含む、請求項１９に記載の方法。
【請求項２１】
前記プレイヤーデモビデオストリームは、前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に前記プレイヤーが作成したリアルタイムコメンタリーを含む、請求項１９または２０に記載の方法。
【請求項２２】
前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に記録された前記ゲームプレイヤーのプレイヤーデモ音声ストリームを取得するステップと、
前記プレイヤーデモ音声ストリームを、前記プレイヤーデモ音声ストリームが前記オンラインインタラクティブセッションの前記通常レイテンシストリームと並行して前記１人以上の観客に対してプレイされるように、前記通常レイテンシストリームに含めるステップとをさらに含む、請求項１８〜２１のいずれか１項に記載の方法。
【請求項２３】
前記低レイテンシストリームおよび前記通常レイテンシストリームは互いに独立している、請求項１７〜２２のいずれか１項に記載の方法。
【請求項２４】
前記低レイテンシストリームの画像フレームの前記第１のシーケンスを符号化するための前記予め定められたフレームレートは、第１のしきい値レイテンシに基づいて決定される、請求項１７〜２３のいずれか１項に記載の方法。
【請求項２５】
前記通常レイテンシストリームは、第２のしきい値レイテンシ未満の第２のレイテンシ時間を有し、前記第２のしきい値レイテンシは前記第１のしきい値レイテンシよりも大きい、請求項２４に記載の方法。
【請求項２６】
前記低レイテンシストリームおよび前記通常レイテンシストリームの双方は、前記オンラインインタラクティブセッションに対応し、
前記オンラインインタラクティブセッションに対応付けられたゲームプレイヤーによるプレイヤーアクションに応答して、前記低レイテンシストリームおよび前記通常レイテンシストリームは、それぞれ、前記プレイヤーアクションの結果をレンダリングするための第１の応答レートおよび第２の応答レートを有し、
前記第１の応答レートは前記第２の応答レートよりも速い、請求項１７〜２５のいずれか１項に記載の方法。
【請求項２７】
前記低レイテンシストリームは第１の画像フレームを含み、前記第１の画像フレームに対応する前記通常レイテンシストリームの画像フレームの前記第２のシーケンスのサブセットは、前記通常レイテンシストリームにおける画像フレームの一部を含み、前記方法は、
前記第１の画像フレームを符号化した後に、前記第１の時間間隔に残された第１の残余時間を求めるステップと、
前記第１の時間間隔に残された前記第１の残余時間は、前記通常レイテンシストリームに対応付けられた前記通常レイテンシ要件を満たすという判断に従い、前記第１の時間間隔の前記残余時間中に、前記通常レイテンシストリームにおける前記画像フレームの一部を生成するステップとを含む、請求項１７〜２６のいずれか１項に記載の方法。
【請求項２８】
前記低レイテンシストリームは第２の画像フレームを含み、前記第２の画像フレームに対応する前記通常レイテンシストリームの画像フレームの前記第２のシーケンスのサブセットは、前記通常レイテンシストリームにおける２つ以上の画像フレームを含み、前記方法は、
前記第２の画像フレームを符号化した後に、前記第１の時間間隔に残された第１の残余時間を求めるステップと、
前記第１の時間間隔に残された前記第１の残余時間が前記通常レイテンシストリームに対応付けられた前記通常レイテンシ要件を満たすという判断に従い、前記第１の時間間隔の前記残余時間中に前記通常レイテンシストリームにおける前記２つ以上の画像フレームを生成するステップとを含む、請求項１７〜２７のいずれか１項に記載の方法。
【請求項２９】
前記第１の時間間隔の前記残余時間中に前記通常レイテンシストリームの画像フレームの前記第２のシーケンスの前記サブセットを生成した後に、前記第１の時間間隔に残された第２の残余時間を求めるステップと、
前記第１の時間間隔に残された前記第２の残余時間が第３のストリームに対応付けられた第３の要件を満たすという判断に従い、前記第１の時間間隔の前記第２の残余時間中に前記第３のストリームの画像フレームのサブセットを生成するステップとをさらに含む、請求項１７〜２８のいずれか１項に記載の方法。
【請求項３０】
サーバシステムであって、
エンコーダと、
前記エンコーダが実行する１つ以上のプログラムを格納するメモリとを備え、前記１つ以上のプログラムは、請求項１７〜２９のいずれか１項に記載の方法を実行するための命令を含む、サーバシステム。
【請求項３１】
サーバシステムのエンコーダが実行する１つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体であって、前記１つ以上のプログラムは、請求項１７〜２９のいずれか１項に記載の方法を実行するための命令を含む、非一時的なコンピュータ読取可能媒体。
【請求項３２】
メディアストリームを符号化する方法であって、
ＧＰＵと、複数のエンコーダコアと、データバッファと、前記ＧＰＵおよび前記エンコーダコアが実行するプログラムを格納するメモリとを備える、サーバシステムにおいて、
前記エンコーダコアが、オンラインゲーミングセッションに対応付けられ前記データバッファに格納された画像フレームのフレームデータを識別するステップと、
レンダリング仕様に従い定められた前記フレームデータの複数の画像タイルを同時にかつ並列に処理するために前記複数のエンコーダコアを割り当てるステップとを含み、前記複数の画像タイルは第１のエンコーダコアに割り当てられた第１の画像タイルを含み、前記第１の画像タイルはブロックの第１のシーケンスを含み、前記割り当てるステップは、
前記第１のエンコーダコアにおいて、
前記データバッファから、前記第１のエンコーダコアに割り当てられた前記第１の画像タイルのブロックの前記第１のシーケンスのうちの第１のブロックを取得するステップと、
前記第１のブロックの境界情報を取得するステップと、
ブロックの前記１のシーケンスにおいて前記第１のブロックに続く第２のブロックを前記データバッファから取得する間にまたはその前に、前記境界情報に基づいてブロックの前記第１のシーケンスのうちの前記第１のブロックを符号化するステップと、
前記符号化した第１のブロックを、前記オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信するステップとを含む、方法。
【請求項３３】
前記複数の画像タイルの各々は、前記画像フレームのある数のマクロブロック行を含み、各画像タイルの前記マクロブロック行の数は、前記画像フレームのマクロブロック行の数に等しい、請求項３２に記載の方法。
【請求項３４】
前記第１のエンコーダコアは、前記第１の画像タイルの符号化の後に、前記第１の画像タイルに隣接しない第３の画像タイルを処理するように割り当てられる、請求項３２または３３に記載の方法。
【請求項３５】
ブロックの前記第１のシーケンスの各々は、ある数のマクロブロックを含む、請求項３２〜３４のいずれか１項に記載の方法。
【請求項３６】
前記フレームデータの前記複数の画像タイルは、ある数の画像タイルを含み、前記画像タイルの数は、前記複数のエンコーダコアにおけるエンコーダコアの数に従って決定される、請求項３２〜３５のいずれか１項に記載の方法。
【請求項３７】
前記第１のブロックは、前記第１のエンコーダコアが、前記第１の画像タイルのブロックの前記第１のシーケンスにおいて前記第１のブロックに続くその他任意の符号化ブロックの取得を完了したか否かに関係なく、符号化される、請求項３２〜３６のいずれか１項に記載の方法。
【請求項３８】
前記第１のブロックの前記境界情報は、前記第１の画像タイルにおけるブロックの第１のサブセットから提供される、請求項３２〜３７のいずれか１項に記載の方法。
【請求項３９】
前記第１の画像タイルは、ブロックの前記第１のサブセットといずれのブロックも共有しないブロックの第２のサブセットを含み、前記第１のブロックは、前記第１のエンコーダコアがブロックの前記第２のサブセットのうちのいずれかを取得または符号化したか否かに関係なく、符号化される、請求項３８に記載の方法。
【請求項４０】
前記第１のブロックの前記境界情報は第２の画像タイルの第３のブロックによって提供されないと判断するステップをさらに含み、前記第１のブロックは、前記第２の画像タイルを処理するように割り当てられたそれぞれのエンコーダコアが前記第３のブロックを受信または符号化したか否かに関係なく、符号化される、請求項３２〜３９のいずれか１項に記載の方法。
【請求項４１】
予め定められたラスター順序に従う前記データバッファのラスタースキャンにより前記画像フレームの前記フレームデータを抽出するステップをさらに含み、前記フレームデータは、前記第１および第２のブロックに対応する画素のデータを含み、前記第１および第２のブロックは、前記第１および第２のブロックに対応する前記画素のデータが前記予め定められたラスター順序に従って抽出される間に取得される、請求項３２〜４０のいずれか１項に記載の方法。
【請求項４２】
前記画像フレームの前記フレームデータは、前記予め定められたラスター順序に従い前記画像フレームから行ごとに抽出され、前記画像フレームの各行は、２つ以上の画像タイルからのデータを含む、請求項４１に記載の方法。
【請求項４３】
前記画像フレームの前記フレームデータを抽出するステップは、それぞれのラスタースキャンにより、各画像タイルからデータを抽出するステップをさらに含み、前記複数の画像タイルが逐次的にスキャンされてそれぞれのデータが抽出される、請求項４１に記載の方法。
【請求項４４】
前記第１の画像タイルは第２の画像タイルに隣接し、前記画像フレームの前記フレームデータを抽出するステップはさらに、前記予め定められたラスター順序に従い、
前記ラスタースキャンによって前記第１の画像タイルの第１の数の行を抽出するステップと、
前記第１の画像タイルの前記第１の数の行を抽出した後に、前記ラスタースキャンによって前記第２の画像タイルの前記第１の数の行を抽出するステップとを含み、前記第１および第２の画像タイルの各々の前記第１の数の行の後に、第２の数の行が続き、
前記第２の画像タイルの前記第１の数の行を抽出した後に、前記ラスタースキャンによって前記第１の画像タイルの前記第２の数の行を抽出するステップと、
前記第１の画像タイルの前記第２の数の行を抽出した後に、前記ラスタースキャンによって前記第２の画像タイルの前記第２の数の行を抽出するステップとを含む、請求項３２〜４３のいずれか１項に記載の方法。
【請求項４５】
前記予め定められたラスター順序は、内部ラスター順序を含み、前記第１および第２の画像タイルの各々の内部での前記ラスタースキャンは、前記内部ラスター順序に従う、請求項４４に記載の方法。
【請求項４６】
前記第２のブロックは前記第１のブロックに直に隣接している、請求項３２〜４５のいずれか１項に記載の方法。
【請求項４７】
前記第２のブロックは前記第１のブロックに直に隣接していない、請求項３２〜４５のいずれか１項に記載の方法。
【請求項４８】
前記データバッファから前記第１のブロックを取得する間に前記第２のブロックを前記データバッファにロードするステップをさらに含む、請求項３２〜４７のいずれか１項に記載の方法。
【請求項４９】
前記第１のブロックを符号化する間に第３のブロックを前記データバッファにロードするステップをさらに含み、前記第３のブロックは、前記第１および第２のブロックの符号化に続いて符号化される、請求項３２〜４８のいずれか１項に記載の方法。
【請求項５０】
サーバシステムであって、ＧＰＵと、複数のエンコーダコアと、データバッファと、前記ＧＰＵおよび前記エンコーダコアが実行する１つ以上のプログラムを格納するメモリとを備え、前記１つ以上のプログラムは、請求項３２〜４９のいずれか１項に記載の方法を実行するための命令を含む、サーバシステム。
【請求項５１】
サーバシステムが実行する１つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体であって、前記サーバシステムはさらに、ＧＰＵと複数のエンコーダコアとデータバッファとを含み、前記１つ以上のプログラムは、請求項３２〜４９のいずれか１項に記載の方法を実行するための命令を含む、非一時的なコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、概して、１つ以上のリアルタイムユーザインタラクティブアプリケーションに対応するオンラインインタラクティブセッションをサポートするためにサーバシステムを管理するための方法およびシステムを含むがこれらに限定されないコンピュータ技術に関する。
【背景技術】
【０００２】
背景
インターネットに接続された電子デバイスは、クラウドベースのさまざまなメディアおよびエンターテイメントアプリケーションをサポートすることができる。これらのアプリケーションは、サーバがユーザデバイスにコンテンツをストリーミングするメディアストリーミングアプリケーション、ユーザが、ユーザデバイスから、サーバ上で実行されるゲームとやり取りするゲーミングアプリケーション、ならびに、多数のユーザが、並行して、インターネットに接続された彼らのデバイスを介して相互にかつクラウドにホストされているコンテンツおよびアプリケーションとやり取りすることを可能にする、さまざまなソーシャルメディアおよび通信アプリケーションを含む。クラウドベースのアプリケーションのうちでもクラウドゲーミングは固有のいくつかの課題を提起するが、その理由は、ゲーミングタイトルのハードウェア要求が多岐にわたること、クラウドベースのゲームを（たとえば１人のプレイヤー、１つの場所の複数のプレイヤー、または複数の場所の複数のプレイヤーが）プレイすることが可能なトポロジが多様であること、ゲーミングセッションを実行するゲーミングサーバへのプレイヤー入力およびゲーミングサーバからプレイヤーのデバイス／ディスプレイへのゲーミングセッション出力を確実にレイテンシなしで送信する必要があること、ゲームプレイのスピードおよび反応性に関するプレイヤーの大きく異なる期待、ならびに、状況によってはほぼリアルタイムでゲーミングコンテンツを観客に提供したいという要望、にある。クラウドベースのゲーミングのその他の課題は、プレイヤーがいる場所（たとえばサーバに近い、またはサーバから遠い）にかかわらず、ゲーミングサービスへの接続方法（たとえば高速または低速のインターネット接続経由）にかかわらず、かつ、プレイヤーがゲームをプレイするために使用するデバイスのタイプ（たとえば汎用パーソナルデバイスまたは専用ゲームコントローラ）およびゲームプレイ出力を閲覧するために使用するデバイスのタイプ（たとえばパーソナルデバイスまたはメディアストリーミングデバイスに接続されたメディアデバイス）にかかわらず、一貫したゲームプレイ体験をプレイヤーに提供することに、関連する。
【０００３】
具体的には、複数のゲーミングタイトルの複数のゲーミングセッションをサポートするクラウドゲーミングシステムが必要とされており、このシステムにおいて、ゲームは、許容可能なレイテンシおよび応答性で並行して実行することができ、広範にわたる入力および出力デバイスおよびネットワーク接続を用いて同一または異なる場所から同一のゲームタイトルをプレイしている複数のプレイヤーを含む。加えて、ゲーミングセッションにおいてプレイヤー入力（たとえばエンドユースゲーミングデバイス／コントローラに入力されたゲーミング入力）を受信すると、直ちにユーザ入力を処理し、すべてのゲームプレイヤーに対して同時にかつ許容可能なレイテンシでプレイヤー入力アクションの結果を反映する高精細画像を出力する、クラウドゲーミングシステムが必要とされている。また、状況によっては、観客がゲームプレイをそれぞれのディスプレイデバイス上でリアルタイムにフォローできるようにするゲームプレイアクティビティの高精細ビデオストリームを提供する、ゲーミングシステムが必要とされている。また、場合によっては観客者がそれぞれの表示装置上でゲームプレイをリアルタイムでフォローできるようにするゲームプレイアクティビティの高精細ビデオストリームを提供する、ゲーミングシステムが必要とされている。よって、同じ場所に集まったユーザによる自発的なゲームプレイから、異なる場所の複数のユーザによるオンラインインタラクティブゲームプレイまで、広範囲にわたるゲーミング設定において、ゲーミング体験を拡張する、効率的なゲーム処理および出力機構を有するクラウドゲーミングシステムを提供することが、有益であろう。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本明細書に記載の実装形態は、ゲーミングコンテンツの効率的でポータブルで低レイテンシのホスティングを可能にする、ゲーミングアプリケーションプログラミングインターフェイス（ＡＰＩ）およびクラウドプラットフォームを提供することに関する。いくつかの実装形態は、クラウドゲーミングハードウェアリソースを動的に割り当て、個々のエンドユーザが利用できるネットワーク帯域幅をモニタリングおよび利用することにより、最適なクラウドゲーミング体験を提供する。いくつかの実装形態は、高精細メディア出力およびエンドユーザストリームとともに高性能のリアルタイムゲーミングセッションをサポートする層を含む、複数のパフォーマンス層を提供する。いくつかの実装形態は、さまざまなサブスクリプションモデルをサポートする、および／または、１つ以上の並行リアルタイムゲームプレイを提供するように、および／または１つ以上の実際のゲーミングストリーム（たとえばモバイルアプリケーションまたはブラウザベースのプログラムいずれかを介してオンライン／クラウドゲーミングセッションに参加しているユーザのクライアントデバイスに対するビデオストリーム出力）にレイテンシがほぼまたは全くない状態で対応するレビューメディアストリームを提供するように、構成されている。いくつかの実装形態において、並行ゲームプレイおよび／またはレビュービデオは、ＹｏｕＴｕｂｅ（登録商標）等のメディアストリーミングサイトを介し、レイテンシがほぼまたは全くない状態で１人以上のユーザに提供される。
【０００５】
本願のある局面において、処理能力を管理する方法がサーバシステムにおいて実現され、サーバシステムは、１つ以上の処理コア（たとえばグラフィック処理ユニット「ＧＰＵ」コア）と、処理コアが実行するプログラムを格納するメモリとを含む。いくつかの実装形態において、１つ以上の処理コアは、その各々が１つ以上のオンラインゲーミングセッションを実行するように構成されている複数の処理スライスを含む（たとえば提供する）。この方法は、複数のオンラインゲーミングセッションの開始を求める要求を受信することを含み、これらのセッションの各々は、１つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。この方法はさらに、上記１つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てることを含み（たとえば、セッションは、対応する１つ以上の処理コア上で、それぞれの処理スライスによって実行される）、これは、第１のゲーミングセッションと第２のゲーミングセッションとを含むオンラインゲーミングセッションの第１のサブセットに第１の処理スライスを割り当てることを含む。この方法はさらに、第１の処理スライスで、オンラインゲーミングセッションの第１のサブセットについて、ゲーミングセッションの第１のサブセットの各々が第１の処理スライスのデューティサイクルに割り当てられるように、タイムシェアリング処理スケジュールを決定することを含む。この方法はさらに、タイムシェアリング処理スケジュールに従って、第１および第２のゲーミングセッションを、第１および第２のゲーミングセッションのリアルタイムデータ処理の必要性に従い、並列に実行することにより、第１の処理スライスの第１のデューティサイクルを共有することを含む。任意で、第１の処理スライスは第１のデューティサイクルのみを含み他のデューティサイクルを含まない。これに代えて、第１の処理スライスは、第１のデューティサイクルの後に実行される、少なくとも第２のデューティサイクルを含む。
【０００６】
別の局面において、対応するサーバシステムが提供され、サーバシステムは、複数の処理スライスを含む１つ以上の処理コアと、１つ以上の処理コアが実行する１つ以上のプログラムを格納するメモリとを備え、１つ以上のプログラムは命令を含み、命令は、複数のオンラインゲーミングセッションを開始することを求める要求を受信するための命令を含み、セッションの各々は、１つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応し、命令はさらに、上記１つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てるための命令を含み、これは、第１のゲーミングセッションと第２のゲーミングセッションとを含むオンラインゲーミングセッションの第１のサブセットに第１の処理スライスを割り当てることを含み、命令はさらに、第１の処理スライスで、オンラインゲーミングセッションの第１のサブセットについて、ゲーミングセッションの第１のサブセットの各々が第１の処理スライスのデューティサイクルに割り当てられるように、タイムシェアリング処理スケジュールを決定するための命令を含み、命令はさらに、タイムシェアリング処理スケジュールに従って、第１および第２のゲーミングセッションを、第１および第２のゲーミングセッションのリアルタイムデータ処理の必要性に従い、並列に実行することにより、第１の処理スライスの第１のデューティサイクルを共有するための命令を含む。
【０００７】
別の局面において、サーバシステムの１つ以上の処理コアが実行する１つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体が提供され、１つ以上の処理コアは複数の処理スライスを含み、１つ以上のプログラムは命令を含み、命令は、複数のオンラインゲーミングセッションを開始することを求める要求を受信するための命令を含み、セッションの各々は、１つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応し、命令はさらに、上記１つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てるための命令を含み、これは、第１のゲーミングセッションと第２のゲーミングセッションとを含むオンラインゲーミングセッションの第１のサブセットに第１の処理スライスを割り当てることを含み、命令はさらに、第１の処理スライスで、オンラインゲーミングセッションの第１のサブセットについて、ゲーミングセッションの第１のサブセットの各々が第１の処理スライスのデューティサイクルに割り当てられるように、タイムシェアリング処理スケジュールを決定するための命令を含み、命令はさらに、タイムシェアリング処理スケジュールに従って、第１および第２のゲーミングセッションを、第１および第２のゲーミングセッションをのリアルタイムデータ処理の必要性に従い、並列に実行することにより、第１の処理スライスの第１のデューティサイクルを共有するための命令を含む。
【０００８】
別の局面において、メディアストリームを並行して提供する方法がサーバシステムにおいて実現され、サーバシステムは、複数のエンコーダコアと、エンコーダコアが実行するプログラムを格納するメモリとを含む。この方法は、エンコーダコアが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成することを含む。低レイテンシストリームはオンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも速い応答レートと低い送信レイテンシとを有する。この方法はさらに、低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを特定することを含む。この方法はさらに、低レイテンシストリームの画像フレームの第１のシーケンスの画像フレームごとに、予め定められたフレームレートに対応する第１の時間間隔を求めることと、第１の時間間隔中に画像フレームを符号化することと、画像フレームを符号化した後に第１の時間間隔において残された残余時間を求めることとを含む。この方法はさらに、第１の時間間隔において残された残余時間が通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、第１の時間間隔の残余時間中に通常レイテンシストリームの画像フレームの第２のシーケンスのサブセットを生成することを含む。この方法はさらに、第１の時間間隔において残された残余時間が通常レイテンシ要件を満たさないという判断に従い、第１の時間間隔の残余時間中に画像フレームの第２のシーケンスの任意の画像フレームの生成を中止することを含む。
【０００９】
別の局面において、エンコーダと、エンコーダが実行する１つ以上のプログラムを格納するメモリとを含むサーバシステムが提供され、１つ以上のプログラムは命令を含み、命令は、エンコーダが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成するための命令を含み、低レイテンシストリームはオンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも速い応答レートと低い送信レイテンシとを有し、命令はさらに、低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを特定するための命令を含み、低レイテンシストリームの画像フレームの第１のシーケンスの画像フレームごとに、予め定められたフレームレートに対応する第１の時間間隔を求めるための命令を含み、第１の時間間隔中に画像フレームを符号化するための命令を含み、画像フレームを符号化した後に第１の時間間隔において残された残余時間を求めるための命令を含み、第１の時間間隔において残された残余時間が通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、第１の時間間隔の残余時間中に通常レイテンシストリームの画像フレームの第２のシーケンスのサブセットを生成するための命令を含み、第１の時間間隔において残された残余時間が通常レイテンシ要件を満たさないという判断に従い、第１の時間間隔の残余時間中に画像フレームの第２のシーケンスの任意の画像フレームの生成を中止するための命令を含む。
【００１０】
別の局面において、サーバシステムのエンコーダが実行する１つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体が提供され、１つ以上のプログラムは命令を含み、命令は、エンコーダが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成するための命令を含み、低レイテンシストリームはオンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも速い応答レートと低い送信レイテンシとを有し、命令はさらに、低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを特定するための命令を含み、低レイテンシストリームの画像フレームの第１のシーケンスの画像フレームごとに、予め定められたフレームレートに対応する第１の時間間隔を求めるための命令を含み、第１の時間間隔中に画像フレームを符号化するための命令を含み、画像フレームを符号化した後に第１の時間間隔において残された残余時間を求めるための命令を含み、第１の時間間隔において残された残余時間が通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、第１の時間間隔の残余時間中に通常レイテンシストリームの画像フレームの第２のシーケンスのサブセットを生成するための命令を含み、第１の時間間隔において残された残余時間が通常レイテンシ要件を満たさないという判断に従い、第１の時間間隔の残余時間中に画像フレームの第２のシーケンスの任意の画像フレームの生成を中止するための命令を含む。
【００１１】
さらに他の局面において、メディアストリームを符号化する方法がサーバシステムにおいて実現され、サーバシステムは、ＧＰＵと、複数のエンコーダコアと、データバッファと、ＧＰＵおよびエンコーダコアが実行するプログラムを格納するメモリとを含む。方法は、複数のエンコーダコアが、オンラインゲーミングセッションに対応付けられデータバッファに格納されている画像フレームのフレームデータを識別することと、レンダリング仕様に従い定められたフレームデータの複数の画像タイルを同時にかつ並列に処理するために複数のエンコーダコアを割り当てることとを含む。一例として、レンダリング仕様は、画像フレームが分割されること（任意で分割する方法）を規定してもよい。複数の画像タイルは第１のエンコーダコアに割り当てられた第１の画像タイルを含み、第１の画像タイルはブロックの第１のシーケンスを含む。方法はさらに、第１のエンコーダコアにおいて、データバッファから、第１のエンコーダコアに割り当てられた第１の画像タイルのブロックの第１のシーケンスのうちの第１のブロックを取得することと、第１のブロックの境界情報を取得することとを含む。方法はさらに、データバッファから、ブロックの第１のシーケンスにおける第１のブロックに続く第２のブロックを取得する間にまたはその前に、境界情報に基づいてブロックの第１のシーケンスのうちの第１のブロックを符号化することを含む。方法はさらに、符号化した第１のブロックを、オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信することを含む。
【００１２】
別の局面において、サーバシステムが提供され、サーバシステムは、ＧＰＵと、複数のエンコーダコアと、データバッファと、ＧＰＵおよびエンコーダコアが実行する１つ以上のプログラムを格納するメモリとを含み、１つ以上のプログラムは命令を含み、命令は、エンコーダコアが、オンラインゲーミングセッションに対応付けられデータバッファに格納されている画像フレームのフレームデータを識別するための命令と、レンダリング仕様に従い定められたフレームデータの複数の画像タイルを同時にかつ並列に処理するために複数のエンコーダコアを割り当てるための命令とを含み、複数の画像タイルは第１のエンコーダコアに割り当てられた第１の画像タイルを含み、第１の画像タイルはブロックの第１のシーケンスを含み、命令はさらに、第１のエンコーダコアにおいて、データバッファから、第１のエンコーダコアに割り当てられた第１の画像タイルのブロックの第１のシーケンスのうちの第１のブロックを取得するための命令と、第１のブロックの境界情報を取得するための命令と、データバッファから、ブロックの第１のシーケンスにおける第１のブロックに続く第２のブロックを取得する間にまたはその前に、境界情報に基づいてブロックの第１のシーケンスのうちの第１のブロックを符号化するための命令と、符号化した第１のブロックを、オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信するための命令とを含む。
【００１３】
別の局面において、サーバシステムが実行する１つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体が提供され、サーバシステムはさらに、ＧＰＵと、複数のエンコーダコアと、データバッファとを含み、１つ以上のプログラムは命令を含み、命令は、エンコーダコアが、オンラインゲーミングセッションに対応付けられデータバッファに格納されている画像フレームのフレームデータを識別するための命令と、レンダリング仕様に従い定められたフレームデータの複数の画像タイルを同時にかつ並列に処理するために複数のエンコーダコアを割り当てるための命令とを含み、複数の画像タイルは第１のエンコーダコアに割り当てられた第１の画像タイルを含み、第１の画像タイルはブロックの第１のシーケンスを含み、命令はさらに、第１のエンコーダコアにおいて、データバッファから、第１のエンコーダコアに割り当てられた第１の画像タイルのブロックの第１のシーケンスのうちの第１のブロックを取得するための命令と、第１のブロックの境界情報を取得するための命令と、データバッファから、ブロックの第１のシーケンスにおける第１のブロックに続く第２のブロックを取得する間にまたはその前に、境界情報に基づいてブロックの第１のシーケンスのうちの第１のブロックを符号化するための命令と、符号化した第１のブロックを、オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信するための命令とを含む。
【００１４】
さらに他の局面において、オンラインインタラクティブゲーミングセッションをレンダリングする方法がサーバシステムにおいて実現され、サーバシステムは、複数の処理コアと、処理コアが実行するプログラムを格納するメモリとを含む。方法は、オンラインゲーミングセッションに対応付けられた第１のユーザからユーザコマンドを受信すること含む。方法はさらに、コマンドのタイプと、コマンドのタイプに対応付けられた予測される応答レイテンシと、第１のユーザがオンラインゲーミングセッションに参加するときに使用する第１のユーザのクライアントデバイスとサーバとの間のラウンドトリップ通信レイテンシと、サーバ上でのユーザコマンドの実行に対応付けられた処理レイテンシと、ラウンドトリップ通信レイテンシおよび処理レイテンシに基づく実際の送信レイテンシとを求めることを含む。方法はさらに、１つ以上の中間フレームとコマンドの最初の結果を反映する第１のフレームとを少なくとも生成することによりオンラインゲーミングセッションにおいてコマンドを実行することを含む。１つ以上の中間フレームは、予め定められたフレームレートで送信されるとき、実際の送信レイテンシに相当する送信時間を占有する。方法はさらに、予め定められたフレームレートで、第１のフレームが後に続く１つ以上の中間フレームを、予測された応答レイテンシに対応する時間において第１のユーザのクライアントデバイスで第１のフレームが受信されるように、送信することを含む。
【００１５】
さらに他の局面において、リソースを割り当てる方法がサーバシステムにおいて実現され、サーバシステムは、その各々がそれぞれのリソースプロファイルを有する複数の仮想マシンを含む。方法は、リアルタイムインタラクティブセッションを確立することを求める要求をコンピューティングデバイスから受信することを含み、要求は、コンピューティングデバイスとのネットワーク接続を通して受信される。方法はさらに、コンピューティングデバイスのデバイス能力を求めることと、ネットワーク接続の接続能力を求めることと、デバイス能力および接続能力に基づいてリアルタイムインタラクティブセッションの１つ以上の目標品質パラメータを求めることとを含む。方法はさらに、求めた１つ以上の目標品質パラメータに基づいて、複数の仮想マシンのうちの第１の仮想マシンをリアルタイムインタラクティブセッションに対応付けることと、リアルタイムインタラクティブセッションに対する第１の仮想マシンの対応付けに従いリアルタイムインタラクティブセッションを確立することとを含む。方法はさらに、第１の仮想マシンのリソースプロファイルに従い、リアルタイムインタラクティブセッションにおいて入力を処理し出力を生成するためのリソースを、リアルタイムインタラクティブセッションに与えることを含む。
【００１６】
本願のいくつかの局面に従うと、サーバシステムは、上記方法のうちのいずれかをサーバシステムに実行させるための命令を格納するメモリを含む。
【００１７】
さらに、本願のいくつかの局面に従うと、サーバシステムのメモリに格納された命令は、上記方法のうちのいずれかをサーバシステムに実行させるための命令を含む。
【００１８】
その他の実施形態および利点は、本明細書における説明および図面に照らすと当業者には明らかであろう。
【００１９】
記載されている各種実装形態の一層の理解のためには、以下の実装形態の説明を以下の図面とともに参照する必要があり、これらの図面を通して同様の参照番号は対応する部分を示す。
【図面の簡単な説明】
【００２０】
【図１Ａ】いくつかの実装形態に係る、一例としてのオンラインインタラクティブゲーミング環境１００である。
【図１Ｂ】いくつかの実装形態に係る、第三者コンテンツを管理する一例としてのゲーミングプラットフォーム１５０の図である。
【図１Ｃ】いくつかの実装形態に係る、図１Ｂに示されるゲーミングプラットフォーム１５０上でゲーミングセッションを実行する方法１８０の一例としてのフローチャートである。
【図２】いくつかの実装形態に係る、ゲーミング環境１００の一例としてのクライアントデバイス２００（たとえばクライアントデバイス１０２または１０４）を示すブロック図である。
【図３】いくつかの実装形態に係る、一例としてのメディアデバイスを示すブロック図である。
【図４】いくつかの実装形態に係る、一例としてのサーバを示すブロック図である。
【図５Ａ】いくつかの実装形態に係る、少なくともＧＰＵを含む一例としてのサーバシステムのブロック図である。
【図５Ｂ】いくつかの実装形態に係る、複数の処理スライスに分割されたＧＰＵコアのブロック図である。
【図５Ｃ】いくつかの実装形態に係る、その間に２つ以上のゲーミングセッションが処理スライスに割り当てられる、一例としての処理の図である。
【図５Ｄ】いくつかの実装形態に係る、その間に２つ以上のゲーミングセッションが処理スライスに割り当てられる、一例としての処理の図である。
【図５Ｅ】いくつかの実装形態に係る、その間に２つ以上のゲーミングセッションが処理スライスに割り当てられる、一例としての処理の図である。
【図６】いくつかの実装形態に係る、オープングラフィックスライブラリ（ＯｐｅｎＧＬ）に基づいてメディアコンテンツを生成する２つのゲーミングセッションが処理スライスを動的に共有するプロセスの一例の図である。
【図７】いくつかの実装形態に係る、サーバシステムの処理能力を管理する方法の一例を示すフロー図である。
【図８Ａ】いくつかの実装形態に係る、少なくともエンコーダを含むサーバシステムの一例のブロック図である。
【図８Ｂ】いくつかの実装形態に係る、時間間隔の時間図である。
【図８Ｃ】いくつかの実装形態に係る、ゲームシーンに関連して少なくとも２つの別々のクライアントデバイスに並行して表示される２つの異なるメディアストリームのうちの一方の画像の一例を示す図である。
【図８Ｄ】いくつかの実装形態に係る、ゲームシーンに関連して少なくとも２つの別々のクライアントデバイスに並行して表示される２つの異なるメディアストリームのうちの一方の画像の一例を示す図である。
【図９】いくつかの実装形態に係る、メディアストリームを並行して提供する方法の一例を示すフロー図である。
【図１０Ａ】いくつかの実装形態に係る、メディアストリームにおける画像フレームの複数の画像タイルを処理するために割り当てられたエンコーダコアのブロック図である。
【図１０Ｂ】いくつかの実装形態に係る、画像タイルのブロックを符号化するプロセスの一例の図である。
【図１１Ａ】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像フレームのフレームデータのレンダリング仕様に従って定められた画像の画像タイルの一例の図である。
【図１１Ｂ】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像フレームのフレームデータのレンダリング仕様に従って定められた画像の画像タイルの一例の図である。
【図１１Ｃ】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像フレームのフレームデータのレンダリング仕様に従って定められた画像の画像タイルの一例の図である。
【図１２Ａ】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像のラスタースキャンの一例の図である。
【図１２Ｂ】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像のラスタースキャンの一例の図である。
【図１２Ｃ】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像のラスタースキャンの一例の図である。
【図１３】いくつかの実装形態に係る、メディアストリームを符号化する方法の一例を示すフロー図である。
【発明を実施するための形態】
【００２１】
図面を通して同様の参照番号は対応する部分を示す。
実装形態の説明
本明細書に記載の実装形態は、第三者ゲーミングコンテンツを含むクラウドゲーミングコンテンツの効率的でポータブルで低レイテンシのホスティングを可能にする、クラウドプラットフォームおよびＡＰＩを提供することに関する。いくつかの実装形態は、クラウドゲーミングハードウェアリソース（たとえばＣＰＵ、ＧＰＵ、メモリ、入出力、およびビデオストリームエンコーダ）を動的に割り当て、個々のエンドユーザが利用できるネットワーク帯域幅をモニタリングおよび利用することにより、最適なオンラインゲーミング体験をゲームプレイヤーのコミュニティに対して並行して提供する。いくつかの実装形態は、エンドユーザに対する高精細メディアストリームとともに高性能のリアルタイムゲーミングセッションをサポートする層を含む、複数のパフォーマンス層を提供する。いくつかの実装形態は、さまざまなサブスクリプションモデルをサポートする、および／または、１つ以上の並行リアルタイムゲームプレイを提供するように、および／または１つ以上の実際のゲーミングストリーム（たとえばモバイルアプリケーションまたはブラウザベースのプログラムいずれかを介してオンライン／クラウドゲーミングセッションに参加しているユーザのクライアントデバイスに対するビデオストリーム出力）にレイテンシがほぼまたは全くない状態で対応するレビューメディアストリームを提供するように、構成されている。いくつかの実装形態において、リアルタイムゲームプレイおよび／またはレビューメディアストリームは、ＹｏｕＴｕｂｅ等のメディアストリーミングサイトを介し、レイテンシがほぼまたは全くない状態で１人以上のユーザに提供される。
【００２２】
クラウドゲーミング環境のいくつかの実装形態において、サーバシステムは、プレイヤー入力を処理し、一人以上のプレイヤーに対して、さらに任意でゲームの観客に対して表示する出力ストリームを生成するための、リアルタイムインタラクティブゲーミングセッションのハードウェアリソースを、提供する。リアルタイムインタラクティブゲーミングセッションを確立することを求める要求に応じて、サーバシステムは、要求しているクライアントデバイス（すなわちプレイヤーのコントローラデバイス）のデバイス能力（たとえばハードウェアおよび／またはソフトウェア能力）と、ネットワーク接続の接続能力（たとえば帯域幅、レイテンシおよび／またはエラー率）と、ゲーミングセッションの１つ以上の目標品質パラメータ（たとえば出力ビデオストリームの解像度、ゲーミング応答レイテンシなど）とを求め、それに応じて、その仮想マシンのうちの１つを、セッションを確立するためにリアルタイムインタラクティブセッションに対応付ける。
【００２３】
いくつかの実装形態において、リアルタイムオンラインインタラクティブゲーミング環境をホストするサーバシステムにおける１つ以上の処理コア（たとえばＧＰＵコアおよびエンコーダコア）に対し、（たとえばプレイヤーおよび／または観客に対する出力ビデオストリームを生成するための）ゲーミングデータの処理および符号化能力が管理される。たとえば、いくつかの実装形態において、１つ以上の処理コアは、複数の処理スライス（たとえば、各々が、ある期間、特に予め定められた期間、たとえば１６．６７ｍｓ間、処理コアで実行される）とともに動作する。サーバシステムは、複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てることができる。処理スライスのうちの１つについて、サーバシステムは、ゲーミングセッションの対応するサブセットが処理スライスのデューティサイクルを共有しそれぞれのリアルタイムデータ処理需要に従って並列に実行されるように、タイムシェアリング処理スケジュールを決定する。加えて、ある時間間隔内での画像符号化を促進するために、サーバシステムのエンコーダは、ＧＰＵが画像フレームのすべてのデータを利用可能にするまで待つ必要はない。むしろ、いくつかの実装形態では、画像フレームの一部を、この一部を符号化するのに必要な情報がＧＰＵから提供されると直ちに符号化し、これは、符号化される部分とは無関係の画像フレームの他の部分がＧＰＵによって利用可能にされるか否かとは無関係である。
【００２４】
加えて、サーバシステムは、オンラインゲーミングセッションをプレイするユーザから受けたユーザコマンドに応じて複数のフレームを動的に生成することができる。サーバシステムは、ユーザコマンドのタイプに従い、予想される応答レイテンシと、実際の通信および処理レイテンシと、実際の送信レイテンシとを求める。次に、ユーザコマンドが、コマンドの効果を反映するフレームのセットを生成することにより、オンラインゲーミングセッションにおいて実行される。フレームのセットは、予め定められたフレームレートで送信されるとき、実際の送信レイテンシに相当する送信時間を占有し、ユーザのクライアントデバイスにおいて、予想された応答レイテンシに相当する時間以内に受信することができる。
【００２５】
図１Ａは、いくつかの実装形態に係る、一例としてのオンラインインタラクティブゲーミング環境１００を示す。図１Ｂは、いくつかの実装形態に係る、第三者コンテンツを管理する一例としてのゲーミングプラットフォーム１５０を示し、図１Ｃは、いくつかの実装形態に係る、図１Ｂに示されるゲーミングプラットフォーム１５０上でゲーミングセッションを実行する方法１８０のフローチャートの一例である。オンラインインタラクティブゲーミング環境１００は、１つ以上のクライアントデバイス（たとえば、クライアントデバイス１０２および１０４）を含む。クライアントデバイス１０２の各々は、１つ以上のエンドユーザゲームアプリケーション（たとえば、ユーザがリモートサーバシステム上で実行されるクラウドゲーミングセッションとやり取りすることを可能にするゲームコントローラアプリケーション）を実行する。ゲームセッションは、サーバシステム１１４がホストするオンラインインタラクティブゲームをクライアントデバイス１０２のユーザがプレイすることを可能にするために、特定のゲームアプリケーション（ゲーミングタイトルと呼ばれることもある）上で実行することが可能である。いくつかの実装形態において、クライアントデバイス１０２（たとえば、ホストクライアント）は、１つ以上の他のクライアントデバイス１０２に、特定のゲームアプリケーションのゲームシーンに参加するよう招待するように構成される。これらのクライアントデバイス１０２のゲーミングセッションは、任意でそれぞれのユーザに対応する異なる視点で、同じゲームシーンを表示するように同期される。
【００２６】
逆に、サーバシステム１１４は、特定のゲームアプリケーションを含む１つ以上のゲームアプリケーションをプレイするようにクライアントデバイス１０２をサポートするためにオンラインインタラクティブゲームプラットフォームをホストする。具体的には、サーバシステム１１４は、クライアントデバイス１０２に対応付けられた複数のユーザアカウントを含み、１つ以上のゲームアプリケーションの各々と対応付けてクライアントデバイスのユーザを認証する。サーバシステム１１４は、シーンに関連する対応するゲーミングセッションに参加するクライアントデバイス１０２上のオンラインインタラクティブゲームのシーンをレンダリングし、リフレッシュする。いくつかの実装形態において、サーバシステム１１４は、クライアントデバイス１０２の能力および／またはサーバシステム１１４とクライアントデバイス１０２の各々との間の通信接続の品質を評価することができ、クライアントデバイス１０２に対応付けられたゲーミングセッションのための同期データストリームを適応的に生成する。これらの手段により、サーバシステム１１４は、２つ以上のクライアントデバイス１０２上でのオンラインインタラクティブゲームの同期ゲーミングセッションを同時にかつ実質的に低レイテンシで容易にするように構成される。
【００２７】
いくつかの実装形態において、サーバシステム１１４は、ゲームサーバ１２２およびメディアストリーミングサーバ１２４を含む。ゲームサーバ１２２は、第１のクライアントデバイス１０２Ａ上で実行されるオンラインインタラクティブゲームセッションのために並行して２つ以上のメディアストリームを提供するように構成される。２つ以上のメディアストリームは、１つ以上の通信ネットワーク１１２を介してそれぞれ第１のクライアントデバイス１０２Ａおよびレビューアクライアントデバイス１０４に与えられる低レイテンシストリームおよび通常レイテンシストリームを含む。任意で、通常レイテンシストリームは、指示目的のために提供される。第１のクライアントデバイス１０２が第１のクライアントデバイス１０２Ａ上でゲームセッションをプレイする間に、ゲームセッションは記録され、通常レイテンシストリームを介して１つ以上の観客にブロードキャストされる、すなわち、観客はレビューアクライアントデバイス１０４上でゲームセッションをレビューすることができる。低レイテンシストリームは、オンラインインタラクティブゲームセッションのゲームプレイに対応し、関連付けられたレビューセッションに対応する通常レイテンシストリームよりも速い応答レートおよび低い送信レイテンシを有する。たとえば、低レイテンシストリームは、６０フレーム／秒（ｆｐｓ）の予め定められたフレームレートを有し、１６．６７ｍｓの各時間間隔中に少なくとも１つのフレームを第１のクライアントデバイス１０２Ａに与え、通常レイテンシストリームは、３０ｆｐｓの予め定められたフレームレートを有し、３３．３３ｍｓの各時間間隔中に少なくとも１つのフレームをレビューアクライアントデバイス１０４に与える。いくつかの実装形態において、通常レイテンシストリームは、低レイテンシストリームの解像度より低い解像度を有する。
【００２８】
いくつかの実装形態において、クライアントデバイス１０２または１０４は、メディアコンテンツを表示するために一体化されたディスプレイスクリーンを有する。いくつかの実装形態において、クライアントデバイス１０２または１０４は、メディアデバイス１０６および出力デバイス１０８に結合される。具体的には、クライアントデバイス１０２または１０４は、ローカルネットワーク（たとえば、Ｗｉ−Ｆｉ（登録商標）ネットワーク）を介して、または１つ以上の通信ネットワーク１１２を介して直接、（たとえば、Ｂｌｕｅｔｏｏｔｈ（登録商標）または他の無線通信リンクを介し）メディアデバイス１０６に通信可能に結合されてもよい。いくつかの実装形態において、クライアントデバイス（１０２または１０４）およびメディアデバイス１０６は、互いにローカルである（たとえば、同じ部屋の中、同じ家の中など）。メディアデバイス１０６はさらに、ビジュアルおよび／またはオーディオコンテンツ（たとえば、テレビ、ディスプレイモニタ、サウンドシステム、スピーカなど）を出力することができる１つ以上の出力デバイス１０８に結合される。メディアデバイス１０６は、コンテンツを出力デバイス１０８に出力するように構成される。いくつかの実装形態において、メディアデバイス１０６は、キャスティングデバイス（たとえば、Ｇｏｏｇｌｅ（登録商標）  Ｉｎｃ．のＣＨＲＯＭＥＣＡＳＴ（登録商標））、または、そうでなければキャスティング機能を含むデバイスである。
【００２９】
各クライアントデバイス１０２または１０４は、中央サーバまたはクラウドコンピューティングシステム（たとえば、サーバシステム１１４）、および／またはネットワーク接続された他のデバイス（たとえば、別のクライアントデバイス１０２または１０４、メディアデバイス１０６、および出力デバイス１０８）と互いにデータ通信および情報共有が可能である。データ通信は、さまざまなカスタムもしくは標準ワイヤレスプロトコル（たとえば、ＩＥＥＥ８０２．１５．４、Ｗｉ−Ｆｉ、ＺｉｇＢｅｅ（登録商標）、６ＬｏＷＰＡＮ、Ｔｈｒｅａｄ、Ｚ−Ｗａｖｅ、Ｂｌｕｅｔｏｏｔｈ  Ｓｍａｒｔ（登録商標）、ＩＳＡ１００．ｌ１ａ、ＷｉｒｅｌｅｓｓＨＡＲＴ（登録商標）、ＭｉＷｉなど）および／またはさまざまなカスタムもしくは標準ワイヤードプロトコル（たとえば、イーサネット（登録商標）、ＨｏｍｅＰｌｕｇ（登録商標）など）のいずれか、または本明細書の出願日の時点でまだ開発されていない通信プロトコルを含む、任意の他の適切な通信プロトコルのいずれかを使用して実行することができる。いくつかの実施形態において、オンラインインタラクティブゲーミング環境１００は、従来のネットワークデバイス（たとえばルータ）を含み、それを介して、クライアントデバイス１０２および１０４のセットならびに対応するメディアデバイスおよび出力デバイス（もしあれば）がローカルエリアネットワーク上で互いに通信可能に結合され、ローカルエリアネットワークは通信ネットワーク１１２（たとえば、広域ネットワークおよびインターネット）の他の部分に通信可能に結合される。いくつかの実施形態において、クライアントデバイス１０２および１０４の各々は、任意で、１つ以上の無線通信ネットワーク（たとえば、ＺｉｇＢｅｅ、Ｚ−Ｗａｖｅ、Ｉｎｓｔｅｏｎ、Ｂｌｕｅｔｏｏｔｈ、Ｗｉ−Ｆｉ、および／または他の無線通信ネットワーク）を使用して、１つ以上の他のクライアントデバイス、それぞれのメディアデバイス１０６、またはそれぞれの出力デバイス１０８と通信する。
【００３０】
いくつかの実装形態において、クライアントデバイス１０２は、互いに離れている、すなわち、同じ部屋または構造内に配置されていない。ゲームは、各クライアントデバイス１０２において実行するためにゲームアプリケーション（たとえば、図２のゲームアプリケーション２２８）を起動することによって開始することができる。いくつかの実装形態において、各クライアントデバイス１０２ごとに、ゲームアプリケーションは、サーバシステム１１４と独立してオンラインゲーミングセッション１１６を確立する。２つ以上のクライアントデバイス１０２（たとえば１０２Ａおよび１０２Ｂ）のオンラインゲーミングセッション１１６は、互いに関連し（たとえば、それらはゲームアプリケーションの同じゲームドメイン内でプレイされるからである）、したがって、ゲームアプリケーションにおけるゲームシーンを共有する。関連するオンラインゲーミングセッション１１６は互いに同期され、各オンラインゲーミングセッション１１６は、任意で、それぞれのクライアントデバイス１０２に対応する固有のプレイヤーの視点で同じゲームシーンを示す。したがって、各クライアントデバイス１０２のユーザは、それぞれのクライアントデバイス上でゲームをプレイし、他のクライアントデバイス１０２上でオンラインゲーミングセッション１１６からの出力に影響を与えることができる。
【００３１】
代替的に、いくつかの他の実装形態において、第１のクライアントデバイス１０２Ａのゲームアプリケーションがオンラインゲーミングセッション１１６を確立した後、１つ以上の第２のクライアントデバイス１０２Ｂが、招待メッセージによってオンラインゲーミングセッション１１６に参加するように招待される。オンラインゲーミングセッション１１６に参加するためのリンク（たとえばＵＲＬアドレス）を有するメッセージは、第２のクライアントデバイス１０２Ｂの各々に送信される。適切なコントローラ構成が、オンラインゲーミングセッション１１６に参加するように招待される各第２のクライアントデバイス１０２Ｂに提供される。このアプリケーションでは、第２のクライアント１０２Ｂがオンラインゲーミングセッション１１６に参加するとき、サーバシステム１１４は、個々の第２のクライアントデバイス１０２Ｂごとに別個のゲーミングセッション１１６を作成する。それぞれの第２のクライアントデバイス１０２Ｂの別個のゲーミングセッション１１６は、第１のクライアントデバイス１０２Ａのゲーミングセッション１１６と同期され、同じシーンを共有するが、それぞれの第２のクライアントデバイス１０２Ｂに対応する固有のプレイヤーの視点を有することができる。各第２のクライアントデバイス１０２Ｂが適切なコントローラ構成を受信し、オンラインゲーミングセッション１１６に参加した後（より正確には、その関連するオンラインゲーミングセッション１１６を開始した後）、ユーザは、それぞれの第２のクライアントデバイス１０２Ｂ上でゲームをプレイし、他のクライアントデバイス１０２上で実行されるオンラインゲーミングセッション１１６の出力に影響を与えることができる。
【００３２】
クライアントデバイス１０２は、ゲームアプリケーションを含む１つ以上の別個のユーザアプリケーションを含み実行することができる、デバイスである。いくつかの実装形態において、クライアントデバイス１０２は、スマートフォン、タブレットデバイス、ラップトップコンピュータ、デスクトップコンピュータ、またはマルチメディアデバイスであり、その各々は、オンラインゲーミングセッションを実現するためのゲームアプリケーション（コントローラアプリケーションとも呼ばれる）を実行するように構成される。いくつかの実装形態において、クライアントデバイス１０２は、ユーザがオンラインゲーミングセッションとやり取りすることを可能にするゲームアプリケーション（エンドユーザゲーム制御アプリケーションとも呼ばれる）を実行する専用ゲームコントローラを含む。いくつかの実装形態において、クライアントデバイス１０２は、メディアデバイス１０６と連携して動作するように構成された１つ以上のユーザアプリケーションを含む。いくつかの実装形態において、アプリケーションは、クライアントデバイス１０２をメディアデバイス１０６とペアリングしメディアデバイス１０６を構成するための、メディアデバイスアプリケーションを含む。アプリケーションはまた、メディアデバイス１０６に関連コンテンツをキャストすることができる１つ以上のアプリケーションを含む。いくつかの実装形態において、アプリケーションは、（たとえばローカルネットワークを介して）データ／コンテンツをメディアデバイス１０６に直接送信することによって、および／またはメディアデバイス１０６を、メディアデバイス１０６がそこからデータ／コンテンツをストリーミングまたはそうでなければ受信することができるリモートロケーション（たとえば、サーバシステムにおける場所へのＵＲＬまたは他のリンク）に方向付けることによって、データおよび／またはコンテンツをメディアデバイス１０６にキャストする。メディアデバイス１０６は、アプリケーションおよび／または遠隔場所からデータ／コンテンツを受信し、受信したデータ／コンテンツに対応するビジュアルおよび／またはオーディオコンテンツを出力デバイス１０８に出力する。したがって、オンラインゲーミングセッション１１６は、クライアントデバイス１０２上で実行されるゲームアプリケーションと、リモートサーバシステム１１４と、メディアデバイス１０６との間に確立される。
【００３３】
いくつかの実装形態において、関連するオンラインゲームセッション１１６をリンクするプロセスの一部として、サーバシステム１１４は、各対応するクライアントデバイス１０２の能力および／またはサーバシステム１１４とクライアントデバイス１０２との間の通信可能接続の品質を評価する。いくつかの実装形態において、サーバシステム１１４は、クライアントデバイス１０２とサーバシステム１１４との間のネットワークレイテンシを測定する。測定したレイテンシがしきい値を上回り、低レイテンシ接続が利用可能である場合、サーバシステム１１４は、クライアントデバイス１０２を低レイテンシ接続に変更することを提案することができる、またはクライアントデバイス１０２のユーザに、クライアントデバイス１０２を低レイテンシ接続に変更するように促すことができる。たとえば、クライアントデバイス１０２がセルラーワイヤレス接続１１８上にあり、ローカルネットワークが利用可能である場合、サーバシステム１１４は、クライアントデバイス１０２を利用可能なローカルネットワークを通じて接続すべきであると提案することができる。いくつかの実装形態において、レイテンシしきい値要件はゲーム間で異なる。たとえば、いくつかのゲーム（たとえばアクションゲーム）は、低レイテンシ接続で良好に体験され、いくつかの他のゲーム（たとえば、オンラインボードゲームまたはカードゲーム）は、レイテンシに関してそれほど要求はない。サーバシステム１１４は、異なる種類のゲームに関連するこれらの異なる要件を考慮して接続推奨を行うことができる。
【００３４】
クライアントデバイス１０２がゲーミングセッション１１６を開始するまたはこれに参加することの一部として、サーバシステム１１４は、クライアントデバイス１０２上でコントローラを設定するために、クライアントデバイス１０２と通信する。いくつかの実装形態において、これは、サーバシステム１１４が、コントローラのために必要とされるリソースおよび通信能力をクライアントデバイス１０２が有するか否かを評価することを含む。クライアントデバイス１０２において利用可能なリソース、接続品質、およびゲームに対する要件に応じて、コントローラは、クライアントデバイス１０２において異なるように実現されてもよい。いくつかの実装形態において、ゲームは、ウェブページベースのコントローラインターフェイスを用いてプレイすることができる。たとえば、ゲームのためのコントローラインターフェイスは、ウェブページ内に埋め込まれてもよく、ウェブページは、クライアントデバイス１０２上のウェブブラウザ内にレンダリングされる。代替的に、いくつかの実装形態において、標準化されたコントローラは、ゲームに固有ではない、またはゲームに直接関連付けられる、予め定められたアプリケーション（たとえば、ＧＯＯＧＬＥ  Ｉｎｃ．によるＣＨＲＯＭＥＣＡＳＴまたはＧＯＯＧＬＥ  ＣＡＳＴなどのキャスティングデバイスアプリケーション、または他のメディアデバイスアプリケーション）において、またはクライアントデバイス１０２のオペレーティングシステムにおいて実現される。たとえば、デバイスオペレーティングシステムまたはクライアントデバイス１０２上の所定のアプリケーションは、コントローラサブモジュールを有し得る。コントローラサブモジュールは、１つ以上の標準化されたコントローラ構成、テンプレートなどを含む。標準化されたコントローラ構成の各々は、仮想コントローラを実現するために何らかの方法でクライアントデバイス１０２上の入力デバイスおよび／またはセンサを利用するようにコントローラサブモジュールを構成する。標準化されたコントローラ構成は、ゲームおよび／またはクライアントデバイスの種類によって異なり得る。
【００３５】
さらに、いくつかの実装形態において、ゲームは、コントローラサブモジュール上で実現することができる特定のコントローラ構成を有する。そのような構成は、サーバシステム１１４に格納され、クライアントデバイス１０２がオンラインゲーミングセッション１１６に参加または開始するプロセスの一部として、クライアントデバイス１０２に送信されてもよい。いくつかの実装形態において、特定のコントローラ構成は、完全にカスタムコントローラ、または標準コントローラとカスタムコントローラとの混合であってもよい。さらに、いくつかの実装形態において、ゲームは、ゲームに関連する特定のアプリケーションを必要とする。たとえば、ゲームは、特にゲームに関連付けられたコントローラアプリケーションを必要とする場合がある。いくつかの実装形態において、クライアントデバイス１０２は、セッション１１６の開始またはセッションへの参加の一部として、特定のアプリケーションまたは所定のアプリケーションをダウンロードするように指示されてもよい。たとえば、クライアントデバイス１０２が、（コントローラサブモジュールを有する）予め定められたアプリケーションまたはゲームに関連する特定のアプリケーションをまだ有しておらず、そのようなアプリケーションがプレイに必要とされる場合、サーバシステム１１４は、ダウンロードが必要であることをクライアントデバイス１０２のユーザに促し、許可を進めるようユーザに要求するようにクライアントデバイス１０２に命令する。
【００３６】
サーバシステム１１４は、サーバシステム１１４上でホストされている１つ以上のゲームアプリケーション（たとえば図２のゲームアプリケーション２２８）の各々のユーザアカウントに関連付けられたユーザ情報１２６を少なくとも格納する。ユーザ情報１２６の例は、ユーザアカウント情報（たとえば、ＩＤおよびパスワード）、メンバシップタイプ、嗜好、および活動履歴を含むが、これらに限定されない。いくつかの実装形態において、サーバシステム１１４は、クライアントデバイス１０２上でプレイされるオンラインゲーミングセッションに関連するセッションデータ１２８を格納する。各オンラインゲーミングセッション１１６に対するセッションデータ１２８の例は、フレームレート、レンダリング仕様、通常レイテンシ要件、ＧＰＵ割り当ての情報、エンコーダ割り当ての情報、関連するセッションの識別、および最新のステータス情報を含むが、これらに限定されない。セッションデータ１２８は、ユーザ情報１２６よりも頻繁にアクセスされる。いくつかの実装形態において、ユーザ情報１２６およびセッションデータ１２８を格納するメモリは、それぞれフラッシュメモリおよびランダムアクセスメモリ（ＲＡＭ）から構成される。
【００３７】
いくつかの実装形態において、リアルタイムインタラクティブゲーミング環境１００を作成するには、レンダリングされるゲームシーンの画素解像度にほぼ比例するハードウェアリソースが必要である。サーバシステム１２２の物理プロセッサは、目標解像度に従って異なるリソース割り当てを可能にするように仮想化されてもよい。仮想化技術は、時分割多重化（ＴＤＭ）、空間多重化、またはそれらの組み合わせに基づく。いくつかの実装形態において、ＴＤＭは、短時間の間、比較的大きいリソースへのワークロードアクセスを提供し、空間多重化は、比較的小さいリソースへの連続アクセスを提供する。いくつかの実装形態において、ハードウェア仮想化は、次善策であってもよい、ＴＤＭおよび空間多重化のうちの１つに限定される。フレーム全体に対するワークロードへの空間的割り当ては、物理リソースを未活用する可能性があり、一方、ＴＤＭは、多くのワークロードを破壊する可能性があり、フレームがレンダリングされる必要があるリアルタイムデッドラインを通してリソースへの連続的なアクセスを提供しない。６０ｆｐｓを維持しなければならないゲームシーンは、フレームを完了するために１６．６７ｍｓのリアルタイムデッドラインを有し、ＴＤＭアクセスでそれを細分化すると、十分なリソースにもかかわらず、実現不能なレンダリングをもたらし得る。
【００３８】
本願のいくつかの実装形態に従うと、処理能力は、したがって、１つ以上の処理コア（たとえば、ＧＰＵ１４０のＧＰＵコア）を含みリアルタイムオンラインインタラクティブゲーミング環境１００をホストするサーバシステム１１４（特に、ゲームサーバ１２２）のために管理される。いくつかの実装形態において、１つ以上の処理コアは複数の処理スライス（たとえば、それぞれが１６．６７ｍｓ持続する）とともに動作する。複数のオンラインゲーミングセッション１１６を開始することを求める要求を受信すると、サーバシステムは、１つ以上の処理コアの複数の処理スライスの各々を、その上で実行されるべき複数のオンラインゲーミングセッション１１６のサブセットに割り当てる、たとえば、第１の処理スライスを、第１のゲーミングセッションおよび第２のゲーミングセッションを含むオンラインゲーミングセッションの第１のサブセットに割り当てる。セッション１１６の各々は、１つ以上のリモートクライアントデバイス１０２上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。第１の処理スライスにおいて、サーバシステム１１４は、オンラインゲーミングセッション１１６の第１のサブセットに対するタイムシェアリング処理スケジュールを決定し、ゲーミングセッション１１６の第１のサブセットの各々は、第１の処理スライスのデューティサイクルに割り当てられる。タイムシェアリング処理スケジュールに従って、第１および第２のゲーミングセッション１１６は、第１の処理スライスの第１のデューティサイクルを共有し、それによって、第１および第２のゲーミングセッション１１６のリアルタイムデータ処理の必要性に従い、並列に実行される。
【００３９】
オンラインインタラクティブゲーミングセッション１１６は、高解像度および低レイテンシを有する高品質リアルタイムビデオストリームの符号化を要求する。いくつかの実装形態において、特定用途向け集積回路（ＡＳＩＣ）は、極めて特定のユースケースのために設計されてもよい。代替的に、いくつかの実装形態において、汎用ＡＳＩＣは、ゲームコンテキストの両方のセットに対するレイテンシ要件を満たしながら、比較的低い解像度でゲームコンテキストの第１のセットをサポートし、比較的高い解像度でゲームコンテキストの第２のセットをサポートするように構成される。
【００４０】
本願のある局面において、サーバシステム１１４（特にゲームサーバ１２２）は、２つ以上のメディアストリームを並行して提供するように構成される。サーバシステム１１４のエンコーダ１４２は、低レイテンシストリーム１３０および通常レイテンシストリーム１３２を含む複数のメディアストリームを生成するように構成される。低レイテンシストリーム１３０は、オンラインインタラクティブセッション１１６に対応し、通常レイテンシストリーム１３２よりも速い応答レートおよび低い送信レイテンシを有する。具体的には、エンコーダ１４２は、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレート（たとえば、６０ｐｆｓ）を最初に識別し、所定のフレームレートに対応する第１の時間間隔（たとえば、１６．６７ｍｓ）を決定する。低レイテンシストリーム１３０の画像フレームの第１のシーケンス内の各画像フレームについて、エンコーダ１４２は、第１の時間間隔の間に画像フレームを符号化し、画像フレームを符号化した後、第１の時間間隔内に残された残余時間を決定する。第１の時間間隔内に残された残余時間が、通常レイテンシストリーム１３２に関連する通常レイテンシ要件を満たすとき、サーバシステム１１４のエンコーダ１４２は、第１の時間間隔の残余時間の間に、通常レイテンシストリーム１３２の第２の画像フレームのシーケンスのサブセットを生成する。代替的に、第１の時間間隔内に残された残余時間が通常のレイテンシ要件を満たしていない場合、エンコーダ１４２は、第１の時間間隔の残余時間の間に、画像フレームの第２のシーケンスの任意の画像フレームの生成を中止する。したがって、符号化優先度は、低レイテンシストリーム１３０に付与されるが、第１の時間間隔に残された残余時間は、無駄にされることなく、通常レイテンシストリーム１３２を符号化するために利用される。
【００４１】
さらに、第１の時間間隔内での画像符号化を促進するために、サーバシステム１１４のエンコーダ１４２は、ＧＰＵ１４０が画像フレームのすべてのデータを利用可能にするまで待つ必要はない。むしろ、いくつかの実装形態では、画像フレームの一部を、この一部を符号化するために必要とされる情報がＧＰＵ１４０によって提供されると直ちに符号化し、これは、符号化される部分とは無関係の画像フレームの他の部分がＧＰＵ１４０によって利用可能にされるか否かに関わらず、符号化される。より具体的には、ＧＰＵ、エンコーダ１４２、およびデータバッファ１４４を含むサーバシステム１１４に対して、エンコーダ１４２は、オンラインゲーミングセッション１１６に対応付けられ、データバッファ１４４に格納された画像フレームのフレームデータを識別し、フレームデータの複数の画像タイルを同時に並列に処理するためにエンコーダ１４２の複数のエンコーダコアを割り当てる。複数の画像タイルは、第１のエンコーダコアに割り当てられた第１の画像タイルを含み、第１の画像タイルは、ブロックの第１のシーケンスを含む。エンコーダ１４２は、第１のエンコーダコアに割り当てられた第１の画像タイルのブロックの第１のシーケンスの第１のブロックと、第１のブロックの境界情報とをデータバッファ１４４から取得する。ブロックの第１のシーケンス内の第１のブロックに続く第２のブロックをデータバッファ１４４から取得する間、またはデータバッファ１４４から取得する前に、エンコーダは、境界情報に基づいてブロックの第１のシーケンスの第１のブロックを符号化する。次いで、エンコーダ１４２は、符号化された第１のブロックをオンラインゲーミングセッション１１６に関連するユーザのクライアントデバイス１０２に送信する。これらの手段によって、サーバシステム１１４は、ＧＰＵ１４０が各画像フレームについて完全なセット生データを提供するのを待つためのアイドル時間を低減することによって、エンコーダ１４２の符号化能力をより良く利用し、したがって、高精細ゲームコンテンツの所定のフレームレートに関連する時間間隔（たとえば、１６．６７ｍｓ）内で２つ以上のメディアストリームの画像フレームを符号化することができる。
【００４２】
さらに、サーバシステム１１４は、オンラインゲーミングセッション１１６をプレイするユーザからのユーザコマンドに応答して、いくつかのフレームを動的に生成することができる。サーバシステムは、ユーザコマンドの種類（たとえば、ジャンプ、発砲）に応じて、予想される応答レイテンシ、実際の通信および処理レイテンシ、ならびに実際の送信レイテンシを決定する。フレーム数は、実際の送信レイテンシと所定のフレームレートとに基づいて計算される。結果として、コマンドは、コマンドの効果を反映したフレームのセットを生成することにより、オンラインゲーミングセッションにおいて実行される。予め定められたフレームレートで送信される場合のフレームのセットは、実際の送信レイテンシに対応する送信時間を占有し、予想される応答レイテンシに対応する時間内にユーザのクライアントデバイスで受信することができる。
【００４３】
図１Ｂを参照して、サーバシステム１１４は、オンラインゲーミングセッション１１６で使用される第三者ゲームコンテンツの効率的でポータブルで低レイテンシのホストを可能にするために、ゲーミングＡＰＩおよびクラウドプラットフォーム１５０を提供する。いくつかの実装形態において、ゲーミングＡＰＩおよびクラウドプラットフォーム１５０は、フロントエンドサーバ１３４、メディアストリーミングサーバ１２４、ゲームサーバ１２２、および１つ以上の第三者コンテンツサーバ１３６のうちの１つ以上をさらに含むサーバシステム１１４によって有効にされる。フロントエンドサーバ１３４は、クライアントデバイス１０２および１０４に関連するユーザアカウント、たとえば、ユーザアカウントによる１つ以上のオンラインインタラクティブゲームのメンバシップへのサブスクリプションを、管理する。クライアントデバイス１０２が、それぞれのユーザアカウントにログインし、それらのオンラインゲーミングセッション１１６に参加した後、ゲームサーバ１２２は、ゲームセッション１１６を設定し、コンテンツサーバ１３６からゲームコンテンツを取得し、クライアントデバイス１０２上で実行されるゲームアプリケーションにゲームコンテンツを送信し、ユーザ要求またはアクションを識別することによって、それぞれのクライアントデバイス１０２についてそれぞれの特定のゲーミングセッション１１６を管理する。ユーザ要求またはアクションに応答してクライアントデバイス１０２に対するゲームプレイ出力をレンダリングし、それぞれのゲーミングセッション１１６の間にゲーム状態データを記憶する。ゲームサーバ１２２は、１つ以上の処理ユニット（たとえば、ＣＰＵ１３８、ＧＰＵ１４０、およびエンコーダ１４２）と、メモリ１４６と、ＧＰＵ１４０によって生成されたマルチメディアコンテンツを一時的に記憶し、さらなる符号化（たとえば、標準化または圧縮）のためにマルチメディアコンテンツをエンコーダ１４２に提供するデータバッファ１４４とを含む。データバッファ１４４は、任意で、メモリ１４６に一体化されるかまたはメモリ１４６から独立している。
【００４４】
いくつかの実装形態において、ゲームサーバ１２２は、クラウドゲームハードウェアリソース（たとえば、ＧＰＵ１４０およびエンコーダ１４２）を動的に割り当て、個々のエンドユーザが利用できるネットワーク帯域幅をモニタリングおよび利用することにより、最適なクラウドゲーミング体験を提供する。いくつかの実装形態において、ゲームサーバ１２２は、高精細ビデオ／メディアストリームとともに高性能のリアルタイムゲーミングセッションをサポートする層を含む、複数のパフォーマンス層を提供する。いくつかの実装形態において、ゲームサーバ１２２は、異なるサブスクリプションモデルをサポートする、および／または、１つ以上の並行リアルタイムゲームプレイを提供するように、および／または１つ以上の実際のゲーミングストリーム（たとえばモバイルアプリケーションまたはブラウザベースのプログラムいずれかを介してオンライン／クラウドゲーミングセッションに参加しているユーザのクライアントデバイスに対するビデオストリーム出力）にレイテンシがほぼまたは全くない状態で対応するレビューメディアストリームを提供するように、構成されている。具体的には、ゲームサーバ１２２は、ゲームプレイおよびレビュービデオのための並行メディアストリームを生成するように構成され、メディアストリーミングサーバ１０４は、並行ゲームプレイのためのレビュービデオが提供される。そのようなレビュービデオは、ＹｏｕＴｕｂｅなどのメディアストリーミングサイトを介して、１人以上のユーザに、ほとんどまたは全くレイテンシを伴わずに提供される。メディアストリーミングサイトは、任意で、メディアストリーミングサーバ１２４によって管理される。
【００４５】
いくつかの実装形態は、ゲーミング競合に関連してパブリックイベントをホストすることを可能にする。たとえば、ホストされたゲームに基づくマルチプレイヤーゲーミングイベントまたは競合に関連して、ゲームサーバ１２２によってホストされるクラウドゲーミングサイトは、任意でメディアストリーミングサーバ１２３を介し、特定のレビューアクライアントデバイス１０４に、以下をブロードキャストまたはストリーミングすることができる。すなわち、（ａ）関連付けられたコメンタリートラック／ストリームを含む１つ以上の並行補助または補足メディアストリーム、（ｂ）異なる競技者視点からのゲーミングストリーム、ゲームイベントに関連する複数のゲーミングセッションのクラウドサーバ分析および／またはスコアリングに基づく特に競合するゲーミングアクションを示すハイライトストリーム、（ｃ）１つ以上のアクティブゲーマーのゲームプレイセッション１１６を反映する１つ以上のゲーム視点ストリーム、および／または（ｄ）１つ以上のアクティブゲーマーおよび／またはコメンテータからの指示トラックであり、場合によっては、アクティブゲーマーによってその対応するゲームプレイ応答とともにクラウドゲーミングサーバシステム１１４に送られるリアルタイムピクチャ・イン・ピクチャ（ＰＩＰ）ビデオを含む。
【００４６】
いくつかの実装形態に従うと、コンテンツサーバ１３６が効果的にホストすることが可能な第三者コンテンツの例は、スポーツゲーム、レースゲーム、ロールプレイングゲーム（ＲＰＧ）およびファーストパーソンシューター（ＦＰＳ）ゲームを含むが、これらに限定されない。これらのゲームの異なるインスタンスは、関連付けられた異なるレイテンシ要件および予想、出力ビデオ解像度、ならびにゲーミングサーバの計算ワークロードおよびビデオ符号化／ストリーミングリソース、ならびにネットワーク帯域幅に基づく、広範囲にわたるクラウドハードウェア要件およびネットワーク（たとえば、場合によっては異なるサブスクリプションパフォーマンス層と一貫性がある最適なユーザゲーミング体験を保証するため）を有し得る。
【００４７】
いくつかの実装形態において、フロントエンドサーバ１３４は、加入者のゲームプレイアクティビティおよび関連する要求（たとえば、エンドユーザによる、ゲーミングセッションに参加することを他のプレイヤーに招待すること、ゲーム中のツールをアップグレードすること、および／またはゲームパフォーマンスを向上させることを要求する）をモニタリングし、コンテンツプロバイダが彼らの加入者および／またはフォロアの設定（課金情報、ゲームクレジット、サブスクリプションレベル等を含むが、これらに限定されない）を追跡することを可能にするためにＡＰＩ関連情報を第三者コンテンツサーバ１３６に送信または利用可能にするアカウント管理ＡＰＩおよび／またはソフトウェアモジュールを提供する。いくつかの実装形態において、ホスティングコンテンツのコンテンツプロバイダは、同じホスティングプラットフォーム１５０を介して、ホスティングコンテンツの１つ以上の異なるサブスクリプションモデルを提供することができる。いくつかの実装形態において、ユーザ（たとえば、ゲーミングサービスへの加入者）には、ホスティングプラットフォーム１５０上のコンテンツプロバイダが提供するすべてのゲームに対する無制限のアクセスおよびゲームプレイが与えられる。いくつかの実装形態において、サブスクリプションは、ユーザの制限が課された参加であり、参加は、ゲームプレイ時間、エンドユーザにコミットされるハードウェアリソースのレベル、またはエンドユーザのデバイスタイプ／場所に基づいて制限することができる。いくつかの実装形態において、アカウントＡＰＩおよびモジュールは、ゲームプレイセッションを構成およびモニタリングし、最新のサブスクリプション情報に従ってそれぞれの加入者のゲーミングアクティビティをアクティブゲームプレイ中であってもコンテンツプロバイダがトラッキングできるようにする。
【００４８】
サーバシステム１１４は、ユーザが、たとえば、第１のクライアントデバイス１０２上で実行される第１のゲーミングセッションの第１のゲームストリームを一時停止し、第２のクライアントデバイス１０２の第２のゲーミングセッション上で第１のゲームストリームを再開し、第１のゲームセッションを継続することを可能にする、クラウド機能を可能にする。サーバシステム１１４はまた、大規模なスケールで複数のプレイヤーをサポートし、より豊かなより持続的なクラウドベースの世界を提供する。サーバシステム１１４は、クラウドベースのシステムを使用して、同じユーザの異なるゲーミングセッション１１６または異なるユーザの異なるゲーミングセッション１１６に関連するセッションデータ１２８を記憶する。
【００４９】
サーバシステム１１４は、携帯電話、タブレットコンピュータ、デスクトップコンピュータ、およびテレビを含むがこれらに限定されない、複数のクライアントデバイス１０２および１０４上でゲーミングコンテンツをレンダリングする。任意で、ゲーミングコンテンツは、これらのクライアントデバイス１０２および１０４の仕様に従うように動的に調整される。いくつかの実装形態において、ゲームＡＰＩプラットフォーム１５０がインスタントアクセスを提供し、ユーザデバイスストレージを全くまたはほとんど必要としないので、クライアントデバイス１０２および１０４は、限られた記憶能力を有するかまたは記憶能力を全く有しない（たとえば、ユーザは、５秒でプレイを開始し、２５０ＧＢのコンソールハードドライブ空間を節約することができる）。
【００５０】
ゲームコンテンツに加えて、サーバシステム１１４はまた、クライアントデバイス１０２および１０４にアドオンコンテンツ、たとえば新しいリーグロスター、統計、および初期タイトルへのプレビューアクセスをストリーミングし、これは任意で定期的に更新される（たとえば、毎日、または毎時、容易に更新、アップグレードされる）。いくつかの実装形態において、アドオンコンテンツは、インターネット検索またはデータベース検索の検索結果を含む。
【００５１】
いくつかの実装形態において、サーバシステム１１４は、ゲームアプリケーションに関連するライブオンラインコミュニティをサポートする。ユーザ（たとえば、サービスの加入者）は、１日中、対応するゲームＡＰＩプラットフォーム上のライブイベント、トーナメントまたはアクティビティに参加する。ライブイベント、トーナメントまたはアクティビティの例は、他のユーザによってプレイされるライブゲーミングセッションを観戦すること、パブリックドメイン（たとえば、ＹｏｕＴｕｂｅ）に達成を投稿すること、およびライブチップを入手すること、およびビデオをコーチすることを含む。たとえば、ゲームサーバ１２２は、ユーザアクションに応答して、２つ以上のライブストリーム１３０および１３２を提供する。ゲームプレイヤー用の第１のクライアントデバイス１０２Ａの第１のゲーミングセッション１１６上で第１のゲームストリーム１３０を維持しながら、サーバシステム１１４はまた、第２のライブレビューストリーム１３２（たとえば、ＹｏｕＴｕｂｅストリーム）を（たとえば、加入者の）１つ以上の他のクライアントデバイス１０４にブロードキャストする。第２のライブレビューストリーム１３２は、ユーザが視聴者とゲーム体験を共有することを可能にする。任意で、第２のライブストリームは、プレイヤーの第１のクライアントデバイス１０２Ａの画面の再生である。サーバシステム１１４は、プレイヤーが第１のゲーミングセッション１１６を説明しているオーディオストリーム、またはプレイヤーが第１のゲーミングセッション１１６をプレイし説明しているビデオストリームを取得してもよい。第２のライブレビューストリーム１３２がオーディエンスのために再生される間に、オーディオストリームはオーディエンスのために任意で再生される。ビデオストリームは、任意で、第２のライブレビューストリーム１３２内の埋め込まれたウィンドウ内で再生される。さらなる詳細は、図８Ａ〜８Ｃを参照して以下に説明される。
【００５２】
いくつかの実装形態は、真のオンザゴーゲーミングを提供し、この場合、ユーザは、最も望むゲームを、任意のロケーションまたはクライアントデバイスに、持ってゆくことができる。たとえば、ユーザは、モバイルデバイス１０２Ａ上で自分の発信でオンラインゲーミングセッション１１６を開始し、次いでラップトップコンピュータ１０２Ｂ上で自分の宛先でゲーミングセッション１１６をシームレスに再開することができる。また、いくつかの実装形態において、ゲーミングセッション１１６が異なるデバイス１０２間でハンドオーバされるときに、ユーザに利用可能な異なるクライアントデバイスリソースに基づいて、ゲーミングセッション１１６は、異なるデバイス１０２間でハンドオーバされる。サーバシステム１１４（特に、ゲームサーバ１２２）は、異なる一組のハードウェアリソース（たとえば、ＧＰＵ１４０およびエンコーダ１４２）を動的に展開して、異なるエンドユーザの現在のデバイスリソース（たとえば、クライアントハードウェア能力およびネットワーク帯域幅）に基づいてユーザのゲーム体験を最適化することができる。
【００５３】
サーバシステム１１４において、フロントエンドサーバ１３４およびゲームサーバ１２２は、それぞれのユーザアカウントシステムを有することができる。一例では、フロントエンドサーバ１３４のためのユーザアカウントシステムは、特定のゲームコンテンツおよびサービスへのサブスクリプションを管理するために使用され、ゲームサーバ１２２のためのユーザアカウントシステム（たとえば、ＹｏｕＴｕｂｅまたはＧｏｏｇｌｅアカウント）は、ゲーム体験（たとえば、特定のゲーム基準を満たすようにゲームコンテンツをレンダリングすること）および多くの他の目的を管理するために使用される。いくつかの実装形態において、これらの２つのユーザアカウントシステムは、顧客および使用データ（たとえば、ソーシャル、友人、プレゼンス、認証、アカウント情報、請求情報）を共有する。また、コンテンツフロントエンドサーバ１３４は、ゲームサーバ１２２によって有効化されるテクノロジレイヤの上に置くサービスレイヤを提供する。いくつかの実装形態において、ゲームコンテンツサーバ１３６は、それらのコンテンツにアクセスするための追加のユーザアカウントシステムを管理する。任意で、ゲームコンテンツのための追加のユーザアカウントシステムは、ユーザ加入を管理するフロントエンドサーバ１３４のためのユーザアカウントシステムと統合される。
【００５４】
図１Ｂに示されるように、ゲームＡＰＩプラットフォーム１５０は、ゲームサーバ１２２によって作成／ホストされ、フロントエンドサーバ１３４およびコンテンツサーバ１３６と連携してゲーミングセッション１１６を可能にする。フロントエンドサーバ１３４は、ゲーミングセッション１１６のユーザにサービスを提供し、ユーザのアカウントを管理するように構成される。任意で、ユーザは、フロントエンドサーバ１３４を介してゲーミングサービスに加入しなければならない。コンテンツサーバ１３６は、ゲーミングセッション１１６に関連するゲームコンテンツを提供する。図１Ｃを参照して、ゲームサーバ１２２は、対応するゲームコンテンツに基づいてゲーミングセッション１１６を可能にするためにゲーミングアプリケーションを実行する（１５２）。いくつかの実装形態において、フロントエンドサーバ１３４およびゲームサーバ１２２は、別個のエンティティによって所有され、管理される。具体的には、オンラインゲームアプリケーションは、第１のクライアントデバイス１０２またはそれに結合された出力デバイス１０８（たとえば、テレビ）上にゲーミングユーザインターフェイスを表示するために実行される。ゲーミングサービスに加入するためのユーザー選択がユーザーインターフェイスにおいて受け付けられる。ゲーミングサービスに加入するために、サーバシステム１１４は、ユーザ情報を受信し（１５４）、それによって、第１のクライアントデバイス１０２のユーザが、異なる種類のサービス（たとえば、無料トライアルサービスまたは正規の加入サービス）のうちの１つを登録することを可能にする。ユーザインターフェイス上で、クライアントデバイス１０２のユーザは、各コンテンツドメイン（コンテンツフランチャイズとも呼ばれる）ごとに一連のリッチハブを介してブラウズすることができる（１５６）。ユーザインターフェイスは、ゲームコンテンツ、アドオンコンテンツ（たとえば、ニュース、統計）、およびライブイベント（たとえば、別のユーザからのゲームブロードキャスト、ライブチャットメッセージ）を表示するように構成される。
【００５５】
いくつかの実装形態において、ゲーム（たとえば、ライブフットボールゲーム）のユーザ選択が、ユーザインターフェイスにおいて受け取られる（１５８）。この選択に応答して、ゲームアプリケーションは、所定の遅延時間内に第１のクライアントデバイス１０２に対してロードされ、ゲーミング環境がユーザに利用可能にされる。代替的に、いくつかの実装形態において、ユーザアクションに応答して、サーバシステム１１４は、第１のクライアントデバイス１０２のユーザにライブストリームを提供する（１６０）。たとえば、サーバシステム１１４は、第１のクライアントデバイスの第１のゲーミングセッション上で第１のゲームストリームを提供し、並行して、第２のライブＹｏｕＴｕｂｅストリームを１つ以上の他のクライアントデバイス１０４にブロードキャストする。第２のライブストリームは、ユーザが視聴者とゲーム体験を共有することを可能にする。任意で、第２のライブストリームは、ユーザが第１のゲームストリームに基づいてゲームをプレイしている間に第１のクライアントデバイス１０２のユーザによって提供されるオーディオフィードまたはビデオフィードを含む。
【００５６】
いくつかの実装形態において、第１のクライアントデバイス１０２のユーザは、別個のクライアントデバイスを使用する必要がある場合がある（たとえば、異なる位置に移動したため）。第１のゲームセッションを一時停止するためのユーザアクションに応答して、サーバシステムは、第１のクライアントデバイス１０２上で実行される第１のゲーミングセッションの第１のゲームストリームを一時停止し（１６２）、第１のゲーミングセッション１１６に関する最新のステータス情報を記録する。第１のクライアントデバイス１０２のユーザは、第１のゲームセッションを継続するために、第２のクライアントデバイスの第２のゲーミングセッション上で第１のゲームストリームを再開してもよい。最新のステータス情報は、第１および第２のクライアントデバイスのユーザのシームレスゲーム体験を可能にするために、第２のゲーミングセッションに転送される。
【００５７】
図２は、いくつかの実装形態に係る、ゲーミング環境１００の一例としてのクライアントデバイス２００（たとえば、クライアントデバイス１０２または１０４）を示すブロック図である。クライアントデバイス２００の例は、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、およびウェアラブルパーソナルデバイスを含むが、これらに限定されない。クライアントデバイス２００は、１つ以上の処理ユニット（ＣＰＵ）２０２と、１つ以上のネットワークインターフェイス２０４と、メモリ２０６と、これらの構成要素（チップセットと呼ばれることもある）を相互接続するための１つ以上の通信バス２０８とを含む。クライアントデバイス２００は、キーボード、マウス、ボイスコマンド入力ユニットもしくはマイクロフォン、タッチスクリーンディスプレイ、タッチセンシティブ入力パッド、ジェスチャ捕捉カメラ、または他の入力ボタンもしくはコントロールなどの、ユーザ入力を容易にする１つ以上の入力デバイス２１０を含む。さらに、クライアントデバイス２００の中には、マイクロフォンおよび音声認識、またはカメラおよびジェスチャー認識を使用してキーボードを補足または置換するものがある。いくつかの実装形態において、クライアントデバイス２００は、たとえば、電子デバイス上にプリントされたグラフィックシリーズコードの画像をキャプチャするための１つ以上のカメラ、スキャナ、またはフォトセンサユニットを含む。クライアントデバイス２００はまた、１つ以上のスピーカおよび／または１つ以上の視覚ディスプレイを含む、ユーザインターフェイスの提示およびコンテンツの表示を可能にする１つ以上の出力デバイス２１２も含む。任意で、クライアントデバイス２００は、クライアントデバイス２００の位置を決定するための、ＧＰＳ（地球測位衛星）または他の地理的位置受信機などの位置検出デバイス２１４を含む。クライアントデバイス２００はまた、メディアデバイス１０６および／またはプレイヤークライアント１０４の近接性を判断するための近接検出デバイス２１５、たとえばＩＲセンサを含み得る。クライアントデバイス２００はまた、入力として使用されてもよい、クライアントデバイス２００の動き、向き、および他のパラメータを感知するための１つ以上のセンサ２１３（たとえば、加速度計、ジャイロスコープなど）を含み得る。
【００５８】
メモリ２０６は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、または他のランダムアクセス固体メモリデバイスなどの高速ランダムアクセスメモリを含み、任意で、１つ以上の磁気ディスク記憶装置、１つ以上の光ディスク記憶装置、１つ以上のフラッシュメモリ装置、または１つ以上の他の不揮発性ソリッドステート記憶装置などの不揮発性メモリを含む。メモリ２０６は、任意で、１つ以上の処理ユニット２０２から遠隔に位置する１つ以上の記憶装置を含む。メモリ２０６、またはメモリ２０６内の不揮発性メモリは、非一時的なコンピュータ読取可能記憶媒体を含む。いくつかの実装形態において、メモリ２０６、またはメモリ２０６の非一時的なコンピュータ読取可能記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する。
●さまざまな基本システムサービスを扱うため、かつハードウェア依存タスクを実行するための手順を含むオペレーティングシステム２１６。
●クライアントデバイス２００を、１つ以上のネットワークインターフェイス２０４（有線または無線）およびローカルネットワーク、ならびにインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの１つ以上のネットワーク１１２を介して、他のデバイス（たとえば、サーバシステム１１４、メディアデバイス１０６、および他のクライアントデバイス１０２または１０４）に接続するためのネットワーク通信モジュール２１８。
●１つ以上の出力デバイス２１２（たとえば、ディスプレイ、スピーカなど）を介してクライアントデバイス２００における情報（たとえば、アプリケーション、ウィジェット、ウェブサイト、およびそれらのウェブページ、ならびに／またはゲーム、オーディオおよび／もしくはビデオコンテンツ、テキスト等を提示するためのグラフィカルユーザインターフェイス）の提示を可能にするためのユーザインターフェイスモジュール２２０。
●１つ以上の入力デバイス２１０のうちの１つからの１つ以上のユーザ入力またはやり取りを検出し、検出した入力またはやり取りを解釈するための入力処理モジュール２２２。
●セッション１１６に参加するためのウェブインターフェイスを含む、ウェブサイトおよびそのウェブページをナビゲートし、（たとえばＨＴＴＰを介して）要求し、表示するためのウェブブラウザモジュール２２４。
●メディアデバイス１０６に関連付けられたユーザアカウントにログインすること、ユーザアカウントに関連付けられた場合メディアデバイス１０６を制御すること、およびメディアデバイス１０６に関連付けられた設定およびデータを編集およびレビューすることを含む、メディアデバイス１０６とやり取りするためのメディアデバイスアプリケーション２２６。
●対応するゲームプレイを容易にすることおよび追加プレイヤーの招待を容易にすることを含む、クライアントデバイス２００上でゲームを提供するためのゲームアプリケーション２２８。
●ゲームプレイ入力インターフェイスをゲームアプリケーション２２８に提供するためのゲームコントローラモジュール２３０。
●サーバシステム１１４ならびに他のコンテンツホストおよびプロバイダからデータ（たとえば、ゲームコントローラ構成４５６（図４）、ゲームアプリケーション２２８および他のアプリケーション、モジュールおよびアプリケーションの更新、ならびにメモリ２０６内のデータ）をダウンロードするためのデータダウンロードモジュール２３１。
●少なくとも、ゲームアプリケーション２２８および他のアプリケーション／モジュールに関連付けられたデータを格納するクライアントデータ２３２。これは以下を含む。
【００５９】
〇共通デバイス設定（たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など）を含む、クライアントデバイス２００自体に関連する情報を記憶するためのクライアントデバイス設定２３４。
【００６０】
〇アカウントアクセス情報およびデバイス設定（たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など）のための情報のうちの１つ以上を含む、メディアデバイスアプリケーション２２６のユーザアカウントに関連付けられた情報を記憶するためのメディアデバイス設定２３６。
【００６１】
〇アカウントアクセス情報、ゲーム内ユーザ嗜好、ゲームプレイ履歴データ、および他のプレイヤーに関する情報のうちの１つ以上を含む、ゲームアプリケーション２２８のユーザアカウントに関連付けられた情報を記憶するゲームアプリケーション設定２３８。
【００６２】
〇ゲームアプリケーション２２８に対するゲームコントローラモジュール２３０の構成（たとえば、図４のゲームコントローラ構成４５６から受けた構成）に関連付けられた情報を記憶するためのゲームコントローラ構成２４０。
【００６３】
〇クライアントデバイス１０２および１０４ならびにメディアデバイス１０６のうちのいずれかの存在、近接、または位置に関連付けられた情報を含む位置／近接データ２４２。
【００６４】
いくつかの実装形態において、ゲームコントローラモジュール２３０は、メモリ２０６内のメディアデバイスアプリケーション２２６または別のアプリケーションの一部（たとえばサブモジュール）である。いくつかの実装形態において、ゲームコントローラモジュール２３０はオペレーティングシステム２１６の一部である。いくつかの実装形態において、ゲームコントローラモジュール２３０は別個のモジュールまたはアプリケーションである。
【００６５】
クライアントデバイス１０２のいくつかの実装形態において、メディアデバイスアプリケーション２２６（および対応してメディアデバイス設定２３６）およびゲームアプリケーション２２８（および対応してゲームアプリケーション設定２３８）は任意である。クライアントデバイス１０２が参加するように招待される特定のゲームに応じて、メディアデバイスアプリケーション２２６およびゲームアプリケーション２２８は、プレイする必要はない。これらのアプリケーションのいずれかがゲームをプレイするために必要であり（たとえば、ゲームは、メディアデバイスアプリケーション２２６内のゲームコントローラモジュール２３０を使用する）、そのアプリケーションがメモリ２０６内にない場合、クライアントデバイス１０２はそのアプリケーションをダウンロードするように促されてもよい。
【００６６】
上記特定された要素のそれぞれは、前述のメモリデバイスのうちの１つ以上に格納することができ、上記機能を実行するための命令のセットに対応する。上記特定されたモジュールまたはプログラム（すなわち、命令のセット）は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実現される必要はなく、したがって、これらのモジュールのさまざまなサブセットは、さまざまな実装形態で組み合わされるか、またはそうでなければ再配列されてもよい。いくつかの実装形態において、メモリ２０６は、任意で、上記特定されたモジュールおよびデータ構造のサブセットを格納する。さらに、メモリ２０６は、任意で、上記説明では述べていない追加のモジュールおよびデータ構造を記憶する。
【００６７】
図３は、いくつかの実装形態に係る、ゲーミング環境１００のメディアデバイス例１０６を示すブロック図である。メディアデバイス１０６は、典型的には、１つ以上の処理ユニット（ＣＰＵ）３０２と、１つ以上のネットワークインターフェイス３０４と、メモリ３０６と、これらの構成要素（チップセットと呼ばれることもある）を相互接続するための１つ以上の通信バス３０８とを含む。任意で、メディアデバイス１０６は、クライアントデバイス１０２または１０４の近接度を決定するためのＩＲセンサなどの近接度／位置検出ユニット３１０を含む。
【００６８】
メモリ３０６は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、または他のランダムアクセスソリッドステートメモリデバイスなどの高速ランダムアクセスメモリを含み、また、任意で、１つ以上の磁気ディスク記憶装置、１つ以上の光ディスク記憶装置、１つ以上のフラッシュメモリ装置、または１つ以上の他の不揮発性ソリッドステート記憶装置などの不揮発性メモリを含む。メモリ３０６は、任意で、１つ以上の処理ユニット３０２から遠隔に位置する１つ以上の記憶装置を含む。メモリ３０６、またはメモリ３０６内の不揮発性メモリは、非一時的なコンピュータ読取可能記憶媒体を含む。いくつかの実装形態において、メモリ３０６、またはメモリ３０６の非一時的なコンピュータ読取可能記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する。
●さまざまな基本システムサービスを扱うため、かつハードウェア依存タスクを実行するための手順を含むオペレーティングシステム３１６。
●メディアデバイス１０６を、１つ以上のネットワークインターフェイス３０４（有線または無線）、および、インターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、ケーブルテレビシステム、衛星テレビシステム、ＩＰＴＶシステムなどの１つ以上のネットワーク１１２を介して、他のコンピュータまたはシステム（たとえば、サーバシステム１１４およびクライアントデバイス１０２）に接続するためのネットワーク通信モジュール３１８。
●１つ以上のコンテンツソース（たとえば、ゲームセッション１１６からの出力のためのサーバシステム１１４）から受信したコンテンツ信号を復号し、復号した信号内のコンテンツをメディアデバイス１０６に結合された出力デバイス１０８に出力するための、コンテンツデコードモジュール３２０。
●近接検出部３１０によって検出されたまたはサーバシステム１１４によって提供された近接度関連情報に基づいて、クライアントデバイス１０２および／または１０４の近接度を判断するための近接／位置決定ジュール３２２。
●メディア表示を制御するためのメディア表示モジュール３２４。
●少なくとも以下のデータを記憶するメディアデバイスデータ３２６。
【００６９】
〇アカウントアクセス情報およびデバイス設定（たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など）のための情報のうちの１つ以上を含む、メディアデバイスアプリケーションのユーザアカウントに関連付けられた情報を記憶するためのメディアデバイス設定３２８。
【００７０】
〇クライアントデバイス１０２および／または１０４ならびにメディアデバイス１０６のうちのいずれかの存在、近接、または位置に関連付けられた情報を含む位置／近接データ３３０。
【００７１】
上記特定された要素のそれぞれは、前述のメモリデバイスのうちの１つ以上に格納することができ、上記機能を実行するための命令のセットに対応する。上記特定されたモジュールまたはプログラム（すなわち、命令のセット）は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実現される必要はなく、したがって、これらのモジュールのさまざまなサブセットは、さまざまな実装形態で組み合わされるか、またはそうでなければ再配列されてもよい。いくつかの実装形態において、メモリ３０６は、任意で、上記特定されたモジュールおよびデータ構造のサブセットを記憶する。さらに、メモリ３０６は、任意で、上で説明されない追加のモジュールおよびデータ構造を記憶する。
【００７２】
図４は、いくつかの実装形態に係る、ゲーミング環境１００のサーバシステム１１４内の一例としてのサーバを示すブロック図である。サーバシステム１１４は、典型的には、１つ以上の処理ユニット（たとえば、ＣＰＵ４０２、ＧＰＵ１４０、およびエンコーダ１４２）と、１つ以上のネットワークインタフェース４０４と、メモリ４０６と、これらの構成要素（チップセットと呼ばれることもある）を相互接続する１つ以上の通信バス４０８とを含む。サーバシステム１１４は、任意で、キーボード、マウス、ボイスコマンド入力ユニットもしくはマイクロフォン、タッチスクリーンディスプレイ、タッチセンシティブ入力パッド、ジェスチャ捕捉カメラ、または他の入力ボタンもしくはコントロールなどの、ユーザ入力を容易にする１つ以上の入力デバイス４１０を含み得る。さらに、サーバシステム１１４は、マイクロフォンおよび音声認識、またはカメラおよびジェスチャー認識を使用して、キーボードを補足または置換してもよい。いくつかの実装形態において、サーバシステム１１４は、任意で、たとえば電子デバイス上にプリントされたグラフィックシリーズコードの画像を取得するための１つ以上のカメラ、スキャナ、またはフォトセンサユニットを含む。サーバシステム１１４はまた、１つ以上のスピーカおよび／または１つ以上の視覚ディスプレイを含む、ユーザインターフェイスの提示およびコンテンツを表示可能にする１つ以上の出力デバイス４１２を含み得る。
【００７３】
メモリ４０６は、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭ、または他のランダムアクセスソリッドステートメモリデバイスなどの高速ランダムアクセスメモリを含み、任意で、１つ以上の磁気ディスク記憶装置、１つ以上の光ディスク記憶装置、１つ以上のフラッシュメモリ装置、または１つ以上の他の不揮発性ソリッドステート記憶装置などの不揮発性メモリを含む。メモリ４０６は、任意で、１つ以上の処理ユニットから遠隔に位置する１つ以上の記憶装置を含む。メモリ４０６、またはメモリ４０６内の不揮発性メモリは、非一時的なコンピュータ読取可能記憶媒体を含む。いくつかの実装形態において、メモリ４０６、またはメモリ４０６の非一時的なコンピュータ読取可能記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する。
●さまざまな基本システムサービスを扱うため、かつハードウェア依存タスクを実行するための手順を含むオペレーティングシステム４１６。
●サーバシステム１１４を、１つ以上のネットワークインターフェイス４０４（有線または無線）およびインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの１つ以上のネットワーク１１２を介して他のデバイス（たとえば、サーバシステム１１４、クライアントデバイス１０２および／または１０４、ならびにメディアデバイス１０６内のさまざまなサーバ）に接続するための、ネットワーク通信モジュール４１８。
●クライアントデバイス１０２および／または１０４における情報（たとえば、アプリケーション、ウィジェット、ウェブサイト、およびそれらのウェブページ、ならびに／またはゲーム、オーディオおよび／もしくはビデオコンテンツ、テキスト等を提示するためのグラフィカルユーザインターフェイス）の提示を可能にするためのユーザインターフェイスモジュール４２０。
●メディアデバイス１０６に関連するデバイスプロビジョニング、デバイス制御、およびユーザアカウント管理のためのサーバ側機能を提供するように実行される、メディアデバイスモジュール４２２。
●クライアントデバイス（１０２および／または１０４）およびメディアデバイス１０６のいずれかの位置情報に基づいて、メディアデバイス１０６に対するクライアントデバイス１０２および／または１０４の近接度を決定する近接／位置決定モジュール４２４。
●ゲームセッションの設定、セッション状態データおよびその他のゲーム関連データの格納、クライアントデバイス１０２、１０４からのゲームプレイ入力の処理、ならびにゲームプレイ入力に応答してゲームプレイ出力をレンダリングすることを含むがこれらに限定されない、ゲーム（たとえばゲームアプリケーション２２８）に関連付けられたサーバ側機能を提供するための、ゲームサーバモジュール４２６。
●メディアストリーミングサイトをホストし、オンラインゲーミングセッションに関連する並行補助または補足メディアストリームを受信し、同じクライアントデバイス１０４または別個のクライアントデバイス１０２のゲームアプリケーション２２８上で実行されているオンラインゲーミングセッションと並行して表示するためにクライアントデバイス１０４に並行メディアストリームを提供するための、メディアストリーミングサーバモジュール４３８。
●クライアントデバイス１０２および１０４に関連付けられたユーザアカウント、たとえば、ユーザアカウントによる１つ以上のオンラインインタラクティブゲームのメンバシップへのサブスクリプションを管理し、加入者要求をゲームサーバモジュール４２６に転送するための加入者へのサービスを可能にし、加入者のゲームプレイアクティビティおよび関連する要求をモニタリングするための、フロントエンドサーバモジュール４４０。
●１つ以上の第三者コンテンツプロバイダによってホストされるゲームコンテンツへのアクセスを提供するためのメディアコンテンツサーバモジュール４４２。
●クライアントデバイス１０２／１０４への接続のネットワーク帯域幅を評価すること、および、クライアントデバイス１０２／１０４がゲームをプレイするために必要なモジュールまたはアプリケーションを有するか否かを評価することを含むが、これらに限定されない、クライアントデバイス１０２および／または１０４のデバイスおよびネットワーク能力を評価するためのデバイス／ネットワーク評価モジュール４４４。
●データ（たとえば、ゲームコントローラ構成４５６、ソフトウェア更新など）をクライアントデバイス１０２／１０４に提供するためのデータ送信モジュール４４６。
●サーバシステムデータ４４８は以下を含む。
【００７４】
〇共通デバイス設定（たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など）を含む、クライアントデバイス１０２および１０４に関連する情報を記憶するためのクライアントデバイス設定４５０。
【００７５】
〇アカウントアクセス情報およびデバイス設定（たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など）のための情報のうちの１つ以上を含む、メディアデバイスアプリケーション４２２のユーザアカウントに関連する情報を記憶するためのメディアデバイス設定４５２（任意）。
【００７６】
〇クライアントデバイス１０２および／または１０４およびメディアデバイス１０６のうちのいずれかの存在、近接または位置に関連する情報を含む位置／近接データ４５４。
【００７７】
〇さまざまなゲームのためのコントローラ構成を記憶するためのゲームコントローラ構成４５６。
【００７８】
〇たとえば、ユーザアカウント情報（たとえば、ＩＤおよびパスワード）、メンバシップタイプ、嗜好、および活動履歴を含む、サーバシステム１１４上でホストされる１つ以上のゲームアプリケーション（たとえば、図２のゲームアプリケーション２２８）の各々のユーザアカウントに関連する情報を記憶するためのユーザ情報１２６。
【００７９】
〇ゲームセッションに関連するデータ（たとえばゲーム状態データ、その他のゲーム関連データ）を記憶するためのゲームセッションデータ１２８。これは、たとえば、第１のゲームセッションのためのデータ１２８−１と第２のゲームセッションのためのデータ１２８−２とを含み、各ゲームセッションのセッションデータ１２８は、フレームレート、レンダリング仕様、通常レイテンシ要件、ＧＰＵ割り当ての情報、エンコーダ割り当ての情報、関連するセッションの識別、およびそれぞれのゲームセッションに関連する最新のステータス情報を含むが、これらに限定されない。
【００８０】
いくつかの実装形態において、ゲームサーバモジュール４２６は、以下のプログラム、モジュール、またはそれらのサブセットもしくはスーパーセットを含む。
●ＧＰＵ１４０の各処理スライスをオンラインゲーミングセッションのそれぞれのサブセットに割り当て、第１および第２のゲーミングセッションのリアルタイムデータ処理の必要性に従って、処理スライスのデューティサイクルを２つ以上のゲーミングセッション間で動的に共有する（すなわち、デューティサイクル中に２つ以上のゲーミングセッションを同時にかつ並列に実行する）ためのＧＰＵ時間共有モジュール４２８。
●予め定められたフレームレートに対応する時間間隔内で低レイテンシストリームと通常レイテンシストリームの両方を符号化するためのマルチストリーム生成モジュール４３０。
●エンコーダ１４２のエンコーダコアを、画像の画像タイルを処理するように割り当て、個々のブロックのデータおよびそれに対応する境界情報が利用可能になるとすぐに、エンコーダコアがそれぞれの画像タイル内の各個々のブロックを符号化することを可能にする並列エンコードモジュール４３２。
●オンラインゲーミングセッション中に、予め定められたフレームレートならびにユーザコマンドに関連する対応する通信レイテンシおよび処理レイテンシに基づいて、ユーザコマンドに応答して可変数のフレームを動的に生成するための動的フレーム生成モジュール４３４。
●対応するデバイスおよび接続能力に基づいてオンラインゲーミングセッションの目標品質パラメータを決定し、サーバシステム１１４のリソース（たとえば、その中の仮想マシン）を目標品質パラメータに基づいてオンラインゲーミングセッションと関連付け、関連付けられたリソースのリソースプロファイルに従ってオンラインゲーミングセッションを管理するためのリソース割当モジュール４３６。
【００８１】
いくつかの実装形態において、メモリ４０６は、エンコーダ１４２をＧＰＵ１４０に結合するように構成されたデータバッファ１４４をさらに含む。具体的には、データバッファ１４４は、１つ以上の出力メディアストリームと関連付けてＧＰＵ１４０によって生成されたゲームプレイマルチメディアコンテンツを一時的に記憶し、それにより、エンコーダ１４２は、データバッファ１４４からゲームプレイマルチメディアコンテンツを取り出し、たとえば、標準化、速度または圧縮のために、取り出したコンテンツを１つ以上のメディアストリームに符号化することができる。
【００８２】
上記特定された要素の各々は、前述のメモリデバイスのうちの１つ以上に格納することができ、上記機能を実行するための命令のセットに対応する。上記特定されたモジュールまたはプログラム（すなわち、命令のセット）は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実現される必要はなく、したがって、これらのモジュールのさまざまなサブセットは、さまざまな実装形態で組み合わされるか、またはそうでなければ再配列されてもよい。いくつかの実装形態において、メモリ４０６は、任意で、上記特定されたモジュールおよびデータ構造のサブセットを格納する。さらに、メモリ４０６は、任意で、上で説明されていない追加のモジュールおよびデータ構造を格納する。
【００８３】
ＧＰＵ仮想化
図５Ａは、いくつかの実装形態に係る、少なくともＧＰＵ１４０を含む一例としてのサーバシステム１１４のブロック図である。図４を参照して、サーバシステム１１４は、１つ以上の処理ユニット（たとえば、ＣＰＵ４０２、ＧＰＵ１４０、およびエンコーダ１４２）と、メモリ４０６と、任意でメモリ４０６の一部または別個のデータバッファ１４４とを含む。ＣＰＵ４０２、ＧＰＵ１４０、およびエンコーダ１４２は、ゲームセッションを設定すること、ゲーム状態データおよび他のゲーム関連データを記憶すること、クライアントデバイス１０２または１０４からのゲームプレイ入力を処理すること、およびゲームプレイ入力に関連するゲームプレイ出力をレンダリングすることを含むが、これらに限定されない、ゲームに関連するサーバ側機能（たとえば、ゲームアプリケーション２２８）を提供するようにともに機能する。いくつかの実装形態において、ＣＰＵ４０２は、ゲームコントローラ構成４５６を提供するためにクライアントデバイスとやり取りし、ゲームアプリケーション２２８の設定を容易にし、ゲームセッションまたは観客レビューセッションを設定し、かつ／またはゲームプレイ入力を受信するように構成される。ＧＰＵ１４０は、たとえば、シーンが再描画される度に照明効果を生成し、オブジェクトを変換することによって、ゲームプレイ入力を取得し、ゲームプレイマルチメディアコンテンツを生成するように構成される。エンコーダ１４２は、ＧＰＵによって提供されるゲームプレイマルチメディアコンテンツを、各々が所定のメディアフォーマットを有する１つ以上の出力メディアストリームに符号化（たとえば、標準化または圧縮）するように構成される。任意で、エンコーダ１４２はＧＰＵ１４０の一部である。任意で、エンコーダ１４２はＧＰＵ１４０とは別個のものであり、データバッファ１４４はエンコーダ１４２とＧＰＵ１４０との間に結合される。具体的には、データバッファ１４４は、１つ以上の出力メディアストリームと関連付けてＧＰＵ１４０によって生成されたゲームプレイマルチメディアコンテンツを一時的に格納し、それにより、エンコーダ１４２は、データバッファ１４４からゲームプレイマルチメディアコンテンツを取り出し、たとえば、標準化、速度または圧縮のために、取り出したコンテンツを１つ以上のメディアストリームに符号化することができる。
【００８４】
いくつかの実装形態において、ＧＰＵ１４０は、複数のＧＰＵコア５００を含む。いくつかの実装形態において、ＧＰＵ１４０は、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ）プラットフォーム、Ｖｕｌｋａｎ  ＡＰＩプラットフォーム、およびＤＸ  ＡＰＩプラットフォームのうちの１つとやり取りする。たとえば、ＯｐｅｎＧＬプラットフォームは、２Ｄおよび３Ｄベクトルグラフィックスをレンダリングし、ＧＰＵ１４０を介してハードウェア加速レンダリングを達成するためのクロス言語クロスプラットフォームＡＰＩを含む。ＯｐｅｎＧＬプラットフォームは、頂点処理（たとえば、頂点をスクリーン空間に変換する）、プリミティブ処理（たとえば、頂点をプリミティブに編成することは、クリッピングされ、クリッピングされる）、ラスタライズ（たとえば、プリミティブを画素フラグメントにラスタライズする）、フラグメント処理（たとえば、フラグメントをシェーディングして、各画素における色を計算する）、および画素演算（たとえば、フラグメントをそれらの画素位置でフレームバッファにブレンドする）を含む演算のパイプラインの少なくともサブセットを介して実現される。いくつかの実装形態において、ＯｐｅｎＧＬプラットフォームは、ＧＰＵ１４０が、複数の画素を含むゲームプレイマルチメディアコンテンツをエンコーダ１４２に提供することを可能にし、各画素は、３つのコンポーネント、たとえばＲＧＢ（緑、赤、青）、または４つのコンポーネント、たとえばＣＭＹＫ（シアン、マゼンタ、イエロー、黒）でデータバッファ１４４に任意で格納された色情報と関連付けられる。
【００８５】
図５Ｂは、いくつかの実装形態に係る、複数の処理時間スライス５０２に分割された１つ以上のＧＰＵコア５００のブロック図である。１つ以上のＧＰＵコア５００は、図５Ａに示される複数のＧＰＵコア５００のサブセットである。いくつかの実装形態において、１つ以上のＧＰＵコア５００は、１つ以上の画像レンダリングタスク（たとえば、１つ以上のオンラインゲーミングセッションのためのメディアストリームをレンダリングすること）を独立して引き受けるように構成された単一のＧＰＵコア５００を含む。いくつかの実装形態において、１つ以上のＧＰＵコア５００は、協働して１つ以上の画像レンダリングタスクを引き受けるように構成された２つ以上のＧＰＵコア５００を含む。１つ以上のＧＰＵコア５００は、複数の処理スライス５０２に分割される。いくつかの実装形態において、複数の処理スライス５０２の各々は、複数のオンラインゲーミングセッション（たとえば、第１のオンラインゲーミングセッション）のうちの少なくとも１つの目標フレームレートに対応する持続時間にわたって続く。たとえば、目標フレームレートは６０ｆｐｓであり、各処理スライス５０２は１６．６６７ｍｓ持続する。第１のメディアストリームは、第１のオンラインゲーミングセッションのために１つ以上のＧＰＵコア５００によって生成され、１つ以上のＧＰＵコア５００のそれぞれの処理スライス５０２のそれぞれの間に出力される画像フレームを含む。
【００８６】
具体的には、いくつかの実装形態において、サーバシステム１１４は、複数のオンラインゲーミングセッションを開始することを求める要求を受信し、セッションの各々は、１つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。１つ以上のＧＰＵコア５００の複数の処理スライス５０２の各々は、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てられる。たとえば、第１の処理スライス５０２Ａは、第１のゲーミングセッションＧＳ１および第２のゲーミングセッションＧＳ２を含むオンラインゲーミングセッションの第１のサブセットに割り当てられる。いくつかの実装形態において、処理スライス５０２の各々は、少なくとも１つの同一のゲーミングセッション（たとえば、第１のゲーミングセッションＧＳ１）に割り当てられ、少なくとも１つの画像は、少なくとも１つの同一のゲーミングセッションのための処理スライス５０２の各々の間に生成される。いくつかの実装形態において、２つの連続する処理スライス５０２に割り当てられたオンラインゲーミングセッションのサブセットは、互いに異なる、すなわち、２つの連続する処理スライス５０２のうちの１つに割り当てられた少なくとも１つのオンラインゲーミングセッションは、連続する処理スライス５０２のうちの他のものに割り当てられない。さらに、いくつかの実装形態において、２つの連続する処理スライス５０２のうちの１つに割り当てられたオンラインゲーミングセッションは、連続する処理スライス５０２のうちの他のものに割り当てられない。
【００８７】
さらに、第１の処理スライス５０２Ａにおいて、サーバシステム１１４（たとえば、ゲームサーバモジュール４２６）は、オンラインゲーミングセッションの第１のサブセットの各々が第１の処理スライス５０２Ａのデューティサイクルに割り当てられるように、オンラインゲーミングセッションの第１のサブセットに対するタイムシェアリング処理スケジュールを決定する。タイムシェアリング処理スケジュールに従い、サーバシステム１１４は、第１および第２のゲーミングセッションＧＳ１およびＧＳ２のリアルタイムデータ処理の必要性に従って第１および第２のゲーミングセッションＧＳ１およびＧＳ２を並列に実行することによって、第１の処理スライス５０２Ａの第１のデューティサイクルの共有を可能にする。たとえば、第１の処理スライス５０２Ａは１６．６６７ｍｓ持続し、第１のデューティサイクルは、第１の処理スライスの時間持続時間の５０％、たとえば８．３３３ｍｓである。一例では、第１のデューティサイクルの間、第１のゲーミングセッションＧＳ１は複雑なユーザアクション（たとえば、ゲームキャラクタによる迅速なスプリント）を含み、第２のゲーミングセッションＧＳ２は単純なユーザアクション（たとえば、ゲームキャラクタによる遅い歩行である）を含む。第１のデューティサイクルは、第１のゲーミングセッションＧＳ１のためにより多くのリソース（処理時間またはＧＰＵコア）を動的に予備する。具体的には、いくつかの実装形態において、第１の処理スライス５０２Ａの第１のデューティサイクル中に、１つ以上のＧＰＵコア５０２は、それぞれのリアルタイムデータ処理の必要性に従い、１つ以上のＧＰＵコア５００のそれぞれのサブセットを第１および第２のゲーミングセッションＧＳ１およびＧＳ２の各々に割り当てることによって、第１および第２のゲーミングセッションＧＳ１およびＧＳ２を並列に実行する（たとえば、複雑なユーザアクションを伴う第１のゲーミングセッションＧＳ１に対して、単純なユーザアクションを伴う第２のゲーミングセッションＧ２よりも多数のＧＰＵコア５００を割り当てる）。
【００８８】
代替的に、いくつかの実装形態において、第１のゲーミングセッションＧＳ１および第２のゲーミングセッションＧＳ２は、第１のデューティサイクル中に交互になる。たとえば、第１のデューティサイクルは、第１の処理スライスの時間持続時間の５０％、たとえば、８．３３３ｍｓである。１つ以上のＧＰＵコアは、第１および第２のゲーミングセッションの各々を実行する。第１および第２のゲーミングセッションの各々は、第１および第２のゲーミングセッションのもう一方のゲーミングセッションに切り替える前に短い期間（たとえば、１ｍｓ）にわたって実行される。
【００８９】
いくつかの実装形態において、各処理スライス５０２をゲーミングセッションのそれぞれのサブセットに割り当てるために、サーバシステム１１４は、それぞれのスライス５０２に対するゲームレイテンシ基準を特定し、ゲームレイテンシ基準を満たす応答を、それぞれの処理スライス５０２に対応するオンラインゲーミングセッションのサブセットの各々に提供する。第１の処理スライス５０２Ａにおいて、ゲーミングセッションの第１のサブセットの各々に対する第１の処理スライス５０２Ａのデューティサイクルは、ゲームレイテンシ基準を満たすそれぞれの処理時間に対応する。具体的には、一例では、第１の処理スライス５０２Ａは１６．６６７ｍｓ持続し、第１のデューティサイクルは、第１の処理スライスの時間持続時間の５０％、たとえば８．３３３ｍｓである。ゲームレイテンシ基準は、処理レイテンシが最大で８．３３３ｍｓであると定める。ゲーミングセッションの第１のサブセット（たとえば、第１および第２のゲーミングセッションＧＳ１およびＧＳ２）の各々は、８．３３３ｍｓ未満の処理レイテンシを有する。
【００９０】
図５Ｃ〜５Ｅは、いくつかの実装形態に係る、２つ以上のゲーミングセッションが第１の処理スライス５０２Ａに割り当てられるプロセス５０４、５０６および５０８の例である。図５Ｃを参照して、いくつかの実装形態において、第１および第２のゲーミングセッションＧＳ１およびＧＳ２に加えて、第１の処理スライス５０２Ａも第３のゲーミングセッションＧＳ３に割り当てられる。第１の処理スライス５０２Ａに割り当てられた複数のオンラインゲーミングセッションの第１のサブセットはまた、第３のゲーミングセッションＧＳ３を含む。タイムシェアリング処理スケジュールに従って、１つ以上のＧＰＥＴコア５００は、第１、第２、および第３のゲーミングセッションＧＳ１〜ＧＳ３間で、第１の処理スライス５０２Ａの第１のデューティサイクルの動的共有を容易にする。第３ゲーミングセッションＧＳ３は、第３ゲーミングセッションのリアルタイムデータ処理の必要性に応じて、第１および第２のゲーミングセッションＧＳ１、ＧＳ２と並列に実行される。さらに、図５Ｄを参照して、いくつかの実装形態において、オンラインゲーミングセッションの第１のサブセットは、第３のゲーミングセッションＧＳ３も含む。第１のデューティサイクルで第３のゲーミングセッションを実行するのではなく、１つ以上のＧＰＥＴコア５００は、第１の処理スライス５０２Ａの第１のデューティサイクルに続くがそれとは異なる第２のデューティサイクルで第３のゲーミングセッションを実行し、第３のゲーミングセッションは、第２のデューティサイクルを任意の他のゲーミングセッションと共有しない。
【００９１】
図５Ｅを参照して、いくつかの実装形態において、第１の処理スライス５０２Ａに割り当てられたオンラインゲーミングセッションの第１のサブセットは、第３のゲーミングセッションＧＳ３および第４のゲーミングセッションＧＳ４をさらに含む。タイムシェアリング処理スケジュールに従って、第３および第４のゲーミングセッションＧＳ３およびＧＳ４は、第１の処理スライス５０２Ａの第１のデューティサイクルに続くがそれとは異なる第２のデューティサイクルを動的に共有する。１つ以上のＧＰＵコア５００は、第３および第４のゲーミングセッションＧＳ３およびＧＳ４のリアルタイムデータ処理の必要性に従い、第３および第４のゲーミングセッションＧＳ３およびＧＳ４を並列に実行する。たとえば、第１の処理スライス５０２Ａは、１６．６６７ｍｓ持続し、第１のデューティサイクルとそれに続く第２のデューティサイクルとを含む。第１のデューティサイクルの間、２つの画像フレームは、第１および第２のゲーミングセッションＧＳ１およびＧ２にそれぞれ対応し、第１および第２のゲーミングセッションＧＳ１およびＧＳ２のリアルタイムデータ処理の必要性に従って動的に処理される。第２のデューティサイクルの間、２つの画像フレームは、第３および第４のゲーミングセッションＧＳ３およびＧＳ４にそれぞれ対応し、第３および第４のゲーミングセッションＧＳ３およびＧＳ４のリアルタイムデータ処理の必要性に従って動的に処理される。
【００９２】
図６は、いくつかの実装形態に係る、ＯｐｅｎＧＬプラットフォームに基づいてメディアコンテンツを生成する２つのゲーミングセッション（たとえば、第１および第２のゲーミングセッションＧＳ１およびＧＳ２）によって処理スライス（たとえば、第１の処理スライス５０２Ａ）を動的に共有する一例としてのプロセス６００である。第１および第２のゲーミングセッションＧＳ１、ＧＳ２は、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙに基づいて実行され、グラフィクスパイプライン処理を含む。１つ以上のＧＰＵコア５００は、第１および第２のゲーミングセッションＧＳ１およびＧＳ２を並列に実行する。具体的には、第１の処理スライス５０２Ａの第１のデューティサイクル中において、第１のゲーミングセッションＧＳ１が第１のパイプラインステージで待機している間、１つ以上のＧＰＵコア５００は、第２のオンラインゲーミングセッションＧＳ２の第２のパイプラインステージを実現する。第２のオンラインゲーミングセッションＧＳ２が第３のパイプラインステージで待機している間、１つ以上のＧＰＵコア５００は、第１のオンラインゲーミングセッションＧＳ１の第４のパイプラインステージを実現する。状況によっては、第１のオンラインゲーミングセッションＧＳ１および第２のオンラインゲーミングセッションＧＳ２は、第１のパイプラインステージおよび第３のパイプラインステージにおいて必要とされるデータが準備されるのを待っているので、第１のパイプラインステージおよび第３のパイプラインステージにおいてそれぞれ待機する。
【００９３】
先に説明したように、ＯｐｅｎＧＬプラットフォームは、頂点処理（たとえば、頂点をスクリーン空間に変換する）、プリミティブ処理（たとえば、頂点をプリミティブに編成し、プリミティブはクリッピングおよび選別される）、ラスタライズ（たとえば、プリミティブを画素フラグメントにラスタライズする）、フラグメント処理（たとえば、フラグメントをシェーディングして、各画素における色を計算する）、および画素演算（たとえば、フラグメントをそれらの画素位置でフレームバッファにブレンドする）を含む演算のパイプラインの少なくともサブセットを介して実現される。具体的な例において、ＯｐｅｎＧＬプラットフォームは、オンラインゲーミングセッションごとに画像フレームをレンダリングするために９つの連続するパイプラインステージを実現する。９つの連続するパイプラインステージは、以下のうちのサブセットまたはすべてを含む。
●頂点配列データを作成するための頂点仕様６０２。
●各頂点に作用する頂点シェーダ６０４。
●頂点データのパッチをより小さいプリミティブに任意で細分化するためのテッセレーション６０６。
●より小さいプリミティブを出力プリミティブに任意で変換するためのジオメトリシェーダ６０８。
●変換フィードバック、プリミティブクリッピング、パースペクティブ分割、およびビューポート変換を含むがこれらに限定されない、最後のステージの出力プリミティブを異なる場所に調整および搬送するための頂点後処理６１０。
●出力プリミティブを個々のベースプリミティブのシーケンスに分割するプリミティブアセンブリ６１２。
●各個々のプリミティブをプリミティブのサンプルカバレージに基づいて離散要素（フラグメントとも呼ばれる）に分解するためのラスタライズ６１４。
●１組の色および１つの深度値にラスタライズすることによって生成された各フラグメントを処理するフラグメントシェーダ６１６。
●ピクセルオーナーシップテスト、シザーテスト、マルチサンプル演算、ステンシルテスト、深度テスト、オクルージョンクエリアップデート、ブレンド、ｓＲＧＢ変換、ディザリング、論理演算、書込マスクおよび論理演算を含むがこれらに限定されない、たとえば標準化、速度および／または圧縮のための、エンコーダ１４２によって処理されることが可能なゲームプレイマルチメディアコンテンツに対する、色のセットおよび１つの深度値を処理するためのプリサンプル演算６１８。
【００９４】
１つ以上のＧＰＵコア５００は、第１の処理スライス５０２Ａの第１のデューティサイクルの間に、第１および第２のゲーミングセッションＧＳ１およびＧＳ２それぞれの９つの連続するパイプラインステージを並列に実行する。図６に示される例では、１つ以上のＧＰＵコア５００は、第１のゲーミングセッションＧＳ１のステージ６０２および６０４を最初に実行する。第１のゲーミングセッションＧＳ１が頂点シェーダ６０４の中間で一時停止されている（たとえば、データが準備が整うのを待つ）間、１つ以上のＧＰＵコア５００は、第２のゲーミングセッションＧＳ２に対する頂点仕様６０２を取得する。次に、第２のゲーミングセッションＧＳ２は、その頂点シェーダステージ６０４で一時停止され（たとえば、データが準備が整うのを待つ）、１つ以上のＧＰＵコア５００は、第１のゲーミングセッションＧＳ１のステージ６０４〜６１０を実行し続ける。第１のゲーミングセッションＧＳ１の頂点後処理ステージ６１０を完了した後、第１のゲーミングセッションＧＳ１のプリミティブアセンブリステージ６１２を開始する前に、１つ以上のＧＰＵコア５００は、第２のゲーミングセッションＧＳ２のステージ６０４〜６１０を実行する。頂点後処理ステージ６１０を完了した後、第２のゲーミングセッションＧＳ２のプリミティブアセンブリステージ６１２を開始する前に、１つ以上のＧＰＵコア５００は、第１のゲーミングセッションＧＳ１のステージ６１２−６１８を実行し続ける。第１のゲーミングセッションＧＳ１が完了すると、１つ以上のＧＰＵコア５００は、第２のゲーミングセッションＧＳ２のステージ６１２〜６１８を実行し続ける。
【００９５】
図６に示されないいくつかの実装形態において、１つ以上のＧＰＵコア５００は、第１および第２のゲーミングセッションＧＳ１およびＧＳ２のための９つの連続するパイプラインステージの各々を交互に実行する。言い換えると、１つ以上のＧＰＵは、第１のゲーミングセッションＧＳ１のための頂点指定ステージ６０２、第２のゲーミングセッションＧＳ１のための頂点指定ステージ６０２、第１のゲーミングセッションＧＳ１のための頂点シェーダステージ６０４、第２のゲーミングセッションＧＳ１のための頂点シェーダステージ６０４等を、第１および第２のゲーミングセッションの両方を完了するまで順次実行する。
【００９６】
いくつかの実装形態において、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、互いに関連し、それぞれのリアルタイムユーザインタラクティブアプリケーションの実行に使用されるアプリケーションデータの一部を共有するように構成される。たとえば、第１および第２のゲーミングセッションは、第１のリアルタイムユーザインタラクティブゲームアプリケーションのシーンにおける２人のプレイヤーに対応する。第２のゲーミングセッションＧＳ２は、第１のゲーミングセッションＧＳ１からの招待に応答して初期化されてもよい。処理スライス５０２Ａの第１のデューティサイクル中、１つ以上のＧＰＵコア５００は、アプリケーションデータの共有部分を使用して、第１および第２のゲーミングセッションＧＳ１およびＧＳ２の両方を実現することができる。
【００９７】
いくつかの実装形態において、第１および第２のゲーミングセッションは、互いに独立しており、２つの別個のリアルタイムユーザインタラクティブアプリケーションを実行するように構成される。たとえば、第１のゲーミングセッションＧＳ１は、キャンディラッシュゲームを実装し、第２のゲーミングセッションＧＳ２は、カーレースゲームを実現する。
【００９８】
いくつかの実装形態において、ＧＰＵ１４０は、第１の制御レジスタおよび第２の制御レジスタを有する少なくとも２つ以上の制御レジスタを含み、第１および第２のレジスタはそれぞれ、第１および第２のゲームセッションＧＳ１およびＧＳ２が第１の処理スライス５０２Ａの第１のデューティサイクルを動的に共有するとき、第１および第２のゲームセッションＧＳ１およびＧ２を並列に制御するように構成される。また、第１のセッションＧＳ１および第２のセッションＧＳ２は、各ゲームセッションデータを一時的に記憶するキャッシュに対応付けられている。たとえば、図６を参照して、第１のゲームセッションＧＳ１のゲームセッションデータは、第１のゲームセッションＧＳ１が頂点シェーダステージ６０４の間および頂点後処理ステージ６１０の後に一時停止されるとき、その対応するキャッシュに格納され、第１のゲームセッションＧＳ１が頂点シェーダステージ６０４およびプリミティブアセンブリステージ６１２の間に再起動された後、さらなる処理のために取り出される。
【００９９】
いくつかの実装形態において、頂点データは、対応するゲーミングセッション（たとえば、第１のゲーミングセッションの「ジョブＡ」、第２のゲーミングセッションの「ジョブＢ」）に基づいてタグ付けされるように構成されたコンテキストビットを含む。データフラグメントは、「ジョブＡ」および「ジョブＢ」に関連してパイプラインプロセス６００全体にわたってタグ付けされる。任意で、ハードウェアリソース（たとえば、制御レジスタおよびキャッシュ）もタグ付けされる。
【０１００】
いくつかの実装形態では、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、Ｖｕｌｋａｎ  ＡＰＩプラットフォーム上で実現され、いくつかの実装形態では、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、ＤＸ  ＡＰＩプラットフォーム上で実現されることに留意されたい。いくつかの実装形態において、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、複数のプラットフォーム（たとえば、ＯｐｅｎＧＬ、ＶｕｌｋａｎおよびＤＸ）の２つの別個のプラットフォーム上で実現される。第１および第２のゲーミングセッションＧＳ１およびＧＳ２の各々の連続するパイプラインステージは、それぞれのゲーミングセッションが実現されるそれぞれのプラットフォームに対応する。第１および第２のゲーミングセッションＧＳ１およびＧＳ２の連続するパイプラインステージは、第１の処理スライス５０２Ａの第１のデューティサイクルの間に、それらが２つの別個のプラットフォーム上で実現されるときでさえ、並列に実行されてもよい。
【０１０１】
図７は、いくつかの実装形態に係る、サーバシステム１１４の処理能力（たとえばＧＰＵ１４０の処理能力）を管理するための一例としての方法７００を示すフローチャートである。方法７００は、任意で、コンピュータメモリまたは非一時的なコンピュータ読取可能記憶媒体（たとえば、ゲームサーバモジュール４２６のＧＰＵ時間共有モジュール４２２において）に記憶され、サーバシステム１１４（たとえば、ゲームサーバ１２２）の１つ以上のプロセッサによって実行される命令によって制御される。コンピュータ読取可能記憶媒体は、磁気または光ディスク記憶デバイス、フラッシュメモリなどのソリッドステート記憶デバイス、または他の不揮発性メモリデバイスを含み得る。コンピュータ読取可能記憶媒体に記憶された命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または１つ以上のプロセッサによって解釈される他の命令フォーマット以下のうちの１つ以上を含み得る。方法７００におけるいくつかの動作は組み合わされてもよく、および／またはいくつかの動作の順序が変更されてもよい。
【０１０２】
方法７００は、１つ以上の処理コア（たとえば、ＧＰＵ１４０は、１つ以上のＧＰＵコア５００をさらに含む）と、処理コアによって実行するためのプログラムを格納するメモリとを含むサーバシステム１１４によって実行される。１つ以上の処理コアは、複数の処理スライス５０２を含む。いくつかの実装形態において、複数の処理スライス５０２の各々は、複数のオンラインゲーミングセッションの目標フレームレート（たとえば、６０ｆｐｓ）に対応する持続時間（たとえば、１６ｍｓ）持続する。
【０１０３】
サーバシステム１１４は、複数のオンラインゲーミングセッションを開始することを求める要求を受信し（７０２）、セッションの各々は、１つ以上のリモートクライアントデバイス（たとえば、クライアントデバイス１０２または１０４）上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。サーバシステム１１４は、１つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てる（７０４）。具体的には、第１の処理スライスは、第１のゲーミングセッションＧＳ１および第２のゲーミングセッションＧＳ２を含むオンラインゲーミングセッションの第１のサブセットに割り当てられる（７０６）。いくつかの実装形態において、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、互いに関連し、それぞれのリアルタイムユーザインタラクティブアプリケーションの実行に使用されるアプリケーションデータの一部を共有するように構成される。さらに、いくつかの実装形態において、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、第１のリアルタイムユーザインタラクティブゲームアプリケーションのシーンにおける２人のプレイヤーに対応する。代替的に、第１および第２のゲーミングセッションＧＳ１およびＧＳ２は、互いに独立しており、２つの別個のリアルタイムユーザインタラクティブアプリケーションを実行するように構成される。
【０１０４】
第１の処理スライスにおいて、オンラインゲーミングセッションの第１のサブセットに対してタイムシェアリング処理スケジュールが決定され（７０８）、ゲーミングセッションの第１のサブセットの各々が第１の処理スライスのデューティサイクルに割り当てられる。一例では、第１の処理スライスは１６．６６７ｍｓ持続し、第１のデューティサイクルは第１の処理スライスの持続時間の５０％、すなわち８．３３３ｍｓである。いくつかの実装形態において、第１のデューティサイクルは、第１の処理スライス５０２Ａ内で連続的である。代替的に、いくつかの実装形態において、第１のデューティサイクルは、第１の処理スライス５０２Ａ内で連続せず、たとえば、第２の複数のショートスライス（たとえば、長さ１ｍｓ）とインターリーブされ、第２の複数のショートスライスによって分離される第１の複数のショートスライス（たとえば、長さ１ｍｓ）を含む。
【０１０５】
いくつかの実装形態において、複数の処理スライスの各々について、ゲームレイテンシ基準が識別され、それぞれの処理スライスに対応するオンラインゲーミングセッションのサブセットの各々に、ゲームレイテンシ基準を満たす応答レイテンシを提供する。さらに、いくつかの実装形態において、第１の処理スライスにおいて、ゲーミングセッションの第１のサブセットの各々に対する第１の処理スライスのデューティサイクルは、ゲームレイテンシ基準を満たすそれぞれの処理時間に対応する。たとえば、第１の処理スライス５０２Ａは１６．６６７ｍｓ持続し、ゲームレイテンシ基準は、応答レイテンシが８ｍｓ未満でなければならないことを要求することができる。各処理時間は応答レイテンシ、すなわち８ｍｓ未満でなければならず、したがって、第１の処理スライスのデューティサイクルは４８％未満でなければならない。状況によっては、ゲームレイテンシ基準を満たすために、１つ以上の処理コアのサブセットを対応するゲーミングセッションに再割り当てする必要がある。
【０１０６】
いくつかの実装形態において、処理スライスおよび１つ以上の処理コアのサブセットのデューティサイクルの特定のゲーミングセッションへの割り当ては、静的に実現される。ＧＰＵ１４０は、複数のゲーミングセッションの各々についてそれぞれのデータ処理の必要性を推定し、それに応じて、処理スライスおよび１つ以上の処理コアのサブセットのデューティサイクルを特定のゲーミングセッションに割り当てる。代替的に、いくつかの実装形態において、ＧＰＵ１４０は、リアルタイムで特定のゲーミングセッションのデータ処理の必要性を推定し（たとえば、シーンまたはユーザアクションの複雑さに応じて）したがって、処理スライスのデューティサイクルおよび１つ以上の処理コアのサブセットを、特定のゲーミングセッションに動的に割り当てる。
【０１０７】
タイムシェアリング処理スケジュールに従って、第１および第２のゲーミングセッションは、第１および第２のゲーミングセッションＧＳ１およびＧＳ２のリアルタイムデータ処理の必要性に従って第１および第２のゲーミングセッションＧＳ１およびＧＳ２を並列に実行することによって、第１の処理スライス５０２Ａの第１のデューティサイクルを共有する（７１０）。いくつかの実装形態において、第１および第２のゲーミングセッションを並列に実行することは、それぞれのデータ処理の必要性に従って、１つ以上の処理コアのそれぞれのサブセットを第１および第２のゲーミングセッションＧＳ１およびＧＳ２の各々に割り当てることをさらに含む。いくつかの実装形態において、１つ以上の処理コアは、第１の制御レジスタおよび第２の制御レジスタをさらに含む少なくとも２つ以上の制御レジスタを含み、第１および第２のレジスタは、第１および第２のゲーミングセッションＧＳ１およびＧＳ２が第１の処理スライス５０２Ａの第１のデューティサイクルを動的に共有するとき、第１および第２のゲーミングセッションＧＳ１およびＧＳ２を並列に制御するように構成される。
【０１０８】
いくつかの実装形態において、第１および第２のゲーミングセッションＧＳ１およびＧＳ２の各々は、ＯｐｅｎＧＬプラットフォームに基づいて実行され、グラフィックスパイプラインプロセスを含む。第１の処理スライス５０２Ａの第１のデューティサイクルの間、第１のオンラインゲーミングセッションは、第１のパイプラインステージ（たとえば、頂点シェーダステージ６０４）で待機し、第２のオンラインゲーミングセッションの第２のパイプラインステージ（たとえば、頂点仕様６０２）は、１つ以上の処理コアによって実施される。さらに、第２のオンラインゲーミングセッションが第３のパイプラインステージ（たとえば頂点シェーダ６０４）で待機している間、第１のオンラインゲーミングセッションＧＳ１の第４のパイプラインステージ（たとえばステージ６０６〜６１０のうちの１つ）は、１つ以上の処理コアによって実現される。ＯｐｅｎＧＬプラットフォーム上で第１および第２のゲーミングセッションを動的に実行することに関するさらなる詳細は、図６を参照して先にのべた通りである。
【０１０９】
いくつかの実装形態において、オンラインゲーミングセッションの第１のサブセットは、第３のゲーミングセッションＧＳ３をさらに含む。タイムシェアリング処理スケジュールに従って、第３のゲーミングセッションＧＳ３はまた、第１の処理スライスの第１のデューティサイクルを第１および第２のゲーミングセッションＧＳ１およびＧＳ２と動的に共有する（７１２）。第３ゲーミングセッションＧＳ３は、第３ゲーミングセッションのリアルタイムデータ処理の必要性に応じて、第１、第２のゲーミングセッションＧＳ１、ＧＳ２と並列に実行される。いくつかの実装形態において、オンラインゲーミングセッションの第１のサブセットは、第３のゲーミングセッションＧＳ３をさらに含み、第３のゲーミングセッションは、第１の処理スライスの第１のデューティサイクルに続く第２のデューティサイクルで実行される（７１４）。第３ゲーミングセッションＧＳ３は、第２のデューティサイクルを他のゲーミングセッションと共有しない。いくつかの実装形態において、オンラインゲーミングセッションの第１のサブセットは、第３のゲーミングセッションＧＳ３および第４のゲーミングセッションＧＳ４をさらに含む。タイムシェアリング処理スケジュールに従って、第３および第４のゲーミングセッションは、第３および第４のゲーミングセッションのリアルタイムデータ処理の必要性に従って第３および第４のゲーミングセッションを並列に実行することによって、第１の処理スライス５０２Ａの第２のデューティサイクルを動的に共有する（７１６）。第２のデューティサイクルは、第１のデューティサイクルとは異なる。第１の処理スライスの間に１つ以上の追加のゲーミングセッションを実行することに関するさらなる詳細は、図５Ｃ〜５Ｅを参照して先に述べた通りである。
【０１１０】
一例では、４つ以上のオンラインゲーミングセッションがＧＰＵ１４０によって処理される。４つ以上のオンラインゲーミングセッションのうちの２つは、専用のＧＰＵコアを任意の他のオンラインゲーミングセッションと共有することなく専用のＧＰＵコアによって処理され、たとえば、第１のオンラインゲーミングセッションは、第１のＧＰＵコアを使用し、第２のオンラインゲーミングセッションは、第２のＧＰＵコアおよび第３のＧＰＵコアを使用する。残りの２つ以上のオンラインゲーミングセッションは、図５〜７を参照して上述した処理能力を管理する方法７００に従って第４のＧＰＵコアを共有する。具体的には、残りの２つ以上のオンラインゲーミングセッションのうちの少なくとも２つは、第４のＧＰＵコアの各処理スライスのデューティサイクルを共有し、それぞれのデータ処理の必要性に従って並列に実行される。
【０１１１】
図７の動作を説明した特定の順序は、例示的なものにすぎず、説明した順序が動作を実行することができる唯一の順序であることを示すものではないことを理解されたい。当業者は、本明細書に記載のサーバシステムの処理能力を管理するさまざまな方法を認識するであろう。
【０１１２】
複数のメディアストリームの並行レンダリング
図８Ａは、いくつかの実装形態に係る、少なくともエンコーダ１４２を含む一例としてのサーバシステム１１４のブロック図である。図８Ｂは、いくつかの実装形態に係る時間間隔の時間ダイアグラム８２０である。図８Ｃおよび８Ｄは、いくつかの実装形態に係るゲームシーンに関連して２つの別個のクライアントデバイス１０２において並行して表示される２つの別個のメディアストリームの一例としての画像８４０および８６０である。図４を参照して、サーバシステム１１４は、１つ以上の処理ユニット（たとえば、ＣＰＵ４０２、ＧＰＵ１４０、およびエンコーダ１４２）と、メモリ４０６と、任意でメモリ４０６の一部または別個のデータバッファ１４４とを含む。ＣＰＵ４０２、ＧＰＵ１４０、およびエンコーダ１４２は、ゲームセッションの設定、ゲーム状態データおよび他のゲーム関連データの格納、ゲームプレイ入力の処理、およびクライアントデバイス１０２および／または１０４上でのゲームプレイ出力のレンダリングを含むがこれらに限定されない、ゲームに関連するサーバ側機能（たとえば、ゲームアプリケーション２２８）を提供するようにともに機能する。いくつかの実装形態において、ＣＰＵ４０２は、ゲームコントローラ構成４５６を提供するためにクライアントデバイスとやり取りし、ゲームアプリケーション２２８の設定を容易にし、ゲームセッションまたは観客レビューセッションを設定し、かつ／またはゲームプレイ入力を受信するように構成される。ＧＰＵ１４０は、たとえば、シーンが再描画される度に照明効果を生成し、オブジェクトを変換することによって、ゲームプレイ入力を取得し、ゲームプレイマルチメディアコンテンツを生成するように構成される。
【０１１３】
エンコーダ１４２は、ＧＰＵ１４０によって提供されるゲームプレイマルチメディアコンテンツを、各々が所定のメディアフォーマットを有する１つ以上の出力メディアストリームに符号化（たとえば、標準化または圧縮）するように構成される。メディア符号化は、さまざまなカスタムまたは標準コーデック（たとえば、Ｈ．２６５／ＭＰＥＧ−Ｈ  ＨＥ  ＶＣコーデック、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣコーデック、Ｈ．２６３／ＭＰＥＧ４Ｐａｒｔ２コーデック、Ｈ．２６２／ＭＰＥＧ−２コーデック、Ｍｉｃｒｏｓｏｆｔコーデック、およびＧｏｏｇｌｅ  Ｏｎ２コーデック（たとえば、ＶＰ６、ＶＰ６−Ｅ、ＶＰ６−Ｓ、ＶＰ７、ＶＰ８、およびＶＰ９））および／または本明細書の出願の時点でまだ開発されていないコーデックを含む任意の他の適切なコーデックのいずれかに基づいて、エンコーダ１４２において実行されてもよい。任意で、エンコーダ１４２はＧＰＵ１４０の一部である。任意で、エンコーダ１４２はＧＰＵ１４０とは別個のものであり、データバッファ１４４はエンコーダ１４２とＧＰＵ１４０との間に結合される。具体的には、データバッファ１４４は、ＧＰＵ１４０によって生成されたゲームプレイマルチメディアコンテンツを、１つ以上の出力メディアストリームと関連付けて一時的に記憶する。エンコーダ１４２は、ゲームプレイマルチメディアコンテンツをデータバッファ１４４から検索し、ゲームプレイマルチメディアコンテンツを標準化する、高速化する、または圧縮する目的で、検索されたコンテンツを１つ以上のメディアストリームに符号化することができる。いくつかの実装形態において、エンコーダ１４２は、複数のエンコーダコア８００を含む。
【０１１４】
具体的には、エンコーダ１４２は、低レイテンシストリーム１３０および通常レイテンシストリーム１３２を含む複数のメディアストリームを生成するように構成される。低レイテンシストリーム１３０は、オンラインインタラクティブゲーミングセッション１１６に対応し、通常レイテンシストリーム１３２よりも速い応答レートおよび低い送信レイテンシを有する。いくつかの実装形態において、通常レイテンシストリーム１３２はまた、オンラインインタラクティブゲーミングセッション１１６に対応する。いくつかの実装形態において、通常レイテンシストリーム１３２は、低レイテンシストリーム１３０から独立しており、任意のゲームアプリケーションに無関係なメディアストリームであってもよい。サーバシステム１１４は、低レイテンシストリーム１３０の画像フレームのシーケンスを符号化するための所定のフレームレート（たとえば、６０ｆｐｓ）を識別する。第１の時間間隔（処理スライスと呼ばれることもある）は、低レイテンシストリーム１３０の第１の画像フレームのシーケンスにおける各画像フレームに対する所定のフレームレートに対応するように決定される。たとえば、第１の時間間隔は、６０ｆｐｓの所定のフレームレートに対して１６．６６７ｍｓである。図８Ｂを参照して、オンラインゲーミングセッション１１６は、それぞれが予め定められたフレームレートに従って決定される複数の第１の時間間隔を含む。各第１の時間間隔の間、低レイテンシストリーム１３０の第１の画像フレームのシーケンスの画像フレームが符号化され、低レイテンシストリーム１３０は所定のフレームレートで出力されてもよい。
【０１１５】
低レイテンシストリーム１３０の画像フレームが符号化された後、サーバシステム１１４はさらに、それぞれの第１の時間間隔内に残余時間が残っているか否かを判断する。状況によっては、第１の時間間隔内に残された残余時間が、通常レイテンシストリーム１３２に関連する通常レイテンシ要件を満たし、通常レイテンシストリームの第２の画像フレームのシーケンスのサブセットが第１の時間間隔の残余時間の間に符号化されると判断される。逆に、状況によっては、第１の時間間隔内に残された残余時間が通常のレイテンシ要件を満たしていないと判断されると、サーバシステム１１４は、第１の時間間隔の残余時間中に、画像フレームの第２のシーケンスの任意の画像フレームの生成を中止する。したがって、符号化優先度は、低レイテンシストリーム１３０に付与され、通常レイテンシストリーム１３２は、所定のフレームレートを保証することなく、エンコーダ１４２の能力に従って生成される。
【０１１６】
いくつかの実装形態において、低レイテンシストリーム１３０は、第１の画像フレームを含み、第１の画像フレームに対応する通常レイテンシストリーム１３２の第２の画像フレームのシーケンスのサブセットは、通常レイテンシ要件によって許可されるように、通常レイテンシストリーム１３２内の画像フレームの一部を含む。第１の画像フレームを符号化した後、サーバシステム１１４は、第１の時間間隔内に残された第１の残余時間を決定する。第１の時間間隔内に残された第１の残余時間は、通常レイテンシストリームに関連する通常レイテンシ要件を満たすと判断される。エンコーダ１４２は、第１の時間間隔の残りの時間の間に、通常レイテンシストリームにおいて画像フレームの一部を生成する。たとえば、画像フレームの部分は、通常レイテンシストリームにおける画像フレームの半分を含む。通常のレイテンシ要件に従って、第１の残余時間は、符号化するのに約２ｍｓを要する通常レイテンシストリームの画像フレームの少なくとも４分の１を符号化するのに十分でなければならない。第１の残余時間は、通常のレイテンシ要件に応じて２ｍｓ以上でなければならない。この例では、第１の残余時間はおよそ５ｍｓであり、したがって、通常レイテンシストリームにおける画像フレームの半分は、通常のレイテンシ要件に従って符号化される。
【０１１７】
いくつかの実装形態において、低レイテンシストリーム１３０は、第２の画像フレームを含み、第２の画像フレームに対応する通常レイテンシストリーム１３２の第２の画像フレームのシーケンスのサブセットは、通常レイテンシストリーム１３２内に２つ以上の画像フレームを含む。第２の画像フレームを符号化した後、サーバシステム１１４は、第１の時間間隔内に残された第１の残余時間を決定する。第１の時間間隔内に残された第１の残余時間は、通常レイテンシストリームに関連する通常レイテンシ要件を満たすと判断される。それによって、エンコーダ１４２は、第１の時間間隔の残余時間中に、通常レイテンシストリームにおいて２つ以上の画像フレームを生成する。たとえば、通常のレイテンシ要件は、第１の残余時間が、通常レイテンシストリームの整数個の画像フレームを符号化するのに十分でなければならないことを要求し得る。通常レイテンシストリームの各画像フレームを符号化するのに約２ｍｓかかる。第１の時間間隔の残余時間が５ｍｓである場合、通常レイテンシストリーム１３２の２つの画像フレームは、第１の時間間隔の残余時間内に符号化される。
【０１１８】
いくつかの実装形態において、エンコーダ１４２が第１の時間間隔の残余時間の間に通常レイテンシストリームの第２の画像フレームのシーケンスのサブセットを生成した後、サーバシステム１１４は、第１の時間間隔内に残された第２の残余時間を決定する。第１の時間間隔内に残された第２の残余時間は、第３のメディアストリームに関連する第３の要件を満たすと判断される。次いで、エンコーダ１４２は、第１の時間間隔の第２の残りの時間の間に第３のメディアストリームのサブセットを生成する。いくつかの実装形態において、第３のメディアストリームは、オンラインゲーミングセッションをプレイするゲームプレイヤーを捕捉するプレイヤーデモビデオストリームを含む。プレイヤーデモビデオストリームは、任意で、ゲームプレイヤーがオンラインインタラクティブセッション１１６をプレイしている間にゲームプレイヤーによって生成されるリアルタイムコメントを提供する。
【０１１９】
図８Ｃを参照して、いくつかの実装形態において、低レイテンシストリーム１３０および通常レイテンシストリーム１３２は、同じオンラインゲーミングセッション１１６に関連する。低レイテンシストリーム１３０は、第１の解像度（たとえば、４Ｋ）を有し、通常レイテンシストリーム１３２は、第１の解像度よりも低い第２の解像度（たとえば、１０８０ｐ）を有する。低レイテンシストリーム１３０は、オンラインインタラクティブゲーミングセッション１１６の間にゲームプレイヤによる複数のインタラクティブゲームアクション（たとえば、シューティング、ランニング、カーレース）を可能にするためにゲームプレイヤの第１のクライアントデバイスに送信される。通常レイテンシストリーム１３２は、１つ以上の第２のクライアントデバイスに送られ、１つ以上の観客がオンラインインタラクティブセッション１１６をリアルタイムでレビューすることを可能にする。いくつかの実装形態において、低レイテンシストリーム１３０は、フロントエンドサーバ１３４を介してゲーミングサービスに加入したゲームプレイヤにストリーム１３０を配信するように構成されたフロントエンドサーバ１３４に提供される。通常レイテンシストリーム１３２は、メディアストリーミングサーバ１２４に提供され、メディアストリーミングサーバ１２４は、通常レイテンシストリーム１３２を、メディアストリーミングサーバ１２４を介してサービスのレビューに加入した観客にブロードキャストするように構成される。任意で、フロントエンドサーバ１３４およびメディアストリーミングサーバ１２４は、単一のゲームアプリケーションを使用してエンティティによって管理される。任意で、フロントエンドサーバ１３４およびメディアストリーミングサーバ１２４は、ゲームアプリケーション（たとえば、ＦＩＦＡ  Ｓｏｃｃｅｒ  ａｐｐ）およびメディアストリーミングアプリケーション（たとえば、ＹｏｕＴｕｂｅ）などの２つの別個のエンドアプリケーションを使用して、２つの別個のエンティティによって管理される。任意で、フロントエンドサーバ１３４およびメディアストリーミングサーバ１２４は、２つの別個のエンドアプリケーションを使用して単一のエンティティによって管理することもできる。
【０１２０】
いくつかの実装形態において、第２のクライアントデバイスの各々は、より低い解像度、より高い送信レイテンシ、またはより遅い応答レートでゲームプレイヤの第１のクライアントデバイスに表示されたものを複製する通常レイテンシストリーム１３２を単に表示しない。むしろ、ゲームプレイに関連する追加の情報も、ゲームプレイヤの第１のクライアントデバイスに表示されるものと並行して観客に提示される。たとえば、カメラは、ゲームプレイヤーがオンラインゲーミングセッション１１６をプレイしている間にゲームプレイヤーの画像データ（すなわち、プレイヤーデモビデオストリーム）をキャプチャするために使用される。プレイヤーデモビデオストリームは、ゲームプレイヤーがオンラインインタラクティブセッション１１６をプレイしている間にゲームプレイヤーによって作成されたリアルタイムコメントを含むことができる。サーバシステム１１４は、ゲームプレイヤの取り込まれたプレイヤデモビデオストリームを取得する。任意で、プレイヤーデモビデオストリームは、観客の第２のクライアントデバイスに送信される通常レイテンシストリーム１３２に組み込まれる。任意で、プレイヤーデモビデオストリームは、それぞれのクライアントデバイスに別々に送られるが、通常レイテンシストリーム１３２で再生される。プレイヤーデモビデオストリームは、オンラインインタラクティブセッション１１６の通常レイテンシストリームと並行して１つ以上の観客に再生される。状況によっては、プレイヤーデモビデオストリームは、第２のクライアントデバイスの各々の埋込みウィンドウ８６２において再生される一方、通常レイテンシストリーム１３０は、それぞれの第２のクライアントデバイスに表示される。
【０１２１】
代替的に、いくつかの実装形態において、ゲームプレイヤーがオンラインゲーミングセッションをプレイしている間に、ゲームプレイヤーのプレイヤーデモオーディオストリームが記録される。任意で、プレイヤーデモオーディオストリームは、観客の第２のクライアントデバイスに送信される通常レイテンシストリーム１３２に組み込まれる。任意で、プレイヤーデモオーディオストリームは、第２のデバイスの各々に別々に送信され、通常レイテンシストリーム１３２と併せて再生される。プレイヤーデモオーディオストリームは、オンラインインタラクティブセッションの通常レイテンシストリーム１３２と並行して１人以上の観客に再生される。
【０１２２】
いくつかの実装形態において、低レイテンシストリーム１３０の第１の画像フレームのシーケンスを符号化するための予め定められたフレームレートは、第１のしきい値レイテンシに基づいて決定される。さらに、いくつかの実装形態において、通常レイテンシストリーム１３０は、第２のしきい値レイテンシより小さい第２のレイテンシを有し、第２のしきい値レイテンシは、第１のしきい値レイテンシよりも大きい。特に、たとえば、観客に提供される通常レイテンシストリーム１３２は、ゲームプレイヤーに提供される低レイテンシストリーム１３０ほどレイテンシの影響を受けない。いくつかの実装形態において、低レイテンシストリーム１３０および通常レイテンシストリーム１３２の両方が、同じオンラインインタラクティブセッション１１６に対応する。低レイテンシストリーム１３０および通常レイテンシストリーム１３２は、オンラインインタラクティブセッション１１６に関連するゲームプレイヤーによるプレイヤーアクションの結果をレンダリングするための第１の応答レートおよび第２の応答レートをそれぞれ有する。ゲーム層は観客よりもプレイヤーアクションの結果をレンダリングするためのレイテンシの影響を受けやすいため、低レイテンシストリーム１３０の第１の応答レートは、通常レイテンシストリーム１３２の第２の応答レートより大きい。
【０１２３】
図９は、いくつかの実装形態に係る、メディアストリームを並行して提供するための一例としての方法９００を示すフローチャートである。方法９００は、任意で、コンピュータメモリまたは非一時的なコンピュータ読取可能記憶媒体（たとえば、図４のゲームサーバモジュール４２６のマルチストリーム生成モジュール４３０）に記憶され、サーバシステム１１４の１つ以上のプロセッサ（たとえば、ゲームサーバ１２２のエンコーダ１４２）によって実行される命令によって制御される。コンピュータ読取可能記憶媒体は、磁気または光ディスク記憶デバイス、フラッシュメモリなどのソリッドステート記憶デバイス、または他の不揮発性メモリデバイスを含み得る。コンピュータ読取可能記憶媒体に記憶された命令は、以下のうちの１つ以上を含み得る：ソースコード、アセンブリ言語コード、オブジェクトコード、または１つ以上のプロセッサによって解釈される他の命令フォーマット。方法９００におけるいくつかの動作は組み合わされてもよく、および／またはいくつかの動作の順序が変更されてもよい。
【０１２４】
方法９００は、１つ以上の処理コア（たとえば、エンコーダ１４２は、１つ以上のエンコーダコア８００をさらに含む）と、処理コアによって実行するためのプログラムを記憶するメモリとを含むサーバシステム１１４によって実行される。サーバシステム１１４は、エンコーダ１４２によって、低レイテンシストリーム１３０および通常レイテンシストリーム１３２を含む複数のメディアストリームを生成する（９０２）。低レイテンシストリーム１３０は、オンラインインタラクティブセッションに対応し、通常レイテンシストリーム１３２よりも応答速度が速く、送信レイテンシが低い。具体的には、サーバシステム１１４は、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレートを識別する（９０４）。低レイテンシストリームの第１の画像フレームのシーケンス内の各画像フレームについて、サーバシステム１１４は、所定のフレームレートに対応する第１の時間間隔を決定する（９０６）。エンコーダ１４２は、第１の時間間隔の間に画像フレームを符号化する（９０８）。
【０１２５】
画像フレームを符号化した後、サーバシステムは、第１の時間間隔内に残された残余時間を決定する（９１０）。サーバシステム１１４（いくつかの実装形態において、エンコーダ１４２自体）は、第１の時間間隔内に残された残余時間が、通常レイテンシストリームに関連する通常のレイテンシ要件を満たすか否かを判断する。状況によっては、第１の時間間隔内に残された残余時間が通常レイテンシ要件を満たすという判断に従って、エンコーダ１４２は、第１の時間間隔の残余時間の間に、通常レイテンシストリームの第２の画像フレームのシーケンスのサブセットを生成する（９１２）。代替的に、状況によっては、第１の時間間隔内に残された残余時間が通常のレイテンシ要件を満たしていないという判断に従って、エンコーダ１４２は、第１の時間間隔の残余時間の間に画像フレームの第２のシーケンスの任意の画像フレームの生成を中止する（９１４）。
【０１２６】
メディアストリームを並行して提供するための方法９００に関するさらなる詳細は、図８を参照して先に述べた通りである。図９の動作が説明された特定の順序は、例示的なものにすぎず、説明された順序が動作を実行することができる唯一の順序であることを示すものではないことを理解されたい。当業者は、本明細書に記載のサーバシステムの処理能力を管理するさまざまな方法を認識するであろう。
【０１２７】
この用途では、並行メディアストリームを提供する方法９００は、１つ以上の追加のストリーム、たとえば、通常レイテンシストリームより高い応答レートおよびより低い送信レイテンシを必要とする低レイテンシストリームに符号化優先度を与える。一連の時間間隔のそれぞれの間、低レイテンシストリームの画像は最初に符号化され、時間間隔内に残された残りの時間は無駄にされることなく、１つ以上の追加のメディアストリームの少なくとも一部を符号化するために利用される。いくつかの実装形態において、サーバシステム１１４は、１つ以上の追加のメディアストリームを符号化するための各時間間隔により多くの残余時間を残すことができるように、低レイテンシストリームを効率的な方法で符号化するようにエンコーダ１４２を構成する。たとえば、サーバシステム１１４のエンコーダ１４２は、その部分を符号化するために必要な情報がＧＰＵ１４０によって提供されるとすぐに、その部分の符号化された部分とは無関係な画像フレームの他の部分がＧＰＵ１４０によって利用可能にされるか否かとは無関係に、画像フレームの一部を符号化することによって、対応する時間間隔の間に低レイテンシストリームの画像フレームを符号化することを容易にすることができる。したがって、サーバシステム１１４のエンコーダ１４２は、ＧＰＵ１４０が画像フレーム全体の利用可能データを作成するまで待つ必要がなく、それによって、低レイテンシストリームの画像フレームを符号化し、低レイテンシストリームとは異なる１つ以上の追加のストリームを符号化するための対応する時間間隔でより多くの時間を費やす。
【０１２８】
マルチコア並列符号化
図１０Ａは、いくつかの実装形態に係る、メディアストリーム内の画像フレームの複数の画像タイル１０００を処理するために割り当てられるエンコーダコア８００のブロック図である。図１０Ｂは、いくつかの実装形態に係る、画像タイル中のブロックを符号化する一例としてのプロセス１０４０である。図４および図８Ａを参照して、サーバシステム１１４は、ＧＰＵ１４０に結合され、ＧＰＵによって提供されるマルチメディアコンテンツを符号化（たとえば、標準化または圧縮）して、各々が所定のメディアフォーマットを有する１つ以上の出力メディアストリームにするように構成されたエンコーダ１４２を含む。ＧＰＵ１４０によって提供されるマルチメディアコンテンツは、画像フレームのシーケンスからなるメディアストリームを含む。従来、エンコーダ１４２がさらなる符号化のためにデータバッファ１４４から画像フレーム全体を取り出すことができるように、各画像フレームはＧＰＵ１４０によって準備され、その全体によってデータバッファ１４４に格納される必要がある。本願のいくつかの実装形態に従うと、エンコーダ１４２は、その部分を符号化するために必要とされる情報がＧＰＵ１４０によって提供される場合に、その部分を符号化するために必要とされない画像フレームの他の部分がＧＰＵ１４０によって利用可能にされるか否かに関わらず、画像フレームの部分を符号化するように構成される。
【０１２９】
エンコーダ１４２は、複数のエンコーダコア８００を含む。サーバシステム１１４のエンコーダコア８００は、オンラインゲーミングセッションに関連付けられ、データバッファ１４４に格納された画像フレームのフレームデータを識別する。フレームデータは、第１の解像度を有する。そして、複数のエンコーダコア８００は、フレームデータの複数の画像タイル１０００を同時に並列に処理するために割り当てられ、複数の画像タイル１０００は、画像フレームのレンダリング仕様に従って定められる。複数の画像タイル１０００は、第１のエンコーダコア８００Ａに割り当てられた第１の画像タイル１０００Ａを含み、第１の画像タイル１０００Ａは、ブロックの第１のシーケンスを含む。エンコーダコア８００（たとえば、第１のエンコーダコア８００Ａ）は、画像フレーム全体のフレームデータが利用可能になった後に画像フレームを符号化し始めるのを待つのではなく、部分フレームデータの利用可能性の判断に基づいて画像フレームを符号化し始める。
【０１３０】
具体的には、いくつかの実装形態において、第１のエンコーダコア８００Ａは、第１のエンコーダコア８００Ａに割り当てられた第１の画像タイル１０００Ａのブロックの第１のシーケンスの第１のブロック１００２をデータバッファ１４４から取得する。また、第１のエンコーダコア８００Ａは、第１のブロック１００２の境界情報を取得する。第１のエンコーダコア１０００Ａは、データバッファ１４４からブロックの第１のシーケンス内の第１のブロックに続く第２のブロック１００４を取得する間または取得する前に、境界情報に基づいてブロックの第１のシーケンスの第１のブロック１００２を符号化する。符号化された第１のブロック１００２は、オンラインゲーミングセッションに関連するユーザのクライアントデバイスに送信される。任意で、第２のブロック１００４は、画像フレーム内の第１のブロックに直に隣接している。任意で、第２のブロック１００４は、画像フレーム内の第１のブロックに直に隣接していない。
【０１３１】
いくつかの実装形態において、符号化された第１のブロック１００２は、クライアントデバイスに表示される前に、クライアントデバイスのフレームバッファ１００６に一時的に格納される。ここで、第２のブロック１００４は、第１のブロック１００２を符号化する操作に関与しないので、第１のブロックおよび対応する境界情報が利用可能であるとすぐに、第２のブロック１００４がデータバッファ１４４（すなわち、第２のブロック１００４は、データバッファ１４４内で既に利用可能であるか、またはＧＰＵ１４０によってまだ提供されていない可能性がある）内で利用可能か否かに関わらず、第１のブロック１００２を符号化することができる。状況によっては、第１のブロックがデータバッファ１４４から取得される間、第２のブロックは、データバッファ１４４に記憶されておらず、または準備ができておらず、ＧＰＵによってデータバッファ１４４にロードされている。さらに、状況によっては、第１のブロックが第１のエンコーダコア８００Ａにおいて符号化されている間、第２のブロックは既にデータバッファ１４４において利用可能であり、第３のブロックはＧＰＵ１４０によってデータバッファ１４４にロードされている。第３のブロックは、第１のブロック１００２および第２のブロック１００４が符号化された後に続いて符号化される。
【０１３２】
いくつかの実装形態において、第１のブロック１００２の境界情報は、第１の画像タイル１０００Ａ内のブロックの第１のサブセットによって提供される。任意で、ブロックの第１のサブセットの各々は、ブロックの第１のシーケンスにおいて第１のブロック１００２に先行するか、または後続する。さらに、いくつかの実装形態において、第１の画像タイル１０００Ａは、ブロックの第１のサブセットとブロックを共有しないブロックの第２のサブセットを含み、第１のブロック１００２は、第１のエンコーダコア８００Ａがブロックの第２のサブセットのいずれかを取得または符号化したか否かとは無関係に符号化される。任意で、ブロックの第２のサブセットは、第２のブロック１００４を含む。
【０１３３】
いくつかの実装形態において、サーバシステム１１４は、第１のブロック１００２の境界情報が、第１の画像タイルとは別個のそれぞれのエンコーダコア８００に割り当てられた第２の画像タイルの第３のブロックによって提供されないと判断する。第１のブロック１００２は、第２の画像タイルを処理するために割り当てられたそれぞれのエンコーダコアが第３のブロックを受信または符号化したか否かとは無関係に符号化される。別の言い方をすれば、第１のブロック１００２が第１のエンコーダコア８００Ａによって符号化されるとき、第３のブロックは、それぞれのエンコーダコアによって符号化されているか、まだデータバッファ１４４内に記憶されて利用可能にされていないか、またはそれぞれのエンコーダコアにおいて符号化されるためにデータバッファ１４４内で待つことができる。
【０１３４】
いくつかの実装形態において、画像フレームの各画像タイル１０００は、それぞれのブロックシーケンスを含み、各ブロックは、線形ブロック変換（たとえば、離散コサイン変換（ＤＣＴ））に基づく対応する画像およびビデオ圧縮フォーマットにおける基本処理単位である１つ以上のマクロブロックで構成される。すなわち、第１の画像タイル内のブロックの第１のシーケンスの各々は、いくつかのマクロブロック（たとえば、単一のマクロブロック、２つ以上のマクロブロック）を含む。一例では、マクロブロックは１６×１６画素からなり、変換ブロック（たとえば、１６×１６ルマ（Ｙ）ブロックおよび８×８クロマ（ＣｂおよびＣｒ）ブロック）または予測ブロック（たとえば、インター予測またはイントラ予測のための４×４または１６×１６ブロック）にさらに細分される。
【０１３５】
第１のブロック１００２は、それが符号化されるまで、または境界情報として第１のブロック１００２を使用する任意のブロックが符号化されるまで、データバッファ１４４に格納される必要がある。別の言い方をすれば、第１のブロック１００２自体と第１のブロック１００２を境界情報として使用する任意のブロックの両方が符号化された後、第１のブロック１００２をデータバッファ１４４からパージすることができる。したがって、データバッファ１４４は、画像フレーム内の他のブロックの格納に使用するために予備的であり、画像フレーム内のすべてのブロックを収容することができるサイズを有する必要はない。その結果、データバッファ１４４のサイズを低減することができ、画像フレームをエンコーダ１４２において効率的な方法で符号化することができる（主に、エンコーダ１４２は、画像フレーム全体に対してフレームデータが利用可能であることをそれ以上要求しないからである）。
【０１３６】
図１１Ａ〜１１Ｃは、いくつかの実装形態に係る、オンラインインタラクティブセッションに関連する画像フレームのフレームデータのレンダリング仕様に従って定められる画像タイル１１００、１１２０および１１４０の例である。このように、描画仕様に応じて、画像フレームのフレームデータを複数の画像タイルに分割することができる。図１１Ａを参照して、いくつかの実装形態において、画像フレームのフレームデータは、第１のレンダリング仕様に従って画像タイル１１００の単一の行に分割される。各画像タイル１１００は、画像フレームの上部から下部に延在するいくつかの画素列を含む。特定の例において、メディア符号化は、標準ＶＰ８コーデックに基づいてエンコーダ１４２において実行され、ＶＰ８コーデックに従って、第１のレンダリング仕様は、エンコーダ１４２によって符号化された各画像フレームが、１つの行に配置され、画像フレームの全高さに及ぶ８つのタイルに分割されることを定める。いくつかの実装形態において、エンコーダ１４２の基本処理ユニットは、１つ以上のマクロブロック１１０２を含む。タイル１１００の各々は、画像フレームの第１の数のマクロブロック列と第２の数のマクロブロック行とを含む。各タイル１１００は、画像フレームの上部から下部に延在するので、それぞれの画像タイル１１００の第２のマクロブロック行数は、画像フレーム内のマクロブロック行の数に等しい。
【０１３７】
図１１Ｂを参照して、いくつかの実装形態において、画像フレームのフレームデータは、第２のレンダリング仕様に従って画像タイル１１２０の単一の列に分割される。各画像タイル１１００は、画像フレームの左端から右端に延在するいくつかの画素行を含む。いくつかの実装形態において、エンコーダ１４２の基本処理ユニットは、１つ以上のマクロブロック１１０２を含み、画像フレームのフレームデータは、第２のレンダリング仕様に従ってタイルの単一の列１１２０に分割される。タイル１１００の各々は、画像フレームの第１の数のマクロブロック列と第２の数のマクロブロック行とを含む。各タイル１１００は、画像フレームの左側から右側に延在するので、それぞれの画像タイル１１００の第１のマクロブロック列の数は、画像フレーム内のマクロブロック列の数に等しい。
【０１３８】
図１１Ｃを参照して、いくつかの実装形態において、画像フレームのフレームデータは、第３のレンダリング仕様に従って画像タイル１１４０のアレイに分割される。画像タイルのアレイ１１４０は、画像タイルの２つ以上の行および画像タイルの２つ以上の列（たとえば、２行５列の画像タイル）を含む。
【０１３９】
いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ１４２内のエンコーダコア８００の数に等しい。一例では、画像フレームは８つのタイルを含み、エンコーダ１４２は８つのエンコーダコア８００を含む。いくつかの状況では、複数のエンコーダコア８００の各々は、画像フレームのフレームデータから区分された複数のタイル１１００の別個のタイルを処理するように割り当てられてもよい。代替的に、状況によっては、エンコーダコア８００Ａは、タイル（たとえば、図１１Ａの１１００Ａおよび１１００Ｃ、図１１Ｂの１１２０Ａおよび１１２０Ｃ）のうちの２つ以上を処理するように割り当てられ、一方、複数のエンコーダコア８００のうちの１つは、タイルのいずれかを処理するように割り当てられない。
【０１４０】
いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ１４２内のエンコーダコア８００の数より多くすることができる。少なくとも１つのエンコーダコア８００は、タイル（たとえば、図１１Ａの１１００Ａおよび１１００Ｃ、図１１Ｂの１１２０Ａおよび１１２０Ｃ）のうちの２つ以上を処理するために割り当てられる。いくつかの状況では、画像タイルの数がコアの数よりも多い場合であっても、複数のエンコーダコア８００のうちの１つは、タイルのいずれかを処理するように割り当てられなくてもよい。
【０１４１】
さらに、いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ１４２内のエンコーダコア８００の数未満であってもよい。状況によっては、エンコーダコア８００のサブセットの各々は、画像フレームのフレームデータから区分された複数のタイルの別個のタイルを処理するように割り当てられる。少なくとも１つのエンコーダコア８００は、タイルのいずれかを処理するために割り当てられないが、状況によっては、エンコーダコア８００Ａは、タイルのうちの２つ以上（たとえば、図１１Ａの１１００Ａおよび１１００Ｃ、図１１Ｂの１１２０Ａおよび１１２０Ｃ）を処理するために依然として割り当てられる。
【０１４２】
いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ１４２内のエンコーダコア８００の数とは無関係である。代替的に、いくつかの実装形態において、レンダリング仕様は、エンコーダ１４２内のエンコーダコア８００の数に関連付けられ、画像タイルの数は、エンコーダ１４２内のエンコーダコア８００の数に従って決定される。
【０１４３】
いくつかの実装形態において、第１の画像タイル１０００Ａの第１のブロック１００２Ａを符号化するために必要な境界情報は、同じ第１の画像タイル１０００Ａ（図１１Ａ）内の１つ以上のブロックを含む。任意で、１つ以上のブロックの各々は、第１のブロック１００２Ａに直に隣接しているか、または第１の画像タイル１０００Ａの任意の場所に位置している。一例では、１つ以上のブロックは、左上ブロックＡ、上ブロックＢ、右上ブロックＣ、左ブロックＤ、右ブロックＥ、左下ブロックＦ、下ブロックＧ、および右下ブロックＨを含む、第１のブロック１００２を取り囲む８つのブロックすべてを含む。別の例では、１つ以上のブロックは、隣接するブロック、すなわち、上ブロックＢ、左ブロックＤ、右ブロックＥ、および下ブロックＧのみを含む。第１のブロック１００２Ａは、１つ以上のブロックの情報がデータバッファ１４４から受信された後に符号化される。第２のブロック１００４Ａは、第１のブロック１００２Ａが符号化されている間またはその後に得られ、よって、第２のブロック１００４も、第１のブロック１００２Ａの境界情報として１つ以上のブロックが得られた後に得られる。
【０１４４】
さらに、いくつかの実装形態において、第１の画像タイル１０００Ａの第１ブロック１００２Ｂを符号化するのに必要な境界情報は、１つ以上のブロックを含んでいる。第１のブロック１００２Ｂは、第１の画像タイル１０００Ａの境界に近いので、第１のブロック１００２Ｂを符号化するために使用される１つ以上のブロックは、２つ以上の画像タイルに属する。任意で、１つ以上のブロックの各々は、第１のブロック１００２Ａに直に隣接しているか、または２つ以上の画像タイルのうちの１つの任意の場所に位置している。一例では、１つ以上のブロックは、左上ブロックＡ’、上ブロックＢ’、右上ブロックＣ’、左ブロックＤ’、右ブロックＥ’、左下ブロックＦ’、下ブロックＧ’、および右下ブロックＦＦを含む、第１のブロック１００２Ｂを取り囲む８つのブロックすべてを含む。図１１Ａを参照して、１つ以上のブロックは、第１の画像タイル１１００Ａのブロックの第１のサブセット（たとえば、ブロックＡ’、Ｂ’、Ｄ’、Ｆ’およびＧ’）と第２の画像タイル１１００Ｂのブロックの第２のサブセット（すなわち、Ｃ’、Ｅ’およびＨ’である）とを含む。図１１Ｃを参照して、第３の画像タイル１１４０Ｃの第１のブロック１００２Ｂを符号化するために必要な境界情報は、ブロックの４つのサブセットをさらに含む１つ以上のブロックを含む。ブロックの４つのサブセットの各々は、それぞれ第１、第２、第３および第４の画像タイル（すなわち、第１の画像タイル１１４０ＡのブロックＡ’およびＢ’；第２の画像タイル１１４０ＢのブロックＣ’；第３の画像タイル１１４０ＣのブロックＤ’、Ｆ’、およびＧ’；ならびに第４の画像タイル１１４０ＤのブロックＥ’およびＨ’）に属する。
【０１４５】
別の例では、第１のブロック１００２に対応する１つ以上のブロックは、隣接するブロック、すなわち、上ブロックＢ’、左ブロックＤ’、右ブロックＥ’、および下ブロックＧ’のみを含む。図１１Ａを参照して、１つ以上のブロックは、第１の画像タイル１１００Ａ（たとえば、ブロックＢ’、Ｄ’およびＧ’）のブロックの第１のサブセットと、第２の画像タイル１１００Ｂのブロックの第２のサブセット（すなわち、Ｅ’）とを含む。図１１Ｃを参照して、第３の画像タイル１１４０Ｃの第１のブロック１００２Ｂを符号化するために必要な境界情報は、ブロックの３つのサブセットをさらに含む１つ以上のブロックを含む。ブロックの３つのサブセットの各々は、それぞれ第１、第３および第４の画像タイル（すなわち、第１の画像タイル１１４０ＡのブロックＢ’、第３の画像タイル１１４０ＣのブロックＤ’およびＧ’、および第４の画像タイル１１４０ＤのブロックＥ’である）に属する。第１のブロック１００２Ｂは、対応するエンコーダコアによって符号化される前に、１つ以上のブロックの情報がデータバッファ１４４から受信されるのを待つ必要がある。第２のブロック１００４Ｂは、第１のブロック１００２Ｂが符号化されている間または符号化された後、データバッファ１４４から取得されるので、第２のブロック１００４Ｂも、第１のブロック１００２Ｂの境界情報として１つ以上のブロックが取得された後に取得される。
【０１４６】
図１２Ａ〜図１２Ｃは、いくつかの実装形態に係る、オンラインインタラクティブセッションに関連する画像フレームのフレームデータのラスタースキャン１２００、１２２０および１２４０の例である。ＧＰＵ１４０は、画像フレームの各ピクチャ要素（たとえば画素）を所定のラスター順序に従って生成し、それぞれのピクチャ要素に対応するデータをデータバッファ１４４に格納することによって、それぞれのピクチャ要素のデータを所定のラスター順序に従ってエンコーダ１４２に利用可能にする。これにより、エンコーダ１４２は、各ピクチャ要素のデータが利用可能である場合、すなわち所定のラスター順序に従って、データバッファのラスタースキャンによって画像フレームのフレームデータを抽出する。以上説明したように、各エンコーダコア８００は、各符号化ブロックの画像タイル順次であり、たとえば、第１エンコーダコア８００Ａは、対応する第１の画像タイル１０００Ａのシーケンスのブロック（たとえば、第１のブロック１００２および第２のブロック１００４）を取得して符号化する。特に、各画像タイルのブロックは、ブロックを符号化するのに必要な情報がＧＰＵ１４０によって提供されたときに、ブロックの符号化に必要ではない画像フレームの他のブロックがＧＰＵ１４０によってデータバッファで利用可能にされるか否かとは関係なく、符号化される。すなわち、一例では、フレームデータは、第１のブロック１００２および第２のブロック１００４に対応する画素（たとえば、画素）のデータを含み、第１のブロック１００２および第２のブロック１００４は、第１のブロック１００２および第２のブロック１００４に対応する画素のデータが、所定のラスター順序に従って抽出されながら取得される。
【０１４７】
図１２Ａを参照して、第１の所定のラスター順序に従って、ＧＰＵ１４０は、行ごとに画像フレームの各画素を生成し、それぞれの画素に対応するデータを行ごとにデータバッファ１４４に格納する。画像フレームのフレームデータがデータバッファ１４４内で利用可能にされている間、それらもまた、第１の所定のラスター順序に従って行ごとにデータバッファ１４４から抽出される。画像フレームの各行は、２つ以上の画像タイルからのデータを含む。たとえば、画像フレームのフレームデータは、画像タイル１１００（たとえば、５つの画像タイル１２０２〜１２１０を含む）の単一の行に分割される。画像フレームの奇数行の画素のデータは、画像フレームの左側から右側に向かって、すなわち画像タイル１２０２、１２０４、１２０６、１２０８および１２１０に対して順次利用可能にされる。一方、画像フレームの偶数行の画素のデータは、画像フレームの右側から右側の順番で、すなわち画像タイル１２１０、１２０８、１２０６、１２０４、１２０２に対して順次利用可能となる。
【０１４８】
いくつかの実装形態において、第１のブロック１００２を符号化するために、第１のエンコーダコア８００Ａは、第１のブロック１００２および１つ以上のブロックＡ〜Ｈを含む対応する境界情報を取得する。任意で、１つ以上のブロックＡ〜Ｈの第１のサブセットまたは全部は、第１のブロック１００２を含む同じ第１の画像タイル１２０２に属する。任意で、１つ以上のブロックＡ〜Ｈ（たとえば、図１２ＡのブロックＣ、ＥおよびＨ）の第２のサブセットは、第１の画像タイル１２０２とは異なる第２の画像タイル１２０４に属する。第１のブロック１００２および１つ以上のブロックＡ〜Ｈの各々は、１つ以上の画素、たとえば４、１６または２５６画素を含む。図１２Ａの例では、第１のエンコーダコア８００Ａは、第１のブロック１００２を符号化する前に、第１のブロック１００２およびブロックＡ〜Ｆのすべてのピクチャ要素のデータを少なくとも取得しなければならない。第１のエンコーダコア８００Ａは、データバッファ１４４から画像フレームの最初の４行を抽出した後、第１のブロック１００２を取得する。しかし、第１のエンコーダコア８００Ａは、第１のブロック１００２を直ちに符号化しない。むしろ、データバッファ１４４のラスタースキャンは継続し、第１のエンコーダコア８００Ａは、ラスタースキャンが画像フレームの第６の行に到達したときにブロックＦのデータを完全に取得した後、第１のブロック１００２の符号化を開始する。
【０１４９】
さらに多くのピクチャ要素が利用可能にされ、データバッファ１４４から抽出されるとき、エンコーダ１４２のエンコーダコア８００は、画像フレーム全体のフレームデータが利用可能にされるのを待つことなく、それらの対応する画像タイル内のブロックを画像フレームの上部から下部へ並列に符号化し始める。この並列符号化機構は、エンコーダ１４２の全レイテンシを削減し、画像フレームに必要な符号化時間を短縮する。一例では、エンコーダ１４２は、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレート（たとえば、６０ｆｐｓ）を識別し、所定のフレームレートに対応する第１の時間間隔（たとえば、１６．６７ｍｓ）を決定する。各第１の時間間隔の間に、画像フレームに必要とされる符号化時間が短縮される場合、第１の時間間隔内に残る残りの時間は、通常レイテンシストリームの第２の画像フレームのシーケンスのサブセットを符号化するために延長することができ、それによって、たとえば、２つ以上のメディアストリームの並行符号化を可能にする。図８Ｃに示されるように、ゲームシーンに関連して２つの別個のクライアントデバイスにおいて並行して表示される２つの別個のメディアストリーム。
【０１５０】
図１２Ｂを参照して、第２の所定のラスター順序に従って、ＧＰＵ１４０は、画像フレームの画像タイル１２０２〜１２１０を順次生成し、たとえば、第１の画像タイル１２０２に隣接する第２の画像タイル１２０４の前に第１の画像タイル１２０２を生成する。各画像タイルについて、ＧＰＵ１４０は、それぞれの画像タイル内の画素を行ごとに生成し、それぞれの画像タイル内の画素に対応するデータを、それぞれの画像タイルのすべての画素が生成され、格納されるまで、行ごとにデータバッファ１４４に格納する。画像フレームのフレームデータがデータバッファ１４４において利用可能にされている間、それらもまた、第２の所定のラスター順序に従ってエンコーダ１４２によってデータバッファ１４４から抽出される。具体的には、エンコーダ１４２は、画像フレームのフレームデータの画像タイル１２０２〜１２１０を順次抽出し、各画像タイルについて、ＧＰＵ１４０によって利用可能にされた後、各画像タイルの画素を行ごとに行単位で抽出する。たとえば、第１の画像タイル１２０２内の画素のデータが、ＧＰＵ１４０によって上側から下側へジグザグのラスター順序でデータバッファ１４４内で利用可能にされている間、画素のデータは、対応するエンコーダコア８００Ａによって上側から下側へ同じジグザグのラスター順序でデータバッファ１４４から抽出される。その結果、ＧＰＵ１４０は、第１の画像タイル１２０２全体のデータを利用可能にして抽出した後、他の画像タイル１２０４〜１２１０の各々の画素のデータを、ジグザグラスター順に上から下に順次生成して記憶し続ける。そして、エンコーダ１４２は、ＧＰＵ１４０に追従して、各画像タイル内の画素のデータを、ジグザグラスター順に上から下へデータバッファ１４４から抽出する。
【０１５１】
図１２Ｂに示されるいくつかの実装形態において、第１のエンコーダコア８００Ａは、第１のブロック１００２および１つ以上のブロックＡ〜Ｈを含む対応する境界情報を取得する。第１のエンコーダコア８００Ａは、第１のブロック１００２を符号化する前に、第１のブロック１００２およびブロックＡ〜Ｆのすべてのピクチャ要素のデータを少なくとも取得しなければならない。任意で、１つ以上のブロックＡ〜Ｈ（たとえば、図１２ＢのブロックＣ、ＥおよびＨ）の第２のサブセットは、第１の画像タイル１２０２とは別個であるが隣接する第２の画像タイル１２０４に属する。第１のエンコーダコア８００Ａは、第１の画像タイル１２０２の最初の４つの行をデータバッファ１４４から抽出した後に、第１のブロック１００２を取得する。しかし、第１のエンコーダコア８００Ａは、第１のブロック１００２を直ちに符号化しない。むしろ、データバッファ１４４のラスタースキャンは継続し、第１のエンコーダコア８００Ａは、ラスタースキャンが第２の画像タイル１２０４の第６の行に到達したときにブロックＦのデータを完全に取得した後、第１のブロック１００２の符号化を開始する。
【０１５２】
本願に示されていないいくつかの実装形態において、第１の画像タイル１２０２は、第１のブロック１００２と１つ以上のブロックＡ〜Ｈの両方を含む。第１のエンコーダコア８００は、第１のブロック１００２および第１の画像タイル内のブロックＡ〜Ｈの画像要素を完全に取得した後、第１のブロック１００２を符号化する。第１のブロック１００２を符号化するために、ラスタースキャンは、他の画像タイル１２０４〜１２１０とは独立して第１の画像タイル１２０２に制限され、たとえば、第１のエンコーダコア８００Ａは、ラスタースキャンが第１の画像タイル１２０２内のすべてのブロックについて終了されるか、第２の画像タイル１２０４内の任意のブロックに到達するまで待つ必要はない。
【０１５３】
各タイル内の画像タイルおよび画像要素の行が利用可能になり、データバッファ１４４から抽出されると、エンコーダ１４２のエンコーダコア８００は、画像フレーム全体のフレームデータが利用可能になるのを待つことなく、それらの対応する画像タイル内の上から下にブロックを符号化し始める。図１２Ａに示される第１の所定のラスター順序は、画像タイルを処理するように割り当てられたエンコーダコアが、互いに実質的に近い完了時間でそれぞれの画像タイルの符号化を完了することを可能にする。一方、図１２Ｂに示される第２の所定のラスター順序は、第１のエンコーダコア８００Ａが、第１の画像タイル１２０２の後に利用可能にされる画像タイルを処理するために割り当てられる他のエンコーダコア８００よりも早く、第１の画像タイル１２０２の符号化を開始し、完了することを可能にする。第１の画像タイル１２０２においてブロックを符号化した後、第１のエンコーダコア８００Ａは、同じ画像フレームまたは別個の画像フレームのサブセットにおいて別の画像タイル（たとえば、画像タイル１２１０）を符号化するように割り当てることができ、そうすることにより、たとえば、図８Ｃに示されるように、ゲームシーンに関連して２つの別個のクライアントデバイスにおいて並行して表示される２つの別個のメディアストリームである、２つ以上のメディアストリームの画像フレームを並行して符号化することを可能にする。
【０１５４】
図１２Ｃを参照して、画像フレーム内の画像タイル１２０２〜１２１０の各々は、複数のセグメントを含み、各セグメントは、第１の数の行を含む。第３の所定のラスター順序に従って、ＧＰＵ１４０は、画像タイル１２０２〜１２１０内のセグメントを行ごとに生成し、たとえば、第２の画像タイル１２０４の第１のセグメント１２１４の前に第１の画像タイル１２０２の第１のセグメント１２１２を生成する。各画像タイルの各セグメントについて、ＧＰＵ１４０は、それぞれのセグメント内の画素の第１の数の行を行ごとに生成し、それぞれのセグメントのすべての画素が生成され、格納されるまで、画像タイルのそれぞれのセグメント内の画素に対応するデータを行ごとにデータバッファ１４４に格納する。画像フレームの各セグメントのフレームデータがデータバッファ１４４において利用可能にされている間、それらはまた、第２の所定のラスター順序に従ってエンコーダ１４２によってデータバッファ１４４から抽出される。
【０１５５】
具体的には、エンコーダ１４２は、画像フレームのフレームデータの画像タイル１２０２〜１２１０のセグメントを行毎に順次抽出する。各画像タイル内の各セグメントについて、エンコーダ１４２は、ＧＰＵ１４０によって利用可能にされた後、行ごとに、ジグザグラスター順序で、各セグメントの画素を抽出する。たとえば、第１の画像タイル１２０２の第１のセグメント１２１２内の画素のデータが、ＧＰＵ１４０によって上から下へジグザグのラスター順序でデータバッファ１４４内で利用可能にされている間、画素のデータは、対応するエンコーダコア８００Ａによって上から下へ同じジグザグのラスター順序でデータバッファ１４４から抽出される。結果として、第１の画像タイル１２０２の第１のセグメント１２１２のデータが利用可能にされ、抽出された後、ＧＰＵ１４０は、上から下へ、ジグザグラスター順序で、第２の画像タイル１２０４の第１のセグメント１２１４内の画素のデータを生成し、記憶し続ける。そして、エンコーダ１４２は、ＧＰＵ１４０に従って、第２の画像タイル１２０４の第１のセグメント１２１４内の画素のデータをデータバッファ１４４から抽出する。第１のセグメント１２１２に続く第１の画像タイル１２０２の第２のセグメント１２１６は、画像タイル１２０２〜１２１０のすべての第１のセグメントの後に利用可能にされ、抽出される。
【０１５６】
ある程度、第３の所定のラスター順序は、図１２Ａおよび図１２Ｂに示される第１および第２の所定のラスター順序の組み合わせである。また、ジグザグラスター順序は、画像タイル１２０２〜１２１０の各セグメント内の画素をスキャンするために使用される内部ラスター順序の一例にすぎず、内部ラスター順序はジグザグラスター順序に限定されないことにも留意されたい。
【０１５７】
図１２Ｃに示されるいくつかの実装形態において、第１のエンコーダコア８００Ａは、第１のブロック１００２および１つ以上のブロックＡ〜Ｈを含む対応する境界情報を取得する。第１のエンコーダコア８００Ａは、第１のブロック１００２を符号化する前に、第１のブロック１００２およびブロックＡ〜Ｆのすべてのピクチャ要素のデータを少なくとも取得しなければならない。任意で、１つ以上のブロックＡ〜Ｈ（たとえば、図１２ＢのブロックＣ、ＥおよびＨ）の第２のサブセットは、第１の画像タイル１２０２とは別個であるが隣接する第２の画像タイル１２０４に属する。第１のエンコーダコア８００Ａは、第１の画像タイル１２０２内の第４のセグメントをデータバッファ１４４から抽出した後に、第１のブロック１００２を取得する。
しかし、第１のエンコーダコア８００Ａは、第１のブロック１００２を直ちに符号化しない。むしろ、データバッファ１４４のラスタースキャンは継続し、第１のエンコーダコア８００Ａは、ラスタースキャンが第２の画像タイル１２０４の第５のセグメントに到達したときにブロックＨのデータを完全に取得した後、第１のブロック１００２の符号化を開始する。
【０１５８】
図１３は、いくつかの実装形態に係る、メディアストリームを符号化するための一例としての方法１３００を示すフローチャートである。方法１３００は、任意で、コンピュータメモリまたは非一時的なコンピュータ読取可能記憶媒体（たとえば、図４のゲームサーバモジュール４２６の並列符号化モジュール４３２）に格納されサーバシステム１１４の１つ以上のプロセッサ（たとえば、ゲームサーバ１２２のエンコーダ１４２）によって実行される命令によって支配される。コンピュータ読取可能記憶媒体は、磁気または光ディスク記憶デバイス、フラッシュメモリなどのソリッドステート記憶デバイス、または他の不揮発性メモリデバイスを含み得る。コンピュータ読取可能記憶媒体に記憶された命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または１つ以上のプロセッサによって解釈される他の命令フォーマットのうちの１つ以上を含み得る。方法１３００におけるいくつかの動作は組み合わされてもよく、および／またはいくつかの動作の順序が変更されてもよい。
【０１５９】
方法１３００は、メディアストリームを符号化するためにサーバシステム１１４によって実行される。サーバシステム１１４は、ＧＰＵ１４０と、複数のエンコーダコア８００と、データバッファ１４４と、ＧＰＵ１４０およびエンコーダコア８００によって実行されるプログラムを格納するメモリとを含む。エンコーダコア８００は、オンラインゲーミングセッションに関連付けられ、フレームデータの少なくとも一部が利用可能にされると、データバッファ１４４に格納された画像フレームのフレームデータの少なくとも一部を識別する（１３０２）。任意で、フレームデータは第１の解像度を有する。
【０１６０】
複数のエンコーダコア８００は、フレームデータの複数の画像タイルを同時に並列に処理するために割り当てられる（１３０４）。複数の画像タイルは、レンダリング仕様に従って定められる。いくつかの実装形態において、レンダリング仕様に従って、画像フレームのフレームデータが画像タイルの行に区分される。たとえば、ＶＰ８に対応するレンダリング仕様は、各画像フレームが、１つの行に配置された８つのタイルに分割され、各タイルが、それぞれの画像フレーム内の上から下に延在することを定めている。言い換えれば、各画像タイルは、画像フレームのいくつかのマクロブロック列および各画像タイルのいくつかのマクロブロック行を含み、各画像タイルのマクロブロック行の数は、画像フレームのマクロブロック行の数に等しい。各マクロブロックは、線形ブロック変換に基づく対応する画像およびビデオ圧縮フォーマットにおける処理ユニットであり、任意で、１６×１６画素または６４×６４画素のアレイを含む。いくつかの実装形態において、フレームデータの複数の画像タイルは、いくつかの画像タイルを含み、画像タイルの数は、複数のエンコーダコア内の処理コアの数に応じて決定される。
【０１６１】
複数の画像タイルは、第１のエンコーダコア８００Ａに割り当てられた第１の画像タイル（たとえば、画像タイル１０００Ａ、１１００Ａ、１１２０Ａ、１１４０Ａ、および１２０２）を含む（１３０６）。いくつかの実装形態において、第１のエンコーダコア８００Ａは、第１の画像タイルを符号化した後、第１の画像タイルに隣接しない第３の画像タイルを処理するように割り当てられる。第１の画像タイルは、ブロックの第１のシーケンスを含み、ブロックの第１のシーケンスの各々は、いくつかの（たとえば、１、２、および４）マクロブロックを含む。
【０１６２】
第１のエンコーダコアは、第１のエンコーダコアに割り当てられた第１の画像タイルのブロックの第１のシーケンスの第１のブロック１００２をデータバッファから取得する（１３０８）。第１のエンコーダコアは、第１のブロックの境界情報を取得する（１３１０）。いくつかの実装形態において、第１のブロックの境界情報は、第１の画像タイル中のブロックの第１のサブセットによって提供される。さらに、第１の画像タイルは、ブロックの第１のサブセットとブロックを共有しないブロックの第２のサブセットを含み、第１のブロックは、第１のエンコーダコアがブロックの第２のサブセットのいずれかを取得または符号化したか否かとは無関係に符号化される。いくつかの実装形態において、第１のエンコーダコアは、第１のブロックの境界情報が、第１の画像タイルとは異なる第２の画像タイルの第３のブロックによって提供されないと判断し、第２の画像タイルを処理するように割り当てられたそれぞれのエンコーダコアが第３のブロックを受信または符号化したか否かとは無関係に、第１のブロックを符号化する。
【０１６３】
ブロックの第１のシーケンス内の第１のブロックに続く第２のブロック１００４をデータバッファ１４４から取得する間または取得する前に、第１のエンコーダコアは、境界情報に基づいてブロックの第１のシーケンスの第１のブロック１００２を符号化する（１３１２）。境界情報には第２のブロックが必要である。任意で、第２のブロックは第１のブロックに直に隣接している。任意で、第２のブロックは第１のブロックに直に隣接しない。いくつかの実装形態において、第１のブロックは、第１のエンコーダコアが第１の画像タイルのブロックの第１のシーケンス内の第１のブロックに続く任意の他の符号化ブロックの取得を完了したか否かとは無関係に符号化される。状況によっては、第１のブロックが第１のエンコーダコアによってデータバッファから取得される間に、第２のブロックがＧＰＵ１４０によって準備され、データバッファ１４４にロードされる。
【０１６４】
さらに、いくつかの実装形態において、第１の画像タイルは、第３のブロックをさらに含む。第１のエンコーダコア８００Ａが第１のブロックを符号化している間、第３のブロックはＧＰＵ１４０によってデータバッファ１４４にロードされている。第３のブロックは、第１のブロックおよび第２のブロックの符号化に続いて符号化される。
【０１６５】
次いで、符号化された第１のブロック１００２は、オンラインゲーミングセッションに関連するユーザのクライアントデバイスに送信される（１３１４）。いくつかの実装形態において、符号化された第１のブロック１００２は、画像フレームのすべてのブロックが符号化された後に送信される。いくつかの実装形態において、符号化された第１のブロック１００２は、画像フレーム中のブロックのサブセットが符号化された後に送信される。
【０１６６】
いくつかの実装形態において、画像フレームのフレームデータは、所定のラスター順序に従ってデータバッファ１４４のラスタースキャンによってエンコーダ１４２によって抽出される。フレームデータは、第１のブロックおよび第２のブロックに対応する画素のデータを含み、第１のブロックおよび第２のブロックは、第１のブロックおよび第２のブロックに対応する画素のデータを所定のラスター順序に従って抽出しながら取得される。さらに、いくつかの実装形態において、画像フレームのフレームデータは、所定のラスター順序に従って行ごとに画像フレームから抽出され、画像フレームの各行は、２つ以上の画像タイルからのデータを含む。代替的に、いくつかの実装形態において、各画像タイルからのデータがそれぞれのラスタースキャンによって抽出されるとき、画像フレームのフレームデータがさらに抽出され、複数の画像タイルがそれらのそれぞれのデータを抽出するために順次スキャンされる。また、所定のラスター順序は内部ラスター順序を含み、各画像タイル内のラスタースキャンは内部ラスター順序に従う。
【０１６７】
代替的に、いくつかの実装形態において、各画像タイルは複数のセグメントを含み、セグメントの各々はさらに第１の数の画素行を含む。所定のラスター順序に従って、画像フレームの複数の画像タイルのセグメントが行ごとに走査され、各画像タイルの各セグメント内の画素が内部ラスター順序によって走査される。別の例では、第１の画像タイルの第１の行数がラスタースキャンによって抽出される。エンコーダ１４２は、第１画像タイルの第１行数を抽出した後、ラスタースキャンにより第２画像タイルの第１行数を抽出する。第１および第２の画像タイルの各々の第１の数の行の後に第２の数の行が続く。エンコーダ１４２は、第２画像タイルの第１行数を抽出した後、ラスタースキャンにより第１画像タイルの第２行数を抽出する。エンコーダは、第１の画像タイルの第２の行数を抽出した後、ラスタースキャンによって第２の画像タイルの第２の行数を抽出する。所定のラスター順序は内部ラスター順序を含み、第１および第２の画像タイルの各々内のラスタースキャンは内部ラスター順序に従う。
【０１６８】
データバッファから画像フレームのフレームデータを抽出することに関するさらなる詳細は、図１２Ａ〜図１２Ｃを参照して先に述べた通りである。
【０１６９】
図１３の動作が説明された特定の順序は、例示的なものにすぎず、説明された順序が動作を実行することができる唯一の順序であることを示すものではないことを理解されたい。当業者は、本明細書に記載のサーバシステムの処理能力を管理するさまざまな方法を認識するであろう。
【０１７０】
要約すると、本願のいくつかの実装形態は、低レイテンシおよびソフトリアルタイムワークロードをサポートするＧＰＵ仮想化に関し、より具体的には、複数の処理スライスをさらに含む１つ以上の処理コアを有するサーバシステムの処理能力を管理する方法に関する。オンラインゲーミングセッションを開始することを求める要求を受信すると、サーバシステムは、処理コアの各処理スライスを、その上で実行されるべきオンラインゲーミングセッションのサブセットに割り当てる。第１の処理スライスは、第１のゲーミングセッションおよび第２のゲーミングセッションを含むオンラインゲーミングセッションの第１のサブセットに割り当てられる。第１の処理スライスでは、オンラインゲーミングセッションの第１のサブセットに対してタイムシェアリング処理スケジュールが決定される。タイムシェアリング処理スケジュールに従って、第１および第２のゲーミングセッションは、第１の処理スライスのデューティサイクルを共有し、第１および第２のゲーミングセッションのリアルタイムデータ処理の必要性に従って動的かつ並列に実行される。
【０１７１】
本願のいくつかの実装形態は、複数のメディアストリームを並行してレンダリングすることに関し、より具体的には、少なくとも低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを並行してレンダリングする方法に関する。低レイテンシストリームは、オンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも応答速度が速く、送信レイテンシが低い。エンコーダプロセッサは、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレートを識別する。低レイテンシストリームの各画像フレームについて、所定のフレームレートに従って時間間隔が決定され、画像フレームはその時間間隔の間に符号化される。時間間隔内に残された残余時間が通常レイテンシストリームに関連する通常レイテンシ要件を満たすか否かの判断に従って、エンコーダプロセッサは、任意で、時間間隔の残余時間の間に通常レイテンシストリームの画像フレームのサブセットを生成する。
【０１７２】
本願のいくつかの実装形態は、リアルタイムビデオ符号化のためのマルチコアハードウェアアクセラレータに関し、より具体的には、メディアストリームを符号化する方法に関する。エンコーダプロセッサは、オンラインゲーミングセッションに関連する画像フレームのフレームデータを識別し、フレームデータの複数の画像タイルを同時にかつ並列に処理するためにそのエンコーダコアを割り当てる。画像タイルは、第１のエンコーダコアに割り当てられ、ブロックの第１のシーケンスを含む第１の画像タイルを含む。第１のエンコーダコアは、第１の画像タイルの第１のブロックおよび第１のブロックの境界情報を取得する。ブロックの第１のシーケンスにおいて第１のブロックに続く第２のブロックを得る間またはその前に、第１のエンコーダコアは、境界情報に基づいてブロックの第１のシーケンスの第１のブロックを符号化し、符号化された第１のブロックをオンラインゲーミングセッションに関連するユーザのクライアントデバイスに送信する。
【０１７３】
さまざまな実装形態を詳細に参照し、その例を添付の図面に示している。上記詳細な説明では、本発明および記載された実装の完全な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、本発明は、これらの具体的な詳細を伴わずに実施されてもよい。他の例では、実装形態を不必要に不明瞭にしないように、周知の方法、手順、構成要素、および回路は詳細には説明していない。
【０１７４】
「第１」、「第２」などの用語は、本明細書ではさまざまな要素を記述するために使用される場合があるが、これらの要素は、これらの用語によって限定されるべきではないことを理解されたい。これらの用語は、１つの要素を別の要素から区別するためにのみ使用される。たとえば、第１のデバイスを第２のデバイスと呼ぶことができ、同様に、第２のデバイスは、第１のデバイスのすべての記載が一貫して名称変更され第２のデバイスのすべての記載が一貫して名称変更される限り、説明の意味を変更することなく、第１のデバイスと呼ぶことができる。第１のデバイスおよび第２のデバイスは、どちらもデバイスであるが、同じデバイスではない。
【０１７５】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的とし、請求項を限定することを意図するものではない。実装形態の説明および添付の請求項において使用される、単数形「ａ」、「ａｎ」および「ｔｈｅ」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことを意図している。本明細書で使用される「および／または」という用語は、関連する列挙された項目のうちの１つ以上の任意のおよびすべての可能な組み合わせを意味し包含することも、理解されるであろう。本明細書で使用される場合、「ｃｏｍｐｒｉｓｅｓ」および／または「ｃｏｍｐｒｉｓｉｎｇ」（含む／備える）という用語は、記載された特徴、整数、ステップ、動作、要素、および／または構成要素の存在を特定するが、１つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、および／またはそれらのグループの存在または追加を排除するものではないことが、さらに理解されるであろう。
【０１７６】
本明細書で使用される、「ｉｆ」（もし〜ならば）という用語は、文脈に応じて、記載された条件が真である「ｗｈｅｎ」もしくは「ｕｐｏｎ」（とき、場合に）、または、真であるという「判断に応答して」または「判断に従って」または「検出に応答して」を、意味していると解釈されてもよい。同様に、「記載された条件が真であると判断された場合」または「記載された条件が真である場合」または「記載された条件が真であるとき」という表現は、文脈に応じて、記載された条件が真であるという「判断がなされると」または「判断に応答して」または「判断に従って」または「検出がなされると」または「検出に応答して」を意味すると、解釈されてもよい。
【０１７７】
上記説明は、説明を目的として、特定の実装形態を参照して記載されている。しかしながら、上記例示的説明は、網羅することまたは本発明を開示された形態そのものに限定することを意図していない。上記教示に鑑みて多くの修正および変形が可能である。実装形態は、本発明の原理およびその実用的な用途を最良に説明し、それによって、他の当業者が本発明およびさまざまな実装形態を、意図された特定の用途に適するようにさまざまな修正を伴って最良に利用できるようにするために、選択され記載されている。
【図１Ａ】
2021516071.tif 000003
【図１Ｂ】
2021516071.tif 000004
【図１Ｃ】
2021516071.tif 000005
【図２】
2021516071.tif 000006
【図３】
2021516071.tif 000007
【図４】
2021516071.tif 000008
【図５Ａ】
2021516071.tif 000009
【図５Ｂ】
2021516071.tif 000010
【図５Ｃ】
2021516071.tif 000011
【図５Ｄ】
2021516071.tif 000012
【図５Ｅ】
2021516071.tif 000013
【図６】
2021516071.tif 000014
【図７】
2021516071.tif 000015
【図８Ａ】
2021516071.tif 000016
【図８Ｂ】
2021516071.tif 000017
【図８Ｃ】
2021516071.tif 000018
【図８Ｄ】
2021516071.tif 000019
【図９】
2021516071.tif 000020
【図１０Ａ】
2021516071.tif 000021
【図１０Ｂ】
2021516071.tif 000022
【図１１Ａ】
2021516071.tif 000023
【図１１Ｂ】
2021516071.tif 000024
【図１１Ｃ】
2021516071.tif 000025
【図１２Ａ】
2021516071.tif 000026
【図１２Ｂ】
2021516071.tif 000027
【図１２Ｃ】
2021516071.tif 000028
【図１３】
2021516071.tif 000029
【手続補正書】
【提出日】令和2年12月7日(2020.12.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
低レイテンシストリームおよび通常レイテンシストリームを並行して提供する方法であって、
前記方法は、前記低レイテンシストリームの画像フレームの第１のシーケンスにおける各画像フレームごとに、
予め定められたフレームレートに対応する時間間隔を求めるステップと、
前記時間間隔中に前記画像フレームを符号化するステップと、
前記時間間隔における残余時間の量が前記通常レイテンシストリームに対応付けられたレイテンシ要件を満たすと判断するステップと、
前記時間間隔の前記残余時間中に前記通常レイテンシストリームの画像フレームの第２のシーケンスのサブセットを生成するステップとを含み、
前記方法はさらに、
ゲームプレイヤーの第１のクライアントデバイスに、オンラインインタラクティブセッション中、前記ゲームプレイヤーによる複数のインタラクティブアクションを可能にするために、前記低レイテンシストリームを送信するステップと、
１つ以上の第２のクライアントデバイスに、前記オンラインインタラクティブセッションを１人以上の観客がリアルタイムで観ることができるようにするために、前記通常レイテンシストリームを送信するステップとを含む、方法。
【請求項２】
前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に取り込まれた前記ゲームプレイヤーのプレイヤーデモビデオストリームを取得するステップと、
前記プレイヤーデモビデオストリームを、前記オンラインインタラクティブセッションの前記通常レイテンシストリームと並行して前記プレイヤーデモビデオストリームが前記１人以上の観客に対して再生されるように、前記通常レイテンシストリームに含めるステップとをさらに含む、請求項１に記載の方法。
【請求項３】
前記通常レイテンシストリームが前記１つ以上の第２のクライアントデバイス上に表示されている間に前記プレイヤーデモビデオストリームを埋め込まれたウィンドウとして表示できるようにするステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記プレイヤーデモビデオストリームは、前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に前記ゲームプレイヤーが作成したリアルタイムコメンタリーを含む、請求項２に記載の方法。
【請求項５】
前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に記録された前記ゲームプレイヤーのプレイヤーデモ音声ストリームを取得するステップと、
前記オンラインインタラクティブセッションの前記通常レイテンシストリームと並行して前記プレイヤーデモ音声ストリームが前記１人以上の観客に対して再生されるように、前記プレイヤーデモ音声ストリームを前記通常レイテンシストリームに含めるステップとをさらに含む、請求項２に記載の方法。
【請求項６】
前記低レイテンシストリームおよび前記通常レイテンシストリームは互いに独立している、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記低レイテンシストリームは前記通常レイテンシストリームよりも速い応答レートおよび低い送信レイテンシを有する、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
第１のしきい値レイテンシに基づいて前記低レイテンシストリームの画像フレームの前記第１のシーケンスを符号化するための前記予め定められたフレームレートを求めるステップをさらに含む、請求項１〜７のいずれか１項に記載の方法。
【請求項９】
前記通常レイテンシストリームは、第２のしきい値レイテンシ未満の第２のレイテンシ時間を有し、前記第２のしきい値レイテンシは前記第１のしきい値レイテンシよりも大きい、請求項８に記載の方法。
【請求項１０】
前記低レイテンシストリームおよび前記通常レイテンシストリームの双方は、前記オンラインインタラクティブセッションに対応し、
前記オンラインインタラクティブセッションに対応付けられた前記ゲームプレイヤーによる前記複数のインタラクティブアクションのうちの１つに応じて、前記低レイテンシストリームおよび前記通常レイテンシストリームは、それぞれ、前記複数のインタラクティブアクションのうちの１つの結果をレンダリングするための第１の応答レートおよび第２の応答レートを有し、
前記第１の応答レートは前記第２の応答レートよりも速い、請求項１〜９のいずれか１項に記載の方法。
【請求項１１】
前記低レイテンシストリームは第１の画像フレームを含み、前記第１の画像フレームに対応する前記通常レイテンシストリームの画像フレームの前記第２のシーケンスの前記サブセットは、前記通常レイテンシストリームにおける画像フレームの一部を含み、前記方法は、
前記第１の画像フレームを符号化するステップと、
前記第１の画像フレームを符号化するための前記時間間隔における残余時間の量が、前記通常レイテンシストリームに対応付けられた前記レイテンシ要件を満たすか否かを判断するステップと、
前記第１の画像フレームを符号化するための前記時間間隔の前記残余時間中に前記通常レイテンシストリームにおける前記画像フレームの一部を生成するステップとを含む、請求項１〜１０のいずれか１項に記載の方法。
【請求項１２】
前記低レイテンシストリームは第２の画像フレームを含み、前記第２の画像フレームに対応する前記通常レイテンシストリームの画像フレームの前記第２のシーケンスの前記サブセットは、前記通常レイテンシストリームにおける２つ以上の画像フレームを含み、前記方法は、
前記第２の画像フレームを符号化するステップと、
前記第２の画像フレームを符号化するための前記時間間隔における残余時間の量が前記通常レイテンシストリームに対応付けられた前記レイテンシ要件を満たすと判断するステップと、
前記第２の画像フレームを符号化するための前記時間間隔の前記残余時間中に前記通常レイテンシストリームにおける前記２つ以上の画像フレームを生成するステップとを含む、請求項１〜１０のいずれか１項に記載の方法。
【請求項１３】
前記画像フレームの第１のシーケンスの各々の前記時間間隔の前記残余時間は第１の残余時間であり、前記方法はさらに、
前記低レイテンシストリームの画像フレームの前記第１のシーケンスにおける各画像フレームごとに、
前記時間間隔の前記第１の残余時間中に前記通常レイテンシストリームの画像フレームの前記第２のシーケンスの前記サブセットを生成した後に、前記時間間隔における第２の残余時間を求めるステップと、
前記時間間隔における前記第２の残余時間が第３のストリームに対応付けられた別のレイテンシ要件を満たすという判断に従い、前記時間間隔の前記第２の残余時間中に前記第３のストリームの画像フレームのサブセットを生成するステップとを含む、請求項１〜１２のいずれか１項に記載の方法。
【請求項１４】
サーバシステムであって、
エンコーダと、
前記エンコーダが実行する１つ以上のプログラムを格納するメモリとを備え、前記１つ以上のプログラムは、請求項１〜１３のいずれか１項に記載の方法を実行するための命令を含む、サーバシステム。
【請求項１５】
請求項１〜１３のいずれか１項に記載の方法をコンピューターに実行させるためのプログラム。
【国際調査報告】
2021516071.tif 000030
2021516071.tif 000031
2021516071.tif 000032
2021516071.tif 000033
2021516071.tif 000034
2021516071.tif 000035
2021516071.tif 000036