(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-07
(45)【発行日】2022-01-24
(54)【発明の名称】オンラインインタラクティブゲーミングセッションのコンテンツをレンダリングおよび符号化するための方法およびシステム
(51)【国際特許分類】
A63F 13/358 20140101AFI20220117BHJP
A63F 13/35 20140101ALI20220117BHJP
【FI】
A63F13/358
A63F13/35
(21)【出願番号】P 2020528874
(86)(22)【出願日】2019-03-06
(86)【国際出願番号】 US2019020935
(87)【国際公開番号】W WO2019182752
(87)【国際公開日】2019-09-26
【審査請求日】2020-12-07
(32)【優先日】2018-03-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ロイ,ジャン-フランソワ
(72)【発明者】
【氏名】フオポネン,ジャニ
(72)【発明者】
【氏名】ジムリング,ダブ
(72)【発明者】
【氏名】クーセラ,アキ
(72)【発明者】
【氏名】スマレン,クリントン
(72)【発明者】
【氏名】ラロンド,ポール
(72)【発明者】
【氏名】レベンティス,ポール
【審査官】前地 純一郎
(56)【参考文献】
【文献】国際公開第2017/007659(WO,A1)
【文献】特表2007-506305(JP,A)
【文献】特表2011-507077(JP,A)
【文献】特開2014-130589(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
A63F 13/00-13/98
A63F 9/24
(57)【特許請求の範囲】
【請求項1】
低レイテンシストリームおよび通常レイテンシストリームを並行して提供する方法であって、
前記方法は、前記低レイテンシストリームの画像フレームの第1のシーケンスにおける各画像フレームごとに、
予め定められたフレームレートに対応する時間間隔を求めるステップと、
前記時間間隔中に前記画像フレームを符号化するステップと、
前記時間間隔における残余時間の量が前記通常レイテンシストリームに対応付けられたレイテンシ要件を満たすと判断するステップと、
前記時間間隔の前記残余時間中に前記通常レイテンシストリームの画像フレームの第2のシーケンスのサブセットを生成するステップとを含み、
前記方法はさらに、
ゲームプレイヤーの第1のクライアントデバイスに、オンラインインタラクティブセッション中、前記ゲームプレイヤーによる複数のインタラクティブアクションを可能にするために、前記低レイテンシストリームを送信するステップと、
1つ以上の第2のクライアントデバイスに、前記オンラインインタラクティブセッションを1人以上の観客がリアルタイムで観ることができるようにするために、前記通常レイテンシストリームを送信するステップとを含む、方法。
【請求項2】
前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に取り込まれた前記ゲームプレイヤーのプレイヤーデモビデオストリームを取得するステップと、
前記プレイヤーデモビデオストリームを、前記オンラインインタラクティブセッションの前記通常レイテンシストリームと並行して前記プレイヤーデモビデオストリームが前記1人以上の観客に対して再生されるように、前記通常レイテンシストリームに含めるステップとをさらに含む、請求項1に記載の方法。
【請求項3】
前記通常レイテンシストリームが前記1つ以上の第2のクライアントデバイス上に表示されている間に前記プレイヤーデモビデオストリームを埋め込まれたウィンドウとして表示できるようにするステップをさらに含む、請求項2に記載の方法。
【請求項4】
前記プレイヤーデモビデオストリームは、前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に前記ゲームプレイヤーが作成したリアルタイムコメンタリーを含む、請求項2に記載の方法。
【請求項5】
前記ゲームプレイヤーが前記オンラインインタラクティブセッションをプレイしている間に記録された前記ゲームプレイヤーのプレイヤーデモ音声ストリームを取得するステップと、
前記オンラインインタラクティブセッションの前記通常レイテンシストリームと並行して前記プレイヤーデモ音声ストリームが前記1人以上の観客に対して再生されるように、前記プレイヤーデモ音声ストリームを前記通常レイテンシストリームに含めるステップとをさらに含む、請求項2に記載の方法。
【請求項6】
前記低レイテンシストリームおよび前記通常レイテンシストリームは互いに独立してい
る、請求項
1~5のいずれか1項に記載の方法。
【請求項7】
前記低レイテンシストリームは前記通常レイテンシストリームよりも速い応答レートおよび低い送信レイテンシを有す
る、請求項
1~6のいずれか1項に記載の方法。
【請求項8】
第1のしきい値レイテンシに基づいて前記低レイテンシストリームの画像フレームの前記第1のシーケンスを符号化するための前記予め定められたフレームレートを求めるステップをさらに含
む、請求項
1~7のいずれか1項に記載の方法。
【請求項9】
前記通常レイテンシストリームは、第2のしきい値レイテンシ未満の第2のレイテンシ時間を有し、前記第2のしきい値レイテンシは前記第1のしきい値レイテンシよりも大きい、請求項8に記載の方法。
【請求項10】
前記低レイテンシストリームおよび前記通常レイテンシストリームの双方は、前記オンラインインタラクティブセッションに対応し、
前記オンラインインタラクティブセッションに対応付けられた前記ゲームプレイヤーによる前記複数のインタラクティブアクションのうちの1つに応じて、前記低レイテンシストリームおよび前記通常レイテンシストリームは、それぞれ、前記複数のインタラクティブアクションのうちの1つの結果をレンダリングするための第1の応答レートおよび第2の応答レートを有し、
前記第1の応答レートは前記第2の応答レートよりも速
い、請求項
1~9のいずれか1項に記載の方法。
【請求項11】
前記低レイテンシストリームは第1の画像フレームを含み、前記第1の画像フレームに対応する前記通常レイテンシストリームの画像フレームの前記第2のシーケンスの前記サブセットは、前記通常レイテンシストリームにおける画像フレームの一部を含み、前記方法は、
前記第1の画像フレームを符号化するステップと、
前記第1の画像フレームを符号化するための前記時間間隔における残余時間の量が、前記通常レイテンシストリームに対応付けられた前記レイテンシ要件を満たすか否かを判断するステップと、
前記第1の画像フレームを符号化するための前記時間間隔の前記残余時間中に前記通常レイテンシストリームにおける前記画像フレームの一部を生成するステップとを含
む、請求項
1~10のいずれか1項に記載の方法。
【請求項12】
前記低レイテンシストリームは第2の画像フレームを含み、前記第2の画像フレームに対応する前記通常レイテンシストリームの画像フレームの前記第2のシーケンスの前記サブセットは、前記通常レイテンシストリームにおける2つ以上の画像フレームを含み、前記方法は、
前記第2の画像フレームを符号化するステップと、
前記第2の画像フレームを符号化するための前記時間間隔における残余時間の量が前記通常レイテンシストリームに対応付けられた前記レイテンシ要件を満たすと判断するステップと、
前記第2の画像フレームを符号化するための前記時間間隔の前記残余時間中に前記通常レイテンシストリームにおける前記2つ以上の画像フレームを生成するステップとを含む、請求項1~10のいずれか1項に記載の方法。
【請求項13】
前記画像フレームの第1のシーケンスの各々の前記時間間隔の前記残余時間は第1の残余時間であり、前記方法はさらに、
前記低レイテンシストリームの画像フレームの前記第1のシーケンスにおける各画像フレームごとに、
前記時間間隔の前記第1の残余時間中に前記通常レイテンシストリームの画像フレームの前記第2のシーケンスの前記サブセットを生成した後に、前記時間間隔における第2の残余時間を求めるステップと、
前記時間間隔における前記第2の残余時間が第3のストリームに対応付けられた別のレイテンシ要件を満たすという判断に従い、前記時間間隔の前記第2の残余時間中に前記第3のストリームの画像フレームのサブセットを生成するステップとを含
む、請求項
1~12のいずれか1項に記載の方法。
【請求項14】
サーバシステムであって、
エンコーダと、
前記エンコーダが実行する1つ以上のプログラムを格納するメモリとを備え、前記1つ以上のプログラムは、請求項1~13のいずれか1項に記載の方法を実行するための命令を含む、サーバシステム。
【請求項15】
請求項1~13のいずれか1項に記載の方法を
コンピューターに実行
させるための
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、概して、1つ以上のリアルタイムユーザインタラクティブアプリケーションに対応するオンラインインタラクティブセッションをサポートするためにサーバシステムを管理するための方法およびシステムを含むがこれらに限定されないコンピュータ技術に関する。
【背景技術】
【0002】
背景
インターネットに接続された電子デバイスは、クラウドベースのさまざまなメディアおよびエンターテイメントアプリケーションをサポートすることができる。これらのアプリケーションは、サーバがユーザデバイスにコンテンツをストリーミングするメディアストリーミングアプリケーション、ユーザが、ユーザデバイスから、サーバ上で実行されるゲームとやり取りするゲーミングアプリケーション、ならびに、多数のユーザが、並行して、インターネットに接続された彼らのデバイスを介して相互にかつクラウドにホストされているコンテンツおよびアプリケーションとやり取りすることを可能にする、さまざまなソーシャルメディアおよび通信アプリケーションを含む。クラウドベースのアプリケーションのうちでもクラウドゲーミングは固有のいくつかの課題を提起するが、その理由は、ゲーミングタイトルのハードウェア要求が多岐にわたること、クラウドベースのゲームを(たとえば1人のプレイヤー、1つの場所の複数のプレイヤー、または複数の場所の複数のプレイヤーが)プレイすることが可能なトポロジが多様であること、ゲーミングセッションを実行するゲーミングサーバへのプレイヤー入力およびゲーミングサーバからプレイヤーのデバイス/ディスプレイへのゲーミングセッション出力を確実にレイテンシなしで送信する必要があること、ゲームプレイのスピードおよび反応性に関するプレイヤーの大きく異なる期待、ならびに、状況によってはほぼリアルタイムでゲーミングコンテンツを観客に提供したいという要望、にある。クラウドベースのゲーミングのその他の課題は、プレイヤーがいる場所(たとえばサーバに近い、またはサーバから遠い)にかかわらず、ゲーミングサービスへの接続方法(たとえば高速または低速のインターネット接続経由)にかかわらず、かつ、プレイヤーがゲームをプレイするために使用するデバイスのタイプ(たとえば汎用パーソナルデバイスまたは専用ゲームコントローラ)およびゲームプレイ出力を閲覧するために使用するデバイスのタイプ(たとえばパーソナルデバイスまたはメディアストリーミングデバイスに接続されたメディアデバイス)にかかわらず、一貫したゲームプレイ体験をプレイヤーに提供することに、関連する。
【0003】
具体的には、複数のゲーミングタイトルの複数のゲーミングセッションをサポートするクラウドゲーミングシステムが必要とされており、このシステムにおいて、ゲームは、許容可能なレイテンシおよび応答性で並行して実行することができ、広範にわたる入力および出力デバイスおよびネットワーク接続を用いて同一または異なる場所から同一のゲームタイトルをプレイしている複数のプレイヤーを含む。加えて、ゲーミングセッションにおいてプレイヤー入力(たとえばエンドユースゲーミングデバイス/コントローラに入力されたゲーミング入力)を受信すると、直ちにユーザ入力を処理し、すべてのゲームプレイヤーに対して同時にかつ許容可能なレイテンシでプレイヤー入力アクションの結果を反映する高精細画像を出力する、クラウドゲーミングシステムが必要とされている。また、状況によっては、観客がゲームプレイをそれぞれのディスプレイデバイス上でリアルタイムにフォローできるようにするゲームプレイアクティビティの高精細ビデオストリームを提供する、ゲーミングシステムが必要とされている。また、場合によっては観客者がそれぞれの表示装置上でゲームプレイをリアルタイムでフォローできるようにするゲームプレイアクティビティの高精細ビデオストリームを提供する、ゲーミングシステムが必要とされている。よって、同じ場所に集まったユーザによる自発的なゲームプレイから、異なる場所の複数のユーザによるオンラインインタラクティブゲームプレイまで、広範囲にわたるゲーミング設定において、ゲーミング体験を拡張する、効率的なゲーム処理および出力機構を有するクラウドゲーミングシステムを提供することが、有益であろう。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
本明細書に記載の実装形態は、ゲーミングコンテンツの効率的でポータブルで低レイテンシのホスティングを可能にする、ゲーミングアプリケーションプログラミングインターフェイス(API)およびクラウドプラットフォームを提供することに関する。いくつかの実装形態は、クラウドゲーミングハードウェアリソースを動的に割り当て、個々のエンドユーザが利用できるネットワーク帯域幅をモニタリングおよび利用することにより、最適なクラウドゲーミング体験を提供する。いくつかの実装形態は、高精細メディア出力およびエンドユーザストリームとともに高性能のリアルタイムゲーミングセッションをサポートする層を含む、複数のパフォーマンス層を提供する。いくつかの実装形態は、さまざまなサブスクリプションモデルをサポートする、および/または、1つ以上の並行リアルタイムゲームプレイを提供するように、および/または1つ以上の実際のゲーミングストリーム(たとえばモバイルアプリケーションまたはブラウザベースのプログラムいずれかを介してオンライン/クラウドゲーミングセッションに参加しているユーザのクライアントデバイスに対するビデオストリーム出力)にレイテンシがほぼまたは全くない状態で対応するレビューメディアストリームを提供するように、構成されている。いくつかの実装形態において、並行ゲームプレイおよび/またはレビュービデオは、YouTube(登録商標)等のメディアストリーミングサイトを介し、レイテンシがほぼまたは全くない状態で1人以上のユーザに提供される。
【0005】
本願のある局面において、処理能力を管理する方法がサーバシステムにおいて実現され、サーバシステムは、1つ以上の処理コア(たとえばグラフィック処理ユニット「GPU」コア)と、処理コアが実行するプログラムを格納するメモリとを含む。いくつかの実装形態において、1つ以上の処理コアは、その各々が1つ以上のオンラインゲーミングセッションを実行するように構成されている複数の処理スライスを含む(たとえば提供する)。この方法は、複数のオンラインゲーミングセッションの開始を求める要求を受信することを含み、これらのセッションの各々は、1つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。この方法はさらに、上記1つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てることを含み(たとえば、セッションは、対応する1つ以上の処理コア上で、それぞれの処理スライスによって実行される)、これは、第1のゲーミングセッションと第2のゲーミングセッションとを含むオンラインゲーミングセッションの第1のサブセットに第1の処理スライスを割り当てることを含む。この方法はさらに、第1の処理スライスで、オンラインゲーミングセッションの第1のサブセットについて、ゲーミングセッションの第1のサブセットの各々が第1の処理スライスのデューティサイクルに割り当てられるように、タイムシェアリング処理スケジュールを決定することを含む。この方法はさらに、タイムシェアリング処理スケジュールに従って、第1および第2のゲーミングセッションを、第1および第2のゲーミングセッションのリアルタイムデータ処理の必要性に従い、並列に実行することにより、第1の処理スライスの第1のデューティサイクルを共有することを含む。任意で、第1の処理スライスは第1のデューティサイクルのみを含み他のデューティサイクルを含まない。これに代えて、第1の処理スライスは、第1のデューティサイクルの後に実行される、少なくとも第2のデューティサイクルを含む。
【0006】
別の局面において、対応するサーバシステムが提供され、サーバシステムは、複数の処理スライスを含む1つ以上の処理コアと、1つ以上の処理コアが実行する1つ以上のプログラムを格納するメモリとを備え、1つ以上のプログラムは命令を含み、命令は、複数のオンラインゲーミングセッションを開始することを求める要求を受信するための命令を含み、セッションの各々は、1つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応し、命令はさらに、上記1つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てるための命令を含み、これは、第1のゲーミングセッションと第2のゲーミングセッションとを含むオンラインゲーミングセッションの第1のサブセットに第1の処理スライスを割り当てることを含み、命令はさらに、第1の処理スライスで、オンラインゲーミングセッションの第1のサブセットについて、ゲーミングセッションの第1のサブセットの各々が第1の処理スライスのデューティサイクルに割り当てられるように、タイムシェアリング処理スケジュールを決定するための命令を含み、命令はさらに、タイムシェアリング処理スケジュールに従って、第1および第2のゲーミングセッションを、第1および第2のゲーミングセッションのリアルタイムデータ処理の必要性に従い、並列に実行することにより、第1の処理スライスの第1のデューティサイクルを共有するための命令を含む。
【0007】
別の局面において、サーバシステムの1つ以上の処理コアが実行する1つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体が提供され、1つ以上の処理コアは複数の処理スライスを含み、1つ以上のプログラムは命令を含み、命令は、複数のオンラインゲーミングセッションを開始することを求める要求を受信するための命令を含み、セッションの各々は、1つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応し、命令はさらに、上記1つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てるための命令を含み、これは、第1のゲーミングセッションと第2のゲーミングセッションとを含むオンラインゲーミングセッションの第1のサブセットに第1の処理スライスを割り当てることを含み、命令はさらに、第1の処理スライスで、オンラインゲーミングセッションの第1のサブセットについて、ゲーミングセッションの第1のサブセットの各々が第1の処理スライスのデューティサイクルに割り当てられるように、タイムシェアリング処理スケジュールを決定するための命令を含み、命令はさらに、タイムシェアリング処理スケジュールに従って、第1および第2のゲーミングセッションを、第1および第2のゲーミングセッションをのリアルタイムデータ処理の必要性に従い、並列に実行することにより、第1の処理スライスの第1のデューティサイクルを共有するための命令を含む。
【0008】
別の局面において、メディアストリームを並行して提供する方法がサーバシステムにおいて実現され、サーバシステムは、複数のエンコーダコアと、エンコーダコアが実行するプログラムを格納するメモリとを含む。この方法は、エンコーダコアが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成することを含む。低レイテンシストリームはオンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも速い応答レートと低い送信レイテンシとを有する。この方法はさらに、低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを特定することを含む。この方法はさらに、低レイテンシストリームの画像フレームの第1のシーケンスの画像フレームごとに、予め定められたフレームレートに対応する第1の時間間隔を求めることと、第1の時間間隔中に画像フレームを符号化することと、画像フレームを符号化した後に第1の時間間隔において残された残余時間を求めることとを含む。この方法はさらに、第1の時間間隔において残された残余時間が通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、第1の時間間隔の残余時間中に通常レイテンシストリームの画像フレームの第2のシーケンスのサブセットを生成することを含む。この方法はさらに、第1の時間間隔において残された残余時間が通常レイテンシ要件を満たさないという判断に従い、第1の時間間隔の残余時間中に画像フレームの第2のシーケンスの任意の画像フレームの生成を中止することを含む。
【0009】
別の局面において、エンコーダと、エンコーダが実行する1つ以上のプログラムを格納するメモリとを含むサーバシステムが提供され、1つ以上のプログラムは命令を含み、命令は、エンコーダが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成するための命令を含み、低レイテンシストリームはオンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも速い応答レートと低い送信レイテンシとを有し、命令はさらに、低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを特定するための命令を含み、低レイテンシストリームの画像フレームの第1のシーケンスの画像フレームごとに、予め定められたフレームレートに対応する第1の時間間隔を求めるための命令を含み、第1の時間間隔中に画像フレームを符号化するための命令を含み、画像フレームを符号化した後に第1の時間間隔において残された残余時間を求めるための命令を含み、第1の時間間隔において残された残余時間が通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、第1の時間間隔の残余時間中に通常レイテンシストリームの画像フレームの第2のシーケンスのサブセットを生成するための命令を含み、第1の時間間隔において残された残余時間が通常レイテンシ要件を満たさないという判断に従い、第1の時間間隔の残余時間中に画像フレームの第2のシーケンスの任意の画像フレームの生成を中止するための命令を含む。
【0010】
別の局面において、サーバシステムのエンコーダが実行する1つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体が提供され、1つ以上のプログラムは命令を含み、命令は、エンコーダが、低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを生成するための命令を含み、低レイテンシストリームはオンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも速い応答レートと低い送信レイテンシとを有し、命令はさらに、低レイテンシストリームの画像フレームのシーケンスを符号化するための予め定められたフレームレートを特定するための命令を含み、低レイテンシストリームの画像フレームの第1のシーケンスの画像フレームごとに、予め定められたフレームレートに対応する第1の時間間隔を求めるための命令を含み、第1の時間間隔中に画像フレームを符号化するための命令を含み、画像フレームを符号化した後に第1の時間間隔において残された残余時間を求めるための命令を含み、第1の時間間隔において残された残余時間が通常レイテンシストリームに対応付けられた通常レイテンシ要件を満たすという判断に従い、第1の時間間隔の残余時間中に通常レイテンシストリームの画像フレームの第2のシーケンスのサブセットを生成するための命令を含み、第1の時間間隔において残された残余時間が通常レイテンシ要件を満たさないという判断に従い、第1の時間間隔の残余時間中に画像フレームの第2のシーケンスの任意の画像フレームの生成を中止するための命令を含む。
【0011】
さらに他の局面において、メディアストリームを符号化する方法がサーバシステムにおいて実現され、サーバシステムは、GPUと、複数のエンコーダコアと、データバッファと、GPUおよびエンコーダコアが実行するプログラムを格納するメモリとを含む。方法は、複数のエンコーダコアが、オンラインゲーミングセッションに対応付けられデータバッファに格納されている画像フレームのフレームデータを識別することと、レンダリング仕様に従い定められたフレームデータの複数の画像タイルを同時にかつ並列に処理するために複数のエンコーダコアを割り当てることとを含む。一例として、レンダリング仕様は、画像フレームが分割されること(任意で分割する方法)を規定してもよい。複数の画像タイルは第1のエンコーダコアに割り当てられた第1の画像タイルを含み、第1の画像タイルはブロックの第1のシーケンスを含む。方法はさらに、第1のエンコーダコアにおいて、データバッファから、第1のエンコーダコアに割り当てられた第1の画像タイルのブロックの第1のシーケンスのうちの第1のブロックを取得することと、第1のブロックの境界情報を取得することとを含む。方法はさらに、データバッファから、ブロックの第1のシーケンスにおける第1のブロックに続く第2のブロックを取得する間にまたはその前に、境界情報に基づいてブロックの第1のシーケンスのうちの第1のブロックを符号化することを含む。方法はさらに、符号化した第1のブロックを、オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信することを含む。
【0012】
別の局面において、サーバシステムが提供され、サーバシステムは、GPUと、複数のエンコーダコアと、データバッファと、GPUおよびエンコーダコアが実行する1つ以上のプログラムを格納するメモリとを含み、1つ以上のプログラムは命令を含み、命令は、エンコーダコアが、オンラインゲーミングセッションに対応付けられデータバッファに格納されている画像フレームのフレームデータを識別するための命令と、レンダリング仕様に従い定められたフレームデータの複数の画像タイルを同時にかつ並列に処理するために複数のエンコーダコアを割り当てるための命令とを含み、複数の画像タイルは第1のエンコーダコアに割り当てられた第1の画像タイルを含み、第1の画像タイルはブロックの第1のシーケンスを含み、命令はさらに、第1のエンコーダコアにおいて、データバッファから、第1のエンコーダコアに割り当てられた第1の画像タイルのブロックの第1のシーケンスのうちの第1のブロックを取得するための命令と、第1のブロックの境界情報を取得するための命令と、データバッファから、ブロックの第1のシーケンスにおける第1のブロックに続く第2のブロックを取得する間にまたはその前に、境界情報に基づいてブロックの第1のシーケンスのうちの第1のブロックを符号化するための命令と、符号化した第1のブロックを、オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信するための命令とを含む。
【0013】
別の局面において、サーバシステムが実行する1つ以上のプログラムを格納する非一時的なコンピュータ読取可能媒体が提供され、サーバシステムはさらに、GPUと、複数のエンコーダコアと、データバッファとを含み、1つ以上のプログラムは命令を含み、命令は、エンコーダコアが、オンラインゲーミングセッションに対応付けられデータバッファに格納されている画像フレームのフレームデータを識別するための命令と、レンダリング仕様に従い定められたフレームデータの複数の画像タイルを同時にかつ並列に処理するために複数のエンコーダコアを割り当てるための命令とを含み、複数の画像タイルは第1のエンコーダコアに割り当てられた第1の画像タイルを含み、第1の画像タイルはブロックの第1のシーケンスを含み、命令はさらに、第1のエンコーダコアにおいて、データバッファから、第1のエンコーダコアに割り当てられた第1の画像タイルのブロックの第1のシーケンスのうちの第1のブロックを取得するための命令と、第1のブロックの境界情報を取得するための命令と、データバッファから、ブロックの第1のシーケンスにおける第1のブロックに続く第2のブロックを取得する間にまたはその前に、境界情報に基づいてブロックの第1のシーケンスのうちの第1のブロックを符号化するための命令と、符号化した第1のブロックを、オンラインゲーミングセッションに対応付けられたユーザのクライアントデバイスに送信するための命令とを含む。
【0014】
さらに他の局面において、オンラインインタラクティブゲーミングセッションをレンダリングする方法がサーバシステムにおいて実現され、サーバシステムは、複数の処理コアと、処理コアが実行するプログラムを格納するメモリとを含む。方法は、オンラインゲーミングセッションに対応付けられた第1のユーザからユーザコマンドを受信すること含む。方法はさらに、コマンドのタイプと、コマンドのタイプに対応付けられた予測される応答レイテンシと、第1のユーザがオンラインゲーミングセッションに参加するときに使用する第1のユーザのクライアントデバイスとサーバとの間のラウンドトリップ通信レイテンシと、サーバ上でのユーザコマンドの実行に対応付けられた処理レイテンシと、ラウンドトリップ通信レイテンシおよび処理レイテンシに基づく実際の送信レイテンシとを求めることを含む。方法はさらに、1つ以上の中間フレームとコマンドの最初の結果を反映する第1のフレームとを少なくとも生成することによりオンラインゲーミングセッションにおいてコマンドを実行することを含む。1つ以上の中間フレームは、予め定められたフレームレートで送信されるとき、実際の送信レイテンシに相当する送信時間を占有する。方法はさらに、予め定められたフレームレートで、第1のフレームが後に続く1つ以上の中間フレームを、予測された応答レイテンシに対応する時間において第1のユーザのクライアントデバイスで第1のフレームが受信されるように、送信することを含む。
【0015】
さらに他の局面において、リソースを割り当てる方法がサーバシステムにおいて実現され、サーバシステムは、その各々がそれぞれのリソースプロファイルを有する複数の仮想マシンを含む。方法は、リアルタイムインタラクティブセッションを確立することを求める要求をコンピューティングデバイスから受信することを含み、要求は、コンピューティングデバイスとのネットワーク接続を通して受信される。方法はさらに、コンピューティングデバイスのデバイス能力を求めることと、ネットワーク接続の接続能力を求めることと、デバイス能力および接続能力に基づいてリアルタイムインタラクティブセッションの1つ以上の目標品質パラメータを求めることとを含む。方法はさらに、求めた1つ以上の目標品質パラメータに基づいて、複数の仮想マシンのうちの第1の仮想マシンをリアルタイムインタラクティブセッションに対応付けることと、リアルタイムインタラクティブセッションに対する第1の仮想マシンの対応付けに従いリアルタイムインタラクティブセッションを確立することとを含む。方法はさらに、第1の仮想マシンのリソースプロファイルに従い、リアルタイムインタラクティブセッションにおいて入力を処理し出力を生成するためのリソースを、リアルタイムインタラクティブセッションに与えることを含む。
【0016】
本願のいくつかの局面に従うと、サーバシステムは、上記方法のうちのいずれかをサーバシステムに実行させるための命令を格納するメモリを含む。
【0017】
さらに、本願のいくつかの局面に従うと、サーバシステムのメモリに格納された命令は、上記方法のうちのいずれかをサーバシステムに実行させるための命令を含む。
【0018】
その他の実施形態および利点は、本明細書における説明および図面に照らすと当業者には明らかであろう。
【0019】
記載されている各種実装形態の一層の理解のためには、以下の実装形態の説明を以下の図面とともに参照する必要があり、これらの図面を通して同様の参照番号は対応する部分を示す。
【図面の簡単な説明】
【0020】
【
図1A】いくつかの実装形態に係る、一例としてのオンラインインタラクティブゲーミング環境100である。
【
図1B】いくつかの実装形態に係る、第三者コンテンツを管理する一例としてのゲーミングプラットフォーム150の図である。
【
図1C】いくつかの実装形態に係る、
図1Bに示されるゲーミングプラットフォーム150上でゲーミングセッションを実行する方法180の一例としてのフローチャートである。
【
図2】いくつかの実装形態に係る、ゲーミング環境100の一例としてのクライアントデバイス200(たとえばクライアントデバイス102または104)を示すブロック図である。
【
図3】いくつかの実装形態に係る、一例としてのメディアデバイスを示すブロック図である。
【
図4】いくつかの実装形態に係る、一例としてのサーバを示すブロック図である。
【
図5A】いくつかの実装形態に係る、少なくともGPUを含む一例としてのサーバシステムのブロック図である。
【
図5B】いくつかの実装形態に係る、複数の処理スライスに分割されたGPUコアのブロック図である。
【
図5C】いくつかの実装形態に係る、その間に2つ以上のゲーミングセッションが処理スライスに割り当てられる、一例としての処理の図である。
【
図5D】いくつかの実装形態に係る、その間に2つ以上のゲーミングセッションが処理スライスに割り当てられる、一例としての処理の図である。
【
図5E】いくつかの実装形態に係る、その間に2つ以上のゲーミングセッションが処理スライスに割り当てられる、一例としての処理の図である。
【
図6】いくつかの実装形態に係る、オープングラフィックスライブラリ(OpenGL)に基づいてメディアコンテンツを生成する2つのゲーミングセッションが処理スライスを動的に共有するプロセスの一例の図である。
【
図7】いくつかの実装形態に係る、サーバシステムの処理能力を管理する方法の一例を示すフロー図である。
【
図8A】いくつかの実装形態に係る、少なくともエンコーダを含むサーバシステムの一例のブロック図である。
【
図8B】いくつかの実装形態に係る、時間間隔の時間図である。
【
図8C】いくつかの実装形態に係る、ゲームシーンに関連して少なくとも2つの別々のクライアントデバイスに並行して表示される2つの異なるメディアストリームのうちの一方の画像の一例を示す図である。
【
図8D】いくつかの実装形態に係る、ゲームシーンに関連して少なくとも2つの別々のクライアントデバイスに並行して表示される2つの異なるメディアストリームのうちの一方の画像の一例を示す図である。
【
図9】いくつかの実装形態に係る、メディアストリームを並行して提供する方法の一例を示すフロー図である。
【
図10A】いくつかの実装形態に係る、メディアストリームにおける画像フレームの複数の画像タイルを処理するために割り当てられたエンコーダコアのブロック図である。
【
図10B】いくつかの実装形態に係る、画像タイルのブロックを符号化するプロセスの一例の図である。
【
図11A】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像フレームのフレームデータのレンダリング仕様に従って定められた画像の画像タイルの一例の図である。
【
図11B】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像フレームのフレームデータのレンダリング仕様に従って定められた画像の画像タイルの一例の図である。
【
図11C】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像フレームのフレームデータのレンダリング仕様に従って定められた画像の画像タイルの一例の図である。
【
図12A】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像のラスタースキャンの一例の図である。
【
図12B】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像のラスタースキャンの一例の図である。
【
図12C】いくつかの実装形態に係る、オンラインインタラクティブセッションに対応付けられた画像のラスタースキャンの一例の図である。
【
図13】いくつかの実装形態に係る、メディアストリームを符号化する方法の一例を示すフロー図である。
【発明を実施するための形態】
【0021】
図面を通して同様の参照番号は対応する部分を示す。
実装形態の説明
本明細書に記載の実装形態は、第三者ゲーミングコンテンツを含むクラウドゲーミングコンテンツの効率的でポータブルで低レイテンシのホスティングを可能にする、クラウドプラットフォームおよびAPIを提供することに関する。いくつかの実装形態は、クラウドゲーミングハードウェアリソース(たとえばCPU、GPU、メモリ、入出力、およびビデオストリームエンコーダ)を動的に割り当て、個々のエンドユーザが利用できるネットワーク帯域幅をモニタリングおよび利用することにより、最適なオンラインゲーミング体験をゲームプレイヤーのコミュニティに対して並行して提供する。いくつかの実装形態は、エンドユーザに対する高精細メディアストリームとともに高性能のリアルタイムゲーミングセッションをサポートする層を含む、複数のパフォーマンス層を提供する。いくつかの実装形態は、さまざまなサブスクリプションモデルをサポートする、および/または、1つ以上の並行リアルタイムゲームプレイを提供するように、および/または1つ以上の実際のゲーミングストリーム(たとえばモバイルアプリケーションまたはブラウザベースのプログラムいずれかを介してオンライン/クラウドゲーミングセッションに参加しているユーザのクライアントデバイスに対するビデオストリーム出力)にレイテンシがほぼまたは全くない状態で対応するレビューメディアストリームを提供するように、構成されている。いくつかの実装形態において、リアルタイムゲームプレイおよび/またはレビューメディアストリームは、YouTube等のメディアストリーミングサイトを介し、レイテンシがほぼまたは全くない状態で1人以上のユーザに提供される。
【0022】
クラウドゲーミング環境のいくつかの実装形態において、サーバシステムは、プレイヤー入力を処理し、一人以上のプレイヤーに対して、さらに任意でゲームの観客に対して表示する出力ストリームを生成するための、リアルタイムインタラクティブゲーミングセッションのハードウェアリソースを、提供する。リアルタイムインタラクティブゲーミングセッションを確立することを求める要求に応じて、サーバシステムは、要求しているクライアントデバイス(すなわちプレイヤーのコントローラデバイス)のデバイス能力(たとえばハードウェアおよび/またはソフトウェア能力)と、ネットワーク接続の接続能力(たとえば帯域幅、レイテンシおよび/またはエラー率)と、ゲーミングセッションの1つ以上の目標品質パラメータ(たとえば出力ビデオストリームの解像度、ゲーミング応答レイテンシなど)とを求め、それに応じて、その仮想マシンのうちの1つを、セッションを確立するためにリアルタイムインタラクティブセッションに対応付ける。
【0023】
いくつかの実装形態において、リアルタイムオンラインインタラクティブゲーミング環境をホストするサーバシステムにおける1つ以上の処理コア(たとえばGPUコアおよびエンコーダコア)に対し、(たとえばプレイヤーおよび/または観客に対する出力ビデオストリームを生成するための)ゲーミングデータの処理および符号化能力が管理される。たとえば、いくつかの実装形態において、1つ以上の処理コアは、複数の処理スライス(たとえば、各々が、ある期間、特に予め定められた期間、たとえば16.67ms間、処理コアで実行される)とともに動作する。サーバシステムは、複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てることができる。処理スライスのうちの1つについて、サーバシステムは、ゲーミングセッションの対応するサブセットが処理スライスのデューティサイクルを共有しそれぞれのリアルタイムデータ処理需要に従って並列に実行されるように、タイムシェアリング処理スケジュールを決定する。加えて、ある時間間隔内での画像符号化を促進するために、サーバシステムのエンコーダは、GPUが画像フレームのすべてのデータを利用可能にするまで待つ必要はない。むしろ、いくつかの実装形態では、画像フレームの一部を、この一部を符号化するのに必要な情報がGPUから提供されると直ちに符号化し、これは、符号化される部分とは無関係の画像フレームの他の部分がGPUによって利用可能にされるか否かとは無関係である。
【0024】
加えて、サーバシステムは、オンラインゲーミングセッションをプレイするユーザから受けたユーザコマンドに応じて複数のフレームを動的に生成することができる。サーバシステムは、ユーザコマンドのタイプに従い、予想される応答レイテンシと、実際の通信および処理レイテンシと、実際の送信レイテンシとを求める。次に、ユーザコマンドが、コマンドの効果を反映するフレームのセットを生成することにより、オンラインゲーミングセッションにおいて実行される。フレームのセットは、予め定められたフレームレートで送信されるとき、実際の送信レイテンシに相当する送信時間を占有し、ユーザのクライアントデバイスにおいて、予想された応答レイテンシに相当する時間以内に受信することができる。
【0025】
図1Aは、いくつかの実装形態に係る、一例としてのオンラインインタラクティブゲーミング環境100を示す。
図1Bは、いくつかの実装形態に係る、第三者コンテンツを管理する一例としてのゲーミングプラットフォーム150を示し、
図1Cは、いくつかの実装形態に係る、
図1Bに示されるゲーミングプラットフォーム150上でゲーミングセッションを実行する方法180のフローチャートの一例である。オンラインインタラクティブゲーミング環境100は、1つ以上のクライアントデバイス(たとえば、クライアントデバイス102および104)を含む。クライアントデバイス102の各々は、1つ以上のエンドユーザゲームアプリケーション(たとえば、ユーザがリモートサーバシステム上で実行されるクラウドゲーミングセッションとやり取りすることを可能にするゲームコントローラアプリケーション)を実行する。ゲームセッションは、サーバシステム114がホストするオンラインインタラクティブゲームをクライアントデバイス102のユーザがプレイすることを可能にするために、特定のゲームアプリケーション(ゲーミングタイトルと呼ばれることもある)上で実行することが可能である。いくつかの実装形態において、クライアントデバイス102(たとえば、ホストクライアント)は、1つ以上の他のクライアントデバイス102に、特定のゲームアプリケーションのゲームシーンに参加するよう招待するように構成される。これらのクライアントデバイス102のゲーミングセッションは、任意でそれぞれのユーザに対応する異なる視点で、同じゲームシーンを表示するように同期される。
【0026】
逆に、サーバシステム114は、特定のゲームアプリケーションを含む1つ以上のゲームアプリケーションをプレイするようにクライアントデバイス102をサポートするためにオンラインインタラクティブゲームプラットフォームをホストする。具体的には、サーバシステム114は、クライアントデバイス102に対応付けられた複数のユーザアカウントを含み、1つ以上のゲームアプリケーションの各々と対応付けてクライアントデバイスのユーザを認証する。サーバシステム114は、シーンに関連する対応するゲーミングセッションに参加するクライアントデバイス102上のオンラインインタラクティブゲームのシーンをレンダリングし、リフレッシュする。いくつかの実装形態において、サーバシステム114は、クライアントデバイス102の能力および/またはサーバシステム114とクライアントデバイス102の各々との間の通信接続の品質を評価することができ、クライアントデバイス102に対応付けられたゲーミングセッションのための同期データストリームを適応的に生成する。これらの手段により、サーバシステム114は、2つ以上のクライアントデバイス102上でのオンラインインタラクティブゲームの同期ゲーミングセッションを同時にかつ実質的に低レイテンシで容易にするように構成される。
【0027】
いくつかの実装形態において、サーバシステム114は、ゲームサーバ122およびメディアストリーミングサーバ124を含む。ゲームサーバ122は、第1のクライアントデバイス102A上で実行されるオンラインインタラクティブゲームセッションのために並行して2つ以上のメディアストリームを提供するように構成される。2つ以上のメディアストリームは、1つ以上の通信ネットワーク112を介してそれぞれ第1のクライアントデバイス102Aおよびレビューアクライアントデバイス104に与えられる低レイテンシストリームおよび通常レイテンシストリームを含む。任意で、通常レイテンシストリームは、指示目的のために提供される。第1のクライアントデバイス102が第1のクライアントデバイス102A上でゲームセッションをプレイする間に、ゲームセッションは記録され、通常レイテンシストリームを介して1つ以上の観客にブロードキャストされる、すなわち、観客はレビューアクライアントデバイス104上でゲームセッションをレビューすることができる。低レイテンシストリームは、オンラインインタラクティブゲームセッションのゲームプレイに対応し、関連付けられたレビューセッションに対応する通常レイテンシストリームよりも速い応答レートおよび低い送信レイテンシを有する。たとえば、低レイテンシストリームは、60フレーム/秒(fps)の予め定められたフレームレートを有し、16.67msの各時間間隔中に少なくとも1つのフレームを第1のクライアントデバイス102Aに与え、通常レイテンシストリームは、30fpsの予め定められたフレームレートを有し、33.33msの各時間間隔中に少なくとも1つのフレームをレビューアクライアントデバイス104に与える。いくつかの実装形態において、通常レイテンシストリームは、低レイテンシストリームの解像度より低い解像度を有する。
【0028】
いくつかの実装形態において、クライアントデバイス102または104は、メディアコンテンツを表示するために一体化されたディスプレイスクリーンを有する。いくつかの実装形態において、クライアントデバイス102または104は、メディアデバイス106および出力デバイス108に結合される。具体的には、クライアントデバイス102または104は、ローカルネットワーク(たとえば、Wi-Fi(登録商標)ネットワーク)を介して、または1つ以上の通信ネットワーク112を介して直接、(たとえば、Bluetooth(登録商標)または他の無線通信リンクを介し)メディアデバイス106に通信可能に結合されてもよい。いくつかの実装形態において、クライアントデバイス(102または104)およびメディアデバイス106は、互いにローカルである(たとえば、同じ部屋の中、同じ家の中など)。メディアデバイス106はさらに、ビジュアルおよび/またはオーディオコンテンツ(たとえば、テレビ、ディスプレイモニタ、サウンドシステム、スピーカなど)を出力することができる1つ以上の出力デバイス108に結合される。メディアデバイス106は、コンテンツを出力デバイス108に出力するように構成される。いくつかの実装形態において、メディアデバイス106は、キャスティングデバイス(たとえば、Google(登録商標) Inc.のCHROMECAST(登録商標))、または、そうでなければキャスティング機能を含むデバイスである。
【0029】
各クライアントデバイス102または104は、中央サーバまたはクラウドコンピューティングシステム(たとえば、サーバシステム114)、および/またはネットワーク接続された他のデバイス(たとえば、別のクライアントデバイス102または104、メディアデバイス106、および出力デバイス108)と互いにデータ通信および情報共有が可能である。データ通信は、さまざまなカスタムもしくは標準ワイヤレスプロトコル(たとえば、IEEE802.15.4、Wi-Fi、ZigBee(登録商標)、6LoWPAN、Thread、Z-Wave、Bluetooth Smart(登録商標)、ISA100.l1a、WirelessHART(登録商標)、MiWiなど)および/またはさまざまなカスタムもしくは標準ワイヤードプロトコル(たとえば、イーサネット(登録商標)、HomePlug(登録商標)など)のいずれか、または本明細書の出願日の時点でまだ開発されていない通信プロトコルを含む、任意の他の適切な通信プロトコルのいずれかを使用して実行することができる。いくつかの実施形態において、オンラインインタラクティブゲーミング環境100は、従来のネットワークデバイス(たとえばルータ)を含み、それを介して、クライアントデバイス102および104のセットならびに対応するメディアデバイスおよび出力デバイス(もしあれば)がローカルエリアネットワーク上で互いに通信可能に結合され、ローカルエリアネットワークは通信ネットワーク112(たとえば、広域ネットワークおよびインターネット)の他の部分に通信可能に結合される。いくつかの実施形態において、クライアントデバイス102および104の各々は、任意で、1つ以上の無線通信ネットワーク(たとえば、ZigBee、Z-Wave、Insteon、Bluetooth、Wi-Fi、および/または他の無線通信ネットワーク)を使用して、1つ以上の他のクライアントデバイス、それぞれのメディアデバイス106、またはそれぞれの出力デバイス108と通信する。
【0030】
いくつかの実装形態において、クライアントデバイス102は、互いに離れている、すなわち、同じ部屋または構造内に配置されていない。ゲームは、各クライアントデバイス102において実行するためにゲームアプリケーション(たとえば、
図2のゲームアプリケーション228)を起動することによって開始することができる。いくつかの実装形態において、各クライアントデバイス102ごとに、ゲームアプリケーションは、サーバシステム114と独立してオンラインゲーミングセッション116を確立する。2つ以上のクライアントデバイス102(たとえば102Aおよび102B)のオンラインゲーミングセッション116は、互いに関連し(たとえば、それらはゲームアプリケーションの同じゲームドメイン内でプレイされるからである)、したがって、ゲームアプリケーションにおけるゲームシーンを共有する。関連するオンラインゲーミングセッション116は互いに同期され、各オンラインゲーミングセッション116は、任意で、それぞれのクライアントデバイス102に対応する固有のプレイヤーの視点で同じゲームシーンを示す。したがって、各クライアントデバイス102のユーザは、それぞれのクライアントデバイス上でゲームをプレイし、他のクライアントデバイス102上でオンラインゲーミングセッション116からの出力に影響を与えることができる。
【0031】
代替的に、いくつかの他の実装形態において、第1のクライアントデバイス102Aのゲームアプリケーションがオンラインゲーミングセッション116を確立した後、1つ以上の第2のクライアントデバイス102Bが、招待メッセージによってオンラインゲーミングセッション116に参加するように招待される。オンラインゲーミングセッション116に参加するためのリンク(たとえばURLアドレス)を有するメッセージは、第2のクライアントデバイス102Bの各々に送信される。適切なコントローラ構成が、オンラインゲーミングセッション116に参加するように招待される各第2のクライアントデバイス102Bに提供される。このアプリケーションでは、第2のクライアント102Bがオンラインゲーミングセッション116に参加するとき、サーバシステム114は、個々の第2のクライアントデバイス102Bごとに別個のゲーミングセッション116を作成する。それぞれの第2のクライアントデバイス102Bの別個のゲーミングセッション116は、第1のクライアントデバイス102Aのゲーミングセッション116と同期され、同じシーンを共有するが、それぞれの第2のクライアントデバイス102Bに対応する固有のプレイヤーの視点を有することができる。各第2のクライアントデバイス102Bが適切なコントローラ構成を受信し、オンラインゲーミングセッション116に参加した後(より正確には、その関連するオンラインゲーミングセッション116を開始した後)、ユーザは、それぞれの第2のクライアントデバイス102B上でゲームをプレイし、他のクライアントデバイス102上で実行されるオンラインゲーミングセッション116の出力に影響を与えることができる。
【0032】
クライアントデバイス102は、ゲームアプリケーションを含む1つ以上の別個のユーザアプリケーションを含み実行することができる、デバイスである。いくつかの実装形態において、クライアントデバイス102は、スマートフォン、タブレットデバイス、ラップトップコンピュータ、デスクトップコンピュータ、またはマルチメディアデバイスであり、その各々は、オンラインゲーミングセッションを実現するためのゲームアプリケーション(コントローラアプリケーションとも呼ばれる)を実行するように構成される。いくつかの実装形態において、クライアントデバイス102は、ユーザがオンラインゲーミングセッションとやり取りすることを可能にするゲームアプリケーション(エンドユーザゲーム制御アプリケーションとも呼ばれる)を実行する専用ゲームコントローラを含む。いくつかの実装形態において、クライアントデバイス102は、メディアデバイス106と連携して動作するように構成された1つ以上のユーザアプリケーションを含む。いくつかの実装形態において、アプリケーションは、クライアントデバイス102をメディアデバイス106とペアリングしメディアデバイス106を構成するための、メディアデバイスアプリケーションを含む。アプリケーションはまた、メディアデバイス106に関連コンテンツをキャストすることができる1つ以上のアプリケーションを含む。いくつかの実装形態において、アプリケーションは、(たとえばローカルネットワークを介して)データ/コンテンツをメディアデバイス106に直接送信することによって、および/またはメディアデバイス106を、メディアデバイス106がそこからデータ/コンテンツをストリーミングまたはそうでなければ受信することができるリモートロケーション(たとえば、サーバシステムにおける場所へのURLまたは他のリンク)に方向付けることによって、データおよび/またはコンテンツをメディアデバイス106にキャストする。メディアデバイス106は、アプリケーションおよび/または遠隔場所からデータ/コンテンツを受信し、受信したデータ/コンテンツに対応するビジュアルおよび/またはオーディオコンテンツを出力デバイス108に出力する。したがって、オンラインゲーミングセッション116は、クライアントデバイス102上で実行されるゲームアプリケーションと、リモートサーバシステム114と、メディアデバイス106との間に確立される。
【0033】
いくつかの実装形態において、関連するオンラインゲームセッション116をリンクするプロセスの一部として、サーバシステム114は、各対応するクライアントデバイス102の能力および/またはサーバシステム114とクライアントデバイス102との間の通信可能接続の品質を評価する。いくつかの実装形態において、サーバシステム114は、クライアントデバイス102とサーバシステム114との間のネットワークレイテンシを測定する。測定したレイテンシがしきい値を上回り、低レイテンシ接続が利用可能である場合、サーバシステム114は、クライアントデバイス102を低レイテンシ接続に変更することを提案することができる、またはクライアントデバイス102のユーザに、クライアントデバイス102を低レイテンシ接続に変更するように促すことができる。たとえば、クライアントデバイス102がセルラーワイヤレス接続118上にあり、ローカルネットワークが利用可能である場合、サーバシステム114は、クライアントデバイス102を利用可能なローカルネットワークを通じて接続すべきであると提案することができる。いくつかの実装形態において、レイテンシしきい値要件はゲーム間で異なる。たとえば、いくつかのゲーム(たとえばアクションゲーム)は、低レイテンシ接続で良好に体験され、いくつかの他のゲーム(たとえば、オンラインボードゲームまたはカードゲーム)は、レイテンシに関してそれほど要求はない。サーバシステム114は、異なる種類のゲームに関連するこれらの異なる要件を考慮して接続推奨を行うことができる。
【0034】
クライアントデバイス102がゲーミングセッション116を開始するまたはこれに参加することの一部として、サーバシステム114は、クライアントデバイス102上でコントローラを設定するために、クライアントデバイス102と通信する。いくつかの実装形態において、これは、サーバシステム114が、コントローラのために必要とされるリソースおよび通信能力をクライアントデバイス102が有するか否かを評価することを含む。クライアントデバイス102において利用可能なリソース、接続品質、およびゲームに対する要件に応じて、コントローラは、クライアントデバイス102において異なるように実現されてもよい。いくつかの実装形態において、ゲームは、ウェブページベースのコントローラインターフェイスを用いてプレイすることができる。たとえば、ゲームのためのコントローラインターフェイスは、ウェブページ内に埋め込まれてもよく、ウェブページは、クライアントデバイス102上のウェブブラウザ内にレンダリングされる。代替的に、いくつかの実装形態において、標準化されたコントローラは、ゲームに固有ではない、またはゲームに直接関連付けられる、予め定められたアプリケーション(たとえば、GOOGLE Inc.によるCHROMECASTまたはGOOGLE CASTなどのキャスティングデバイスアプリケーション、または他のメディアデバイスアプリケーション)において、またはクライアントデバイス102のオペレーティングシステムにおいて実現される。たとえば、デバイスオペレーティングシステムまたはクライアントデバイス102上の所定のアプリケーションは、コントローラサブモジュールを有し得る。コントローラサブモジュールは、1つ以上の標準化されたコントローラ構成、テンプレートなどを含む。標準化されたコントローラ構成の各々は、仮想コントローラを実現するために何らかの方法でクライアントデバイス102上の入力デバイスおよび/またはセンサを利用するようにコントローラサブモジュールを構成する。標準化されたコントローラ構成は、ゲームおよび/またはクライアントデバイスの種類によって異なり得る。
【0035】
さらに、いくつかの実装形態において、ゲームは、コントローラサブモジュール上で実現することができる特定のコントローラ構成を有する。そのような構成は、サーバシステム114に格納され、クライアントデバイス102がオンラインゲーミングセッション116に参加または開始するプロセスの一部として、クライアントデバイス102に送信されてもよい。いくつかの実装形態において、特定のコントローラ構成は、完全にカスタムコントローラ、または標準コントローラとカスタムコントローラとの混合であってもよい。さらに、いくつかの実装形態において、ゲームは、ゲームに関連する特定のアプリケーションを必要とする。たとえば、ゲームは、特にゲームに関連付けられたコントローラアプリケーションを必要とする場合がある。いくつかの実装形態において、クライアントデバイス102は、セッション116の開始またはセッションへの参加の一部として、特定のアプリケーションまたは所定のアプリケーションをダウンロードするように指示されてもよい。たとえば、クライアントデバイス102が、(コントローラサブモジュールを有する)予め定められたアプリケーションまたはゲームに関連する特定のアプリケーションをまだ有しておらず、そのようなアプリケーションがプレイに必要とされる場合、サーバシステム114は、ダウンロードが必要であることをクライアントデバイス102のユーザに促し、許可を進めるようユーザに要求するようにクライアントデバイス102に命令する。
【0036】
サーバシステム114は、サーバシステム114上でホストされている1つ以上のゲームアプリケーション(たとえば
図2のゲームアプリケーション228)の各々のユーザアカウントに関連付けられたユーザ情報126を少なくとも格納する。ユーザ情報126の例は、ユーザアカウント情報(たとえば、IDおよびパスワード)、メンバシップタイプ、嗜好、および活動履歴を含むが、これらに限定されない。いくつかの実装形態において、サーバシステム114は、クライアントデバイス102上でプレイされるオンラインゲーミングセッションに関連するセッションデータ128を格納する。各オンラインゲーミングセッション116に対するセッションデータ128の例は、フレームレート、レンダリング仕様、通常レイテンシ要件、GPU割り当ての情報、エンコーダ割り当ての情報、関連するセッションの識別、および最新のステータス情報を含むが、これらに限定されない。セッションデータ128は、ユーザ情報126よりも頻繁にアクセスされる。いくつかの実装形態において、ユーザ情報126およびセッションデータ128を格納するメモリは、それぞれフラッシュメモリおよびランダムアクセスメモリ(RAM)から構成される。
【0037】
いくつかの実装形態において、リアルタイムインタラクティブゲーミング環境100を作成するには、レンダリングされるゲームシーンの画素解像度にほぼ比例するハードウェアリソースが必要である。サーバシステム122の物理プロセッサは、目標解像度に従って異なるリソース割り当てを可能にするように仮想化されてもよい。仮想化技術は、時分割多重化(TDM)、空間多重化、またはそれらの組み合わせに基づく。いくつかの実装形態において、TDMは、短時間の間、比較的大きいリソースへのワークロードアクセスを提供し、空間多重化は、比較的小さいリソースへの連続アクセスを提供する。いくつかの実装形態において、ハードウェア仮想化は、次善策であってもよい、TDMおよび空間多重化のうちの1つに限定される。フレーム全体に対するワークロードへの空間的割り当ては、物理リソースを未活用する可能性があり、一方、TDMは、多くのワークロードを破壊する可能性があり、フレームがレンダリングされる必要があるリアルタイムデッドラインを通してリソースへの連続的なアクセスを提供しない。60fpsを維持しなければならないゲームシーンは、フレームを完了するために16.67msのリアルタイムデッドラインを有し、TDMアクセスでそれを細分化すると、十分なリソースにもかかわらず、実現不能なレンダリングをもたらし得る。
【0038】
本願のいくつかの実装形態に従うと、処理能力は、したがって、1つ以上の処理コア(たとえば、GPU140のGPUコア)を含みリアルタイムオンラインインタラクティブゲーミング環境100をホストするサーバシステム114(特に、ゲームサーバ122)のために管理される。いくつかの実装形態において、1つ以上の処理コアは複数の処理スライス(たとえば、それぞれが16.67ms持続する)とともに動作する。複数のオンラインゲーミングセッション116を開始することを求める要求を受信すると、サーバシステムは、1つ以上の処理コアの複数の処理スライスの各々を、その上で実行されるべき複数のオンラインゲーミングセッション116のサブセットに割り当てる、たとえば、第1の処理スライスを、第1のゲーミングセッションおよび第2のゲーミングセッションを含むオンラインゲーミングセッションの第1のサブセットに割り当てる。セッション116の各々は、1つ以上のリモートクライアントデバイス102上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。第1の処理スライスにおいて、サーバシステム114は、オンラインゲーミングセッション116の第1のサブセットに対するタイムシェアリング処理スケジュールを決定し、ゲーミングセッション116の第1のサブセットの各々は、第1の処理スライスのデューティサイクルに割り当てられる。タイムシェアリング処理スケジュールに従って、第1および第2のゲーミングセッション116は、第1の処理スライスの第1のデューティサイクルを共有し、それによって、第1および第2のゲーミングセッション116のリアルタイムデータ処理の必要性に従い、並列に実行される。
【0039】
オンラインインタラクティブゲーミングセッション116は、高解像度および低レイテンシを有する高品質リアルタイムビデオストリームの符号化を要求する。いくつかの実装形態において、特定用途向け集積回路(ASIC)は、極めて特定のユースケースのために設計されてもよい。代替的に、いくつかの実装形態において、汎用ASICは、ゲームコンテキストの両方のセットに対するレイテンシ要件を満たしながら、比較的低い解像度でゲームコンテキストの第1のセットをサポートし、比較的高い解像度でゲームコンテキストの第2のセットをサポートするように構成される。
【0040】
本願のある局面において、サーバシステム114(特にゲームサーバ122)は、2つ以上のメディアストリームを並行して提供するように構成される。サーバシステム114のエンコーダ142は、低レイテンシストリーム130および通常レイテンシストリーム132を含む複数のメディアストリームを生成するように構成される。低レイテンシストリーム130は、オンラインインタラクティブセッション116に対応し、通常レイテンシストリーム132よりも速い応答レートおよび低い送信レイテンシを有する。具体的には、エンコーダ142は、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレート(たとえば、60pfs)を最初に識別し、所定のフレームレートに対応する第1の時間間隔(たとえば、16.67ms)を決定する。低レイテンシストリーム130の画像フレームの第1のシーケンス内の各画像フレームについて、エンコーダ142は、第1の時間間隔の間に画像フレームを符号化し、画像フレームを符号化した後、第1の時間間隔内に残された残余時間を決定する。第1の時間間隔内に残された残余時間が、通常レイテンシストリーム132に関連する通常レイテンシ要件を満たすとき、サーバシステム114のエンコーダ142は、第1の時間間隔の残余時間の間に、通常レイテンシストリーム132の第2の画像フレームのシーケンスのサブセットを生成する。代替的に、第1の時間間隔内に残された残余時間が通常のレイテンシ要件を満たしていない場合、エンコーダ142は、第1の時間間隔の残余時間の間に、画像フレームの第2のシーケンスの任意の画像フレームの生成を中止する。したがって、符号化優先度は、低レイテンシストリーム130に付与されるが、第1の時間間隔に残された残余時間は、無駄にされることなく、通常レイテンシストリーム132を符号化するために利用される。
【0041】
さらに、第1の時間間隔内での画像符号化を促進するために、サーバシステム114のエンコーダ142は、GPU140が画像フレームのすべてのデータを利用可能にするまで待つ必要はない。むしろ、いくつかの実装形態では、画像フレームの一部を、この一部を符号化するために必要とされる情報がGPU140によって提供されると直ちに符号化し、これは、符号化される部分とは無関係の画像フレームの他の部分がGPU140によって利用可能にされるか否かに関わらず、符号化される。より具体的には、GPU、エンコーダ142、およびデータバッファ144を含むサーバシステム114に対して、エンコーダ142は、オンラインゲーミングセッション116に対応付けられ、データバッファ144に格納された画像フレームのフレームデータを識別し、フレームデータの複数の画像タイルを同時に並列に処理するためにエンコーダ142の複数のエンコーダコアを割り当てる。複数の画像タイルは、第1のエンコーダコアに割り当てられた第1の画像タイルを含み、第1の画像タイルは、ブロックの第1のシーケンスを含む。エンコーダ142は、第1のエンコーダコアに割り当てられた第1の画像タイルのブロックの第1のシーケンスの第1のブロックと、第1のブロックの境界情報とをデータバッファ144から取得する。ブロックの第1のシーケンス内の第1のブロックに続く第2のブロックをデータバッファ144から取得する間、またはデータバッファ144から取得する前に、エンコーダは、境界情報に基づいてブロックの第1のシーケンスの第1のブロックを符号化する。次いで、エンコーダ142は、符号化された第1のブロックをオンラインゲーミングセッション116に関連するユーザのクライアントデバイス102に送信する。これらの手段によって、サーバシステム114は、GPU140が各画像フレームについて完全なセット生データを提供するのを待つためのアイドル時間を低減することによって、エンコーダ142の符号化能力をより良く利用し、したがって、高精細ゲームコンテンツの所定のフレームレートに関連する時間間隔(たとえば、16.67ms)内で2つ以上のメディアストリームの画像フレームを符号化することができる。
【0042】
さらに、サーバシステム114は、オンラインゲーミングセッション116をプレイするユーザからのユーザコマンドに応答して、いくつかのフレームを動的に生成することができる。サーバシステムは、ユーザコマンドの種類(たとえば、ジャンプ、発砲)に応じて、予想される応答レイテンシ、実際の通信および処理レイテンシ、ならびに実際の送信レイテンシを決定する。フレーム数は、実際の送信レイテンシと所定のフレームレートとに基づいて計算される。結果として、コマンドは、コマンドの効果を反映したフレームのセットを生成することにより、オンラインゲーミングセッションにおいて実行される。予め定められたフレームレートで送信される場合のフレームのセットは、実際の送信レイテンシに対応する送信時間を占有し、予想される応答レイテンシに対応する時間内にユーザのクライアントデバイスで受信することができる。
【0043】
図1Bを参照して、サーバシステム114は、オンラインゲーミングセッション116で使用される第三者ゲームコンテンツの効率的でポータブルで低レイテンシのホストを可能にするために、ゲーミングAPIおよびクラウドプラットフォーム150を提供する。いくつかの実装形態において、ゲーミングAPIおよびクラウドプラットフォーム150は、フロントエンドサーバ134、メディアストリーミングサーバ124、ゲームサーバ122、および1つ以上の第三者コンテンツサーバ136のうちの1つ以上をさらに含むサーバシステム114によって有効にされる。フロントエンドサーバ134は、クライアントデバイス102および104に関連するユーザアカウント、たとえば、ユーザアカウントによる1つ以上のオンラインインタラクティブゲームのメンバシップへのサブスクリプションを、管理する。クライアントデバイス102が、それぞれのユーザアカウントにログインし、それらのオンラインゲーミングセッション116に参加した後、ゲームサーバ122は、ゲームセッション116を設定し、コンテンツサーバ136からゲームコンテンツを取得し、クライアントデバイス102上で実行されるゲームアプリケーションにゲームコンテンツを送信し、ユーザ要求またはアクションを識別することによって、それぞれのクライアントデバイス102についてそれぞれの特定のゲーミングセッション116を管理する。ユーザ要求またはアクションに応答してクライアントデバイス102に対するゲームプレイ出力をレンダリングし、それぞれのゲーミングセッション116の間にゲーム状態データを記憶する。ゲームサーバ122は、1つ以上の処理ユニット(たとえば、CPU138、GPU140、およびエンコーダ142)と、メモリ146と、GPU140によって生成されたマルチメディアコンテンツを一時的に記憶し、さらなる符号化(たとえば、標準化または圧縮)のためにマルチメディアコンテンツをエンコーダ142に提供するデータバッファ144とを含む。データバッファ144は、任意で、メモリ146に一体化されるかまたはメモリ146から独立している。
【0044】
いくつかの実装形態において、ゲームサーバ122は、クラウドゲームハードウェアリソース(たとえば、GPU140およびエンコーダ142)を動的に割り当て、個々のエンドユーザが利用できるネットワーク帯域幅をモニタリングおよび利用することにより、最適なクラウドゲーミング体験を提供する。いくつかの実装形態において、ゲームサーバ122は、高精細ビデオ/メディアストリームとともに高性能のリアルタイムゲーミングセッションをサポートする層を含む、複数のパフォーマンス層を提供する。いくつかの実装形態において、ゲームサーバ122は、異なるサブスクリプションモデルをサポートする、および/または、1つ以上の並行リアルタイムゲームプレイを提供するように、および/または1つ以上の実際のゲーミングストリーム(たとえばモバイルアプリケーションまたはブラウザベースのプログラムいずれかを介してオンライン/クラウドゲーミングセッションに参加しているユーザのクライアントデバイスに対するビデオストリーム出力)にレイテンシがほぼまたは全くない状態で対応するレビューメディアストリームを提供するように、構成されている。具体的には、ゲームサーバ122は、ゲームプレイおよびレビュービデオのための並行メディアストリームを生成するように構成され、メディアストリーミングサーバ104は、並行ゲームプレイのためのレビュービデオが提供される。そのようなレビュービデオは、YouTubeなどのメディアストリーミングサイトを介して、1人以上のユーザに、ほとんどまたは全くレイテンシを伴わずに提供される。メディアストリーミングサイトは、任意で、メディアストリーミングサーバ124によって管理される。
【0045】
いくつかの実装形態は、ゲーミング競合に関連してパブリックイベントをホストすることを可能にする。たとえば、ホストされたゲームに基づくマルチプレイヤーゲーミングイベントまたは競合に関連して、ゲームサーバ122によってホストされるクラウドゲーミングサイトは、任意でメディアストリーミングサーバ123を介し、特定のレビューアクライアントデバイス104に、以下をブロードキャストまたはストリーミングすることができる。すなわち、(a)関連付けられたコメンタリートラック/ストリームを含む1つ以上の並行補助または補足メディアストリーム、(b)異なる競技者視点からのゲーミングストリーム、ゲームイベントに関連する複数のゲーミングセッションのクラウドサーバ分析および/またはスコアリングに基づく特に競合するゲーミングアクションを示すハイライトストリーム、(c)1つ以上のアクティブゲーマーのゲームプレイセッション116を反映する1つ以上のゲーム視点ストリーム、および/または(d)1つ以上のアクティブゲーマーおよび/またはコメンテータからの指示トラックであり、場合によっては、アクティブゲーマーによってその対応するゲームプレイ応答とともにクラウドゲーミングサーバシステム114に送られるリアルタイムピクチャ・イン・ピクチャ(PIP)ビデオを含む。
【0046】
いくつかの実装形態に従うと、コンテンツサーバ136が効果的にホストすることが可能な第三者コンテンツの例は、スポーツゲーム、レースゲーム、ロールプレイングゲーム(RPG)およびファーストパーソンシューター(FPS)ゲームを含むが、これらに限定されない。これらのゲームの異なるインスタンスは、関連付けられた異なるレイテンシ要件および予想、出力ビデオ解像度、ならびにゲーミングサーバの計算ワークロードおよびビデオ符号化/ストリーミングリソース、ならびにネットワーク帯域幅に基づく、広範囲にわたるクラウドハードウェア要件およびネットワーク(たとえば、場合によっては異なるサブスクリプションパフォーマンス層と一貫性がある最適なユーザゲーミング体験を保証するため)を有し得る。
【0047】
いくつかの実装形態において、フロントエンドサーバ134は、加入者のゲームプレイアクティビティおよび関連する要求(たとえば、エンドユーザによる、ゲーミングセッションに参加することを他のプレイヤーに招待すること、ゲーム中のツールをアップグレードすること、および/またはゲームパフォーマンスを向上させることを要求する)をモニタリングし、コンテンツプロバイダが彼らの加入者および/またはフォロアの設定(課金情報、ゲームクレジット、サブスクリプションレベル等を含むが、これらに限定されない)を追跡することを可能にするためにAPI関連情報を第三者コンテンツサーバ136に送信または利用可能にするアカウント管理APIおよび/またはソフトウェアモジュールを提供する。いくつかの実装形態において、ホスティングコンテンツのコンテンツプロバイダは、同じホスティングプラットフォーム150を介して、ホスティングコンテンツの1つ以上の異なるサブスクリプションモデルを提供することができる。いくつかの実装形態において、ユーザ(たとえば、ゲーミングサービスへの加入者)には、ホスティングプラットフォーム150上のコンテンツプロバイダが提供するすべてのゲームに対する無制限のアクセスおよびゲームプレイが与えられる。いくつかの実装形態において、サブスクリプションは、ユーザの制限が課された参加であり、参加は、ゲームプレイ時間、エンドユーザにコミットされるハードウェアリソースのレベル、またはエンドユーザのデバイスタイプ/場所に基づいて制限することができる。いくつかの実装形態において、アカウントAPIおよびモジュールは、ゲームプレイセッションを構成およびモニタリングし、最新のサブスクリプション情報に従ってそれぞれの加入者のゲーミングアクティビティをアクティブゲームプレイ中であってもコンテンツプロバイダがトラッキングできるようにする。
【0048】
サーバシステム114は、ユーザが、たとえば、第1のクライアントデバイス102上で実行される第1のゲーミングセッションの第1のゲームストリームを一時停止し、第2のクライアントデバイス102の第2のゲーミングセッション上で第1のゲームストリームを再開し、第1のゲームセッションを継続することを可能にする、クラウド機能を可能にする。サーバシステム114はまた、大規模なスケールで複数のプレイヤーをサポートし、より豊かなより持続的なクラウドベースの世界を提供する。サーバシステム114は、クラウドベースのシステムを使用して、同じユーザの異なるゲーミングセッション116または異なるユーザの異なるゲーミングセッション116に関連するセッションデータ128を記憶する。
【0049】
サーバシステム114は、携帯電話、タブレットコンピュータ、デスクトップコンピュータ、およびテレビを含むがこれらに限定されない、複数のクライアントデバイス102および104上でゲーミングコンテンツをレンダリングする。任意で、ゲーミングコンテンツは、これらのクライアントデバイス102および104の仕様に従うように動的に調整される。いくつかの実装形態において、ゲームAPIプラットフォーム150がインスタントアクセスを提供し、ユーザデバイスストレージを全くまたはほとんど必要としないので、クライアントデバイス102および104は、限られた記憶能力を有するかまたは記憶能力を全く有しない(たとえば、ユーザは、5秒でプレイを開始し、250GBのコンソールハードドライブ空間を節約することができる)。
【0050】
ゲームコンテンツに加えて、サーバシステム114はまた、クライアントデバイス102および104にアドオンコンテンツ、たとえば新しいリーグロスター、統計、および初期タイトルへのプレビューアクセスをストリーミングし、これは任意で定期的に更新される(たとえば、毎日、または毎時、容易に更新、アップグレードされる)。いくつかの実装形態において、アドオンコンテンツは、インターネット検索またはデータベース検索の検索結果を含む。
【0051】
いくつかの実装形態において、サーバシステム114は、ゲームアプリケーションに関連するライブオンラインコミュニティをサポートする。ユーザ(たとえば、サービスの加入者)は、1日中、対応するゲームAPIプラットフォーム上のライブイベント、トーナメントまたはアクティビティに参加する。ライブイベント、トーナメントまたはアクティビティの例は、他のユーザによってプレイされるライブゲーミングセッションを観戦すること、パブリックドメイン(たとえば、YouTube)に達成を投稿すること、およびライブチップを入手すること、およびビデオをコーチすることを含む。たとえば、ゲームサーバ122は、ユーザアクションに応答して、2つ以上のライブストリーム130および132を提供する。ゲームプレイヤー用の第1のクライアントデバイス102Aの第1のゲーミングセッション116上で第1のゲームストリーム130を維持しながら、サーバシステム114はまた、第2のライブレビューストリーム132(たとえば、YouTubeストリーム)を(たとえば、加入者の)1つ以上の他のクライアントデバイス104にブロードキャストする。第2のライブレビューストリーム132は、ユーザが視聴者とゲーム体験を共有することを可能にする。任意で、第2のライブストリームは、プレイヤーの第1のクライアントデバイス102Aの画面の再生である。サーバシステム114は、プレイヤーが第1のゲーミングセッション116を説明しているオーディオストリーム、またはプレイヤーが第1のゲーミングセッション116をプレイし説明しているビデオストリームを取得してもよい。第2のライブレビューストリーム132がオーディエンスのために再生される間に、オーディオストリームはオーディエンスのために任意で再生される。ビデオストリームは、任意で、第2のライブレビューストリーム132内の埋め込まれたウィンドウ内で再生される。さらなる詳細は、
図8A~8Cを参照して以下に説明される。
【0052】
いくつかの実装形態は、真のオンザゴーゲーミングを提供し、この場合、ユーザは、最も望むゲームを、任意のロケーションまたはクライアントデバイスに、持ってゆくことができる。たとえば、ユーザは、モバイルデバイス102A上で自分の発信でオンラインゲーミングセッション116を開始し、次いでラップトップコンピュータ102B上で自分の宛先でゲーミングセッション116をシームレスに再開することができる。また、いくつかの実装形態において、ゲーミングセッション116が異なるデバイス102間でハンドオーバされるときに、ユーザに利用可能な異なるクライアントデバイスリソースに基づいて、ゲーミングセッション116は、異なるデバイス102間でハンドオーバされる。サーバシステム114(特に、ゲームサーバ122)は、異なる一組のハードウェアリソース(たとえば、GPU140およびエンコーダ142)を動的に展開して、異なるエンドユーザの現在のデバイスリソース(たとえば、クライアントハードウェア能力およびネットワーク帯域幅)に基づいてユーザのゲーム体験を最適化することができる。
【0053】
サーバシステム114において、フロントエンドサーバ134およびゲームサーバ122は、それぞれのユーザアカウントシステムを有することができる。一例では、フロントエンドサーバ134のためのユーザアカウントシステムは、特定のゲームコンテンツおよびサービスへのサブスクリプションを管理するために使用され、ゲームサーバ122のためのユーザアカウントシステム(たとえば、YouTubeまたはGoogleアカウント)は、ゲーム体験(たとえば、特定のゲーム基準を満たすようにゲームコンテンツをレンダリングすること)および多くの他の目的を管理するために使用される。いくつかの実装形態において、これらの2つのユーザアカウントシステムは、顧客および使用データ(たとえば、ソーシャル、友人、プレゼンス、認証、アカウント情報、請求情報)を共有する。また、コンテンツフロントエンドサーバ134は、ゲームサーバ122によって有効化されるテクノロジレイヤの上に置くサービスレイヤを提供する。いくつかの実装形態において、ゲームコンテンツサーバ136は、それらのコンテンツにアクセスするための追加のユーザアカウントシステムを管理する。任意で、ゲームコンテンツのための追加のユーザアカウントシステムは、ユーザ加入を管理するフロントエンドサーバ134のためのユーザアカウントシステムと統合される。
【0054】
図1Bに示されるように、ゲームAPIプラットフォーム150は、ゲームサーバ122によって作成/ホストされ、フロントエンドサーバ134およびコンテンツサーバ136と連携してゲーミングセッション116を可能にする。フロントエンドサーバ134は、ゲーミングセッション116のユーザにサービスを提供し、ユーザのアカウントを管理するように構成される。任意で、ユーザは、フロントエンドサーバ134を介してゲーミングサービスに加入しなければならない。コンテンツサーバ136は、ゲーミングセッション116に関連するゲームコンテンツを提供する。
図1Cを参照して、ゲームサーバ122は、対応するゲームコンテンツに基づいてゲーミングセッション116を可能にするためにゲーミングアプリケーションを実行する(152)。いくつかの実装形態において、フロントエンドサーバ134およびゲームサーバ122は、別個のエンティティによって所有され、管理される。具体的には、オンラインゲームアプリケーションは、第1のクライアントデバイス102またはそれに結合された出力デバイス108(たとえば、テレビ)上にゲーミングユーザインターフェイスを表示するために実行される。ゲーミングサービスに加入するためのユーザー選択がユーザーインターフェイスにおいて受け付けられる。ゲーミングサービスに加入するために、サーバシステム114は、ユーザ情報を受信し(154)、それによって、第1のクライアントデバイス102のユーザが、異なる種類のサービス(たとえば、無料トライアルサービスまたは正規の加入サービス)のうちの1つを登録することを可能にする。ユーザインターフェイス上で、クライアントデバイス102のユーザは、各コンテンツドメイン(コンテンツフランチャイズとも呼ばれる)ごとに一連のリッチハブを介してブラウズすることができる(156)。ユーザインターフェイスは、ゲームコンテンツ、アドオンコンテンツ(たとえば、ニュース、統計)、およびライブイベント(たとえば、別のユーザからのゲームブロードキャスト、ライブチャットメッセージ)を表示するように構成される。
【0055】
いくつかの実装形態において、ゲーム(たとえば、ライブフットボールゲーム)のユーザ選択が、ユーザインターフェイスにおいて受け取られる(158)。この選択に応答して、ゲームアプリケーションは、所定の遅延時間内に第1のクライアントデバイス102に対してロードされ、ゲーミング環境がユーザに利用可能にされる。代替的に、いくつかの実装形態において、ユーザアクションに応答して、サーバシステム114は、第1のクライアントデバイス102のユーザにライブストリームを提供する(160)。たとえば、サーバシステム114は、第1のクライアントデバイスの第1のゲーミングセッション上で第1のゲームストリームを提供し、並行して、第2のライブYouTubeストリームを1つ以上の他のクライアントデバイス104にブロードキャストする。第2のライブストリームは、ユーザが視聴者とゲーム体験を共有することを可能にする。任意で、第2のライブストリームは、ユーザが第1のゲームストリームに基づいてゲームをプレイしている間に第1のクライアントデバイス102のユーザによって提供されるオーディオフィードまたはビデオフィードを含む。
【0056】
いくつかの実装形態において、第1のクライアントデバイス102のユーザは、別個のクライアントデバイスを使用する必要がある場合がある(たとえば、異なる位置に移動したため)。第1のゲームセッションを一時停止するためのユーザアクションに応答して、サーバシステムは、第1のクライアントデバイス102上で実行される第1のゲーミングセッションの第1のゲームストリームを一時停止し(162)、第1のゲーミングセッション116に関する最新のステータス情報を記録する。第1のクライアントデバイス102のユーザは、第1のゲームセッションを継続するために、第2のクライアントデバイスの第2のゲーミングセッション上で第1のゲームストリームを再開してもよい。最新のステータス情報は、第1および第2のクライアントデバイスのユーザのシームレスゲーム体験を可能にするために、第2のゲーミングセッションに転送される。
【0057】
図2は、いくつかの実装形態に係る、ゲーミング環境100の一例としてのクライアントデバイス200(たとえば、クライアントデバイス102または104)を示すブロック図である。クライアントデバイス200の例は、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、およびウェアラブルパーソナルデバイスを含むが、これらに限定されない。クライアントデバイス200は、1つ以上の処理ユニット(CPU)202と、1つ以上のネットワークインターフェイス204と、メモリ206と、これらの構成要素(チップセットと呼ばれることもある)を相互接続するための1つ以上の通信バス208とを含む。クライアントデバイス200は、キーボード、マウス、ボイスコマンド入力ユニットもしくはマイクロフォン、タッチスクリーンディスプレイ、タッチセンシティブ入力パッド、ジェスチャ捕捉カメラ、または他の入力ボタンもしくはコントロールなどの、ユーザ入力を容易にする1つ以上の入力デバイス210を含む。さらに、クライアントデバイス200の中には、マイクロフォンおよび音声認識、またはカメラおよびジェスチャー認識を使用してキーボードを補足または置換するものがある。いくつかの実装形態において、クライアントデバイス200は、たとえば、電子デバイス上にプリントされたグラフィックシリーズコードの画像をキャプチャするための1つ以上のカメラ、スキャナ、またはフォトセンサユニットを含む。クライアントデバイス200はまた、1つ以上のスピーカおよび/または1つ以上の視覚ディスプレイを含む、ユーザインターフェイスの提示およびコンテンツの表示を可能にする1つ以上の出力デバイス212も含む。任意で、クライアントデバイス200は、クライアントデバイス200の位置を決定するための、GPS(地球測位衛星)または他の地理的位置受信機などの位置検出デバイス214を含む。クライアントデバイス200はまた、メディアデバイス106および/またはプレイヤークライアント104の近接性を判断するための近接検出デバイス215、たとえばIRセンサを含み得る。クライアントデバイス200はまた、入力として使用されてもよい、クライアントデバイス200の動き、向き、および他のパラメータを感知するための1つ以上のセンサ213(たとえば、加速度計、ジャイロスコープなど)を含み得る。
【0058】
メモリ206は、DRAM、SRAM、DDR RAM、または他のランダムアクセス固体メモリデバイスなどの高速ランダムアクセスメモリを含み、任意で、1つ以上の磁気ディスク記憶装置、1つ以上の光ディスク記憶装置、1つ以上のフラッシュメモリ装置、または1つ以上の他の不揮発性ソリッドステート記憶装置などの不揮発性メモリを含む。メモリ206は、任意で、1つ以上の処理ユニット202から遠隔に位置する1つ以上の記憶装置を含む。メモリ206、またはメモリ206内の不揮発性メモリは、非一時的なコンピュータ読取可能記憶媒体を含む。いくつかの実装形態において、メモリ206、またはメモリ206の非一時的なコンピュータ読取可能記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する。
●さまざまな基本システムサービスを扱うため、かつハードウェア依存タスクを実行するための手順を含むオペレーティングシステム216。
●クライアントデバイス200を、1つ以上のネットワークインターフェイス204(有線または無線)およびローカルネットワーク、ならびにインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの1つ以上のネットワーク112を介して、他のデバイス(たとえば、サーバシステム114、メディアデバイス106、および他のクライアントデバイス102または104)に接続するためのネットワーク通信モジュール218。
●1つ以上の出力デバイス212(たとえば、ディスプレイ、スピーカなど)を介してクライアントデバイス200における情報(たとえば、アプリケーション、ウィジェット、ウェブサイト、およびそれらのウェブページ、ならびに/またはゲーム、オーディオおよび/もしくはビデオコンテンツ、テキスト等を提示するためのグラフィカルユーザインターフェイス)の提示を可能にするためのユーザインターフェイスモジュール220。
●1つ以上の入力デバイス210のうちの1つからの1つ以上のユーザ入力またはやり取りを検出し、検出した入力またはやり取りを解釈するための入力処理モジュール222。
●セッション116に参加するためのウェブインターフェイスを含む、ウェブサイトおよびそのウェブページをナビゲートし、(たとえばHTTPを介して)要求し、表示するためのウェブブラウザモジュール224。
●メディアデバイス106に関連付けられたユーザアカウントにログインすること、ユーザアカウントに関連付けられた場合メディアデバイス106を制御すること、およびメディアデバイス106に関連付けられた設定およびデータを編集およびレビューすることを含む、メディアデバイス106とやり取りするためのメディアデバイスアプリケーション226。
●対応するゲームプレイを容易にすることおよび追加プレイヤーの招待を容易にすることを含む、クライアントデバイス200上でゲームを提供するためのゲームアプリケーション228。
●ゲームプレイ入力インターフェイスをゲームアプリケーション228に提供するためのゲームコントローラモジュール230。
●サーバシステム114ならびに他のコンテンツホストおよびプロバイダからデータ(たとえば、ゲームコントローラ構成456(
図4)、ゲームアプリケーション228および他のアプリケーション、モジュールおよびアプリケーションの更新、ならびにメモリ206内のデータ)をダウンロードするためのデータダウンロードモジュール231。
●少なくとも、ゲームアプリケーション228および他のアプリケーション/モジュールに関連付けられたデータを格納するクライアントデータ232。これは以下を含む。
【0059】
〇共通デバイス設定(たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など)を含む、クライアントデバイス200自体に関連する情報を記憶するためのクライアントデバイス設定234。
【0060】
〇アカウントアクセス情報およびデバイス設定(たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など)のための情報のうちの1つ以上を含む、メディアデバイスアプリケーション226のユーザアカウントに関連付けられた情報を記憶するためのメディアデバイス設定236。
【0061】
〇アカウントアクセス情報、ゲーム内ユーザ嗜好、ゲームプレイ履歴データ、および他のプレイヤーに関する情報のうちの1つ以上を含む、ゲームアプリケーション228のユーザアカウントに関連付けられた情報を記憶するゲームアプリケーション設定238。
【0062】
〇ゲームアプリケーション228に対するゲームコントローラモジュール230の構成(たとえば、
図4のゲームコントローラ構成456から受けた構成)に関連付けられた情報を記憶するためのゲームコントローラ構成240。
【0063】
〇クライアントデバイス102および104ならびにメディアデバイス106のうちのいずれかの存在、近接、または位置に関連付けられた情報を含む位置/近接データ242。
【0064】
いくつかの実装形態において、ゲームコントローラモジュール230は、メモリ206内のメディアデバイスアプリケーション226または別のアプリケーションの一部(たとえばサブモジュール)である。いくつかの実装形態において、ゲームコントローラモジュール230はオペレーティングシステム216の一部である。いくつかの実装形態において、ゲームコントローラモジュール230は別個のモジュールまたはアプリケーションである。
【0065】
クライアントデバイス102のいくつかの実装形態において、メディアデバイスアプリケーション226(および対応してメディアデバイス設定236)およびゲームアプリケーション228(および対応してゲームアプリケーション設定238)は任意である。クライアントデバイス102が参加するように招待される特定のゲームに応じて、メディアデバイスアプリケーション226およびゲームアプリケーション228は、プレイする必要はない。これらのアプリケーションのいずれかがゲームをプレイするために必要であり(たとえば、ゲームは、メディアデバイスアプリケーション226内のゲームコントローラモジュール230を使用する)、そのアプリケーションがメモリ206内にない場合、クライアントデバイス102はそのアプリケーションをダウンロードするように促されてもよい。
【0066】
上記特定された要素のそれぞれは、前述のメモリデバイスのうちの1つ以上に格納することができ、上記機能を実行するための命令のセットに対応する。上記特定されたモジュールまたはプログラム(すなわち、命令のセット)は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実現される必要はなく、したがって、これらのモジュールのさまざまなサブセットは、さまざまな実装形態で組み合わされるか、またはそうでなければ再配列されてもよい。いくつかの実装形態において、メモリ206は、任意で、上記特定されたモジュールおよびデータ構造のサブセットを格納する。さらに、メモリ206は、任意で、上記説明では述べていない追加のモジュールおよびデータ構造を記憶する。
【0067】
図3は、いくつかの実装形態に係る、ゲーミング環境100のメディアデバイス例106を示すブロック図である。メディアデバイス106は、典型的には、1つ以上の処理ユニット(CPU)302と、1つ以上のネットワークインターフェイス304と、メモリ306と、これらの構成要素(チップセットと呼ばれることもある)を相互接続するための1つ以上の通信バス308とを含む。任意で、メディアデバイス106は、クライアントデバイス102または104の近接度を決定するためのIRセンサなどの近接度/位置検出ユニット310を含む。
【0068】
メモリ306は、DRAM、SRAM、DDR RAM、または他のランダムアクセスソリッドステートメモリデバイスなどの高速ランダムアクセスメモリを含み、また、任意で、1つ以上の磁気ディスク記憶装置、1つ以上の光ディスク記憶装置、1つ以上のフラッシュメモリ装置、または1つ以上の他の不揮発性ソリッドステート記憶装置などの不揮発性メモリを含む。メモリ306は、任意で、1つ以上の処理ユニット302から遠隔に位置する1つ以上の記憶装置を含む。メモリ306、またはメモリ306内の不揮発性メモリは、非一時的なコンピュータ読取可能記憶媒体を含む。いくつかの実装形態において、メモリ306、またはメモリ306の非一時的なコンピュータ読取可能記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する。
●さまざまな基本システムサービスを扱うため、かつハードウェア依存タスクを実行するための手順を含むオペレーティングシステム316。
●メディアデバイス106を、1つ以上のネットワークインターフェイス304(有線または無線)、および、インターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、ケーブルテレビシステム、衛星テレビシステム、IPTVシステムなどの1つ以上のネットワーク112を介して、他のコンピュータまたはシステム(たとえば、サーバシステム114およびクライアントデバイス102)に接続するためのネットワーク通信モジュール318。
●1つ以上のコンテンツソース(たとえば、ゲームセッション116からの出力のためのサーバシステム114)から受信したコンテンツ信号を復号し、復号した信号内のコンテンツをメディアデバイス106に結合された出力デバイス108に出力するための、コンテンツデコードモジュール320。
●近接検出部310によって検出されたまたはサーバシステム114によって提供された近接度関連情報に基づいて、クライアントデバイス102および/または104の近接度を判断するための近接/位置決定ジュール322。
●メディア表示を制御するためのメディア表示モジュール324。
●少なくとも以下のデータを記憶するメディアデバイスデータ326。
【0069】
〇アカウントアクセス情報およびデバイス設定(たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など)のための情報のうちの1つ以上を含む、メディアデバイスアプリケーションのユーザアカウントに関連付けられた情報を記憶するためのメディアデバイス設定328。
【0070】
〇クライアントデバイス102および/または104ならびにメディアデバイス106のうちのいずれかの存在、近接、または位置に関連付けられた情報を含む位置/近接データ330。
【0071】
上記特定された要素のそれぞれは、前述のメモリデバイスのうちの1つ以上に格納することができ、上記機能を実行するための命令のセットに対応する。上記特定されたモジュールまたはプログラム(すなわち、命令のセット)は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実現される必要はなく、したがって、これらのモジュールのさまざまなサブセットは、さまざまな実装形態で組み合わされるか、またはそうでなければ再配列されてもよい。いくつかの実装形態において、メモリ306は、任意で、上記特定されたモジュールおよびデータ構造のサブセットを記憶する。さらに、メモリ306は、任意で、上で説明されない追加のモジュールおよびデータ構造を記憶する。
【0072】
図4は、いくつかの実装形態に係る、ゲーミング環境100のサーバシステム114内の一例としてのサーバを示すブロック図である。サーバシステム114は、典型的には、1つ以上の処理ユニット(たとえば、CPU402、GPU140、およびエンコーダ142)と、1つ以上のネットワークインタフェース404と、メモリ406と、これらの構成要素(チップセットと呼ばれることもある)を相互接続する1つ以上の通信バス408とを含む。サーバシステム114は、任意で、キーボード、マウス、ボイスコマンド入力ユニットもしくはマイクロフォン、タッチスクリーンディスプレイ、タッチセンシティブ入力パッド、ジェスチャ捕捉カメラ、または他の入力ボタンもしくはコントロールなどの、ユーザ入力を容易にする1つ以上の入力デバイス410を含み得る。さらに、サーバシステム114は、マイクロフォンおよび音声認識、またはカメラおよびジェスチャー認識を使用して、キーボードを補足または置換してもよい。いくつかの実装形態において、サーバシステム114は、任意で、たとえば電子デバイス上にプリントされたグラフィックシリーズコードの画像を取得するための1つ以上のカメラ、スキャナ、またはフォトセンサユニットを含む。サーバシステム114はまた、1つ以上のスピーカおよび/または1つ以上の視覚ディスプレイを含む、ユーザインターフェイスの提示およびコンテンツを表示可能にする1つ以上の出力デバイス412を含み得る。
【0073】
メモリ406は、DRAM、SRAM、DDR RAM、または他のランダムアクセスソリッドステートメモリデバイスなどの高速ランダムアクセスメモリを含み、任意で、1つ以上の磁気ディスク記憶装置、1つ以上の光ディスク記憶装置、1つ以上のフラッシュメモリ装置、または1つ以上の他の不揮発性ソリッドステート記憶装置などの不揮発性メモリを含む。メモリ406は、任意で、1つ以上の処理ユニットから遠隔に位置する1つ以上の記憶装置を含む。メモリ406、またはメモリ406内の不揮発性メモリは、非一時的なコンピュータ読取可能記憶媒体を含む。いくつかの実装形態において、メモリ406、またはメモリ406の非一時的なコンピュータ読取可能記憶媒体は、以下のプログラム、モジュール、およびデータ構造、またはそれらのサブセットもしくはスーパーセットを記憶する。
●さまざまな基本システムサービスを扱うため、かつハードウェア依存タスクを実行するための手順を含むオペレーティングシステム416。
●サーバシステム114を、1つ以上のネットワークインターフェイス404(有線または無線)およびインターネット、他の広域ネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの1つ以上のネットワーク112を介して他のデバイス(たとえば、サーバシステム114、クライアントデバイス102および/または104、ならびにメディアデバイス106内のさまざまなサーバ)に接続するための、ネットワーク通信モジュール418。
●クライアントデバイス102および/または104における情報(たとえば、アプリケーション、ウィジェット、ウェブサイト、およびそれらのウェブページ、ならびに/またはゲーム、オーディオおよび/もしくはビデオコンテンツ、テキスト等を提示するためのグラフィカルユーザインターフェイス)の提示を可能にするためのユーザインターフェイスモジュール420。
●メディアデバイス106に関連するデバイスプロビジョニング、デバイス制御、およびユーザアカウント管理のためのサーバ側機能を提供するように実行される、メディアデバイスモジュール422。
●クライアントデバイス(102および/または104)およびメディアデバイス106のいずれかの位置情報に基づいて、メディアデバイス106に対するクライアントデバイス102および/または104の近接度を決定する近接/位置決定モジュール424。
●ゲームセッションの設定、セッション状態データおよびその他のゲーム関連データの格納、クライアントデバイス102、104からのゲームプレイ入力の処理、ならびにゲームプレイ入力に応答してゲームプレイ出力をレンダリングすることを含むがこれらに限定されない、ゲーム(たとえばゲームアプリケーション228)に関連付けられたサーバ側機能を提供するための、ゲームサーバモジュール426。
●メディアストリーミングサイトをホストし、オンラインゲーミングセッションに関連する並行補助または補足メディアストリームを受信し、同じクライアントデバイス104または別個のクライアントデバイス102のゲームアプリケーション228上で実行されているオンラインゲーミングセッションと並行して表示するためにクライアントデバイス104に並行メディアストリームを提供するための、メディアストリーミングサーバモジュール438。
●クライアントデバイス102および104に関連付けられたユーザアカウント、たとえば、ユーザアカウントによる1つ以上のオンラインインタラクティブゲームのメンバシップへのサブスクリプションを管理し、加入者要求をゲームサーバモジュール426に転送するための加入者へのサービスを可能にし、加入者のゲームプレイアクティビティおよび関連する要求をモニタリングするための、フロントエンドサーバモジュール440。
●1つ以上の第三者コンテンツプロバイダによってホストされるゲームコンテンツへのアクセスを提供するためのメディアコンテンツサーバモジュール442。
●クライアントデバイス102/104への接続のネットワーク帯域幅を評価すること、および、クライアントデバイス102/104がゲームをプレイするために必要なモジュールまたはアプリケーションを有するか否かを評価することを含むが、これらに限定されない、クライアントデバイス102および/または104のデバイスおよびネットワーク能力を評価するためのデバイス/ネットワーク評価モジュール444。
●データ(たとえば、ゲームコントローラ構成456、ソフトウェア更新など)をクライアントデバイス102/104に提供するためのデータ送信モジュール446。
●サーバシステムデータ448は以下を含む。
【0074】
〇共通デバイス設定(たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など)を含む、クライアントデバイス102および104に関連する情報を記憶するためのクライアントデバイス設定450。
【0075】
〇アカウントアクセス情報およびデバイス設定(たとえば、サービス層、デバイスモデル、記憶容量、処理能力、通信能力など)のための情報のうちの1つ以上を含む、メディアデバイスアプリケーション422のユーザアカウントに関連する情報を記憶するためのメディアデバイス設定452(任意)。
【0076】
〇クライアントデバイス102および/または104およびメディアデバイス106のうちのいずれかの存在、近接または位置に関連する情報を含む位置/近接データ454。
【0077】
〇さまざまなゲームのためのコントローラ構成を記憶するためのゲームコントローラ構成456。
【0078】
〇たとえば、ユーザアカウント情報(たとえば、IDおよびパスワード)、メンバシップタイプ、嗜好、および活動履歴を含む、サーバシステム114上でホストされる1つ以上のゲームアプリケーション(たとえば、
図2のゲームアプリケーション228)の各々のユーザアカウントに関連する情報を記憶するためのユーザ情報126。
【0079】
〇ゲームセッションに関連するデータ(たとえばゲーム状態データ、その他のゲーム関連データ)を記憶するためのゲームセッションデータ128。これは、たとえば、第1のゲームセッションのためのデータ128-1と第2のゲームセッションのためのデータ128-2とを含み、各ゲームセッションのセッションデータ128は、フレームレート、レンダリング仕様、通常レイテンシ要件、GPU割り当ての情報、エンコーダ割り当ての情報、関連するセッションの識別、およびそれぞれのゲームセッションに関連する最新のステータス情報を含むが、これらに限定されない。
【0080】
いくつかの実装形態において、ゲームサーバモジュール426は、以下のプログラム、モジュール、またはそれらのサブセットもしくはスーパーセットを含む。
●GPU140の各処理スライスをオンラインゲーミングセッションのそれぞれのサブセットに割り当て、第1および第2のゲーミングセッションのリアルタイムデータ処理の必要性に従って、処理スライスのデューティサイクルを2つ以上のゲーミングセッション間で動的に共有する(すなわち、デューティサイクル中に2つ以上のゲーミングセッションを同時にかつ並列に実行する)ためのGPU時間共有モジュール428。
●予め定められたフレームレートに対応する時間間隔内で低レイテンシストリームと通常レイテンシストリームの両方を符号化するためのマルチストリーム生成モジュール430。
●エンコーダ142のエンコーダコアを、画像の画像タイルを処理するように割り当て、個々のブロックのデータおよびそれに対応する境界情報が利用可能になるとすぐに、エンコーダコアがそれぞれの画像タイル内の各個々のブロックを符号化することを可能にする並列エンコードモジュール432。
●オンラインゲーミングセッション中に、予め定められたフレームレートならびにユーザコマンドに関連する対応する通信レイテンシおよび処理レイテンシに基づいて、ユーザコマンドに応答して可変数のフレームを動的に生成するための動的フレーム生成モジュール434。
●対応するデバイスおよび接続能力に基づいてオンラインゲーミングセッションの目標品質パラメータを決定し、サーバシステム114のリソース(たとえば、その中の仮想マシン)を目標品質パラメータに基づいてオンラインゲーミングセッションと関連付け、関連付けられたリソースのリソースプロファイルに従ってオンラインゲーミングセッションを管理するためのリソース割当モジュール436。
【0081】
いくつかの実装形態において、メモリ406は、エンコーダ142をGPU140に結合するように構成されたデータバッファ144をさらに含む。具体的には、データバッファ144は、1つ以上の出力メディアストリームと関連付けてGPU140によって生成されたゲームプレイマルチメディアコンテンツを一時的に記憶し、それにより、エンコーダ142は、データバッファ144からゲームプレイマルチメディアコンテンツを取り出し、たとえば、標準化、速度または圧縮のために、取り出したコンテンツを1つ以上のメディアストリームに符号化することができる。
【0082】
上記特定された要素の各々は、前述のメモリデバイスのうちの1つ以上に格納することができ、上記機能を実行するための命令のセットに対応する。上記特定されたモジュールまたはプログラム(すなわち、命令のセット)は、別個のソフトウェアプログラム、手順、モジュール、またはデータ構造として実現される必要はなく、したがって、これらのモジュールのさまざまなサブセットは、さまざまな実装形態で組み合わされるか、またはそうでなければ再配列されてもよい。いくつかの実装形態において、メモリ406は、任意で、上記特定されたモジュールおよびデータ構造のサブセットを格納する。さらに、メモリ406は、任意で、上で説明されていない追加のモジュールおよびデータ構造を格納する。
【0083】
GPU仮想化
図5Aは、いくつかの実装形態に係る、少なくともGPU140を含む一例としてのサーバシステム114のブロック図である。
図4を参照して、サーバシステム114は、1つ以上の処理ユニット(たとえば、CPU402、GPU140、およびエンコーダ142)と、メモリ406と、任意でメモリ406の一部または別個のデータバッファ144とを含む。CPU402、GPU140、およびエンコーダ142は、ゲームセッションを設定すること、ゲーム状態データおよび他のゲーム関連データを記憶すること、クライアントデバイス102または104からのゲームプレイ入力を処理すること、およびゲームプレイ入力に関連するゲームプレイ出力をレンダリングすることを含むが、これらに限定されない、ゲームに関連するサーバ側機能(たとえば、ゲームアプリケーション228)を提供するようにともに機能する。いくつかの実装形態において、CPU402は、ゲームコントローラ構成456を提供するためにクライアントデバイスとやり取りし、ゲームアプリケーション228の設定を容易にし、ゲームセッションまたは観客レビューセッションを設定し、かつ/またはゲームプレイ入力を受信するように構成される。GPU140は、たとえば、シーンが再描画される度に照明効果を生成し、オブジェクトを変換することによって、ゲームプレイ入力を取得し、ゲームプレイマルチメディアコンテンツを生成するように構成される。エンコーダ142は、GPUによって提供されるゲームプレイマルチメディアコンテンツを、各々が所定のメディアフォーマットを有する1つ以上の出力メディアストリームに符号化(たとえば、標準化または圧縮)するように構成される。任意で、エンコーダ142はGPU140の一部である。任意で、エンコーダ142はGPU140とは別個のものであり、データバッファ144はエンコーダ142とGPU140との間に結合される。具体的には、データバッファ144は、1つ以上の出力メディアストリームと関連付けてGPU140によって生成されたゲームプレイマルチメディアコンテンツを一時的に格納し、それにより、エンコーダ142は、データバッファ144からゲームプレイマルチメディアコンテンツを取り出し、たとえば、標準化、速度または圧縮のために、取り出したコンテンツを1つ以上のメディアストリームに符号化することができる。
【0084】
いくつかの実装形態において、GPU140は、複数のGPUコア500を含む。いくつかの実装形態において、GPU140は、Open Graphics Library(OpenGL)プラットフォーム、Vulkan APIプラットフォーム、およびDX APIプラットフォームのうちの1つとやり取りする。たとえば、OpenGLプラットフォームは、2Dおよび3Dベクトルグラフィックスをレンダリングし、GPU140を介してハードウェア加速レンダリングを達成するためのクロス言語クロスプラットフォームAPIを含む。OpenGLプラットフォームは、頂点処理(たとえば、頂点をスクリーン空間に変換する)、プリミティブ処理(たとえば、頂点をプリミティブに編成することは、クリッピングされ、クリッピングされる)、ラスタライズ(たとえば、プリミティブを画素フラグメントにラスタライズする)、フラグメント処理(たとえば、フラグメントをシェーディングして、各画素における色を計算する)、および画素演算(たとえば、フラグメントをそれらの画素位置でフレームバッファにブレンドする)を含む演算のパイプラインの少なくともサブセットを介して実現される。いくつかの実装形態において、OpenGLプラットフォームは、GPU140が、複数の画素を含むゲームプレイマルチメディアコンテンツをエンコーダ142に提供することを可能にし、各画素は、3つのコンポーネント、たとえばRGB(緑、赤、青)、または4つのコンポーネント、たとえばCMYK(シアン、マゼンタ、イエロー、黒)でデータバッファ144に任意で格納された色情報と関連付けられる。
【0085】
図5Bは、いくつかの実装形態に係る、複数の処理時間スライス502に分割された1つ以上のGPUコア500のブロック図である。1つ以上のGPUコア500は、
図5Aに示される複数のGPUコア500のサブセットである。いくつかの実装形態において、1つ以上のGPUコア500は、1つ以上の画像レンダリングタスク(たとえば、1つ以上のオンラインゲーミングセッションのためのメディアストリームをレンダリングすること)を独立して引き受けるように構成された単一のGPUコア500を含む。いくつかの実装形態において、1つ以上のGPUコア500は、協働して1つ以上の画像レンダリングタスクを引き受けるように構成された2つ以上のGPUコア500を含む。1つ以上のGPUコア500は、複数の処理スライス502に分割される。いくつかの実装形態において、複数の処理スライス502の各々は、複数のオンラインゲーミングセッション(たとえば、第1のオンラインゲーミングセッション)のうちの少なくとも1つの目標フレームレートに対応する持続時間にわたって続く。たとえば、目標フレームレートは60fpsであり、各処理スライス502は16.667ms持続する。第1のメディアストリームは、第1のオンラインゲーミングセッションのために1つ以上のGPUコア500によって生成され、1つ以上のGPUコア500のそれぞれの処理スライス502のそれぞれの間に出力される画像フレームを含む。
【0086】
具体的には、いくつかの実装形態において、サーバシステム114は、複数のオンラインゲーミングセッションを開始することを求める要求を受信し、セッションの各々は、1つ以上のリモートクライアントデバイス上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。1つ以上のGPUコア500の複数の処理スライス502の各々は、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てられる。たとえば、第1の処理スライス502Aは、第1のゲーミングセッションGS1および第2のゲーミングセッションGS2を含むオンラインゲーミングセッションの第1のサブセットに割り当てられる。いくつかの実装形態において、処理スライス502の各々は、少なくとも1つの同一のゲーミングセッション(たとえば、第1のゲーミングセッションGS1)に割り当てられ、少なくとも1つの画像は、少なくとも1つの同一のゲーミングセッションのための処理スライス502の各々の間に生成される。いくつかの実装形態において、2つの連続する処理スライス502に割り当てられたオンラインゲーミングセッションのサブセットは、互いに異なる、すなわち、2つの連続する処理スライス502のうちの1つに割り当てられた少なくとも1つのオンラインゲーミングセッションは、連続する処理スライス502のうちの他のものに割り当てられない。さらに、いくつかの実装形態において、2つの連続する処理スライス502のうちの1つに割り当てられたオンラインゲーミングセッションは、連続する処理スライス502のうちの他のものに割り当てられない。
【0087】
さらに、第1の処理スライス502Aにおいて、サーバシステム114(たとえば、ゲームサーバモジュール426)は、オンラインゲーミングセッションの第1のサブセットの各々が第1の処理スライス502Aのデューティサイクルに割り当てられるように、オンラインゲーミングセッションの第1のサブセットに対するタイムシェアリング処理スケジュールを決定する。タイムシェアリング処理スケジュールに従い、サーバシステム114は、第1および第2のゲーミングセッションGS1およびGS2のリアルタイムデータ処理の必要性に従って第1および第2のゲーミングセッションGS1およびGS2を並列に実行することによって、第1の処理スライス502Aの第1のデューティサイクルの共有を可能にする。たとえば、第1の処理スライス502Aは16.667ms持続し、第1のデューティサイクルは、第1の処理スライスの時間持続時間の50%、たとえば8.333msである。一例では、第1のデューティサイクルの間、第1のゲーミングセッションGS1は複雑なユーザアクション(たとえば、ゲームキャラクタによる迅速なスプリント)を含み、第2のゲーミングセッションGS2は単純なユーザアクション(たとえば、ゲームキャラクタによる遅い歩行である)を含む。第1のデューティサイクルは、第1のゲーミングセッションGS1のためにより多くのリソース(処理時間またはGPUコア)を動的に予備する。具体的には、いくつかの実装形態において、第1の処理スライス502Aの第1のデューティサイクル中に、1つ以上のGPUコア502は、それぞれのリアルタイムデータ処理の必要性に従い、1つ以上のGPUコア500のそれぞれのサブセットを第1および第2のゲーミングセッションGS1およびGS2の各々に割り当てることによって、第1および第2のゲーミングセッションGS1およびGS2を並列に実行する(たとえば、複雑なユーザアクションを伴う第1のゲーミングセッションGS1に対して、単純なユーザアクションを伴う第2のゲーミングセッションG2よりも多数のGPUコア500を割り当てる)。
【0088】
代替的に、いくつかの実装形態において、第1のゲーミングセッションGS1および第2のゲーミングセッションGS2は、第1のデューティサイクル中に交互になる。たとえば、第1のデューティサイクルは、第1の処理スライスの時間持続時間の50%、たとえば、8.333msである。1つ以上のGPUコアは、第1および第2のゲーミングセッションの各々を実行する。第1および第2のゲーミングセッションの各々は、第1および第2のゲーミングセッションのもう一方のゲーミングセッションに切り替える前に短い期間(たとえば、1ms)にわたって実行される。
【0089】
いくつかの実装形態において、各処理スライス502をゲーミングセッションのそれぞれのサブセットに割り当てるために、サーバシステム114は、それぞれのスライス502に対するゲームレイテンシ基準を特定し、ゲームレイテンシ基準を満たす応答を、それぞれの処理スライス502に対応するオンラインゲーミングセッションのサブセットの各々に提供する。第1の処理スライス502Aにおいて、ゲーミングセッションの第1のサブセットの各々に対する第1の処理スライス502Aのデューティサイクルは、ゲームレイテンシ基準を満たすそれぞれの処理時間に対応する。具体的には、一例では、第1の処理スライス502Aは16.667ms持続し、第1のデューティサイクルは、第1の処理スライスの時間持続時間の50%、たとえば8.333msである。ゲームレイテンシ基準は、処理レイテンシが最大で8.333msであると定める。ゲーミングセッションの第1のサブセット(たとえば、第1および第2のゲーミングセッションGS1およびGS2)の各々は、8.333ms未満の処理レイテンシを有する。
【0090】
図5C~5Eは、いくつかの実装形態に係る、2つ以上のゲーミングセッションが第1の処理スライス502Aに割り当てられるプロセス504、506および508の例である。
図5Cを参照して、いくつかの実装形態において、第1および第2のゲーミングセッションGS1およびGS2に加えて、第1の処理スライス502Aも第3のゲーミングセッションGS3に割り当てられる。第1の処理スライス502Aに割り当てられた複数のオンラインゲーミングセッションの第1のサブセットはまた、第3のゲーミングセッションGS3を含む。タイムシェアリング処理スケジュールに従って、1つ以上のGPETコア500は、第1、第2、および第3のゲーミングセッションGS1~GS3間で、第1の処理スライス502Aの第1のデューティサイクルの動的共有を容易にする。第3ゲーミングセッションGS3は、第3ゲーミングセッションのリアルタイムデータ処理の必要性に応じて、第1および第2のゲーミングセッションGS1、GS2と並列に実行される。さらに、
図5Dを参照して、いくつかの実装形態において、オンラインゲーミングセッションの第1のサブセットは、第3のゲーミングセッションGS3も含む。第1のデューティサイクルで第3のゲーミングセッションを実行するのではなく、1つ以上のGPETコア500は、第1の処理スライス502Aの第1のデューティサイクルに続くがそれとは異なる第2のデューティサイクルで第3のゲーミングセッションを実行し、第3のゲーミングセッションは、第2のデューティサイクルを任意の他のゲーミングセッションと共有しない。
【0091】
図5Eを参照して、いくつかの実装形態において、第1の処理スライス502Aに割り当てられたオンラインゲーミングセッションの第1のサブセットは、第3のゲーミングセッションGS3および第4のゲーミングセッションGS4をさらに含む。タイムシェアリング処理スケジュールに従って、第3および第4のゲーミングセッションGS3およびGS4は、第1の処理スライス502Aの第1のデューティサイクルに続くがそれとは異なる第2のデューティサイクルを動的に共有する。1つ以上のGPUコア500は、第3および第4のゲーミングセッションGS3およびGS4のリアルタイムデータ処理の必要性に従い、第3および第4のゲーミングセッションGS3およびGS4を並列に実行する。たとえば、第1の処理スライス502Aは、16.667ms持続し、第1のデューティサイクルとそれに続く第2のデューティサイクルとを含む。第1のデューティサイクルの間、2つの画像フレームは、第1および第2のゲーミングセッションGS1およびG2にそれぞれ対応し、第1および第2のゲーミングセッションGS1およびGS2のリアルタイムデータ処理の必要性に従って動的に処理される。第2のデューティサイクルの間、2つの画像フレームは、第3および第4のゲーミングセッションGS3およびGS4にそれぞれ対応し、第3および第4のゲーミングセッションGS3およびGS4のリアルタイムデータ処理の必要性に従って動的に処理される。
【0092】
図6は、いくつかの実装形態に係る、OpenGLプラットフォームに基づいてメディアコンテンツを生成する2つのゲーミングセッション(たとえば、第1および第2のゲーミングセッションGS1およびGS2)によって処理スライス(たとえば、第1の処理スライス502A)を動的に共有する一例としてのプロセス600である。第1および第2のゲーミングセッションGS1、GS2は、Open Graphics Libraryに基づいて実行され、グラフィクスパイプライン処理を含む。1つ以上のGPUコア500は、第1および第2のゲーミングセッションGS1およびGS2を並列に実行する。具体的には、第1の処理スライス502Aの第1のデューティサイクル中において、第1のゲーミングセッションGS1が第1のパイプラインステージで待機している間、1つ以上のGPUコア500は、第2のオンラインゲーミングセッションGS2の第2のパイプラインステージを実現する。第2のオンラインゲーミングセッションGS2が第3のパイプラインステージで待機している間、1つ以上のGPUコア500は、第1のオンラインゲーミングセッションGS1の第4のパイプラインステージを実現する。状況によっては、第1のオンラインゲーミングセッションGS1および第2のオンラインゲーミングセッションGS2は、第1のパイプラインステージおよび第3のパイプラインステージにおいて必要とされるデータが準備されるのを待っているので、第1のパイプラインステージおよび第3のパイプラインステージにおいてそれぞれ待機する。
【0093】
先に説明したように、OpenGLプラットフォームは、頂点処理(たとえば、頂点をスクリーン空間に変換する)、プリミティブ処理(たとえば、頂点をプリミティブに編成し、プリミティブはクリッピングおよび選別される)、ラスタライズ(たとえば、プリミティブを画素フラグメントにラスタライズする)、フラグメント処理(たとえば、フラグメントをシェーディングして、各画素における色を計算する)、および画素演算(たとえば、フラグメントをそれらの画素位置でフレームバッファにブレンドする)を含む演算のパイプラインの少なくともサブセットを介して実現される。具体的な例において、OpenGLプラットフォームは、オンラインゲーミングセッションごとに画像フレームをレンダリングするために9つの連続するパイプラインステージを実現する。9つの連続するパイプラインステージは、以下のうちのサブセットまたはすべてを含む。
●頂点配列データを作成するための頂点仕様602。
●各頂点に作用する頂点シェーダ604。
●頂点データのパッチをより小さいプリミティブに任意で細分化するためのテッセレーション606。
●より小さいプリミティブを出力プリミティブに任意で変換するためのジオメトリシェーダ608。
●変換フィードバック、プリミティブクリッピング、パースペクティブ分割、およびビューポート変換を含むがこれらに限定されない、最後のステージの出力プリミティブを異なる場所に調整および搬送するための頂点後処理610。
●出力プリミティブを個々のベースプリミティブのシーケンスに分割するプリミティブアセンブリ612。
●各個々のプリミティブをプリミティブのサンプルカバレージに基づいて離散要素(フラグメントとも呼ばれる)に分解するためのラスタライズ614。
●1組の色および1つの深度値にラスタライズすることによって生成された各フラグメントを処理するフラグメントシェーダ616。
●ピクセルオーナーシップテスト、シザーテスト、マルチサンプル演算、ステンシルテスト、深度テスト、オクルージョンクエリアップデート、ブレンド、sRGB変換、ディザリング、論理演算、書込マスクおよび論理演算を含むがこれらに限定されない、たとえば標準化、速度および/または圧縮のための、エンコーダ142によって処理されることが可能なゲームプレイマルチメディアコンテンツに対する、色のセットおよび1つの深度値を処理するためのプリサンプル演算618。
【0094】
1つ以上のGPUコア500は、第1の処理スライス502Aの第1のデューティサイクルの間に、第1および第2のゲーミングセッションGS1およびGS2それぞれの9つの連続するパイプラインステージを並列に実行する。
図6に示される例では、1つ以上のGPUコア500は、第1のゲーミングセッションGS1のステージ602および604を最初に実行する。第1のゲーミングセッションGS1が頂点シェーダ604の中間で一時停止されている(たとえば、データが準備が整うのを待つ)間、1つ以上のGPUコア500は、第2のゲーミングセッションGS2に対する頂点仕様602を取得する。次に、第2のゲーミングセッションGS2は、その頂点シェーダステージ604で一時停止され(たとえば、データが準備が整うのを待つ)、1つ以上のGPUコア500は、第1のゲーミングセッションGS1のステージ604~610を実行し続ける。第1のゲーミングセッションGS1の頂点後処理ステージ610を完了した後、第1のゲーミングセッションGS1のプリミティブアセンブリステージ612を開始する前に、1つ以上のGPUコア500は、第2のゲーミングセッションGS2のステージ604~610を実行する。頂点後処理ステージ610を完了した後、第2のゲーミングセッションGS2のプリミティブアセンブリステージ612を開始する前に、1つ以上のGPUコア500は、第1のゲーミングセッションGS1のステージ612-618を実行し続ける。第1のゲーミングセッションGS1が完了すると、1つ以上のGPUコア500は、第2のゲーミングセッションGS2のステージ612~618を実行し続ける。
【0095】
図6に示されないいくつかの実装形態において、1つ以上のGPUコア500は、第1および第2のゲーミングセッションGS1およびGS2のための9つの連続するパイプラインステージの各々を交互に実行する。言い換えると、1つ以上のGPUは、第1のゲーミングセッションGS1のための頂点指定ステージ602、第2のゲーミングセッションGS1のための頂点指定ステージ602、第1のゲーミングセッションGS1のための頂点シェーダステージ604、第2のゲーミングセッションGS1のための頂点シェーダステージ604等を、第1および第2のゲーミングセッションの両方を完了するまで順次実行する。
【0096】
いくつかの実装形態において、第1および第2のゲーミングセッションGS1およびGS2は、互いに関連し、それぞれのリアルタイムユーザインタラクティブアプリケーションの実行に使用されるアプリケーションデータの一部を共有するように構成される。たとえば、第1および第2のゲーミングセッションは、第1のリアルタイムユーザインタラクティブゲームアプリケーションのシーンにおける2人のプレイヤーに対応する。第2のゲーミングセッションGS2は、第1のゲーミングセッションGS1からの招待に応答して初期化されてもよい。処理スライス502Aの第1のデューティサイクル中、1つ以上のGPUコア500は、アプリケーションデータの共有部分を使用して、第1および第2のゲーミングセッションGS1およびGS2の両方を実現することができる。
【0097】
いくつかの実装形態において、第1および第2のゲーミングセッションは、互いに独立しており、2つの別個のリアルタイムユーザインタラクティブアプリケーションを実行するように構成される。たとえば、第1のゲーミングセッションGS1は、キャンディラッシュゲームを実装し、第2のゲーミングセッションGS2は、カーレースゲームを実現する。
【0098】
いくつかの実装形態において、GPU140は、第1の制御レジスタおよび第2の制御レジスタを有する少なくとも2つ以上の制御レジスタを含み、第1および第2のレジスタはそれぞれ、第1および第2のゲームセッションGS1およびGS2が第1の処理スライス502Aの第1のデューティサイクルを動的に共有するとき、第1および第2のゲームセッションGS1およびG2を並列に制御するように構成される。また、第1のセッションGS1および第2のセッションGS2は、各ゲームセッションデータを一時的に記憶するキャッシュに対応付けられている。たとえば、
図6を参照して、第1のゲームセッションGS1のゲームセッションデータは、第1のゲームセッションGS1が頂点シェーダステージ604の間および頂点後処理ステージ610の後に一時停止されるとき、その対応するキャッシュに格納され、第1のゲームセッションGS1が頂点シェーダステージ604およびプリミティブアセンブリステージ612の間に再起動された後、さらなる処理のために取り出される。
【0099】
いくつかの実装形態において、頂点データは、対応するゲーミングセッション(たとえば、第1のゲーミングセッションの「ジョブA」、第2のゲーミングセッションの「ジョブB」)に基づいてタグ付けされるように構成されたコンテキストビットを含む。データフラグメントは、「ジョブA」および「ジョブB」に関連してパイプラインプロセス600全体にわたってタグ付けされる。任意で、ハードウェアリソース(たとえば、制御レジスタおよびキャッシュ)もタグ付けされる。
【0100】
いくつかの実装形態では、第1および第2のゲーミングセッションGS1およびGS2は、Vulkan APIプラットフォーム上で実現され、いくつかの実装形態では、第1および第2のゲーミングセッションGS1およびGS2は、DX APIプラットフォーム上で実現されることに留意されたい。いくつかの実装形態において、第1および第2のゲーミングセッションGS1およびGS2は、複数のプラットフォーム(たとえば、OpenGL、VulkanおよびDX)の2つの別個のプラットフォーム上で実現される。第1および第2のゲーミングセッションGS1およびGS2の各々の連続するパイプラインステージは、それぞれのゲーミングセッションが実現されるそれぞれのプラットフォームに対応する。第1および第2のゲーミングセッションGS1およびGS2の連続するパイプラインステージは、第1の処理スライス502Aの第1のデューティサイクルの間に、それらが2つの別個のプラットフォーム上で実現されるときでさえ、並列に実行されてもよい。
【0101】
図7は、いくつかの実装形態に係る、サーバシステム114の処理能力(たとえばGPU140の処理能力)を管理するための一例としての方法700を示すフローチャートである。方法700は、任意で、コンピュータメモリまたは非一時的なコンピュータ読取可能記憶媒体(たとえば、ゲームサーバモジュール426のGPU時間共有モジュール422において)に記憶され、サーバシステム114(たとえば、ゲームサーバ122)の1つ以上のプロセッサによって実行される命令によって制御される。コンピュータ読取可能記憶媒体は、磁気または光ディスク記憶デバイス、フラッシュメモリなどのソリッドステート記憶デバイス、または他の不揮発性メモリデバイスを含み得る。コンピュータ読取可能記憶媒体に記憶された命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または1つ以上のプロセッサによって解釈される他の命令フォーマット以下のうちの1つ以上を含み得る。方法700におけるいくつかの動作は組み合わされてもよく、および/またはいくつかの動作の順序が変更されてもよい。
【0102】
方法700は、1つ以上の処理コア(たとえば、GPU140は、1つ以上のGPUコア500をさらに含む)と、処理コアによって実行するためのプログラムを格納するメモリとを含むサーバシステム114によって実行される。1つ以上の処理コアは、複数の処理スライス502を含む。いくつかの実装形態において、複数の処理スライス502の各々は、複数のオンラインゲーミングセッションの目標フレームレート(たとえば、60fps)に対応する持続時間(たとえば、16ms)持続する。
【0103】
サーバシステム114は、複数のオンラインゲーミングセッションを開始することを求める要求を受信し(702)、セッションの各々は、1つ以上のリモートクライアントデバイス(たとえば、クライアントデバイス102または104)上で実行されるそれぞれのリアルタイムユーザインタラクティブアプリケーションに対応する。サーバシステム114は、1つ以上の処理コアの複数の処理スライスの各々を、そこで実行される複数のオンラインゲーミングセッションのサブセットに割り当てる(704)。具体的には、第1の処理スライスは、第1のゲーミングセッションGS1および第2のゲーミングセッションGS2を含むオンラインゲーミングセッションの第1のサブセットに割り当てられる(706)。いくつかの実装形態において、第1および第2のゲーミングセッションGS1およびGS2は、互いに関連し、それぞれのリアルタイムユーザインタラクティブアプリケーションの実行に使用されるアプリケーションデータの一部を共有するように構成される。さらに、いくつかの実装形態において、第1および第2のゲーミングセッションGS1およびGS2は、第1のリアルタイムユーザインタラクティブゲームアプリケーションのシーンにおける2人のプレイヤーに対応する。代替的に、第1および第2のゲーミングセッションGS1およびGS2は、互いに独立しており、2つの別個のリアルタイムユーザインタラクティブアプリケーションを実行するように構成される。
【0104】
第1の処理スライスにおいて、オンラインゲーミングセッションの第1のサブセットに対してタイムシェアリング処理スケジュールが決定され(708)、ゲーミングセッションの第1のサブセットの各々が第1の処理スライスのデューティサイクルに割り当てられる。一例では、第1の処理スライスは16.667ms持続し、第1のデューティサイクルは第1の処理スライスの持続時間の50%、すなわち8.333msである。いくつかの実装形態において、第1のデューティサイクルは、第1の処理スライス502A内で連続的である。代替的に、いくつかの実装形態において、第1のデューティサイクルは、第1の処理スライス502A内で連続せず、たとえば、第2の複数のショートスライス(たとえば、長さ1ms)とインターリーブされ、第2の複数のショートスライスによって分離される第1の複数のショートスライス(たとえば、長さ1ms)を含む。
【0105】
いくつかの実装形態において、複数の処理スライスの各々について、ゲームレイテンシ基準が識別され、それぞれの処理スライスに対応するオンラインゲーミングセッションのサブセットの各々に、ゲームレイテンシ基準を満たす応答レイテンシを提供する。さらに、いくつかの実装形態において、第1の処理スライスにおいて、ゲーミングセッションの第1のサブセットの各々に対する第1の処理スライスのデューティサイクルは、ゲームレイテンシ基準を満たすそれぞれの処理時間に対応する。たとえば、第1の処理スライス502Aは16.667ms持続し、ゲームレイテンシ基準は、応答レイテンシが8ms未満でなければならないことを要求することができる。各処理時間は応答レイテンシ、すなわち8ms未満でなければならず、したがって、第1の処理スライスのデューティサイクルは48%未満でなければならない。状況によっては、ゲームレイテンシ基準を満たすために、1つ以上の処理コアのサブセットを対応するゲーミングセッションに再割り当てする必要がある。
【0106】
いくつかの実装形態において、処理スライスおよび1つ以上の処理コアのサブセットのデューティサイクルの特定のゲーミングセッションへの割り当ては、静的に実現される。GPU140は、複数のゲーミングセッションの各々についてそれぞれのデータ処理の必要性を推定し、それに応じて、処理スライスおよび1つ以上の処理コアのサブセットのデューティサイクルを特定のゲーミングセッションに割り当てる。代替的に、いくつかの実装形態において、GPU140は、リアルタイムで特定のゲーミングセッションのデータ処理の必要性を推定し(たとえば、シーンまたはユーザアクションの複雑さに応じて)したがって、処理スライスのデューティサイクルおよび1つ以上の処理コアのサブセットを、特定のゲーミングセッションに動的に割り当てる。
【0107】
タイムシェアリング処理スケジュールに従って、第1および第2のゲーミングセッションは、第1および第2のゲーミングセッションGS1およびGS2のリアルタイムデータ処理の必要性に従って第1および第2のゲーミングセッションGS1およびGS2を並列に実行することによって、第1の処理スライス502Aの第1のデューティサイクルを共有する(710)。いくつかの実装形態において、第1および第2のゲーミングセッションを並列に実行することは、それぞれのデータ処理の必要性に従って、1つ以上の処理コアのそれぞれのサブセットを第1および第2のゲーミングセッションGS1およびGS2の各々に割り当てることをさらに含む。いくつかの実装形態において、1つ以上の処理コアは、第1の制御レジスタおよび第2の制御レジスタをさらに含む少なくとも2つ以上の制御レジスタを含み、第1および第2のレジスタは、第1および第2のゲーミングセッションGS1およびGS2が第1の処理スライス502Aの第1のデューティサイクルを動的に共有するとき、第1および第2のゲーミングセッションGS1およびGS2を並列に制御するように構成される。
【0108】
いくつかの実装形態において、第1および第2のゲーミングセッションGS1およびGS2の各々は、OpenGLプラットフォームに基づいて実行され、グラフィックスパイプラインプロセスを含む。第1の処理スライス502Aの第1のデューティサイクルの間、第1のオンラインゲーミングセッションは、第1のパイプラインステージ(たとえば、頂点シェーダステージ604)で待機し、第2のオンラインゲーミングセッションの第2のパイプラインステージ(たとえば、頂点仕様602)は、1つ以上の処理コアによって実施される。さらに、第2のオンラインゲーミングセッションが第3のパイプラインステージ(たとえば頂点シェーダ604)で待機している間、第1のオンラインゲーミングセッションGS1の第4のパイプラインステージ(たとえばステージ606~610のうちの1つ)は、1つ以上の処理コアによって実現される。OpenGLプラットフォーム上で第1および第2のゲーミングセッションを動的に実行することに関するさらなる詳細は、
図6を参照して先にのべた通りである。
【0109】
いくつかの実装形態において、オンラインゲーミングセッションの第1のサブセットは、第3のゲーミングセッションGS3をさらに含む。タイムシェアリング処理スケジュールに従って、第3のゲーミングセッションGS3はまた、第1の処理スライスの第1のデューティサイクルを第1および第2のゲーミングセッションGS1およびGS2と動的に共有する(712)。第3ゲーミングセッションGS3は、第3ゲーミングセッションのリアルタイムデータ処理の必要性に応じて、第1、第2のゲーミングセッションGS1、GS2と並列に実行される。いくつかの実装形態において、オンラインゲーミングセッションの第1のサブセットは、第3のゲーミングセッションGS3をさらに含み、第3のゲーミングセッションは、第1の処理スライスの第1のデューティサイクルに続く第2のデューティサイクルで実行される(714)。第3ゲーミングセッションGS3は、第2のデューティサイクルを他のゲーミングセッションと共有しない。いくつかの実装形態において、オンラインゲーミングセッションの第1のサブセットは、第3のゲーミングセッションGS3および第4のゲーミングセッションGS4をさらに含む。タイムシェアリング処理スケジュールに従って、第3および第4のゲーミングセッションは、第3および第4のゲーミングセッションのリアルタイムデータ処理の必要性に従って第3および第4のゲーミングセッションを並列に実行することによって、第1の処理スライス502Aの第2のデューティサイクルを動的に共有する(716)。第2のデューティサイクルは、第1のデューティサイクルとは異なる。第1の処理スライスの間に1つ以上の追加のゲーミングセッションを実行することに関するさらなる詳細は、
図5C~5Eを参照して先に述べた通りである。
【0110】
一例では、4つ以上のオンラインゲーミングセッションがGPU140によって処理される。4つ以上のオンラインゲーミングセッションのうちの2つは、専用のGPUコアを任意の他のオンラインゲーミングセッションと共有することなく専用のGPUコアによって処理され、たとえば、第1のオンラインゲーミングセッションは、第1のGPUコアを使用し、第2のオンラインゲーミングセッションは、第2のGPUコアおよび第3のGPUコアを使用する。残りの2つ以上のオンラインゲーミングセッションは、
図5~7を参照して上述した処理能力を管理する方法700に従って第4のGPUコアを共有する。具体的には、残りの2つ以上のオンラインゲーミングセッションのうちの少なくとも2つは、第4のGPUコアの各処理スライスのデューティサイクルを共有し、それぞれのデータ処理の必要性に従って並列に実行される。
【0111】
図7の動作を説明した特定の順序は、例示的なものにすぎず、説明した順序が動作を実行することができる唯一の順序であることを示すものではないことを理解されたい。当業者は、本明細書に記載のサーバシステムの処理能力を管理するさまざまな方法を認識するであろう。
【0112】
複数のメディアストリームの並行レンダリング
図8Aは、いくつかの実装形態に係る、少なくともエンコーダ142を含む一例としてのサーバシステム114のブロック図である。
図8Bは、いくつかの実装形態に係る時間間隔の時間ダイアグラム820である。
図8Cおよび8Dは、いくつかの実装形態に係るゲームシーンに関連して2つの別個のクライアントデバイス102において並行して表示される2つの別個のメディアストリームの一例としての画像840および860である。
図4を参照して、サーバシステム114は、1つ以上の処理ユニット(たとえば、CPU402、GPU140、およびエンコーダ142)と、メモリ406と、任意でメモリ406の一部または別個のデータバッファ144とを含む。CPU402、GPU140、およびエンコーダ142は、ゲームセッションの設定、ゲーム状態データおよび他のゲーム関連データの格納、ゲームプレイ入力の処理、およびクライアントデバイス102および/または104上でのゲームプレイ出力のレンダリングを含むがこれらに限定されない、ゲームに関連するサーバ側機能(たとえば、ゲームアプリケーション228)を提供するようにともに機能する。いくつかの実装形態において、CPU402は、ゲームコントローラ構成456を提供するためにクライアントデバイスとやり取りし、ゲームアプリケーション228の設定を容易にし、ゲームセッションまたは観客レビューセッションを設定し、かつ/またはゲームプレイ入力を受信するように構成される。GPU140は、たとえば、シーンが再描画される度に照明効果を生成し、オブジェクトを変換することによって、ゲームプレイ入力を取得し、ゲームプレイマルチメディアコンテンツを生成するように構成される。
【0113】
エンコーダ142は、GPU140によって提供されるゲームプレイマルチメディアコンテンツを、各々が所定のメディアフォーマットを有する1つ以上の出力メディアストリームに符号化(たとえば、標準化または圧縮)するように構成される。メディア符号化は、さまざまなカスタムまたは標準コーデック(たとえば、H.265/MPEG-H HE VCコーデック、H.264/MPEG-4 AVCコーデック、H.263/MPEG4Part2コーデック、H.262/MPEG-2コーデック、Microsoftコーデック、およびGoogle On2コーデック(たとえば、VP6、VP6-E、VP6-S、VP7、VP8、およびVP9))および/または本明細書の出願の時点でまだ開発されていないコーデックを含む任意の他の適切なコーデックのいずれかに基づいて、エンコーダ142において実行されてもよい。任意で、エンコーダ142はGPU140の一部である。任意で、エンコーダ142はGPU140とは別個のものであり、データバッファ144はエンコーダ142とGPU140との間に結合される。具体的には、データバッファ144は、GPU140によって生成されたゲームプレイマルチメディアコンテンツを、1つ以上の出力メディアストリームと関連付けて一時的に記憶する。エンコーダ142は、ゲームプレイマルチメディアコンテンツをデータバッファ144から検索し、ゲームプレイマルチメディアコンテンツを標準化する、高速化する、または圧縮する目的で、検索されたコンテンツを1つ以上のメディアストリームに符号化することができる。いくつかの実装形態において、エンコーダ142は、複数のエンコーダコア800を含む。
【0114】
具体的には、エンコーダ142は、低レイテンシストリーム130および通常レイテンシストリーム132を含む複数のメディアストリームを生成するように構成される。低レイテンシストリーム130は、オンラインインタラクティブゲーミングセッション116に対応し、通常レイテンシストリーム132よりも速い応答レートおよび低い送信レイテンシを有する。いくつかの実装形態において、通常レイテンシストリーム132はまた、オンラインインタラクティブゲーミングセッション116に対応する。いくつかの実装形態において、通常レイテンシストリーム132は、低レイテンシストリーム130から独立しており、任意のゲームアプリケーションに無関係なメディアストリームであってもよい。サーバシステム114は、低レイテンシストリーム130の画像フレームのシーケンスを符号化するための所定のフレームレート(たとえば、60fps)を識別する。第1の時間間隔(処理スライスと呼ばれることもある)は、低レイテンシストリーム130の第1の画像フレームのシーケンスにおける各画像フレームに対する所定のフレームレートに対応するように決定される。たとえば、第1の時間間隔は、60fpsの所定のフレームレートに対して16.667msである。
図8Bを参照して、オンラインゲーミングセッション116は、それぞれが予め定められたフレームレートに従って決定される複数の第1の時間間隔を含む。各第1の時間間隔の間、低レイテンシストリーム130の第1の画像フレームのシーケンスの画像フレームが符号化され、低レイテンシストリーム130は所定のフレームレートで出力されてもよい。
【0115】
低レイテンシストリーム130の画像フレームが符号化された後、サーバシステム114はさらに、それぞれの第1の時間間隔内に残余時間が残っているか否かを判断する。状況によっては、第1の時間間隔内に残された残余時間が、通常レイテンシストリーム132に関連する通常レイテンシ要件を満たし、通常レイテンシストリームの第2の画像フレームのシーケンスのサブセットが第1の時間間隔の残余時間の間に符号化されると判断される。逆に、状況によっては、第1の時間間隔内に残された残余時間が通常のレイテンシ要件を満たしていないと判断されると、サーバシステム114は、第1の時間間隔の残余時間中に、画像フレームの第2のシーケンスの任意の画像フレームの生成を中止する。したがって、符号化優先度は、低レイテンシストリーム130に付与され、通常レイテンシストリーム132は、所定のフレームレートを保証することなく、エンコーダ142の能力に従って生成される。
【0116】
いくつかの実装形態において、低レイテンシストリーム130は、第1の画像フレームを含み、第1の画像フレームに対応する通常レイテンシストリーム132の第2の画像フレームのシーケンスのサブセットは、通常レイテンシ要件によって許可されるように、通常レイテンシストリーム132内の画像フレームの一部を含む。第1の画像フレームを符号化した後、サーバシステム114は、第1の時間間隔内に残された第1の残余時間を決定する。第1の時間間隔内に残された第1の残余時間は、通常レイテンシストリームに関連する通常レイテンシ要件を満たすと判断される。エンコーダ142は、第1の時間間隔の残りの時間の間に、通常レイテンシストリームにおいて画像フレームの一部を生成する。たとえば、画像フレームの部分は、通常レイテンシストリームにおける画像フレームの半分を含む。通常のレイテンシ要件に従って、第1の残余時間は、符号化するのに約2msを要する通常レイテンシストリームの画像フレームの少なくとも4分の1を符号化するのに十分でなければならない。第1の残余時間は、通常のレイテンシ要件に応じて2ms以上でなければならない。この例では、第1の残余時間はおよそ5msであり、したがって、通常レイテンシストリームにおける画像フレームの半分は、通常のレイテンシ要件に従って符号化される。
【0117】
いくつかの実装形態において、低レイテンシストリーム130は、第2の画像フレームを含み、第2の画像フレームに対応する通常レイテンシストリーム132の第2の画像フレームのシーケンスのサブセットは、通常レイテンシストリーム132内に2つ以上の画像フレームを含む。第2の画像フレームを符号化した後、サーバシステム114は、第1の時間間隔内に残された第1の残余時間を決定する。第1の時間間隔内に残された第1の残余時間は、通常レイテンシストリームに関連する通常レイテンシ要件を満たすと判断される。それによって、エンコーダ142は、第1の時間間隔の残余時間中に、通常レイテンシストリームにおいて2つ以上の画像フレームを生成する。たとえば、通常のレイテンシ要件は、第1の残余時間が、通常レイテンシストリームの整数個の画像フレームを符号化するのに十分でなければならないことを要求し得る。通常レイテンシストリームの各画像フレームを符号化するのに約2msかかる。第1の時間間隔の残余時間が5msである場合、通常レイテンシストリーム132の2つの画像フレームは、第1の時間間隔の残余時間内に符号化される。
【0118】
いくつかの実装形態において、エンコーダ142が第1の時間間隔の残余時間の間に通常レイテンシストリームの第2の画像フレームのシーケンスのサブセットを生成した後、サーバシステム114は、第1の時間間隔内に残された第2の残余時間を決定する。第1の時間間隔内に残された第2の残余時間は、第3のメディアストリームに関連する第3の要件を満たすと判断される。次いで、エンコーダ142は、第1の時間間隔の第2の残りの時間の間に第3のメディアストリームのサブセットを生成する。いくつかの実装形態において、第3のメディアストリームは、オンラインゲーミングセッションをプレイするゲームプレイヤーを捕捉するプレイヤーデモビデオストリームを含む。プレイヤーデモビデオストリームは、任意で、ゲームプレイヤーがオンラインインタラクティブセッション116をプレイしている間にゲームプレイヤーによって生成されるリアルタイムコメントを提供する。
【0119】
図8Cを参照して、いくつかの実装形態において、低レイテンシストリーム130および通常レイテンシストリーム132は、同じオンラインゲーミングセッション116に関連する。低レイテンシストリーム130は、第1の解像度(たとえば、4K)を有し、通常レイテンシストリーム132は、第1の解像度よりも低い第2の解像度(たとえば、1080p)を有する。低レイテンシストリーム130は、オンラインインタラクティブゲーミングセッション116の間にゲームプレイヤによる複数のインタラクティブゲームアクション(たとえば、シューティング、ランニング、カーレース)を可能にするためにゲームプレイヤの第1のクライアントデバイスに送信される。通常レイテンシストリーム132は、1つ以上の第2のクライアントデバイスに送られ、1つ以上の観客がオンラインインタラクティブセッション116をリアルタイムでレビューすることを可能にする。いくつかの実装形態において、低レイテンシストリーム130は、フロントエンドサーバ134を介してゲーミングサービスに加入したゲームプレイヤにストリーム130を配信するように構成されたフロントエンドサーバ134に提供される。通常レイテンシストリーム132は、メディアストリーミングサーバ124に提供され、メディアストリーミングサーバ124は、通常レイテンシストリーム132を、メディアストリーミングサーバ124を介してサービスのレビューに加入した観客にブロードキャストするように構成される。任意で、フロントエンドサーバ134およびメディアストリーミングサーバ124は、単一のゲームアプリケーションを使用してエンティティによって管理される。任意で、フロントエンドサーバ134およびメディアストリーミングサーバ124は、ゲームアプリケーション(たとえば、FIFA Soccer app)およびメディアストリーミングアプリケーション(たとえば、YouTube)などの2つの別個のエンドアプリケーションを使用して、2つの別個のエンティティによって管理される。任意で、フロントエンドサーバ134およびメディアストリーミングサーバ124は、2つの別個のエンドアプリケーションを使用して単一のエンティティによって管理することもできる。
【0120】
いくつかの実装形態において、第2のクライアントデバイスの各々は、より低い解像度、より高い送信レイテンシ、またはより遅い応答レートでゲームプレイヤの第1のクライアントデバイスに表示されたものを複製する通常レイテンシストリーム132を単に表示しない。むしろ、ゲームプレイに関連する追加の情報も、ゲームプレイヤの第1のクライアントデバイスに表示されるものと並行して観客に提示される。たとえば、カメラは、ゲームプレイヤーがオンラインゲーミングセッション116をプレイしている間にゲームプレイヤーの画像データ(すなわち、プレイヤーデモビデオストリーム)をキャプチャするために使用される。プレイヤーデモビデオストリームは、ゲームプレイヤーがオンラインインタラクティブセッション116をプレイしている間にゲームプレイヤーによって作成されたリアルタイムコメントを含むことができる。サーバシステム114は、ゲームプレイヤの取り込まれたプレイヤデモビデオストリームを取得する。任意で、プレイヤーデモビデオストリームは、観客の第2のクライアントデバイスに送信される通常レイテンシストリーム132に組み込まれる。任意で、プレイヤーデモビデオストリームは、それぞれのクライアントデバイスに別々に送られるが、通常レイテンシストリーム132で再生される。プレイヤーデモビデオストリームは、オンラインインタラクティブセッション116の通常レイテンシストリームと並行して1つ以上の観客に再生される。状況によっては、プレイヤーデモビデオストリームは、第2のクライアントデバイスの各々の埋込みウィンドウ862において再生される一方、通常レイテンシストリーム130は、それぞれの第2のクライアントデバイスに表示される。
【0121】
代替的に、いくつかの実装形態において、ゲームプレイヤーがオンラインゲーミングセッションをプレイしている間に、ゲームプレイヤーのプレイヤーデモオーディオストリームが記録される。任意で、プレイヤーデモオーディオストリームは、観客の第2のクライアントデバイスに送信される通常レイテンシストリーム132に組み込まれる。任意で、プレイヤーデモオーディオストリームは、第2のデバイスの各々に別々に送信され、通常レイテンシストリーム132と併せて再生される。プレイヤーデモオーディオストリームは、オンラインインタラクティブセッションの通常レイテンシストリーム132と並行して1人以上の観客に再生される。
【0122】
いくつかの実装形態において、低レイテンシストリーム130の第1の画像フレームのシーケンスを符号化するための予め定められたフレームレートは、第1のしきい値レイテンシに基づいて決定される。さらに、いくつかの実装形態において、通常レイテンシストリーム130は、第2のしきい値レイテンシより小さい第2のレイテンシを有し、第2のしきい値レイテンシは、第1のしきい値レイテンシよりも大きい。特に、たとえば、観客に提供される通常レイテンシストリーム132は、ゲームプレイヤーに提供される低レイテンシストリーム130ほどレイテンシの影響を受けない。いくつかの実装形態において、低レイテンシストリーム130および通常レイテンシストリーム132の両方が、同じオンラインインタラクティブセッション116に対応する。低レイテンシストリーム130および通常レイテンシストリーム132は、オンラインインタラクティブセッション116に関連するゲームプレイヤーによるプレイヤーアクションの結果をレンダリングするための第1の応答レートおよび第2の応答レートをそれぞれ有する。ゲーム層は観客よりもプレイヤーアクションの結果をレンダリングするためのレイテンシの影響を受けやすいため、低レイテンシストリーム130の第1の応答レートは、通常レイテンシストリーム132の第2の応答レートより大きい。
【0123】
図9は、いくつかの実装形態に係る、メディアストリームを並行して提供するための一例としての方法900を示すフローチャートである。方法900は、任意で、コンピュータメモリまたは非一時的なコンピュータ読取可能記憶媒体(たとえば、
図4のゲームサーバモジュール426のマルチストリーム生成モジュール430)に記憶され、サーバシステム114の1つ以上のプロセッサ(たとえば、ゲームサーバ122のエンコーダ142)によって実行される命令によって制御される。コンピュータ読取可能記憶媒体は、磁気または光ディスク記憶デバイス、フラッシュメモリなどのソリッドステート記憶デバイス、または他の不揮発性メモリデバイスを含み得る。コンピュータ読取可能記憶媒体に記憶された命令は、以下のうちの1つ以上を含み得る:ソースコード、アセンブリ言語コード、オブジェクトコード、または1つ以上のプロセッサによって解釈される他の命令フォーマット。方法900におけるいくつかの動作は組み合わされてもよく、および/またはいくつかの動作の順序が変更されてもよい。
【0124】
方法900は、1つ以上の処理コア(たとえば、エンコーダ142は、1つ以上のエンコーダコア800をさらに含む)と、処理コアによって実行するためのプログラムを記憶するメモリとを含むサーバシステム114によって実行される。サーバシステム114は、エンコーダ142によって、低レイテンシストリーム130および通常レイテンシストリーム132を含む複数のメディアストリームを生成する(902)。低レイテンシストリーム130は、オンラインインタラクティブセッションに対応し、通常レイテンシストリーム132よりも応答速度が速く、送信レイテンシが低い。具体的には、サーバシステム114は、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレートを識別する(904)。低レイテンシストリームの第1の画像フレームのシーケンス内の各画像フレームについて、サーバシステム114は、所定のフレームレートに対応する第1の時間間隔を決定する(906)。エンコーダ142は、第1の時間間隔の間に画像フレームを符号化する(908)。
【0125】
画像フレームを符号化した後、サーバシステムは、第1の時間間隔内に残された残余時間を決定する(910)。サーバシステム114(いくつかの実装形態において、エンコーダ142自体)は、第1の時間間隔内に残された残余時間が、通常レイテンシストリームに関連する通常のレイテンシ要件を満たすか否かを判断する。状況によっては、第1の時間間隔内に残された残余時間が通常レイテンシ要件を満たすという判断に従って、エンコーダ142は、第1の時間間隔の残余時間の間に、通常レイテンシストリームの第2の画像フレームのシーケンスのサブセットを生成する(912)。代替的に、状況によっては、第1の時間間隔内に残された残余時間が通常のレイテンシ要件を満たしていないという判断に従って、エンコーダ142は、第1の時間間隔の残余時間の間に画像フレームの第2のシーケンスの任意の画像フレームの生成を中止する(914)。
【0126】
メディアストリームを並行して提供するための方法900に関するさらなる詳細は、
図8を参照して先に述べた通りである。
図9の動作が説明された特定の順序は、例示的なものにすぎず、説明された順序が動作を実行することができる唯一の順序であることを示すものではないことを理解されたい。当業者は、本明細書に記載のサーバシステムの処理能力を管理するさまざまな方法を認識するであろう。
【0127】
この用途では、並行メディアストリームを提供する方法900は、1つ以上の追加のストリーム、たとえば、通常レイテンシストリームより高い応答レートおよびより低い送信レイテンシを必要とする低レイテンシストリームに符号化優先度を与える。一連の時間間隔のそれぞれの間、低レイテンシストリームの画像は最初に符号化され、時間間隔内に残された残りの時間は無駄にされることなく、1つ以上の追加のメディアストリームの少なくとも一部を符号化するために利用される。いくつかの実装形態において、サーバシステム114は、1つ以上の追加のメディアストリームを符号化するための各時間間隔により多くの残余時間を残すことができるように、低レイテンシストリームを効率的な方法で符号化するようにエンコーダ142を構成する。たとえば、サーバシステム114のエンコーダ142は、その部分を符号化するために必要な情報がGPU140によって提供されるとすぐに、その部分の符号化された部分とは無関係な画像フレームの他の部分がGPU140によって利用可能にされるか否かとは無関係に、画像フレームの一部を符号化することによって、対応する時間間隔の間に低レイテンシストリームの画像フレームを符号化することを容易にすることができる。したがって、サーバシステム114のエンコーダ142は、GPU140が画像フレーム全体の利用可能データを作成するまで待つ必要がなく、それによって、低レイテンシストリームの画像フレームを符号化し、低レイテンシストリームとは異なる1つ以上の追加のストリームを符号化するための対応する時間間隔でより多くの時間を費やす。
【0128】
マルチコア並列符号化
図10Aは、いくつかの実装形態に係る、メディアストリーム内の画像フレームの複数の画像タイル1000を処理するために割り当てられるエンコーダコア800のブロック図である。
図10Bは、いくつかの実装形態に係る、画像タイル中のブロックを符号化する一例としてのプロセス1040である。
図4および
図8Aを参照して、サーバシステム114は、GPU140に結合され、GPUによって提供されるマルチメディアコンテンツを符号化(たとえば、標準化または圧縮)して、各々が所定のメディアフォーマットを有する1つ以上の出力メディアストリームにするように構成されたエンコーダ142を含む。GPU140によって提供されるマルチメディアコンテンツは、画像フレームのシーケンスからなるメディアストリームを含む。従来、エンコーダ142がさらなる符号化のためにデータバッファ144から画像フレーム全体を取り出すことができるように、各画像フレームはGPU140によって準備され、その全体によってデータバッファ144に格納される必要がある。本願のいくつかの実装形態に従うと、エンコーダ142は、その部分を符号化するために必要とされる情報がGPU140によって提供される場合に、その部分を符号化するために必要とされない画像フレームの他の部分がGPU140によって利用可能にされるか否かに関わらず、画像フレームの部分を符号化するように構成される。
【0129】
エンコーダ142は、複数のエンコーダコア800を含む。サーバシステム114のエンコーダコア800は、オンラインゲーミングセッションに関連付けられ、データバッファ144に格納された画像フレームのフレームデータを識別する。フレームデータは、第1の解像度を有する。そして、複数のエンコーダコア800は、フレームデータの複数の画像タイル1000を同時に並列に処理するために割り当てられ、複数の画像タイル1000は、画像フレームのレンダリング仕様に従って定められる。複数の画像タイル1000は、第1のエンコーダコア800Aに割り当てられた第1の画像タイル1000Aを含み、第1の画像タイル1000Aは、ブロックの第1のシーケンスを含む。エンコーダコア800(たとえば、第1のエンコーダコア800A)は、画像フレーム全体のフレームデータが利用可能になった後に画像フレームを符号化し始めるのを待つのではなく、部分フレームデータの利用可能性の判断に基づいて画像フレームを符号化し始める。
【0130】
具体的には、いくつかの実装形態において、第1のエンコーダコア800Aは、第1のエンコーダコア800Aに割り当てられた第1の画像タイル1000Aのブロックの第1のシーケンスの第1のブロック1002をデータバッファ144から取得する。また、第1のエンコーダコア800Aは、第1のブロック1002の境界情報を取得する。第1のエンコーダコア1000Aは、データバッファ144からブロックの第1のシーケンス内の第1のブロックに続く第2のブロック1004を取得する間または取得する前に、境界情報に基づいてブロックの第1のシーケンスの第1のブロック1002を符号化する。符号化された第1のブロック1002は、オンラインゲーミングセッションに関連するユーザのクライアントデバイスに送信される。任意で、第2のブロック1004は、画像フレーム内の第1のブロックに直に隣接している。任意で、第2のブロック1004は、画像フレーム内の第1のブロックに直に隣接していない。
【0131】
いくつかの実装形態において、符号化された第1のブロック1002は、クライアントデバイスに表示される前に、クライアントデバイスのフレームバッファ1006に一時的に格納される。ここで、第2のブロック1004は、第1のブロック1002を符号化する操作に関与しないので、第1のブロックおよび対応する境界情報が利用可能であるとすぐに、第2のブロック1004がデータバッファ144(すなわち、第2のブロック1004は、データバッファ144内で既に利用可能であるか、またはGPU140によってまだ提供されていない可能性がある)内で利用可能か否かに関わらず、第1のブロック1002を符号化することができる。状況によっては、第1のブロックがデータバッファ144から取得される間、第2のブロックは、データバッファ144に記憶されておらず、または準備ができておらず、GPUによってデータバッファ144にロードされている。さらに、状況によっては、第1のブロックが第1のエンコーダコア800Aにおいて符号化されている間、第2のブロックは既にデータバッファ144において利用可能であり、第3のブロックはGPU140によってデータバッファ144にロードされている。第3のブロックは、第1のブロック1002および第2のブロック1004が符号化された後に続いて符号化される。
【0132】
いくつかの実装形態において、第1のブロック1002の境界情報は、第1の画像タイル1000A内のブロックの第1のサブセットによって提供される。任意で、ブロックの第1のサブセットの各々は、ブロックの第1のシーケンスにおいて第1のブロック1002に先行するか、または後続する。さらに、いくつかの実装形態において、第1の画像タイル1000Aは、ブロックの第1のサブセットとブロックを共有しないブロックの第2のサブセットを含み、第1のブロック1002は、第1のエンコーダコア800Aがブロックの第2のサブセットのいずれかを取得または符号化したか否かとは無関係に符号化される。任意で、ブロックの第2のサブセットは、第2のブロック1004を含む。
【0133】
いくつかの実装形態において、サーバシステム114は、第1のブロック1002の境界情報が、第1の画像タイルとは別個のそれぞれのエンコーダコア800に割り当てられた第2の画像タイルの第3のブロックによって提供されないと判断する。第1のブロック1002は、第2の画像タイルを処理するために割り当てられたそれぞれのエンコーダコアが第3のブロックを受信または符号化したか否かとは無関係に符号化される。別の言い方をすれば、第1のブロック1002が第1のエンコーダコア800Aによって符号化されるとき、第3のブロックは、それぞれのエンコーダコアによって符号化されているか、まだデータバッファ144内に記憶されて利用可能にされていないか、またはそれぞれのエンコーダコアにおいて符号化されるためにデータバッファ144内で待つことができる。
【0134】
いくつかの実装形態において、画像フレームの各画像タイル1000は、それぞれのブロックシーケンスを含み、各ブロックは、線形ブロック変換(たとえば、離散コサイン変換(DCT))に基づく対応する画像およびビデオ圧縮フォーマットにおける基本処理単位である1つ以上のマクロブロックで構成される。すなわち、第1の画像タイル内のブロックの第1のシーケンスの各々は、いくつかのマクロブロック(たとえば、単一のマクロブロック、2つ以上のマクロブロック)を含む。一例では、マクロブロックは16×16画素からなり、変換ブロック(たとえば、16×16ルマ(Y)ブロックおよび8×8クロマ(CbおよびCr)ブロック)または予測ブロック(たとえば、インター予測またはイントラ予測のための4×4または16×16ブロック)にさらに細分される。
【0135】
第1のブロック1002は、それが符号化されるまで、または境界情報として第1のブロック1002を使用する任意のブロックが符号化されるまで、データバッファ144に格納される必要がある。別の言い方をすれば、第1のブロック1002自体と第1のブロック1002を境界情報として使用する任意のブロックの両方が符号化された後、第1のブロック1002をデータバッファ144からパージすることができる。したがって、データバッファ144は、画像フレーム内の他のブロックの格納に使用するために予備的であり、画像フレーム内のすべてのブロックを収容することができるサイズを有する必要はない。その結果、データバッファ144のサイズを低減することができ、画像フレームをエンコーダ142において効率的な方法で符号化することができる(主に、エンコーダ142は、画像フレーム全体に対してフレームデータが利用可能であることをそれ以上要求しないからである)。
【0136】
図11A~11Cは、いくつかの実装形態に係る、オンラインインタラクティブセッションに関連する画像フレームのフレームデータのレンダリング仕様に従って定められる画像タイル1100、1120および1140の例である。このように、描画仕様に応じて、画像フレームのフレームデータを複数の画像タイルに分割することができる。
図11Aを参照して、いくつかの実装形態において、画像フレームのフレームデータは、第1のレンダリング仕様に従って画像タイル1100の単一の行に分割される。各画像タイル1100は、画像フレームの上部から下部に延在するいくつかの画素列を含む。特定の例において、メディア符号化は、標準VP8コーデックに基づいてエンコーダ142において実行され、VP8コーデックに従って、第1のレンダリング仕様は、エンコーダ142によって符号化された各画像フレームが、1つの行に配置され、画像フレームの全高さに及ぶ8つのタイルに分割されることを定める。いくつかの実装形態において、エンコーダ142の基本処理ユニットは、1つ以上のマクロブロック1102を含む。タイル1100の各々は、画像フレームの第1の数のマクロブロック列と第2の数のマクロブロック行とを含む。各タイル1100は、画像フレームの上部から下部に延在するので、それぞれの画像タイル1100の第2のマクロブロック行数は、画像フレーム内のマクロブロック行の数に等しい。
【0137】
図11Bを参照して、いくつかの実装形態において、画像フレームのフレームデータは、第2のレンダリング仕様に従って画像タイル1120の単一の列に分割される。各画像タイル1100は、画像フレームの左端から右端に延在するいくつかの画素行を含む。いくつかの実装形態において、エンコーダ142の基本処理ユニットは、1つ以上のマクロブロック1102を含み、画像フレームのフレームデータは、第2のレンダリング仕様に従ってタイルの単一の列1120に分割される。タイル1100の各々は、画像フレームの第1の数のマクロブロック列と第2の数のマクロブロック行とを含む。各タイル1100は、画像フレームの左側から右側に延在するので、それぞれの画像タイル1100の第1のマクロブロック列の数は、画像フレーム内のマクロブロック列の数に等しい。
【0138】
図11Cを参照して、いくつかの実装形態において、画像フレームのフレームデータは、第3のレンダリング仕様に従って画像タイル1140のアレイに分割される。画像タイルのアレイ1140は、画像タイルの2つ以上の行および画像タイルの2つ以上の列(たとえば、2行5列の画像タイル)を含む。
【0139】
いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ142内のエンコーダコア800の数に等しい。一例では、画像フレームは8つのタイルを含み、エンコーダ142は8つのエンコーダコア800を含む。いくつかの状況では、複数のエンコーダコア800の各々は、画像フレームのフレームデータから区分された複数のタイル1100の別個のタイルを処理するように割り当てられてもよい。代替的に、状況によっては、エンコーダコア800Aは、タイル(たとえば、
図11Aの1100Aおよび1100C、
図11Bの1120Aおよび1120C)のうちの2つ以上を処理するように割り当てられ、一方、複数のエンコーダコア800のうちの1つは、タイルのいずれかを処理するように割り当てられない。
【0140】
いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ142内のエンコーダコア800の数より多くすることができる。少なくとも1つのエンコーダコア800は、タイル(たとえば、
図11Aの1100Aおよび1100C、
図11Bの1120Aおよび1120C)のうちの2つ以上を処理するために割り当てられる。いくつかの状況では、画像タイルの数がコアの数よりも多い場合であっても、複数のエンコーダコア800のうちの1つは、タイルのいずれかを処理するように割り当てられなくてもよい。
【0141】
さらに、いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ142内のエンコーダコア800の数未満であってもよい。状況によっては、エンコーダコア800のサブセットの各々は、画像フレームのフレームデータから区分された複数のタイルの別個のタイルを処理するように割り当てられる。少なくとも1つのエンコーダコア800は、タイルのいずれかを処理するために割り当てられないが、状況によっては、エンコーダコア800Aは、タイルのうちの2つ以上(たとえば、
図11Aの1100Aおよび1100C、
図11Bの1120Aおよび1120C)を処理するために依然として割り当てられる。
【0142】
いくつかの実装形態において、フレームデータから分割されるタイルの数は、エンコーダ142内のエンコーダコア800の数とは無関係である。代替的に、いくつかの実装形態において、レンダリング仕様は、エンコーダ142内のエンコーダコア800の数に関連付けられ、画像タイルの数は、エンコーダ142内のエンコーダコア800の数に従って決定される。
【0143】
いくつかの実装形態において、第1の画像タイル1000Aの第1のブロック1002Aを符号化するために必要な境界情報は、同じ第1の画像タイル1000A(
図11A)内の1つ以上のブロックを含む。任意で、1つ以上のブロックの各々は、第1のブロック1002Aに直に隣接しているか、または第1の画像タイル1000Aの任意の場所に位置している。一例では、1つ以上のブロックは、左上ブロックA、上ブロックB、右上ブロックC、左ブロックD、右ブロックE、左下ブロックF、下ブロックG、および右下ブロックHを含む、第1のブロック1002を取り囲む8つのブロックすべてを含む。別の例では、1つ以上のブロックは、隣接するブロック、すなわち、上ブロックB、左ブロックD、右ブロックE、および下ブロックGのみを含む。第1のブロック1002Aは、1つ以上のブロックの情報がデータバッファ144から受信された後に符号化される。第2のブロック1004Aは、第1のブロック1002Aが符号化されている間またはその後に得られ、よって、第2のブロック1004も、第1のブロック1002Aの境界情報として1つ以上のブロックが得られた後に得られる。
【0144】
さらに、いくつかの実装形態において、第1の画像タイル1000Aの第1ブロック1002Bを符号化するのに必要な境界情報は、1つ以上のブロックを含んでいる。第1のブロック1002Bは、第1の画像タイル1000Aの境界に近いので、第1のブロック1002Bを符号化するために使用される1つ以上のブロックは、2つ以上の画像タイルに属する。任意で、1つ以上のブロックの各々は、第1のブロック1002Aに直に隣接しているか、または2つ以上の画像タイルのうちの1つの任意の場所に位置している。一例では、1つ以上のブロックは、左上ブロックA’、上ブロックB’、右上ブロックC’、左ブロックD’、右ブロックE’、左下ブロックF’、下ブロックG’、および右下ブロックFFを含む、第1のブロック1002Bを取り囲む8つのブロックすべてを含む。
図11Aを参照して、1つ以上のブロックは、第1の画像タイル1100Aのブロックの第1のサブセット(たとえば、ブロックA’、B’、D’、F’およびG’)と第2の画像タイル1100Bのブロックの第2のサブセット(すなわち、C’、E’およびH’である)とを含む。
図11Cを参照して、第3の画像タイル1140Cの第1のブロック1002Bを符号化するために必要な境界情報は、ブロックの4つのサブセットをさらに含む1つ以上のブロックを含む。ブロックの4つのサブセットの各々は、それぞれ第1、第2、第3および第4の画像タイル(すなわち、第1の画像タイル1140AのブロックA’およびB’;第2の画像タイル1140BのブロックC’;第3の画像タイル1140CのブロックD’、F’、およびG’;ならびに第4の画像タイル1140DのブロックE’およびH’)に属する。
【0145】
別の例では、第1のブロック1002に対応する1つ以上のブロックは、隣接するブロック、すなわち、上ブロックB’、左ブロックD’、右ブロックE’、および下ブロックG’のみを含む。
図11Aを参照して、1つ以上のブロックは、第1の画像タイル1100A(たとえば、ブロックB’、D’およびG’)のブロックの第1のサブセットと、第2の画像タイル1100Bのブロックの第2のサブセット(すなわち、E’)とを含む。
図11Cを参照して、第3の画像タイル1140Cの第1のブロック1002Bを符号化するために必要な境界情報は、ブロックの3つのサブセットをさらに含む1つ以上のブロックを含む。ブロックの3つのサブセットの各々は、それぞれ第1、第3および第4の画像タイル(すなわち、第1の画像タイル1140AのブロックB’、第3の画像タイル1140CのブロックD’およびG’、および第4の画像タイル1140DのブロックE’である)に属する。第1のブロック1002Bは、対応するエンコーダコアによって符号化される前に、1つ以上のブロックの情報がデータバッファ144から受信されるのを待つ必要がある。第2のブロック1004Bは、第1のブロック1002Bが符号化されている間または符号化された後、データバッファ144から取得されるので、第2のブロック1004Bも、第1のブロック1002Bの境界情報として1つ以上のブロックが取得された後に取得される。
【0146】
図12A~
図12Cは、いくつかの実装形態に係る、オンラインインタラクティブセッションに関連する画像フレームのフレームデータのラスタースキャン1200、1220および1240の例である。GPU140は、画像フレームの各ピクチャ要素(たとえば画素)を所定のラスター順序に従って生成し、それぞれのピクチャ要素に対応するデータをデータバッファ144に格納することによって、それぞれのピクチャ要素のデータを所定のラスター順序に従ってエンコーダ142に利用可能にする。これにより、エンコーダ142は、各ピクチャ要素のデータが利用可能である場合、すなわち所定のラスター順序に従って、データバッファのラスタースキャンによって画像フレームのフレームデータを抽出する。以上説明したように、各エンコーダコア800は、各符号化ブロックの画像タイル順次であり、たとえば、第1エンコーダコア800Aは、対応する第1の画像タイル1000Aのシーケンスのブロック(たとえば、第1のブロック1002および第2のブロック1004)を取得して符号化する。特に、各画像タイルのブロックは、ブロックを符号化するのに必要な情報がGPU140によって提供されたときに、ブロックの符号化に必要ではない画像フレームの他のブロックがGPU140によってデータバッファで利用可能にされるか否かとは関係なく、符号化される。すなわち、一例では、フレームデータは、第1のブロック1002および第2のブロック1004に対応する画素(たとえば、画素)のデータを含み、第1のブロック1002および第2のブロック1004は、第1のブロック1002および第2のブロック1004に対応する画素のデータが、所定のラスター順序に従って抽出されながら取得される。
【0147】
図12Aを参照して、第1の所定のラスター順序に従って、GPU140は、行ごとに画像フレームの各画素を生成し、それぞれの画素に対応するデータを行ごとにデータバッファ144に格納する。画像フレームのフレームデータがデータバッファ144内で利用可能にされている間、それらもまた、第1の所定のラスター順序に従って行ごとにデータバッファ144から抽出される。画像フレームの各行は、2つ以上の画像タイルからのデータを含む。たとえば、画像フレームのフレームデータは、画像タイル1100(たとえば、5つの画像タイル1202~1210を含む)の単一の行に分割される。画像フレームの奇数行の画素のデータは、画像フレームの左側から右側に向かって、すなわち画像タイル1202、1204、1206、1208および1210に対して順次利用可能にされる。一方、画像フレームの偶数行の画素のデータは、画像フレームの右側から右側の順番で、すなわち画像タイル1210、1208、1206、1204、1202に対して順次利用可能となる。
【0148】
いくつかの実装形態において、第1のブロック1002を符号化するために、第1のエンコーダコア800Aは、第1のブロック1002および1つ以上のブロックA~Hを含む対応する境界情報を取得する。任意で、1つ以上のブロックA~Hの第1のサブセットまたは全部は、第1のブロック1002を含む同じ第1の画像タイル1202に属する。任意で、1つ以上のブロックA~H(たとえば、
図12AのブロックC、EおよびH)の第2のサブセットは、第1の画像タイル1202とは異なる第2の画像タイル1204に属する。第1のブロック1002および1つ以上のブロックA~Hの各々は、1つ以上の画素、たとえば4、16または256画素を含む。
図12Aの例では、第1のエンコーダコア800Aは、第1のブロック1002を符号化する前に、第1のブロック1002およびブロックA~Fのすべてのピクチャ要素のデータを少なくとも取得しなければならない。第1のエンコーダコア800Aは、データバッファ144から画像フレームの最初の4行を抽出した後、第1のブロック1002を取得する。しかし、第1のエンコーダコア800Aは、第1のブロック1002を直ちに符号化しない。むしろ、データバッファ144のラスタースキャンは継続し、第1のエンコーダコア800Aは、ラスタースキャンが画像フレームの第6の行に到達したときにブロックFのデータを完全に取得した後、第1のブロック1002の符号化を開始する。
【0149】
さらに多くのピクチャ要素が利用可能にされ、データバッファ144から抽出されるとき、エンコーダ142のエンコーダコア800は、画像フレーム全体のフレームデータが利用可能にされるのを待つことなく、それらの対応する画像タイル内のブロックを画像フレームの上部から下部へ並列に符号化し始める。この並列符号化機構は、エンコーダ142の全レイテンシを削減し、画像フレームに必要な符号化時間を短縮する。一例では、エンコーダ142は、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレート(たとえば、60fps)を識別し、所定のフレームレートに対応する第1の時間間隔(たとえば、16.67ms)を決定する。各第1の時間間隔の間に、画像フレームに必要とされる符号化時間が短縮される場合、第1の時間間隔内に残る残りの時間は、通常レイテンシストリームの第2の画像フレームのシーケンスのサブセットを符号化するために延長することができ、それによって、たとえば、2つ以上のメディアストリームの並行符号化を可能にする。
図8Cに示されるように、ゲームシーンに関連して2つの別個のクライアントデバイスにおいて並行して表示される2つの別個のメディアストリーム。
【0150】
図12Bを参照して、第2の所定のラスター順序に従って、GPU140は、画像フレームの画像タイル1202~1210を順次生成し、たとえば、第1の画像タイル1202に隣接する第2の画像タイル1204の前に第1の画像タイル1202を生成する。各画像タイルについて、GPU140は、それぞれの画像タイル内の画素を行ごとに生成し、それぞれの画像タイル内の画素に対応するデータを、それぞれの画像タイルのすべての画素が生成され、格納されるまで、行ごとにデータバッファ144に格納する。画像フレームのフレームデータがデータバッファ144において利用可能にされている間、それらもまた、第2の所定のラスター順序に従ってエンコーダ142によってデータバッファ144から抽出される。具体的には、エンコーダ142は、画像フレームのフレームデータの画像タイル1202~1210を順次抽出し、各画像タイルについて、GPU140によって利用可能にされた後、各画像タイルの画素を行ごとに行単位で抽出する。たとえば、第1の画像タイル1202内の画素のデータが、GPU140によって上側から下側へジグザグのラスター順序でデータバッファ144内で利用可能にされている間、画素のデータは、対応するエンコーダコア800Aによって上側から下側へ同じジグザグのラスター順序でデータバッファ144から抽出される。その結果、GPU140は、第1の画像タイル1202全体のデータを利用可能にして抽出した後、他の画像タイル1204~1210の各々の画素のデータを、ジグザグラスター順に上から下に順次生成して記憶し続ける。そして、エンコーダ142は、GPU140に追従して、各画像タイル内の画素のデータを、ジグザグラスター順に上から下へデータバッファ144から抽出する。
【0151】
図12Bに示されるいくつかの実装形態において、第1のエンコーダコア800Aは、第1のブロック1002および1つ以上のブロックA~Hを含む対応する境界情報を取得する。第1のエンコーダコア800Aは、第1のブロック1002を符号化する前に、第1のブロック1002およびブロックA~Fのすべてのピクチャ要素のデータを少なくとも取得しなければならない。任意で、1つ以上のブロックA~H(たとえば、
図12BのブロックC、EおよびH)の第2のサブセットは、第1の画像タイル1202とは別個であるが隣接する第2の画像タイル1204に属する。第1のエンコーダコア800Aは、第1の画像タイル1202の最初の4つの行をデータバッファ144から抽出した後に、第1のブロック1002を取得する。しかし、第1のエンコーダコア800Aは、第1のブロック1002を直ちに符号化しない。むしろ、データバッファ144のラスタースキャンは継続し、第1のエンコーダコア800Aは、ラスタースキャンが第2の画像タイル1204の第6の行に到達したときにブロックFのデータを完全に取得した後、第1のブロック1002の符号化を開始する。
【0152】
本願に示されていないいくつかの実装形態において、第1の画像タイル1202は、第1のブロック1002と1つ以上のブロックA~Hの両方を含む。第1のエンコーダコア800は、第1のブロック1002および第1の画像タイル内のブロックA~Hの画像要素を完全に取得した後、第1のブロック1002を符号化する。第1のブロック1002を符号化するために、ラスタースキャンは、他の画像タイル1204~1210とは独立して第1の画像タイル1202に制限され、たとえば、第1のエンコーダコア800Aは、ラスタースキャンが第1の画像タイル1202内のすべてのブロックについて終了されるか、第2の画像タイル1204内の任意のブロックに到達するまで待つ必要はない。
【0153】
各タイル内の画像タイルおよび画像要素の行が利用可能になり、データバッファ144から抽出されると、エンコーダ142のエンコーダコア800は、画像フレーム全体のフレームデータが利用可能になるのを待つことなく、それらの対応する画像タイル内の上から下にブロックを符号化し始める。
図12Aに示される第1の所定のラスター順序は、画像タイルを処理するように割り当てられたエンコーダコアが、互いに実質的に近い完了時間でそれぞれの画像タイルの符号化を完了することを可能にする。一方、
図12Bに示される第2の所定のラスター順序は、第1のエンコーダコア800Aが、第1の画像タイル1202の後に利用可能にされる画像タイルを処理するために割り当てられる他のエンコーダコア800よりも早く、第1の画像タイル1202の符号化を開始し、完了することを可能にする。第1の画像タイル1202においてブロックを符号化した後、第1のエンコーダコア800Aは、同じ画像フレームまたは別個の画像フレームのサブセットにおいて別の画像タイル(たとえば、画像タイル1210)を符号化するように割り当てることができ、そうすることにより、たとえば、
図8Cに示されるように、ゲームシーンに関連して2つの別個のクライアントデバイスにおいて並行して表示される2つの別個のメディアストリームである、2つ以上のメディアストリームの画像フレームを並行して符号化することを可能にする。
【0154】
図12Cを参照して、画像フレーム内の画像タイル1202~1210の各々は、複数のセグメントを含み、各セグメントは、第1の数の行を含む。第3の所定のラスター順序に従って、GPU140は、画像タイル1202~1210内のセグメントを行ごとに生成し、たとえば、第2の画像タイル1204の第1のセグメント1214の前に第1の画像タイル1202の第1のセグメント1212を生成する。各画像タイルの各セグメントについて、GPU140は、それぞれのセグメント内の画素の第1の数の行を行ごとに生成し、それぞれのセグメントのすべての画素が生成され、格納されるまで、画像タイルのそれぞれのセグメント内の画素に対応するデータを行ごとにデータバッファ144に格納する。画像フレームの各セグメントのフレームデータがデータバッファ144において利用可能にされている間、それらはまた、第2の所定のラスター順序に従ってエンコーダ142によってデータバッファ144から抽出される。
【0155】
具体的には、エンコーダ142は、画像フレームのフレームデータの画像タイル1202~1210のセグメントを行毎に順次抽出する。各画像タイル内の各セグメントについて、エンコーダ142は、GPU140によって利用可能にされた後、行ごとに、ジグザグラスター順序で、各セグメントの画素を抽出する。たとえば、第1の画像タイル1202の第1のセグメント1212内の画素のデータが、GPU140によって上から下へジグザグのラスター順序でデータバッファ144内で利用可能にされている間、画素のデータは、対応するエンコーダコア800Aによって上から下へ同じジグザグのラスター順序でデータバッファ144から抽出される。結果として、第1の画像タイル1202の第1のセグメント1212のデータが利用可能にされ、抽出された後、GPU140は、上から下へ、ジグザグラスター順序で、第2の画像タイル1204の第1のセグメント1214内の画素のデータを生成し、記憶し続ける。そして、エンコーダ142は、GPU140に従って、第2の画像タイル1204の第1のセグメント1214内の画素のデータをデータバッファ144から抽出する。第1のセグメント1212に続く第1の画像タイル1202の第2のセグメント1216は、画像タイル1202~1210のすべての第1のセグメントの後に利用可能にされ、抽出される。
【0156】
ある程度、第3の所定のラスター順序は、
図12Aおよび
図12Bに示される第1および第2の所定のラスター順序の組み合わせである。また、ジグザグラスター順序は、画像タイル1202~1210の各セグメント内の画素をスキャンするために使用される内部ラスター順序の一例にすぎず、内部ラスター順序はジグザグラスター順序に限定されないことにも留意されたい。
【0157】
図12Cに示されるいくつかの実装形態において、第1のエンコーダコア800Aは、第1のブロック1002および1つ以上のブロックA~Hを含む対応する境界情報を取得する。第1のエンコーダコア800Aは、第1のブロック1002を符号化する前に、第1のブロック1002およびブロックA~Fのすべてのピクチャ要素のデータを少なくとも取得しなければならない。任意で、1つ以上のブロックA~H(たとえば、
図12BのブロックC、EおよびH)の第2のサブセットは、第1の画像タイル1202とは別個であるが隣接する第2の画像タイル1204に属する。第1のエンコーダコア800Aは、第1の画像タイル1202内の第4のセグメントをデータバッファ144から抽出した後に、第1のブロック1002を取得する。
しかし、第1のエンコーダコア800Aは、第1のブロック1002を直ちに符号化しない。むしろ、データバッファ144のラスタースキャンは継続し、第1のエンコーダコア800Aは、ラスタースキャンが第2の画像タイル1204の第5のセグメントに到達したときにブロックHのデータを完全に取得した後、第1のブロック1002の符号化を開始する。
【0158】
図13は、いくつかの実装形態に係る、メディアストリームを符号化するための一例としての方法1300を示すフローチャートである。方法1300は、任意で、コンピュータメモリまたは非一時的なコンピュータ読取可能記憶媒体(たとえば、
図4のゲームサーバモジュール426の並列符号化モジュール432)に格納されサーバシステム114の1つ以上のプロセッサ(たとえば、ゲームサーバ122のエンコーダ142)によって実行される命令によって支配される。コンピュータ読取可能記憶媒体は、磁気または光ディスク記憶デバイス、フラッシュメモリなどのソリッドステート記憶デバイス、または他の不揮発性メモリデバイスを含み得る。コンピュータ読取可能記憶媒体に記憶された命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または1つ以上のプロセッサによって解釈される他の命令フォーマットのうちの1つ以上を含み得る。方法1300におけるいくつかの動作は組み合わされてもよく、および/またはいくつかの動作の順序が変更されてもよい。
【0159】
方法1300は、メディアストリームを符号化するためにサーバシステム114によって実行される。サーバシステム114は、GPU140と、複数のエンコーダコア800と、データバッファ144と、GPU140およびエンコーダコア800によって実行されるプログラムを格納するメモリとを含む。エンコーダコア800は、オンラインゲーミングセッションに関連付けられ、フレームデータの少なくとも一部が利用可能にされると、データバッファ144に格納された画像フレームのフレームデータの少なくとも一部を識別する(1302)。任意で、フレームデータは第1の解像度を有する。
【0160】
複数のエンコーダコア800は、フレームデータの複数の画像タイルを同時に並列に処理するために割り当てられる(1304)。複数の画像タイルは、レンダリング仕様に従って定められる。いくつかの実装形態において、レンダリング仕様に従って、画像フレームのフレームデータが画像タイルの行に区分される。たとえば、VP8に対応するレンダリング仕様は、各画像フレームが、1つの行に配置された8つのタイルに分割され、各タイルが、それぞれの画像フレーム内の上から下に延在することを定めている。言い換えれば、各画像タイルは、画像フレームのいくつかのマクロブロック列および各画像タイルのいくつかのマクロブロック行を含み、各画像タイルのマクロブロック行の数は、画像フレームのマクロブロック行の数に等しい。各マクロブロックは、線形ブロック変換に基づく対応する画像およびビデオ圧縮フォーマットにおける処理ユニットであり、任意で、16×16画素または64×64画素のアレイを含む。いくつかの実装形態において、フレームデータの複数の画像タイルは、いくつかの画像タイルを含み、画像タイルの数は、複数のエンコーダコア内の処理コアの数に応じて決定される。
【0161】
複数の画像タイルは、第1のエンコーダコア800Aに割り当てられた第1の画像タイル(たとえば、画像タイル1000A、1100A、1120A、1140A、および1202)を含む(1306)。いくつかの実装形態において、第1のエンコーダコア800Aは、第1の画像タイルを符号化した後、第1の画像タイルに隣接しない第3の画像タイルを処理するように割り当てられる。第1の画像タイルは、ブロックの第1のシーケンスを含み、ブロックの第1のシーケンスの各々は、いくつかの(たとえば、1、2、および4)マクロブロックを含む。
【0162】
第1のエンコーダコアは、第1のエンコーダコアに割り当てられた第1の画像タイルのブロックの第1のシーケンスの第1のブロック1002をデータバッファから取得する(1308)。第1のエンコーダコアは、第1のブロックの境界情報を取得する(1310)。いくつかの実装形態において、第1のブロックの境界情報は、第1の画像タイル中のブロックの第1のサブセットによって提供される。さらに、第1の画像タイルは、ブロックの第1のサブセットとブロックを共有しないブロックの第2のサブセットを含み、第1のブロックは、第1のエンコーダコアがブロックの第2のサブセットのいずれかを取得または符号化したか否かとは無関係に符号化される。いくつかの実装形態において、第1のエンコーダコアは、第1のブロックの境界情報が、第1の画像タイルとは異なる第2の画像タイルの第3のブロックによって提供されないと判断し、第2の画像タイルを処理するように割り当てられたそれぞれのエンコーダコアが第3のブロックを受信または符号化したか否かとは無関係に、第1のブロックを符号化する。
【0163】
ブロックの第1のシーケンス内の第1のブロックに続く第2のブロック1004をデータバッファ144から取得する間または取得する前に、第1のエンコーダコアは、境界情報に基づいてブロックの第1のシーケンスの第1のブロック1002を符号化する(1312)。境界情報には第2のブロックが必要である。任意で、第2のブロックは第1のブロックに直に隣接している。任意で、第2のブロックは第1のブロックに直に隣接しない。いくつかの実装形態において、第1のブロックは、第1のエンコーダコアが第1の画像タイルのブロックの第1のシーケンス内の第1のブロックに続く任意の他の符号化ブロックの取得を完了したか否かとは無関係に符号化される。状況によっては、第1のブロックが第1のエンコーダコアによってデータバッファから取得される間に、第2のブロックがGPU140によって準備され、データバッファ144にロードされる。
【0164】
さらに、いくつかの実装形態において、第1の画像タイルは、第3のブロックをさらに含む。第1のエンコーダコア800Aが第1のブロックを符号化している間、第3のブロックはGPU140によってデータバッファ144にロードされている。第3のブロックは、第1のブロックおよび第2のブロックの符号化に続いて符号化される。
【0165】
次いで、符号化された第1のブロック1002は、オンラインゲーミングセッションに関連するユーザのクライアントデバイスに送信される(1314)。いくつかの実装形態において、符号化された第1のブロック1002は、画像フレームのすべてのブロックが符号化された後に送信される。いくつかの実装形態において、符号化された第1のブロック1002は、画像フレーム中のブロックのサブセットが符号化された後に送信される。
【0166】
いくつかの実装形態において、画像フレームのフレームデータは、所定のラスター順序に従ってデータバッファ144のラスタースキャンによってエンコーダ142によって抽出される。フレームデータは、第1のブロックおよび第2のブロックに対応する画素のデータを含み、第1のブロックおよび第2のブロックは、第1のブロックおよび第2のブロックに対応する画素のデータを所定のラスター順序に従って抽出しながら取得される。さらに、いくつかの実装形態において、画像フレームのフレームデータは、所定のラスター順序に従って行ごとに画像フレームから抽出され、画像フレームの各行は、2つ以上の画像タイルからのデータを含む。代替的に、いくつかの実装形態において、各画像タイルからのデータがそれぞれのラスタースキャンによって抽出されるとき、画像フレームのフレームデータがさらに抽出され、複数の画像タイルがそれらのそれぞれのデータを抽出するために順次スキャンされる。また、所定のラスター順序は内部ラスター順序を含み、各画像タイル内のラスタースキャンは内部ラスター順序に従う。
【0167】
代替的に、いくつかの実装形態において、各画像タイルは複数のセグメントを含み、セグメントの各々はさらに第1の数の画素行を含む。所定のラスター順序に従って、画像フレームの複数の画像タイルのセグメントが行ごとに走査され、各画像タイルの各セグメント内の画素が内部ラスター順序によって走査される。別の例では、第1の画像タイルの第1の行数がラスタースキャンによって抽出される。エンコーダ142は、第1画像タイルの第1行数を抽出した後、ラスタースキャンにより第2画像タイルの第1行数を抽出する。第1および第2の画像タイルの各々の第1の数の行の後に第2の数の行が続く。エンコーダ142は、第2画像タイルの第1行数を抽出した後、ラスタースキャンにより第1画像タイルの第2行数を抽出する。エンコーダは、第1の画像タイルの第2の行数を抽出した後、ラスタースキャンによって第2の画像タイルの第2の行数を抽出する。所定のラスター順序は内部ラスター順序を含み、第1および第2の画像タイルの各々内のラスタースキャンは内部ラスター順序に従う。
【0168】
データバッファから画像フレームのフレームデータを抽出することに関するさらなる詳細は、
図12A~
図12Cを参照して先に述べた通りである。
【0169】
図13の動作が説明された特定の順序は、例示的なものにすぎず、説明された順序が動作を実行することができる唯一の順序であることを示すものではないことを理解されたい。当業者は、本明細書に記載のサーバシステムの処理能力を管理するさまざまな方法を認識するであろう。
【0170】
要約すると、本願のいくつかの実装形態は、低レイテンシおよびソフトリアルタイムワークロードをサポートするGPU仮想化に関し、より具体的には、複数の処理スライスをさらに含む1つ以上の処理コアを有するサーバシステムの処理能力を管理する方法に関する。オンラインゲーミングセッションを開始することを求める要求を受信すると、サーバシステムは、処理コアの各処理スライスを、その上で実行されるべきオンラインゲーミングセッションのサブセットに割り当てる。第1の処理スライスは、第1のゲーミングセッションおよび第2のゲーミングセッションを含むオンラインゲーミングセッションの第1のサブセットに割り当てられる。第1の処理スライスでは、オンラインゲーミングセッションの第1のサブセットに対してタイムシェアリング処理スケジュールが決定される。タイムシェアリング処理スケジュールに従って、第1および第2のゲーミングセッションは、第1の処理スライスのデューティサイクルを共有し、第1および第2のゲーミングセッションのリアルタイムデータ処理の必要性に従って動的かつ並列に実行される。
【0171】
本願のいくつかの実装形態は、複数のメディアストリームを並行してレンダリングすることに関し、より具体的には、少なくとも低レイテンシストリームと通常レイテンシストリームとを含む複数のメディアストリームを並行してレンダリングする方法に関する。低レイテンシストリームは、オンラインインタラクティブセッションに対応し、通常レイテンシストリームよりも応答速度が速く、送信レイテンシが低い。エンコーダプロセッサは、低レイテンシストリームの画像フレームのシーケンスを符号化するための所定のフレームレートを識別する。低レイテンシストリームの各画像フレームについて、所定のフレームレートに従って時間間隔が決定され、画像フレームはその時間間隔の間に符号化される。時間間隔内に残された残余時間が通常レイテンシストリームに関連する通常レイテンシ要件を満たすか否かの判断に従って、エンコーダプロセッサは、任意で、時間間隔の残余時間の間に通常レイテンシストリームの画像フレームのサブセットを生成する。
【0172】
本願のいくつかの実装形態は、リアルタイムビデオ符号化のためのマルチコアハードウェアアクセラレータに関し、より具体的には、メディアストリームを符号化する方法に関する。エンコーダプロセッサは、オンラインゲーミングセッションに関連する画像フレームのフレームデータを識別し、フレームデータの複数の画像タイルを同時にかつ並列に処理するためにそのエンコーダコアを割り当てる。画像タイルは、第1のエンコーダコアに割り当てられ、ブロックの第1のシーケンスを含む第1の画像タイルを含む。第1のエンコーダコアは、第1の画像タイルの第1のブロックおよび第1のブロックの境界情報を取得する。ブロックの第1のシーケンスにおいて第1のブロックに続く第2のブロックを得る間またはその前に、第1のエンコーダコアは、境界情報に基づいてブロックの第1のシーケンスの第1のブロックを符号化し、符号化された第1のブロックをオンラインゲーミングセッションに関連するユーザのクライアントデバイスに送信する。
【0173】
さまざまな実装形態を詳細に参照し、その例を添付の図面に示している。上記詳細な説明では、本発明および記載された実装の完全な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、本発明は、これらの具体的な詳細を伴わずに実施されてもよい。他の例では、実装形態を不必要に不明瞭にしないように、周知の方法、手順、構成要素、および回路は詳細には説明していない。
【0174】
「第1」、「第2」などの用語は、本明細書ではさまざまな要素を記述するために使用される場合があるが、これらの要素は、これらの用語によって限定されるべきではないことを理解されたい。これらの用語は、1つの要素を別の要素から区別するためにのみ使用される。たとえば、第1のデバイスを第2のデバイスと呼ぶことができ、同様に、第2のデバイスは、第1のデバイスのすべての記載が一貫して名称変更され第2のデバイスのすべての記載が一貫して名称変更される限り、説明の意味を変更することなく、第1のデバイスと呼ぶことができる。第1のデバイスおよび第2のデバイスは、どちらもデバイスであるが、同じデバイスではない。
【0175】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的とし、請求項を限定することを意図するものではない。実装形態の説明および添付の請求項において使用される、単数形「a」、「an」および「the」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことを意図している。本明細書で使用される「および/または」という用語は、関連する列挙された項目のうちの1つ以上の任意のおよびすべての可能な組み合わせを意味し包含することも、理解されるであろう。本明細書で使用される場合、「comprises」および/または「comprising」(含む/備える)という用語は、記載された特徴、整数、ステップ、動作、要素、および/または構成要素の存在を特定するが、1つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループの存在または追加を排除するものではないことが、さらに理解されるであろう。
【0176】
本明細書で使用される、「if」(もし~ならば)という用語は、文脈に応じて、記載された条件が真である「when」もしくは「upon」(とき、場合に)、または、真であるという「判断に応答して」または「判断に従って」または「検出に応答して」を、意味していると解釈されてもよい。同様に、「記載された条件が真であると判断された場合」または「記載された条件が真である場合」または「記載された条件が真であるとき」という表現は、文脈に応じて、記載された条件が真であるという「判断がなされると」または「判断に応答して」または「判断に従って」または「検出がなされると」または「検出に応答して」を意味すると、解釈されてもよい。
【0177】
上記説明は、説明を目的として、特定の実装形態を参照して記載されている。しかしながら、上記例示的説明は、網羅することまたは本発明を開示された形態そのものに限定することを意図していない。上記教示に鑑みて多くの修正および変形が可能である。実装形態は、本発明の原理およびその実用的な用途を最良に説明し、それによって、他の当業者が本発明およびさまざまな実装形態を、意図された特定の用途に適するようにさまざまな修正を伴って最良に利用できるようにするために、選択され記載されている。