(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-26
(45)【発行日】2024-12-04
(54)【発明の名称】ネットワーク伝送中に目標フレームレートを提供するためのビデオフレームの選択的複数インスタンス符号化
(51)【国際特許分類】
H04N 21/2343 20110101AFI20241127BHJP
H04N 21/238 20110101ALI20241127BHJP
【FI】
H04N21/2343
H04N21/238
(21)【出願番号】P 2022521503
(86)(22)【出願日】2019-10-10
(86)【国際出願番号】 US2019055495
(87)【国際公開番号】W WO2021071486
(87)【国際公開日】2021-04-15
【審査請求日】2022-07-19
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ディートリック,ダグラス・シム,ジュニア
(72)【発明者】
【氏名】マクール,ロバート
(72)【発明者】
【氏名】ロイ,ジャン-フランソワ
(72)【発明者】
【氏名】グリーン,マイケル・エス
(72)【発明者】
【氏名】ソマダー,グルダス
【審査官】鈴木 順三
(56)【参考文献】
【文献】特表2009-500951(JP,A)
【文献】特開平05-216800(JP,A)
【文献】特表2008-535622(JP,A)
【文献】特開2014-086770(JP,A)
【文献】特開平11-252566(JP,A)
【文献】米国特許出願公開第2017/0109122(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 21/00 - 21/858
(57)【特許請求の範囲】
【請求項1】
方法であって、
第1のデバイスにおいて、符号化されていないビデオフレームの第1のストリームを第1のフレームレートでレンダリングすることと、
前記第1のデバイスにおいて、前記第1のストリームのビデオフレームを符号化して、符号化されたビデオフレームの第2のストリームを生成することとを含み、前記第2のストリーム
は、第2のフレームレートを有し、かつ、
前記第2のフレームレートは、前記第2のストリームの送信のための
目標フレームレート
であり、前記第1のストリームのビデオフレームを符号化することは、前記第1のフレームレートが前記第2のフレームレートを
実効的に下回ることに基づいて、
前記第2のストリームの実行フレームレートを前記第2のフレームレートまで増加させるために、前記第1のフレームレートと前記第2のフレームレートとの間の差を補償するよう、前記第2のストリームに含めるために、前記第1のストリームの少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することを含み、前記方法はさらに、
前記第2のストリームをネットワークを介して第2のデバイスに送信するために提供することを含む、方法。
【請求項2】
前記少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することは、
前記第1のストリームの第1のビデオフレームを符号化して、第1のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第1の符号化されたインスタンスを生成することと、
前記第1のフレーム期間に続く第2のフレーム期間について、前記第1のストリームの第2のビデオフレームが符号化される準備ができているかどうかを判断することを含み、前記第1のフレーム期間および前記第2のフレーム期間は、前記第2のフレームレートに基づいており、
さらに、
前記第2のビデオフレームが符号化される準備ができていると判断することに応答して、前記第2のビデオフレームを符号化して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第2のビデオフレームの符号化されたインスタンスを
生成することと、
前記第2のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化するか、または前記第1のビデオフレームの前記第1の符号化されたインスタンスを複製して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第2の符号化されたインスタンスを生成することとを含む、請求項1に記載の方法。
【請求項3】
前記第1のストリームをレンダリングすることは、前記第1のストリームの各ビデオフレームをフレームバッファにおいて順番に前記第1のフレームレートでレンダリングすることを含み、
前記第1のストリームの前記第2のビデオフレームが前記第2のフレーム期間について符号化される準備ができているかどうかを判断することは、
前記第1のフレーム期間の終了を表すタイマの満了に応答して、前記フレームバッファ中の前記第2のビデオフレームのレンダリングが完了したかどうかを判断することを含む、請求項2に記載の方法。
【請求項4】
少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することは、
前記第1のストリームの第3のビデオフレームが、前記第2のフレーム期間に続く第3のフレーム期間について符号化される準備ができているかどうかを判断することと、
前記第3のビデオフレームが符号化される準備ができていると判断することに応答して、前記第3のビデオフレームを符号化して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第3のビデオフレームの符号化されたインスタンスを生成することと、
前記第3のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化するか、または前記第1のビデオフレームの前記第1の符号化されたインスタンスを複製して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第3の符号化されたインスタンスを生成することとを含む、請求項2または3に記載の方法。
【請求項5】
前記第1のビデオフレームを再符号化して前記第1のビデオフレームの前記第2の符号化されたインスタンスを生成することは、
前記第1のビデオフレームの前記第1の符号化されたインスタンスに少なくとも部分的に基づいて前記第1のビデオフレームを再符号化して、前記第1のビデオフレームの前記第2の符号化されたインスタンスを前記第1の符号化されたインスタンスよりも高い画質で生成することを含む、請求項2~4のいずれか1項に記載の方法。
【請求項6】
さらに、
前記第2のフレームレートを、前記第1のデバイスの設定に基づいて決定すること含む、請求項1に記載の方法。
【請求項7】
さらに、
前記第2のフレームレートを決定するために、前記ネットワークを介して前記第2のデバイスに問い合わせることを含む、請求項6に記載の方法。
【請求項8】
さらに、
前記第1のデバイスにおいてビデオゲームアプリケーションを実行することを含み、
前記符号化されていないビデオフレームの前記第1のストリームをレンダリングすることは、前記ビデオゲームアプリケーションにおいて実行される命令に応答して、およびさらに前記ネットワークを介して受信されるユーザゲームコントローラコマンドに応答して、前記第1のストリームをレンダリングすることを含む、請求項1~7のいずれか1項に記載の方法。
【請求項9】
方法であって、
符号化されたビデオフレームのストリームを、ネットワークを介して第1のデバイスから第2のデバイスに送信するために、指定されたフレームレートで提供することを含み、前記符号化されたビデオフレームのストリームを提供することは、
第1のビデオフレームを符号化して、前記指定されたフレームレートに対応する第1のフレーム期間について前記ストリームに含めるために第1の符号化されたビデオフレームを生成することと、
第2のビデオフレームのレンダリングがスキップまたは遅延されたこと、および、前記第2のビデオフレームが前記第1のフレーム期間に続く第2のフレーム期間について符号化の準備ができていないと判断したことに応答して、レンダリングされた前記第1のビデオフレームを再符号化して、前記第2のフレーム期間について前記ストリームに含めるために第2の符号化されたビデオフレームを生成することとを含む、方法。
【請求項10】
さらに、
前記第2のビデオフレームが前記第2のフレーム期間についての符号化の準備ができていると判断したことに応答して、前記第2のビデオフレームを符号化して、前記第2のフレーム期間について前記ストリームに含めるために第3の符号化されたビデオフレームを生成することを含む、請求項9に記載の方法。
【請求項11】
さらに、
第3のビデオフレームが前記第2のフレーム期間に続く第3のフレーム期間について符号化の準備ができていないと判断したことに応答して、前記第1のビデオフレームを再符号化して、前記第3のフレーム期間について前記ストリームに含めるために第3の符号化されたビデオフレームを生成することを含む、請求項9または10に記載の方法。
【請求項12】
さらに、
前記指定されたフレームレートを、前記第1のデバイスのデフォルト設定、ユーザ指定設定、前記ネットワークを介する前記第1のデバイスから前記第2のデバイスへのクエリ、および前記ネットワークの分析のうちの少なくとも1つに基づいて決定することを含む、請求項9から11のいずれか1項に記載の方法。
【請求項13】
前記第2のビデオフレームは準備ができていないと判断することは、
前記第2のフレーム期間の開始に対応するタイマの満了時に、前記第1のデバイスのフレームバッファが前記第2のビデオフレームの完了したレンダリングを含まないと判断することを含む、請求項9~12のいずれか1項に記載の方法。
【請求項14】
さらに、
前記第1のデバイスにおいて、前記フレームバッファにおいてバッファリングするために、前記指定されたフレームレートよりも低いフレームレートで、ビデオフレームのシーケンスをレンダリングすることを含み、前記シーケンスは、前記第1のビデオフレームと前記第2のビデオフレームとを含む、請求項13に記載の方法。
【請求項15】
前記第1のビデオフレームを再符号化して第2の符号化されたビデオフレームを生成することは、
前記第1のビデオフレームを、前記第1の符号化されたビデオフレームに部分的に基づいて再符号化して、前記第2の符号化されたビデオフレームを、前記第1の符号化されたビデオフレームよりも高い画質で生成することを含む、請求項9~14のいずれか1項に記載の方法。
【請求項16】
システムであって、
第1のデバイスを備え、前記第1のデバイスは、
ネットワークに結合するよう構成されるネットワークインターフェイスと、
前記ネットワークインターフェイスに結合され、第1のフレームレートを有するレンダリングされたビデオフレームの第1のストリームを符号化して、前記ネットワークインターフェイスを介する前記ネットワークを介した送信のために、符号化されたビデオフレームの第2のストリームを生成するよう構成されるエンコーダとを備え、前記第2のストリーム
は、第2のフレームレートを有し、かつ、
第2のフレームレートは、前記第2のストリームの送信のための
目標フレームレート
であり、前記エンコーダは、前記第1のフレームレートが前記第2のフレームレートを
実効的に下回ることに基づいて、
前記第2のストリームの実行フレームレートを前記第2のフレームレートまで増加させるために、前記第1のフレームレートと前記第2のフレームレートとの間の差を補償するよう、前記第2のストリームに含めるために、前記第1のストリームの少なくとも1つのビデオフレームの複数のインスタンスを選択的に符号化するよう構成される、システム。
【請求項17】
前記ネットワークに結合され、第2のデバイスのディスプレイでの再生のために、前記符号化されたビデオフレームの第2のストリームを受信し、復号するよう構成される前記第2のデバイスをさらに含む、請求項16に記載のシステム。
【請求項18】
前記第2のデバイスは、前記ネットワークを介して前記第1のデバイスにユーザ入力を提供するためにキーボードまたはゲームコントローラのうちの少なくとも1つを含み、
前記第1のデバイスは、前記レンダリングされたビデオフレームの第1のストリームを前記ユーザ入力に基づいてレンダリングするようにビデオゲームアプリケーションを実行するよう構成されるサーバを含む、請求項17に記載のシステム。
【請求項19】
前記エンコーダは、以下の構成によって、少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供するよう構成され、前記以下の構成は、
前記第1のストリームの第1のビデオフレームを符号化して、第1のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第1の符号化されたインスタンスを生成することと、
前記第1のフレーム期間に続く第2のフレーム期間について、前記第1のストリームの第2のビデオフレームが符号化される準備ができているかどうかを判断することとを含み、前記第1のフレーム期間および前記第2のフレーム期間は、前記第2のフレームレートに基づいており、前記以下の構成は、さらに、
前記第2のビデオフレームが符号化される準備ができていると判断することに応答して、前記第2のビデオフレームを符号化して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第2のビデオフレームの符号化されたインスタンスを生成することと、
前記第2のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化するか、または前記第1のビデオフレームの前記第1の符号化されたインスタンスを複製して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第2の符号化されたインスタンスを生成することとを含む、請求項16~18のいずれか1項に記載のシステム。
【請求項20】
前記エンコーダは、前記第1のストリームの各ビデオフレームをフレームバッファにおいて順番に前記第1のフレームレートでレンダリングするよう構成され、
前記エンコーダは、タイマの満了に応答して、前記フレームバッファ内の前記第2のビデオフレームのレンダリングが完了したかどうかを判断することによって、前記第1のストリームの前記第2のビデオフレームが前記第2のフレーム期間について符号化される準備ができているかどうかを判断するよう構成される、請求項19に記載のシステム。
【請求項21】
前記エンコーダは、以下の構成によって、少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供するよう構成され、当該以下の構成は、
前記第1のストリームの第3のビデオフレームが、第2のフレーム期間に続く第3のフレーム期間について符号化される準備ができているかどうかを判断することと、
前記第3のビデオフレームが符号化される準備ができていると判断することに応答して、前記第3のビデオフレームを符号化して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第3のビデオフレームの符号化されたインスタンスを生成することと、
前記第3のビデオフレームが符号化される準備ができていないと判断することに応答して、第1のビデオフレームを再符号化して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第3の符号化されたインスタンスを生成することとを含む、請求項16~18のいずれか1項に記載のシステム。
【請求項22】
前記エンコーダは、前記第1のビデオフレームの前記第1の符号化されたインスタンスに少なくとも部分的に基づいて前記第1のビデオフレームを再符号化して、前記第1のビデオフレームの前記第2の符号化されたインスタンスを前記第1のビデオフレームの前記第1の符号化されたインスタンスよりも高い画質で生成するよう構成される、請求項19に記載のシステム。
【請求項23】
前記エンコーダは、さらに、
前記第2のフレームレートを、デフォルト設定、ユーザ指定設定、前記ネットワークの分析、および第2のデバイスへのクエリのうちの少なくとも1つに基づいて決定するよう構成され、前記第2のデバイスは、前記ネットワークに結合され、前記第2のデバイスのディスプレイでの再生のために、前記符号化されたビデオフレームの第2のストリームを受信し、復号するよう構成される、請求項16~22のいずれか1項に記載のシステム。
【請求項24】
少なくとも1つのプロセッサに、請求項1~15のいずれか1項に記載の方法を実行させるためのプログラム。
【発明の詳細な説明】
【背景技術】
【0001】
背景
ビデオソースデバイスは、通常、公称フレームレートでビデオストリームのビデオフレーム(「ピクチャ」としても知られる)をレンダリングする。この公称フレームレートは、フレームレートの変動をほとんどまたはまったく伴わずに固定されてもよく、または、たとえば、ビデオストリーム中の任意の所与のビデオフレームをレンダリングするために必要とされる処理負荷または能力に起因して、実効フレームレートにいくらかの変動があってもよい。そのようなビデオストリームをリアルタイムで伝送するために利用される伝送ネットワークは、典型的には、伝送の処理負荷が一貫しており、閾値レベルにあるかまたはそれを上回る場合、より効果的に動作する。可変であるフレームレートまたは公称フレームレートとは異なるフレームレートでレンダリングされるビデオストリームは、公称フレームレートよりも速くまたは遅く到着するフレームにつながり、したがって、ストリーム中のビデオフレーム間に比較的小さいかまたは大きいアイドルタイムスパンを引き起こし得る。これらのアイドルタイムスパンは、そのようなビデオストリームをネットワーク伝送問題の対象とし得る。そのような問題は、ビデオストリームを送信するために確立されるチャネルの優先順位を落とすこと、またはネットワークにおける問題の認識を遅らせることを含み得る。したがって、一貫しない送信処理負荷を呈するビデオストリームは、ネットワークを介してビデオストリームを受信する宛先デバイスにおけるビデオストリームのビデオストリーム再生における視聴者の体験に悪影響を及ぼし得る。
【0002】
図面の簡単な説明
本開示は、添付の図面を参照することによって、よりよく理解され、その多数の特徴および利点が当業者に明らかになる。異なる図面における同じ参照符号の使用は、類似または同一の項目を示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、符号化されたビデオストリームを送信するために一定のネットワーク伝送処理負荷を維持するよう選択的ビデオフレームインスタンス複製を採用する電子システムを示すブロック図である。
【
図2】いくつかの実施形態による、
図1の電子システムのサーバを示すブロック図である。
【
図3】いくつかの実施形態による、符号化されたビデオストリームのリアルタイム送信のための選択的ビデオフレームインスタンス複製のための方法を示すフロー図である。
【発明を実施するための形態】
【0004】
詳細な説明
ビデオストリームが、ビデオストリームを送信するネットワークに比較的一定の処理負荷を呈することを保証することは、典型的には、ビデオストリームを表すデータの、より信頼性の高い、またはそうでなければ効果的な送信をもたらす。一定の伝送処理負荷をネットワークに与える1つの従来のアプローチは、ビデオデータを一定のレートで送信できるように、ソースデバイスにおいてビデオデータをバッファリングすることである。しかしながら、そのようなアプローチは、ビデオコンテンツの配信において待ち時間を招き、これは、しばしば、遠隔でサービスされるビデオゲームおよび他のリアルタイムビデオストリーミングアプリケーションでは実行不可能である。そのようなリアルタイムビデオストリーミングアプリケーションの場合、この一定の処理負荷を与えるよう試みるために用いられる1つの手法は、ソースデバイスにおいてビデオストリーム内のすべての符号化されたフレームを自動的に複製し、それによって、ビデオストリームを送信するためのチャネルがアイドルである時間期間を低減することである。たとえば、60フレーム/秒(FPS)のフレームレートが特定のネットワークに適していると見なされ、ソースデバイスがビデオフレームを30FPSの公称レートでレンダリングする場合、ソースデバイスは、結果として生じるビデオストリームを60FPSで作成するよう、各ビデオフレームを1回複製する。しかしながら、このアプローチは、ビデオストリームのフレームレートが既知であるという仮定と、フレームレートが一定であるという仮定との両方に基づく。レンダリングフレームレートが未知であるか、またはレンダリングプロセスが可変フレームレートをもたらす場合、フレームレートがネットワークの目標フレームレートの50%超であるか、または50%超に増加すると、各およびすべてのビデオフレームの自動複製は、過剰な数のビデオフレームを生成することになり、これは、ネットワークを過負荷にし、したがって、視聴体験に悪影響を及ぼし得る。逆に、フレームレートが目標フレームレートの50%未満であるか、または50%未満に下回ると、各およびすべてのビデオフレームの自動単一複製は、目標フレームレートを下回ってビデオフレームを生成することになり、したがって、送信されるビデオストリームに、ネットワークに対する不充分または一貫しない処理負荷という、同じ有害な影響を及ぼす潜在的可能性がある。
【0005】
対照的に、本出願は、ビデオストリームの送信のためにネットワークに一定の充分に頻繁な伝送処理負荷を与えるように、ネットワークを介して送信されるビデオストリーム内における符号化されたビデオフレームのインスタンスの選択的複製のためのシステムおよび技法を説明する。少なくとも1つの実施形態では、この選択的複製プロセスは、ビデオフレームレンダリングの現在のレートが、結果として生じる符号化されたビデオストリームの送信のための目標フレームレートを満たしているかどうかに基づいて、ビデオフレームの符号化されたインスタンスを選択的に複製する。現在のレンダリングされたフレームレートが目標フレームレート以上である間、レンダリングされたフレームは符号化され、複製なしにビデオストリームの一部として送信される。しかしながら、現在のレンダリングされたフレームレートが目標フレームレートを実効的に下回るとき、ソースデバイスは、1つ以上のレンダリングされたビデオフレームの1つ以上の複製インスタンスを挿入するように動作して、ビデオストリームにおける実効フレームレートを目標フレームレートまで増加させる。
【0006】
一実施形態では、この選択的複製プロセスは、同期される周期的イベントによってトリガされるか、またはそうでなければ目標フレームレートにおける1つのフレーム期間と次のフレーム期間との間の遷移または境界で発生するエミュレートされた垂直同期(「vsync」)信号など、目標フレームレートのフレーム期間を表す周期的イベントによってトリガされる。ソースデバイスのレンダリングコンポーネントは、ビデオフレームをビデオストリームのためにネイティブフレームレートでレンダリングし、ネイティブフレームレートは、固定または可変とすることができ、目標フレームレートよりも低くてもよく、等しくてもよく、または高くてもよい。各レンダリングされたフレームは、ソースデバイスのエンコーダがアクセス可能なフレームバッファに記憶される。
【0007】
周期的なイベントまたはトリガのアサートに応答して、エンコーダは、ビデオストリーム中に符号化されたビデオフレームとして含めるために次のビデオフレームを符号化することを試みる。次のビデオフレームがフレームバッファ内にあり、符号化の準備ができている場合、エンコーダは、次のビデオフレームを符号化し、結果として生じる符号化されたビデオフレームを、ネットワークを介して宛先デバイスに送信するためにビデオストリームに挿入することに進む。しかしながら、次のビデオフレームが符号化の準備ができていない(例えば、次のビデオフレームは、周期的トリガがアサートされた時点で部分的にのみレンダリングされる)場合、準備ができたら符号化するのを遅らせてネットワークにおいてチャネルをアイドリングするのではなく、エンコーダは、代わりに、前のビデオフレームの第1の複製符号化されたインスタンスを含めることによって、前のビデオフレームを複製し、したがって、送信されているビデオストリームにおいて目標フレームレートが維持されることを保証する。周期的トリガが次にアサートされる時点までに次のビデオフレームがまだ符号化の準備ができていない場合には、エンコーダは、前のビデオフレームの第2の複製符号化されたインスタンスを含めることによって、前のビデオフレームを再び複製し、符号化されたビデオストリーム内で目標フレームレートを再び維持する。前のビデオフレームの別の符号化されたインスタンスを含むこのプロセスは、次のレンダリングされたビデオフレームがフレームバッファにあり、符号化の準備ができるまで、任意の回数繰り返すことができる。
【0008】
前のビデオフレームの複製符号化されたインスタンスは、一実施形態では、前のビデオフレームの第2、第3、第4、もしくはさらなる符号化、または再符号化を含み、したがって、前のビデオフレームの最初の符号化よりも高い品質の、前のビデオフレームの符号化をもたらすことができる。他の実施形態では、各符号化されたビデオフレームは一時的にバッファリングされ、前のビデオフレームを再符号化するのではなく、前のビデオフレームの同じ符号化されたインスタンスが、代わりに、前のビデオフレームの、バッファリングされ既に符号化されたインスタンスのコピーとして提供される。
【0009】
図1は、少なくとも1つの実施形態による、符号化されたビデオストリームを少なくとも目標フレームレートで提供するための選択的ビデオフレーム複製プロセスを採用する電子システム100を示す。電子システム100は、パケット交換ネットワーク108を介してビデオ宛先デバイス106に接続されるビデオソースデバイス104を有するデータセンタ102を含む。ビデオソースデバイス104は、ビデオフレームのシーケンスのリアルタイムレンダリングをもたらすビデオソースソフトウェアアプリケーション110を実行するように動作し、ビデオソースデバイス104は、ビデオフレームのシーケンスのリアルタイムレンダリングを、チャネル114を介してビデオ宛先デバイス106に送信される符号化されたビデオストリーム112に含めるために、符号化する(一般に「パイプ」または「セッション」とも呼ばれる)。ビデオ宛先デバイス106は、符号化されたビデオストリーム112を受信し、そこに含まれる符号化されたビデオフレームを復号し、復号されたビデオフレームを順に表示して、レンダリングされたグラフィカルコンテンツのビデオプレゼンテーションをビデオ宛先デバイス106のユーザに提供するように動作する。例示の目的で、電子システム100は、本明細書では、遠隔サービスされるビデオゲームシステムの例示的文脈において説明され、この文脈では、ビデオソースデバイス104はゲーミングサーバ(したがって、本明細書では「ゲーミングサーバ104」と呼ぶ)であり、ビデオ宛先デバイス106はユーザのゲーミングデバイス(したがって、本明細書では「ゲーミングデバイス106」と呼ぶ)であり、ビデオソースソフトウェアアプリケーション110はビデオゲームアプリケーション(したがって、本明細書では「ビデオゲームアプリケーション110」と呼ぶ)である。しかしながら、本明細書で説明される技法は、リアルタイムビデオストリームがソースデバイスにおいてレンダリングおよび符号化され、結果として生じる符号化されたビデオストリームが、インターネットを介してライブまたは事前記録されたテレビコンテンツをストリーミングするためのシステム内等において、ソースデバイスから宛先デバイスにネットワークを介して送信される、種々のビデオシステム実現例のうちのいずれかに適用可能である。
【0010】
パケット交換ネットワーク108(以下、「ネットワーク108」)は、1つ以上の有線もしくは無線パーソナルエリアネットワーク(PAN)、1つ以上の有線もしくは無線ローカルエリアネットワーク(LAN)、1つ以上の有線もしくは無線ワイドエリアネットワーク(WAN)、またはそれらの組み合わせを含む。例として、ネットワーク108は、ゲーミングサーバ104をインターネットに接続する有線LAN(図示せず)を含むことができ、インターネットは、無線LAN(WLAN)を介してゲーミングデバイス104に接続される。
図2を参照して以下により詳細に説明されるゲーミングサーバ104は、アップストリームサブチャネル116を介してゲーミングデバイス106から提供されるユーザ入力に従ってビデオフレームのシーケンスをレンダリングし、結果として生じるビデオフレームを符号化するように、ビデオゲームアプリケーション110の実行を促進するための計算および記憶リソースを含む。ゲーミングサーバ104は、ネットワーク108へのネットワークインターフェイスをさらに含み、エンコードされたビデオフレームを表すデータを、ビデオゲームアプリケーション110によって生成された任意の関連付けられたメタデータおよび音声データとともに、チャネル114を介してゲーミングデバイス106に送信するために提供する。
【0011】
ゲーミングデバイス106は、ゲーミングサーバ104からネットワーク108を介して送信されたビデオデータ、メタデータ、および音声データを受信するためにネットワーク108に接続されたネットワークインターフェイス(図示せず)と、送信されたビデオストリーム112のビデオフレームを復号および表示し、対応する音声コンテンツを出力するための計算、記憶、および表示リソース(図示せず)と、ユーザ入力をゲームプレイ中にアップストリームサブチャネル116を介してゲーミングサーバ104に送信するために受信するためのゲームコントローラ118、キーボード(図示せず)または他のユーザ入力/出力(I/O)デバイスとを含み、ユーザ入力は、次いで、実行されたビデオゲームアプリケーション110に提供され、レンダリングされたビデオフレームに含まれるグラフィカルコンテンツおよび音声ストリームに含まれる音声コンテンツに影響を及ぼす。
【0012】
少なくとも1つの実施形態では、ビデオゲームアプリケーション110の実行は、本明細書では「レンダリングフレームレート」と呼ばれるフレームレートでのビデオフレームのレンダリングをもたらす。例示すると、ビデオゲームアプリケーション110は、30FPSなどの指定された公称フレームレートでビデオフレームをレンダリングするように設計またはプログラムされ得る。代替的に、ゲーミングサーバ104によって割り当てられる計算リソースは、レンダリングフレームレートを設定することにおいて、ある役割を果たすことができる。いくつかの実現例では、レンダリングフレームレートは、固定および一定であり;すなわち、ビデオフレームは常に同じレートでレンダリングされる。他の実現例では、レンダリングフレームレートは、各ビデオフレームによって必要とされる異なるレンダリング負荷または経時的な計算リソース割当の変化に基づく程度まで変動し得る。例えば、複雑なシーンは、典型的には、より単純なシーンよりもレンダリングするのにより多くの計算能力を必要とし、所与のビデオフレームの複雑さは、そのビデオフレームが「遅れて」レンダリングされるようにゲーミングサーバ104に負担をかけ得;すなわち、ビデオフレームは、公称フレームレートを前提として、各フレーム期間について公称「準備完了」点より後の点で符号化の準備ができる。したがって、そのような事例では、ビデオストリーム112は、例えば、大きい平均化ウィンドウにわたっては30FPSの実効フレームレートを有することができるが、瞬時フレームレートは、レンダリング処理負荷に応じて、30FPSを上回るか、または30FPSを下回って変動し得る。
【0013】
ネットワーク108は、一実施形態では、ゲーミングサーバ104とゲーミングデバイス106との間に確立されるチャネル114を含む所与の伝送チャネルに関してバースト的な処理負荷よりも一定の伝送処理負荷を好む、サービス品質(QoS)ポリシーなどの1つ以上のポリシーまたは動作パラメータを実現する。たとえば、これらのポリシーまたはパラメータは、典型的には、あるチャネルが少なくとも閾値持続時間にわたってアイドルであるとき、そのチャネルのパケットは、その後、ネットワーク108によって優先順位を下げられ(すなわち、そのチャネルは優先順位を下げられ)、それは、次いで、そのチャネルのパケットについてのQoSが低くなることがあり得ることを規定する。さらに、バースト的な処理負荷は、伝送チャネルの容量を超える伝送処理負荷をもたらすことがあり、これは、次いで、待ち行列形成またはパケット損失さえも引き起こす。いずれの状況も、遅延および冗長な送信(再送信)を引き起こすことがあり、これは本質的に非効率的である。したがって、少なくとも1つの実施形態では、ゲーミングサーバ104を掌握する設計者、実施者、管理者、または他の主体は、ビデオストリーム112について、本明細書では「目標フレームレート」と呼ばれる閾値フレームレートを特定し、この目標フレームレートは、ネットワーク108に充分に一定の伝送処理負荷を与えるよう期待または予測され、そうでなければ、より低いフレームレートでのビデオストリーム112の送信に起こり得るであろう、ネットワーク108を介したビデオストリーム112の送信に関するチャネル優先度低下もしくは他のネットワーク劣化影響を、軽減または排除するようにする。この目標フレームレートは、ネットワーク108の実験またはモデル化を通じて決定することができる。例えば、ゲーミングサーバ104またはデータセンタ102の他の構成要素は、異なる伝送処理負荷プロパティを有する1つ以上のテストデータストリームを、ネットワーク108を介して1つ以上の宛先デバイスに送信し、ネットワーク統計を測定するかまたはそうでなければネットワーク108の動作を観察することができる。代替的に、ネットワーク108の特性を判断し、判断された特性から最小伝送処理負荷の推定値を推定することができる。さらに他の実現例では、目標フレームレートは、以前の経験または他の推定に基づいて固定される。
【0014】
いくつかの例では、ビデオゲームアプリケーション110のレンダリングフレームレートは、目標フレームレートを満たすかまたは超えるのに充分である。例えば、ネットワーク108の目標フレームレートが30FPSであると決定され、ゲーミングサーバ104によって実行されるビデオゲームアプリケーション110が非変動60FPSである(すなわち、ビデオフレームは遅延またはドロップされない)場合、次いで、ビデオストリーム112に必要とされる送信処理負荷の定常性および頻度は、よりバースト的な送信がネットワーク108から招くであろう有害な影響を回避するのに充分である。しかしながら、ネットワーク108の目標フレームレートが、ゲーミングサーバ104によって実行されるビデオゲームアプリケーション110の実効レンダリングフレームレートを超える場合、またはドロップもしくは遅延されたレンダリングされたビデオフレームによって、チャネル114に比較的実質的なアイドル伝送期間が導入されそうな場合、ビデオストリーム112は、このバースト的な送信処理負荷に起因して、否定的な送信影響を受ける潜在的可能性がある。したがって、少なくとも1つの実施形態では、ゲーミングサーバ104は、より低い瞬時レンダリングフレームレートをもたらし得る、レンダリングプロセスにおける任意の遅延またはドロップされたビデオフレームを補償することを含んで、より低いレンダリングフレームレートとより高い目標フレームレートとの間の差を補償するように、特定のレンダリングされたビデオフレームの複数の符号化されたインスタンスをビデオストリーム112に選択的に組み込む選択的ビデオフレーム複製プロセスを採用する。
【0015】
このプロセスのために、ゲーミングサーバ104は、一実施形態では、カウントダウンタイマまたは他の機構を用いて、目標フレームレートに従って連続するフレーム期間を表す。カウントダウンタイマは、目標フレームレートに対応する各フレーム期間(以下、「目標フレーム期間」という)の持続時間に相当するカウントに設定され、カウントダウンの満了(およびその後のリセット)は、ある目標フレーム期間と次の目標フレーム期間との間の遷移の、エミュレートされた垂直同期信号または他の境界として作用する期間トリガとしての役割を果たす。例示すると、60FPSの目標フレームレートの場合、目標フレーム期間は16ミリ秒(ms)であり、したがって、カウントダウンタイマは、16msごとに満了およびリセットするように設定される。カウントダウンタイマが満了すると、ゲーミングサーバ104は、符号化されるべき次のレンダリングされたビデオフレームが実際に符号化される準備ができている(例えば、完全にレンダリングされ、エンコーダのためにビデオフレームのソースとして用いられるフレームバッファに記憶される)かどうかを判断する。準備ができている場合、ゲーミングサーバ104は、次のビデオフレームを符号化し、結果として生じるビデオフレームの符号化されたインスタンスを、ビデオストリーム112の一部としてネットワーク108を介して伝送するために、ネットワークインターフェイスに提供する。そうではなく、カウントダウンタイマが満了するときに次のビデオフレームが符号化される準備ができていない(たとえば、次のビデオフレームは、フレームバッファ中で完全にレンダリングされていない)場合、次いで、次のビデオフレームが準備されるのを待つのではなく、ゲーミングサーバ104は、代わりに、前のビデオストリームの第2の、または複製の、符号化されたインスタンスを、ビデオストリーム112の一部として、ネットワーク108を介した送信のために、ネットワークインターフェイスに提供する。すなわち、ゲーミングサーバ104は、以前のビデオフレームの以前に符号化されたインスタンスをコピーするか、または以前のビデオフレームを再符号化して、以前のビデオフレームの第2の符号化されたインスタンスを、ビデオストリーム112に含めるために、生成する。このアプローチの下では、ゲーミングサーバ104は、含まれる符号化されたビデオフレームのうちの2つ以上が、同じレンダリングされたビデオフレームの同じまたは異なるインスタンスであっても、ビデオストリーム112が符号化されたビデオフレームを少なくとも目標フレームレートで含むことを保証し、したがって、ビデオストリーム112がネットワーク108に対して充分に一定の伝送処理負荷を与えることを保証する。
【0016】
図1のダイアグラム120,122,および124は、レンダリングされたビデオストリームの対応する部分およびエンコードされたストリームの対応する部分に関するこの選択的ビデオフレーム複製プロセスの3つの例を示す。ダイアグラム120の例では、タイムライン126は、ビデオゲームアプリケーション110を実行して、レンダリングされたビデオフレームのストリームをレンダリングする(その一部はレンダリングストリーム128によって表される)ときのゲーミングサーバ104のレンダリングされたフレームレートを表す。タイムライン126上の各目盛マーク間のスパンは、レンダリングされたフレームレートでの対応するフレーム期間(右から左に、番号付けされたフレーム期間JおよびJ+1)を表す。レンダリングストリーム128中の各ボックスは、対応するフレーム期間についてのレンダリングされたビデオフレームを表す。さらに、ダイアグラム120では、レンダリングストリーム128内の各ボックスの左端は、対応するビデオフレームのレンダリングが完了し、したがって符号化の準備ができている時点を表す。タイムライン130は、ネットワーク108に充分に一定の伝送処理負荷を与えるためのビデオストリーム112の目標フレームレートを表し、タイムライン130上の各目盛マークは、目標フレームレートでの対応するフレーム期間(右から左に、番号付けされたフレーム期間K~K+2)を表す。符号化されたストリーム132は、ビデオストリーム112の一部分を表し、符号化されたストリーム132内の各ボックスは、ビデオストリーム112としてネットワーク108を介して伝送される符号化されたビデオフレームのシーケンスに挿入されるかまたは他の態様で含まれる、レンダリングストリーム128からのビデオフレームの符号化されたインスタンスを表す。レンダリングストリーム128におけるハッチングフィルのないボックスは、各々、レンダリングストリーム128からの対応するレンダリングされたビデオフレームの第1の、または最初の符号化されたインスタンスを表し、ハッチングフィルのあるボックスは、レンダリングストリーム128からのレンダリングされたビデオフレームの追加の、または複製の符号化されたインスタンスを表す。ダイアグラム120によって表される例では、目標フレームレートは、レンダリングフレームレートよりもかなり高く(例えば、約170%)、例示すると、レンダリングフレームレートは、たとえば、30FPSであり得るが、目標フレームレートは50FPSである。
【0017】
タイムライン130上の各目盛マークは、目標フレームレートでの1フレーム期間の終了および次のフレーム期間の開始を表し、したがって、目標フレームレートに同期された周期的トリガとして用いられるカウントダウンタイマの満了も表す。したがって、タイムライン130上の対応する目盛マークによって表される各周期的トリガに応答して、ゲーミングサーバ104は、次のレンダリングされたビデオフレームがレンダリングストリーム128内で利用可能であるかどうかを判断する。例示すると、フレーム期間Kの開始を信号送信する目盛マークにおいて、レンダリングされたビデオフレーム134は符号化の準備ができており、したがって、ゲーミングサーバ104は、レンダリングされたビデオフレーム134を符号化して、フレーム期間Kについて、符号化されたストリーム132に含めるために、ビデオフレーム132の、最初の符号化されたインスタンス136を生成する。しかしながら、フレーム期間K+1の開始時では、符号化のために利用可能な新たにレンダリングされたビデオフレームはない。したがって、フレーム期間K+1の開始によって表されるトリガイベントに応答して、ゲーミングサーバ104は、次のビデオフレームは符号化の準備ができていないと判断し、したがって、代わりに、フレーム期間K+1について、符号化されたストリーム132に含めるために、すでに一旦符号化されたビデオフレーム134の、第2の符号化されたインスタンス138を生成する。次のフレーム期間K+2の開始時では、レンダリングされたビデオフレーム140が、符号化の準備ができており、したがって、ゲーミングサーバ104は、ビデオフレーム140を符号化して、フレーム期間K+2について、符号化されたストリーム132に含めるために、最初の符号化されたインスタンス142を生成する。
【0018】
ダイアグラム122の例を参照すると、タイムライン144は、ビデオゲームアプリケーション110を実行して、レンダリングされたビデオフレームのストリームをレンダリングするとき(その一部はレンダリングストリーム146によって表される)のゲーミングサーバ104のレンダリングされたフレームレートを表す。前の例と同様に、タイムライン144上の各目盛マーク間のスパンは、レンダリングされたフレームレートでの対応するフレーム期間(右から左に、番号付けされたフレーム期間MおよびM+1)を表す。レンダリングストリーム146内の各ボックスは、対応するフレーム期間についてのレンダリングされたビデオフレームを表し、各ボックスの左端は、対応するビデオフレームのレンダリングが完了し、したがって、符号化の準備ができている時点を表す。タイムライン148は、ネットワーク108に充分に一定の伝送処理負荷を与えるためのビデオストリーム112の目標フレームレートを表し、タイムライン148上の各目盛マークは、目標フレームレートでの対応するフレーム期間(右から左に、番号付けされたフレーム期間N~N+3)を表す。符号化されたストリーム150は、ビデオストリーム112の一部分を表し、符号化されたストリーム150内の各ボックスは、ビデオストリーム112としてネットワーク108を介して伝送される符号化されたビデオフレームのシーケンスに挿入されるかまたは他の態様で含まれる、レンダリングストリーム146からのビデオフレームの符号化されたインスタンスを表す。ダイアグラム122によって表される例では、目標フレームレートは、レンダリングフレームレートよりもかなり高く(例えば、約2X)、例示すると、目標フレームレートは、たとえば、60FPSであってもよく、一方、レンダリングされたフレームレートは、わずか30FPSである。
【0019】
タイムライン148上の対応する目盛マークによって表される各周期的トリガに応答して、ゲーミングサーバ104は、次のレンダリングされたビデオフレームがレンダリングストリーム146内で利用可能であるかどうかを判断する。例示すると、フレーム期間Nの開始を信号送信する目盛マークにおいて、レンダリングされたビデオフレーム152は符号化の準備ができており、したがって、ゲーミングサーバ104は、レンダリングされたビデオフレーム152を符号化して、フレーム期間Nについて、符号化されたストリーム150に含めるために、ビデオフレーム152の、最初の符号化されたインスタンス154を生成する。しかしながら、フレーム期間N+1の開始時では、符号化のために利用可能な新たにレンダリングされたビデオフレームはなく、したがって、フレーム期間N+1の開始によって表されるトリガイベントに応答して、ゲーミングサーバ104は、次のビデオフレームは符号化の準備ができていないと判定し、代わりに、フレーム期間N+1について、符号化されたストリーム150に含めるために、すでに一度符号化されたビデオフレーム152の第2の符号化されたインスタンス156を生成する。次のフレーム期間N+2の開始時では、レンダリングされたビデオフレームは、まだ、符号化に利用可能ではなく、したがって、ゲーミングサーバ104は、フレーム期間N+2について、符号化されたストリーム150に含めるために、既に2回符号化されたビデオフレーム152の第3の符号化されたインスタンス158を生成する。次のフレーム期間N+3の開始時では、レンダリングされたビデオフレーム160が符号化の準備ができており、したがって、ゲーミングサーバ104は、ビデオフレーム160を符号化して、フレーム期間N+3について、符号化されたストリーム150に含めるために、最初の符号化されたインスタンス162を生成する。
【0020】
ダイアグラム124によって表される例では、タイムライン164は、ビデオゲームアプリケーション110を実行して、レンダリングされたビデオフレームのストリームをレンダリングするとき(その一部はレンダリングストリーム166によって表される)のゲーミングサーバ104のレンダリングされたフレームレートを表す。前の例と同様に、タイムライン164上の各目盛マーク間のスパンは、レンダリングされたフレームレートでの対応するフレーム期間(右から左に、番号付けされたフレーム期間X~X+2)を表す。レンダリングストリーム166内の各ボックスは、対応するフレーム期間についてのレンダリングされたビデオフレームを表し、各ボックスの左端は、対応するビデオフレームのレンダリングが完了し、したがって、符号化の準備ができている時点を表す。タイムライン168は、ネットワーク108に充分に一定の伝送処理負荷を与えるためのビデオストリーム112の目標フレームレートを表し、タイムライン168上の各目盛マークは、目標フレームレートでの対応するフレーム期間(右から左に、番号付けされたフレーム期間Y~Y+3)を表す。符号化されたストリーム150は、ビデオストリーム112の一部分を表し、符号化されたストリーム150内の各ボックスは、ビデオストリーム112としてネットワーク108を介して伝送される符号化されたビデオフレームのシーケンスに挿入されるかまたは他の態様で含まれる、レンダリングストリーム146からのビデオフレームの符号化されたインスタンスを表す。ダイアグラム124によって表される例では、目標フレームレートはレンダリングフレームレートよりもわずかに高く(例えば、約33%高い)、例示すると、レンダリングフレームレートは、たとえば、60FPSであってもよく、一方、目標フレームレートは80FPSである。
【0021】
タイムライン168上の対応する目盛マークによって表される各周期的トリガに応答して、ゲーミングサーバ104は、次のレンダリングされたビデオフレームがレンダリングストリーム166内で利用可能であるかどうかを判断する。フレーム期間Yの開始時では、レンダリングされたビデオフレーム172は符号化の準備ができており、したがって、ゲーミングサーバ104は、レンダリングされたビデオフレーム172を符号化して、フレーム期間Yについて、符号化されたストリーム170に含めるために、ビデオフレーム172の最初の符号化されたインスタンス174を生成する。図示の例では、フレーム期間X+1についてのビデオフレームのレンダリングは、スキップされるか、またはフレーム期間X+2まで遅延される。したがって、フレーム期間Y+1の開始によって表されるトリガイベントに応答して、ゲーミングサーバ104は、フレーム期間Y+1について、符号化されたストリーム170に含めるために、すでに一度符号化されたビデオフレーム172の第2の符号化されたインスタンス176を生成する。次のフレーム期間Y+2の開始時では、レンダリングされたビデオフレームは、まだ、符号化に利用可能ではなく、したがって、ゲーミングサーバ104は、フレーム期間Y+2について、符号化されたストリーム170に含めるために、既に2回符号化されたビデオフレーム172の第3の符号化されたインスタンス178を生成する。次のフレーム期間Y+3の開始時では、レンダリングされたビデオフレーム180が符号化の準備ができており、したがって、ゲーミングサーバ104は、ビデオフレーム180を符号化して、フレーム期間Y+3について、符号化されたストリーム170に含めるために、最初の符号化されたインスタンス182を生成する。
【0022】
ダイアグラム120,122,および124が示すように、同じビデオフレームの1つ以上の追加の符号化されたインスタンスの選択的な包含は、少なくとも目標フレームレートに等しいフレームレートを有する符号化されたビデオストリーム112をもたらし、したがって、ビデオストリーム112を搬送するチャネル114について、ネットワーク108による基底データの効果的な伝送を維持するのに充分であると期待される伝送処理負荷を与える。対照的に、レンダリングされたフレームレートと目標フレームレートとの間の差を補償するのに、レンダリングされたビデオフレームを、いかなるビデオフレーム複製もなしに、それらのレンダリングされたフレームレートで符号化することは、一貫性がないかまたはそうでなければバースト的な伝送処理負荷につながり得、したがって、ビデオストリーム112を潜在的な伝送問題にさらすであろう。例示すると、50FPSにおける1つの符号化されたビデオフレームの送信と次の符号化されたビデオフレームの送信との間のアイドル期間、または、さらにより可能性がありそうな、スキップ/ドロップされたビデオフレームについての送信データの欠如から生じる比較的長いアイドル期間(ダイアグラム124の例におけるフレーム期間X+1の間など)は、ネットワーク108にチャネル114を優先させないかまたはそうでなければチャネル114に対してより低いQoSレベルを割り当てさせ得、したがって、チャネル114を介して送信される符号化されたビデオデータおよび他のデータは、潜在的に、追加のレイテンシおよびジッタ、パケット損失の増加などを被る。より低いレンダリングされたフレームレートでの符号化されたビデオデータの送信は、典型的には、より高い目標フレームレートでの複製されたビデオフレームを有する符号化されたビデオデータの送信と比較して、送信されるデータパケット間に、より大きなギャップをもたらし、これらのより大きなギャップは、待ち行列に入れられるパケットまたはパケット損失、および結果として生じる重複再送信などの、ネットワーク108における問題を特定することの遅延をもたらす。
【0023】
さらに、各およびすべてのビデオフレームを自動的に複製するのではなく、特定のビデオフレームの符号化されたインスタンスを選択的に複製することによって、過剰な伝送処理負荷が回避される可能性がより高い。例示のために、上記で説明した例では、ビデオストリーム112の実効フレームレートは、レンダリングされる50FPSから伝送される60FPSに増加された。対照的に、各すべてのフレームにつき1つの複製を自動的に行うアプローチは、結果として生じるビデオストリームの実効フレームレートを、レンダリングされる50FPSから伝送される100FPSに増加させ、これは、伝送品質を改善するのではなく、代わりに、ネットワーク108内のチャネルを過負荷にし、ビデオストリームのさらに非効果的な伝送につながり得る。
【0024】
図2は、いくつかの実施形態による、本明細書で説明される選択的ビデオフレーム複製プロセスを採用するビデオソースデバイスとしてのゲーミングサーバ104の例示的実現例を図示する。図示の例では、ゲーミングサーバ104は、1つ以上の中央処理ユニット(CPU)202と、1つ以上のグラフィック処理ユニット(GPU)204と、少なくとも1つのシステムメモリ206と、フレームバッファ208(これは、システムメモリ206または別個のメモリの一部として実現することができる)と、エンコーダ210と、ネットワーク108に結合されるかまたは結合可能なネットワークインターフェイス212とを含む。CPU202またはGPU204の一方または両方はたとえばシステムメモリ206に記憶される符号化ソフトウェア214を実行し、エンコーダ210は、特定用途向け集積回路(ASIC)もしくは他のハードコード化された論理、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理などの、CPU202およびGPU204とは別個のハードウェア構成要素として、またはハードコード化された論理もしくはプログラマブル論理およびプロセッサ実行ソフトウェアの組み合わせとして実装され得る。
【0025】
一実施形態では、エンコーダ210は、カウントダウンタイマ216および設定記憶装置218を含むか、またはそれらへのアクセスを有し、それは、例えば、プログラマブルレジスタ、ワンタイムプログラマブル(OTP)メモリ、1つ以上のヒューズまたはアンチヒューズのセット、基本入力/出力(BIOS)設定等を含むことができる。設定記憶装置218は、ネットワーク108のための決定された目標フレームレート220の表現を記憶するように動作する。この表現は、例えば、カウントダウンタイマ216によって用いられる、目標フレームレート220に対する目標フレーム期間の持続時間に等しいクロック(図示せず)のサイクル数を含むことができる。カウントダウンタイマ216は、リセットされると、設定記憶装置218に記憶された目標フレームレート220の表現に基づいて、初期カウントダウン値にリセットするよう構成される。
【0026】
ネットワークインターフェイス212は、LANネットワークインターフェイス、WLANネットワークインターフェイスなどの、ネットワーク108に結合するのに適した様々なネットワークインターフェイスのいずれかを含む。ビデオフレームの、以前に符号化されたインスタンスをコピーすることによって、そのビデオフレームが、ビデオストリーム112内に2つ以上の符号化されたインスタンスとして含まれる実現例では、ゲーミングサーバ104は、後続のアクセスのために、符号化されたビデオフレームのコピーを記憶する働きをするバッファ222をさらに含むことができる。バッファ222は、フレームバッファ208の一部であってもよく、または別個のメモリの一部であってもよい。
【0027】
図3は、いくつかの実施形態による、充分に一定の伝送処理負荷を与えると期待される目標フレームレートを達成するよう、符号化されたビデオストリームにおける選択的ビデオフレーム複製のための例示的な方法300を示す。方法300は、
図1の電子システム100の例示的な文脈において、特に
図2のゲーミングサーバ104を参照して説明される。示されるように、方法300は、並列に動作するレンダリングサブプロセス302および符号化/送信サブプロセス304を含む。
【0028】
レンダリングサブプロセス302について、CPU202は、システムメモリ206に記憶されたビデオゲームアプリケーション110を実行して、ゲームシーンを決定し、ゲームシーンのビューのシーケンスを決定し、次いで、ブロック306の対応する繰り返しにおいて、GPU204に、ゲームシーンのビューのシーケンスの対応するビューについてフレームバッファ208内のビデオフレーム(例えば、
図2のレンダリングされたビデオフレーム224)をレンダリングするように指示する。上記で説明したように、CPU202およびGPU204は、ともに、実質的に固定され得るか、またはレンダリングの複雑さ、利用可能な現在のレンダリングリソースなどに応じて変化し得る実効レンダリングフレームレートで、ビデオフレームのレンダリングを制御する。さらに、
図1のゲームシステム100では、ゲーミングデバイス106のユーザは、ゲームコントローラ118、キーボード、または他のI/Oデバイスを介してユーザ入力を提供することによってゲームを「プレイ」し、ユーザ入力は、ゲームシーンにおけるアバターの所望の移動、表示されたオプションの選択などを示す。そのような入力は、ゲーミングデバイス106からネットワーク108を介して(例えば、アップストリームサブチャネル114を介して)周期的または非同期的に送信され、所与のタイムスライスに対するユーザ入力のセットが、レンダリングサブプロセス302のブロック308の繰り返しにおいて、ネットワークインターフェイス212を介してゲーミングサーバ104において受信される。CPU202は、ユーザ入力のこのスライスを受信し、ユーザ入力を解釈し、ユーザ入力に基づいて1つまたは後続のビデオフレームのためにレンダリングプロセスを制御する。
【0029】
符号化サブプロセス304について、エンコーダ210は、符号化されたビデオストリーム112を生成するために符号化プロセスを開始する前に初期化される。この初期化プロセスは、符号化されたビデオストリーム112の目標フレームレート220を決定することを含む。ブロック310によって表されるように、目標フレームレート220は、設定記憶装置218を実現するOTPメモリまたはヒューズ/アンチヒューズにおいて表されるように、デフォルト値に自動的に設定され得る。例えば、ブロック312によって表されるように、データセンタ102を担当する管理主体は、いくつかの異なるネットワークシナリオを分析またはモデル化し、調査されたネットワークシナリオの大部分またはすべてに充分であると期待されるデフォルト目標フレームレートを決定し、このデフォルト目標フレームレートを利用するようにデータセンタ102において各ゲーミングサーバを構成する。代替的に、ブロック314によって表されるように、ゲーミングサーバ104は、ゲーミングデバイス106のユーザが、例えば、グラフィカルユーザインターフェイス(GUI)もしくは他のユーザ入力機構を介して、目標フレームレート220を選択または別様に指定することを可能にすることができる。例示すると、ユーザの期待または以前の経験に基づいて、ユーザは、効果的なネットワーク伝送と特定のユーザに適した表示品質との間のバランスを提供することが期待される目標フレームレート220を選択することができる。
【0030】
ブロック316によって表されるように、ゲーミングサーバ104は、ネットワーク108のリアルタイム分析に基づいて目標フレームレート220を設定することができる。この実現例では、ゲーミングサーバ104は、チャネル114と帯域幅について競合する任意の他のチャネルがあるかどうか、現在のエンドツーエンドパケットレイテンシおよびジッタ、現在の利用可能な帯域幅、投影された将来の帯域幅/レイテンシ/ジッタ、現在利用可能な様々なQoSレベルなど、現在のネットワーク統計を分析することができる。この情報から、ゲーミングサーバ104、またはデータセンタ102における他のシステムもしくは別の遠隔システムは、現在のネットワーク状態に適合すると期待される目標フレームレート220を決定する。その後、ゲーミングサーバ104は、更新された目標フレームレート220を決定するために、この分析を再び周期的に実行することができ、すなわち、目標フレームレート220は、符号化されたビデオストリーム112の生成の過程にわたって動的に更新され得る。
【0031】
さらに、ブロック318によって示されるように、いくつかの実施形態では、ゲーミングサーバ104は、ゲーミングデバイス106のディスプレイによってサポートされる指定されたフレームレートまたは好ましいフレームレートを判断するために、ゲーミングデバイス106に問い合わせる。例示すると、ゲーミングデバイス106は、ビデオストリーム112からのビデオを固定表示レートで表示するように設定され得て、したがってゲーミングデバイス106に対する処理負荷を低減するために、ゲーミングサーバ104は、ゲーミングデバイス106におけるフレームレート変換プロセスへの依存を低減または排除することができるように、符号化されたビデオストリーム112内のビデオフレームを固定表示レートまたはその付近で提供しようとすることができる。このような場合、ゲーミングサーバ104は、結果として得られる目標フレームレートがネットワーク108に充分に一定の伝送処理負荷を与えると期待されるように、問い合わせられたフレームレートに最小閾値を適用することができる。例えば、40FPSを下回る目標フレームレートが、ネットワーク伝送劣化を引き起こしそうなほど十分一貫性がない伝送処理負荷を与えることになると判断された場合、ゲーミングサーバ104は、目標フレームレート220を、問合せられたフレームレートおよび40FPSのうちの大きい方に設定する。
【0032】
目標フレームレート220が決定され、設定記憶装置218にプログラムされると、符号化されたビデオストリーム112を生成し送信するための符号化プロセスが開始される。上記で説明したように、少なくとも1つの実施形態では、符号化プロセスのタイミングは、カウントダウンタイマ216の周期的な満了によって提供されるエミュレートされたvsync信号で少なくとも部分的に制御され、各カウントダウン持続時間は、目標フレームレート220による目標フレーム期間の持続時間を表す。したがって、各vsyncサイクルで、カウントダウンタイマ216は、目標フレーム期間の持続時間を表すカウント値にリセットされ、各vsyncサイクルのブロック320において、エンコーダ210は、カウントダウンタイマ216の満了を監視し、したがって、前の目標フレーム期間の経過および次の目標フレーム期間の開始を信号送信する。
【0033】
カウントダウンタイマ216の満了、およびしたがって、目標フレームレート220での新たなフレーム期間の開始を信号送信することに応答して、ブロック322において、エンコーダ210は、フレームバッファ208をチェックして、以前に符号化されていないレンダリングされたビデオフレーム(すなわち、「次の」ビデオフレーム)が準備され、符号化のためにフレームバッファ208内で利用可能であるかどうかを判断する。次のビデオフレームが符号化の準備ができている(例えば、完全にレンダリングされ、符号化のために利用されるべきすべてのデータが、フレームバッファ208に存在するか、そうでなければその時点でエンコーダ210に利用可能である)場合、次いで、ブロック324において、エンコーダ210は、次のビデオフレーム(例えば、レンダリングされたビデオフレーム224)を符号化して、ビデオフレームの対応する符号化されたインスタンス226を生成し、ビデオフレームの符号化されたインスタンス226を、符号化されたビデオストリーム112の一部としてネットワーク108内のチャネル114を介してゲーミングデバイス106に送信するために、ネットワークインターフェイス212に提供する。エンコーダ210は、例えば、Motion Pictures Experts Group(MPEG)H.264準拠またはH.265準拠の符号化プロセス、VP8準拠またはVP9準拠の符号化プロセスなど、様々な標準化された、または知的所有権下にあるビデオ符号化技法のいずれかを採用する。結果として生じる符号化されたデータは、ハイパーテキストマークアップ言語5(HTML5)ビデオコンテナ(符号化されたビデオストリーム112を表す)等の種々の伝送コンテナのいずれかに組み込まれることができ、それは、次いで、ネットワークインターフェイス212によってパケット化され、結果として生じるパケットは、ネットワーク108上を、チャネル114を介して、ゲーミングデバイス106に伝送される。
【0034】
ビデオフレームの以前に符号化されたインスタンスの複製コピーが目標フレームレート220を達成するために挿入される実現例では、ビデオフレームの符号化されたインスタンス226のコピーが、以下で説明するように、次のビデオフレームがオンタイムで準備されていない場合に、複製符号化されたインスタンスとして使用するために利用可能であるように、バッファ222に一時的にバッファリングされもし得る。
【0035】
ブロック322に戻ると、カウントダウンタイマ216が現在のサイクルに対して満了したときに次のビデオフレームが符号化される準備ができていない場合には、ブロック326において、エンコーダ210は、次のビデオフレームが準備完了になるのを待つのではなく、代わりに、送信のために、直近に符号化されたビデオフレームの複製符号化されたインスタンスの、ビデオストリーム112への挿入を提供する。レンダリングされたビデオフレームが前の目標フレーム期間において符号化の準備ができた場合、この複製符号化されたインスタンスは、そのビデオフレームの第2の符号化されたインスタンスである。しかしながら、レンダリングされたビデオフレームが前の目標フレーム期間において符号化の準備ができていなかった場合、エンコーダ210は、ソースビデオフレームとしてさらに前の目標フレーム期間からのレンダリングされたビデオフレームに依存し、したがって、この複製符号化されたインスタンスは、同じ前のレンダリングされたビデオフレームの少なくとも第3の符号化されたインスタンスである。したがって、ブロック322および326によって表されるプロセスは、レンダリングされたビデオフレームが符号化の準備ができるまで、目標フレームレート220を維持するように任意の回数繰り返すことができる。
【0036】
エンコーダ210は、様々な方法のいずれかで、以前に符号化されたビデオフレームの複製符号化されたインスタンスを提供する。ブロック328によって示されるように、一実施形態において上述したように、ビデオフレームの最初の符号化されたインスタンス226のコピーが、バッファ222に一時的に記憶され、エンコーダ210は、バッファ222にアクセスし、最初の符号化されたインスタンス226のこのコピーのコピーを、対応する目標フレーム期間に対する符号化されたビデオフレームとしてネットワークインターフェイス212を介して再送信することによって、このビデオフレームの複製された符号化されたインスタンスを提供する。したがって、この方法では、ビデオストリーム112は、より高い目標フレームレート220とより低い実効レンダリングフレームレートとの間の差を補償するよう、同じ符号化されたビデオフレームの2つ以上の正確なコピーのシーケンスを有することができる。
【0037】
他の実施形態では、ブロック330によって表されるように、エンコーダ210は、以前にレンダリングされたビデオフレーム224を再び再符号化して、現在の目標フレーム期間について、符号化されたビデオストリーム112に含めるために、レンダリングされたビデオフレームの再符号化されたインスタンスを生成する。少なくとも1つの実施形態では、エンコーダ210は、ビデオフレームの最初の符号化されたインスタンスよりも高い符号化品質を有することができる、ビデオフレームの再符号化されたインスタンスを生成するよう、この再符号化プロセスのためにビデオフレームの最初の符号化を利用する。例示すると、最初の符号化されたインスタンスを参照フレームとして使用することによって、エンコーダ210は、再符号化されたインスタンスに割り当てられたビットバジェットを利用して、最初の符号化が参照フレームと同じビデオフレームの以前の符号化に頼ることができないため、同じビットバジェットについてビデオフレームの最初の符号化について取得され得る動きベクトル情報および残差データと比較して、より高い品質の動きベクトル情報およびより高い品質の残差データ(これは次に、ゲーミングデバイス106において、より高い忠実度の復号されたビデオフレームを提供する)を提供することができる。
【0038】
一態様によれば、ある方法は、第1のデバイスにおいて、符号化されていないビデオフレームの第1のストリームを第1のフレームレートでレンダリングすることを含む。本方法はさらに、前記第1のデバイスにおいて、前記第1のストリームのビデオフレームを符号化して、符号化されたビデオフレームの第2のストリームを生成することとを含み、前記第2のストリームは、前記第1のフレームレートよりも大きい第2のフレームレートを有し、前記第1のストリームのビデオフレームを符号化することは、前記第1のフレームレートと前記第2のフレームレートとの間の差を補償するよう、前記第2のストリームに含めるために、前記第1のストリームの少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することを含み、前記方法はさらに、前記第2のストリームをネットワークを介して第2のデバイスに送信するために提供することを含む。
【0039】
前記少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することは、前記第1のストリームの第1のビデオフレームを符号化して、第1のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第1の符号化されたインスタンスを生成することと、前記第1のフレーム期間に続く第2のフレーム期間について、前記第1のストリームの第2のビデオフレームが符号化される準備ができているかどうかを判断することであって、前記第1のフレーム期間および前記第2のフレーム期間は、前記第2のフレームレートに基づくことと、前記第2のビデオフレームが符号化される準備ができていると判断することに応答して、前記第2のビデオフレームを符号化して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第2のビデオフレームの符号化されたインスタンスを生成することと、前記第2のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化するか、または前記第1のビデオフレームの前記第1の符号化されたインスタンスを複製して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第2の符号化されたインスタンスを生成することとを含むことができる。いくつかの実施形態では、前記第1のストリームをレンダリングすることは、前記第1のストリームの各ビデオフレームをフレームバッファにおいて順番に前記第1のフレームレートでレンダリングすることを含み、前記第1のストリームの前記第2のビデオフレームが前記第2のフレーム期間について符号化される準備ができているかどうかを判断することは、前記第1の期間の終了を表すタイマの満了に応答して、前記フレームバッファ中の前記第2のビデオフレームのレンダリングが完了したかどうかを判断することを含む。少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することは、前記第1のストリームの第3のビデオフレームが、前記第2の期間に続く第3のフレーム期間について符号化される準備ができているかどうかを判断することと、前記第3のビデオフレームが符号化される準備ができていると判断することに応答して、前記第3のビデオフレームを符号化して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第3のビデオフレームの符号化されたインスタンスを生成することと、前記第3のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化するか、または前記第1のビデオフレームの前記第1の符号化されたインスタンスを複製して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第3の符号化されたインスタンスを生成することとを含むことができる。
【0040】
いくつかの態様では、前記第1のビデオフレームを再符号化して前記第1のビデオフレームの前記第2の符号化されたインスタンスを生成することは、前記第1のビデオフレームの前記第1の符号化されたインスタンスに少なくとも部分的に基づいて前記第1のビデオフレームを再符号化して、前記第1のビデオフレームの前記第2の符号化されたインスタンスを前記第1の符号化されたインスタンスよりも高い画質で生成することを含む。いくつかの実施形態では、本方法は、さらに、前記第2のフレームレートを、前記第1のデバイスの設定に基づいて決定すること含み、さらに、前記第2のフレームレートを決定するために、前記ネットワークを介して前記第2のデバイスに問い合わせることを含むことができる。いくつかの態様では、本方法は、さらに、前記第1のデバイスにおいてビデオゲームアプリケーションを実行することを含むことができ、前記符号化されていないビデオフレームの前記第1のストリームをレンダリングすることは、前記ビデオゲームアプリケーションにおいて実行される命令に応答して、およびさらに前記ネットワークを介して受信されるユーザゲームコントローラコマンドに応答して、前記第1のストリームをレンダリングすることを含む。
【0041】
一態様では、ある方法は、符号化されたビデオフレームのストリームを、ネットワークを介して第1のデバイスから第2のデバイスに送信するために、指定されたフレームレートで提供することを含む。前記符号化されたビデオフレームのストリームを提供することは、第1のビデオフレームを符号化して、前記指定されたフレームレートに対応する第1のフレーム期間について前記ストリームに含めるために第1の符号化されたビデオフレームを生成することと、第2のビデオフレームが前記第1のフレーム期間に続く第2のフレーム期間について符号化の準備ができていないと判断したことに応答して、前記第1のレンダリングされたビデオフレームを再符号化して、前記第2のフレーム期間について前記ストリームに含めるために第2の符号化されたビデオフレームを生成することとを含む。いくつかの態様では、本方法は、さらに、前記第2のビデオフレームが前記第2のフレーム期間についての符号化の準備ができていると判断したことに応答して、前記第2のビデオフレームを符号化して、前記第2のフレーム期間について前記ストリームに含めるために第3の符号化されたビデオフレームを生成することを含む。いくつかの実施形態では、本方法は、さらに、第3のビデオフレームが前記第2のフレーム期間に続く第3のフレーム期間について符号化の準備ができていないと判断したことに応答して、前記第1のビデオフレームを再符号化して、前記第3のフレーム期間について前記ストリームに含めるために第3の符号化されたビデオフレームを生成することを含む。本方法は、前記指定されたフレームレートを、前記第1のデバイスのデフォルト設定、ユーザ指定設定、前記ネットワークを介する前記第1のデバイスから前記第2のデバイスへのクエリ、および前記ネットワークの分析のうちの少なくとも1つに基づいて決定することを含むこともできる。前記第2のビデオフレームは準備ができていないと判断することは、前記第2のフレーム期間の開始に対応するタイマの満了時に、前記第1のデバイスのフレームバッファが前記第2のビデオフレームの完了したレンダリングを含まないと判断することを含むことができる。本方法は、前記第1のデバイスにおいて、前記フレームバッファにおいてバッファリングするために、前記指定されたフレームレートよりも低いフレームレートで、ビデオフレームのシーケンスをレンダリングすることを含み、前記シーケンスは、前記第1のビデオフレームと前記第2のビデオフレームとを含んでもよい。いくつかの態様では、前記第1のビデオフレームを再符号化して第2の符号化されたビデオフレームを生成することは、前記第1のビデオフレームを、前記第1の符号化されたビデオフレームに部分的に基づいて再符号化して、前記第2の符号化されたビデオフレームを、前記第1の符号化されたビデオフレームよりも高い画質で生成することを含む。
【0042】
他の態様によれば、あるシステムは、第1のデバイスを備え、前記第1のデバイスは、ネットワークに結合するよう構成されるネットワークインターフェイスと、前記ネットワークインターフェイスに結合され、第1のフレームレートを有するレンダリングされたビデオフレームの第1のストリームを符号化して、前記ネットワークインターフェイスを介する前記ネットワークを介した送信のために、符号化されたビデオフレームの第2のストリームを生成するよう構成されるエンコーダとを備え、前記第2のストリームは、前記第1のフレームレートよりも大きい第2のフレームレートを有し、前記エンコーダは、前記第1のフレームレートと前記第2のフレームレートとの間の差を補償するよう、前記第2のストリームに含めるために、前記第1のストリームの少なくとも1つのビデオフレームの複数のインスタンスを選択的に符号化するよう構成される。本システムは、前記ネットワークに結合され、第2のデバイスのディスプレイでの再生のために、前記符号化されたビデオフレームの第2のストリームを受信し、復号するよう構成される前記第2のデバイスを含むこともでき、前記第2のデバイスは、前記ネットワークを介して前記第1のデバイスにユーザ入力を提供するためにキーボードまたはゲームコントローラのうちの少なくとも1つを含むことができ、前記第1のデバイスは、前記レンダリングされたビデオフレームの第1のストリームを前記ユーザ入力に基づいてレンダリングするようにビデオゲームアプリケーションを実行するよう構成されるサーバを含む。
【0043】
いくつかの実施形態では、前記エンコーダは、少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することを、前記第1のストリームの第1のビデオフレームを符号化して、第1のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第1の符号化されたインスタンスを生成することと、前記第1のフレーム期間に続く第2のフレーム期間について、前記第1のストリームの第2のビデオフレームが符号化される準備ができているかどうかを判断することであって、前記第1のフレーム期間および前記第2のフレーム期間は、前記第2のフレームレートに基づくことと、前記第2のビデオフレームが符号化される準備ができていると判断することに応答して、前記第2のビデオフレームを符号化して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第2のビデオフレームの符号化されたインスタンスを生成することと、前記第2のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化するか、または前記第1のビデオフレームの前記第1の符号化されたインスタンスを複製して、前記第2のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第2の符号化されたインスタンスを生成することとによって行うよう構成される。前記エンコーダは、前記第1のストリームの各ビデオフレームをフレームバッファにおいて順番に前記第1のフレームレートでレンダリングするよう構成されることができ、前記エンコーダは、タイマの満了に応答して、前記フレームバッファ内の前記第2のビデオフレームのレンダリングが完了したかどうかを判断することによって、前記第1のストリームの前記第2のビデオフレームが前記第2のフレーム期間について符号化される準備ができているかどうかを判断するよう構成されることができる。
【0044】
いくつかの態様では、前記エンコーダは、少なくとも1つのビデオフレームの複数の符号化されたインスタンスを選択的に提供することを、前記第1のストリームの第3のビデオフレームが、前記第2のフレーム期間に続く第3のフレーム期間について符号化される準備ができているかどうかを判断することと、前記第3のビデオフレームが符号化される準備ができていると判断することに応答して、前記第3のビデオフレームを符号化して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第3のビデオフレームの符号化されたインスタンスを生成することと、前記第3のビデオフレームが符号化される準備ができていないと判断することに応答して、前記第1のビデオフレームを再符号化して、前記第3のフレーム期間について、前記第2のストリームに含めるために、前記第1のビデオフレームの第3の符号化されたインスタンスを生成することとによって行うよう構成される。前記エンコーダは、前記第1のビデオフレームの前記第1の符号化されたインスタンスに少なくとも部分的に基づいて前記第1のビデオフレームを再符号化して、前記第1のビデオフレームの前記第2の符号化されたインスタンスを前記第1のビデオフレームの前記第1の符号化されたインスタンスよりも高い画質で生成するよう構成されることができる。いくつかの態様では、前記エンコーダは、さらに、前記第2のフレームレートを、デフォルト設定、ユーザ指定設定、前記ネットワークの分析、および第2のデバイスへのクエリのうちの少なくとも1つに基づいて決定するよう構成され、前記第2のデバイスは、前記ネットワークに結合され、前記第2のデバイスのディスプレイでの再生のために、前記符号化されたビデオフレームの第2のストリームを受信し、復号するよう構成される。
【0045】
さらに別の態様では、ある非一時的なコンピュータ可読媒体は、実行可能命令のセットを具現化する。前記実行可能命令のセットは、少なくとも1つのプロセッサを操作して、上記の方法のうちのある方法または組み合わせを実行させる。
【0046】
いくつかの実施形態において、上述した技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実現される。ソフトウェアは、非一時的コンピュータ可読記憶媒体上に記憶されるかまたはそうでなければ有形に具現化された1つ以上のセットの実行可能命令を含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記で説明した技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令と特定のデータとを含むことができる。非一時的コンピュータ可読記憶媒体は、例えば、磁気または光ディスク記憶装置、フラッシュメモリなどのソリッドステート記憶装置、キャッシュ、ランダムアクセスメモリ(RAM)、または他の不揮発性メモリ装置などを含むことができる。非一時的コンピュータ可読記憶媒体上に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、または1つ以上のプロセッサによって解釈されるかまたは実行可能である他のフォーマットの命令であることができる。
【0047】
コンピュータ可読記憶媒体は、命令および/またはデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の記憶媒体または記憶媒体の組み合わせを含む。このような記憶媒体は、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、Blu-ray(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、または磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)またはキャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)またはフラッシュメモリ)、または微小電気機械システム(MEMS)ベースの記憶媒体を含むことができるが、これらに限定されない。コンピュータ可読記憶媒体は、コンピューティングシステムに埋め込まれるもの(例えば、システムRAMまたはROM)であってもよく、コンピューティングシステムに固定されるもの(例えば、磁気ハードドライブ)であってもよく、コンピューティングシステムに取り外し可能に取り付けられもの(例えば、光ディスクまたはユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)であってもよく、または有線ネットワークもしくは無線ネットワークを介してコンピュータシステムに結合されるもの(例えば、ネットワークアクセス可能ストレージ(NAS))であってもよい。
【0048】
なお、全般的な説明において上述した動作または要素の全てが必要とされるわけではない。特定の動作または装置の一部は、必要とされなくてもよい。上述したものに加えて、1つ以上のさらなる動作を実行してもよく、または1つ以上の要素を含んでもよい。さらに、動作を列挙する順序は、必ずしもこれらの動作を実行する順序ではない。また、特定の実施形態を参照して概念を説明している。しかしながら、当業者は、以下の特許請求の範囲に記載される本開示の範囲から逸脱することなく、様々な修正および変更を行うことができることを理解する。したがって、明細書および図面は、限定的なものではなく、例示的なもので見なされるべきであり、全ての修正は、本開示の範囲内に含まれることが意図される。
【0049】
特定の実施形態を参照して、上記で利益、他の利点、および問題に対する解決策を説明している。しかしながら、利益、利点、問題に対する解決策、および任意の利益、利点、または解決策を生じさせ得るかまたはより顕著にさせ得る任意の特徴は、いずれかの請求項または全ての請求項の重要な特徴、必要な特徴、または本質的な特徴として解釈されるべきではない。さらに、上記で開示された特定の実施形態は、例証にすぎない。開示された主題は、本明細書の教示の利益を有する当業者に明白であり、異なるが同等の方法で修正されてもよく、実行されてもよい。以下の特許請求の範囲に記載されるもの以外に、本明細書に示された構造または設計の詳細への限定は、意図されていない。したがって、上記で開示された特定の実施形態は、変更または修正されてもよく、全ての変形例は、開示された主題の範囲に含まれると見なされることが明らかである。したがって、本明細書で求められる保護は、以下の特許請求の範囲に記載される。