(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-01
(54)【発明の名称】サーバにおける符号化及び伝送の重ね合わせ
(51)【国際特許分類】
H04N 21/238 20110101AFI20221124BHJP
H04N 21/438 20110101ALI20221124BHJP
A63F 13/35 20140101ALI20221124BHJP
【FI】
H04N21/238
H04N21/438
A63F13/35
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022520319
(86)(22)【出願日】2020-09-29
(85)【翻訳文提出日】2022-05-16
(86)【国際出願番号】 US2020053347
(87)【国際公開番号】W WO2021067320
(87)【国際公開日】2021-04-08
(32)【優先日】2020-08-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-08-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100099324
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】ケルビン エム. ヨン
(72)【発明者】
【氏名】マーク イー. サーニー
【テーマコード(参考)】
5C164
【Fターム(参考)】
5C164FA22
5C164GA03
5C164MB41S
5C164SA32S
5C164SB21P
5C164SB41S
5C164SC05S
5C164UB21P
5C164YA24
(57)【要約】
クラウドゲーミングのための方法である。この方法では、サーバにおいてビデオゲームを実行するときにビデオフレームを生成し、サーバスキャンラインごとにエンコーダにビデオフレームをスキャンインすることを。この方法では、エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のエンコーダスライスを符号化し、各々の符号化済みスライスは、エンコーダフィルレートでバッファに配信される。方法は、ネットワークを通じてバッファドレイン速度でクライアントに第1の符号化済みスライスをストリーミングするよう、バッファから第1の符号化済みスライスをドレインし、第1の符号化済みスライスは、ビデオフレームの1つ以上のスライスを完全に符号化する前にネットワークを通じてストリーミングされる。
【選択図】
図6
【特許請求の範囲】
【請求項1】
クラウドゲーミングのための方法であって、
サーバにおいてビデオゲームを実行するときにビデオフレームを生成し、
サーバスキャンラインごとにエンコーダに前記ビデオフレームをスキャンインし、
前記エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のエンコーダスライスを符号化し、各々の符号化済みスライスは、エンコーダフィルレートでバッファに配信されるものであり、
ネットワークを通じてバッファドレイン速度でクライアントに第1の符号化済みスライスをストリーミングするよう、前記バッファから前記第1の符号化済みスライスをドレインし、前記第1の符号化済みスライスは、前記ビデオフレームの前記1つ以上のスライスを完全に符号化する前に前記ネットワークを通じてストリーミングされるものである、方法。
【請求項2】
前記サーバは、前記ビデオフレーム全体が符号化される前に、前記ビデオフレームの少なくとも1つの符号化済みスライスをドレインする、請求項1に記載の方法。
【請求項3】
さらに、符号化済みスライスが1つ以上のネットワーク通信パケットにパケット化され、
前記エンコーダにおいて前記1つ以上のネットワーク通信パケットの各々を最大伝送ユニット(MTU)以下にサイジングし、
前記ネットワークを通じて前記ドレイン速度で前記クライアントに前記1つ以上のネットワーク通信パケットをストリーミングする、請求項1に記載の方法。
【請求項4】
各々の符号化済みスライスが単一の対応するネットワーク通信パケットにパケット化されるように、前記1つ以上の符号化済みスライスの各々を前記MTUまたはそれよりも小さくサイジングする、請求項3に記載の方法。
【請求項5】
さらに、前記クライアントの最大受信帯域幅を測定し、
前記1つ以上の符号化済みスライスの伝送が前記クライアントの前記測定された最大受信帯域幅に基づいて間隔を空けられるように、前記ドレイン速度がおおよそ前記最大受信帯域幅に等しくなるよう動的に調節し、
前記バッファドレイン速度は、前記エンコーダフィルレートから分断される、請求項1に記載の方法。
【請求項6】
前記1つ以上の符号化済みスライスを訂正するために使用される1つ以上の前方誤り訂正(FEC)スライスを生成し、
ストリーミングするときに前記1つ以上の符号化済みスライス内で前記1つ以上のFECスライスをインタリーブし、
前記1つ以上のFECスライス及び前記1つ以上の符号化済みスライスの各々は、最大伝送ユニット(MTU)以下のサイズの対応するパケットにパケット化される、
請求項1に記載の方法。
【請求項7】
さらに、前記クライアントとのセッションの間、ストリーミングモードにおいて前記サーバによるビデオゲームの処理に応答して、前記サーバにおいて複数のビデオフレームを生成し、
前記エンコーダにおいて複数の圧縮済みビデオフレームに前記複数のビデオフレームを符号化し、各々の圧縮済みビデオフレームは、1つ以上の符号化済みスライスを含むものであり、
ネットワークを通じて前記クライアントに前記複数の圧縮済みビデオフレームを送信する、請求項1に記載の方法。
【請求項8】
前記クライアントは、前記クライアントと関連付けられたディスプレイにレンダリングするために前記複数の圧縮済みビデオフレームを受信及び圧縮解除するように構成される、請求項7に記載の方法。
【請求項9】
クラウドゲーミングのための方法を実行するコンピュータプログラムを記憶した非一時的コンピュータ可読媒体であって、前記コンピュータ可読媒体は、
サーバにおいてビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を有し、
サーバスキャンラインごとにエンコーダに前記ビデオフレームをスキャンインするためのプログラム命令を有し、
前記エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のエンコーダスライスを符号化するためのプログラム命令を有し、各々の符号化済みスライスは、エンコーダフィルレートでバッファに配信されるものであり、
ネットワークを通じてバッファドレイン速度でクライアントに第1の符号化済みスライスをストリーミングするよう、前記バッファから前記第1の符号化済みスライスをドレインするためのプログラム命令を有し、前記第1の符号化済みスライスは、前記ビデオフレームの前記1つ以上のスライスを完全に符号化する前に前記ネットワークを通じてストリーミングされるものである、非一時的コンピュータ可読媒体。
【請求項10】
前記サーバは、前記ビデオフレーム全体が符号化される前に、前記ビデオフレームの少なくとも1つの符号化済みスライスをドレインする、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項11】
前記方法では、符号化済みスライスが1つ以上のネットワーク通信パケットにパケット化され、
さらに、前記エンコーダにおいて前記1つ以上のネットワーク通信パケットの各々を最大伝送ユニット(MTU)以下にサイジングするためのプログラム命令と、
前記ネットワークを通じて前記ドレイン速度で前記クライアントに前記1つ以上のネットワーク通信パケットをストリーミングするためのプログラム命令と、を有する、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項12】
各々の符号化済みスライスが単一の対応するネットワーク通信パケットにパケット化されるように、前記1つ以上の符号化済みスライスの各々を前記MTUまたはそれよりも小さくサイジングするためのプログラム命令を更に有する、請求項11に記載の非一時的コンピュータ可読媒体。
【請求項13】
さらに、前記クライアントの最大受信帯域幅を測定するためのプログラム命令と、
前記1つ以上の符号化済みスライスの伝送が前記クライアントの前記測定された最大受信帯域幅に基づいて間隔を空けられるように、前記ドレイン速度がおおよそ前記最大受信帯域幅に等しくなるよう動的に調節するためのプログラム命令と、を有し、
前記バッファドレイン速度は、前記エンコーダフィルレートから分断される、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項14】
前記1つ以上の符号化済みスライスを訂正するために使用される1つ以上の前方誤り訂正(FEC)スライスを生成するためのプログラム命令と、
ストリーミングするときに前記1つ以上の符号化済みスライス内で前記1つ以上のFECスライスをインタリーブするためのプログラム命令と、を更に備え、
前記1つ以上のFECスライス及び前記1つ以上の符号化済みスライスの各々は、最大伝送ユニット(MTU)以下のサイズの対応するパケットにパケット化される、
請求項9に記載の非一時的コンピュータ可読媒体。
【請求項15】
さらに、前記クライアントとのセッションの間、ストリーミングモードにおいて前記サーバによるビデオゲームの処理に応答して、前記サーバにおいて複数のビデオフレームを生成するためのプログラム命令を有し、
前記エンコーダにおいて複数の圧縮済みビデオフレームに前記複数のビデオフレームを符号化するためのプログラム命令を有し、各々の圧縮済みビデオフレームは、1つ以上の符号化済みスライスを含むものであり、
ネットワークを通じて前記クライアントに前記複数の圧縮済みビデオフレームを送信するためのプログラム命令を有する、請求項9に記載の非一時的コンピュータ可読媒体。
【請求項16】
前記方法では、前記クライアントは、前記クライアントと関連付けられたディスプレイにレンダリングするために前記複数の圧縮済みビデオフレームを受信及び圧縮解除するように構成される、請求項15に記載の非一時的コンピュータ可読媒体。
【請求項17】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに結合され、そこに記憶された命令を有するメモリと、を備え、前記命令は、前記コンピュータシステムによって実行される場合、前記コンピュータシステムに、クラウドゲーミングのための方法を実行させ、前記方法では、
サーバにおいてビデオゲームを実行するときにビデオフレームを生成し、
サーバスキャンラインごとにエンコーダに前記ビデオフレームをスキャンインし、
前記エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のエンコーダスライスを符号化し、各々の符号化済みスライスは、エンコーダフィルレートでバッファに配信されるものであり、
ネットワークを通じてバッファドレイン速度でクライアントに第1の符号化済みスライスをストリーミングするよう、前記バッファから前記第1の符号化済みスライスをドレインし、前記第1の符号化済みスライスは、前記ビデオフレームの前記1つ以上のスライスを完全に符号化する前に前記ネットワークを通じてストリーミングされるものである、コンピュータシステム。
【請求項18】
前記方法では、前記サーバは、前記ビデオフレーム全体が符号化される前に、前記ビデオフレームの少なくとも1つの符号化済みスライスをドレインする、請求項17に記載のコンピュータシステム。
【請求項19】
前記方法では、さらに、
符号化済みスライスが1つ以上のネットワーク通信パケットにパケット化され、
前記エンコーダにおいて前記1つ以上のネットワーク通信パケットの各々を最大伝送ユニット(MTU)以下にサイジングし、
前記ネットワークを通じて前記ドレイン速度で前記クライアントに前記1つ以上のネットワーク通信パケットをストリーミングする、請求項17に記載のコンピュータシステム。
【請求項20】
前記方法では、さらに、
各々の符号化済みスライスが単一の対応するネットワーク通信パケットにパケット化されるように、前記1つ以上の符号化済みスライスの各々を前記MTUまたはそれよりも小さくサイジングする、請求項19に記載のコンピュータシステム。
【請求項21】
クラウドゲーミングの方法であって、
クライアントにおいてビデオフレームの1つ以上の符号化済みスライスを受信し、前記ビデオフレームは、ビデオゲームを実行する間にサーバにおいて生成されており、前記サーバにおけるエンコーダによって前記1つ以上の符号化済みスライスに符号化されているものであり、
前記ビデオフレームの前記1つ以上の符号化済みスライスを完全に受信する前に、前記クライアントのデコーダにおいて第1の符号化済みスライスを復号する、方法。
【請求項22】
復号済みスライスの表示の低減した待ち時間を可能にするよう、クライアントVSYNC信号及びサーバVSYNC信号が同期及びオフセットされる、請求項21に記載の方法。
【請求項23】
前記1つ以上の符号化済みスライスの各々は、1つ以上のネットワーク通信パケットにパケット化され、
前記1つ以上のネットワーク通信パケットの各々は、前記エンコーダにおいて最大伝送ユニット(MTU)以下にサイジングされる、請求項21に記載の方法。
【請求項24】
前記1つ以上の符号化済みスライスの各々は、各々の符号化済みスライスが単一の対応するネットワーク通信パケットにパケット化されるように、前記MTUまたはそれよりも小さくサイジングされる、請求項23に記載の方法。
【請求項25】
前記クライアントとのセッションの間、ストリーミングモードにおいて前記サーバによるビデオゲームの処理に応答して、前記サーバにおいて複数のビデオフレームが生成され、
前記複数のビデオフレームは、前記エンコーダにおいて複数の圧縮済みビデオフレームに符号化され、各々の対応する圧縮済みビデオフレームは、1つ以上の対応する符号化済みスライスを含むものであり、
前記複数の圧縮済みビデオフレームは、ネットワークを通じて前記クライアントに伝送される、請求項21に記載の方法。
【請求項26】
さらに、前記複数の圧縮済みビデオフレームを受信し、
前記クライアントと関連付けられたディスプレイにレンダリングするために前記複数の圧縮済みビデオフレームを圧縮解除する、請求項25に記載の方法。
【請求項27】
さらに、前記ビデオフレームについての前記1つ以上の符号化済みスライスの第1の符号化済みスライスが前記サーバから前記クライアントへの伝送の間にロストしたと判定し、
前記デコーダによって復号された前記第1の符号化済みスライスについての代替としてフィラースライスを生成し、前記デコーダは、前記第1の符号化済みスライスに対応する表示の画素についてのスキップマクロブロックを挿入するものである、請求項21に記載の方法。
【請求項28】
さらに、前記第1の符号化済みスライスに対応する前記画素についての前記スキップマクロブロックを補正するよう、参照フレーム無効化を実行する、請求項27に記載の方法。
【請求項29】
さらに、前記ビデオフレームについての前記1つ以上の符号化済みスライスの第1の符号化済みスライスが前記サーバから前記クライアントへの伝送の間にロストしたと判定し、
ロストした前記第1の符号化済みスライスに対応する前方誤り訂正(FEC)スライスを受信し、
前記第1の符号化済みスライスを再生成するために、前記FECスライスを使用する、請求項21に記載の方法。
【請求項30】
さらに、前記ビデオフレームについての前記1つ以上の符号化済みスライスの第1の符号化済みスライスが前記サーバから前記クライアントへの伝送の間にロストしたと判定し、
前記第1の符号化済みスライスに対応する画素に対して前のビデオフレームからの色値を使用する、請求項21に記載の方法。
【請求項31】
クラウドゲーミングのための方法を実行するコンピュータプログラムを記憶した非一時的コンピュータ可読媒体であって、前記コンピュータ可読媒体は、
クライアントにおいてビデオフレームの1つ以上の符号化済みスライスを受信するためのプログラム命令を有し、前記ビデオフレームは、ビデオゲームを実行する間にサーバにおいて生成されており、前記サーバにおけるエンコーダによって前記1つ以上の符号化済みスライスに符号化されているものであり、
前記ビデオフレームの前記1つ以上の符号化済みスライスを完全に受信する前に、前記クライアントのデコーダにおいて第1の符号化済みスライスを復号するためのプログラム命令を有する、非一時的コンピュータ可読媒体。
【請求項32】
前記方法では、復号済みスライスの表示の低減した待ち時間を可能にするよう、クライアントVSYNC信号及びサーバVSYNC信号が同期及びオフセットされる、請求項31に記載の非一時的コンピュータ可読媒体。
【請求項33】
前記方法では、前記1つ以上の符号化済みスライスの各々は、1つ以上のネットワーク通信パケットにパケット化され、
前記方法では、前記1つ以上のネットワーク通信パケットの各々は、前記エンコーダにおいて最大伝送ユニット(MTU)以下にサイジングされ、
前記方法では、前記1つ以上の符号化済みスライスの各々は、各々の符号化済みスライスが単一の対応するネットワーク通信パケットにパケット化されるように、前記MTUまたはそれよりも小さくサイジングされる、請求項31に記載の非一時的コンピュータ可読媒体。
【請求項34】
前記方法では、前記クライアントとのセッションの間、ストリーミングモードにおいて前記サーバによるビデオゲームの処理に応答して、前記サーバにおいて複数のビデオフレームが生成され、
前記方法では、前記複数のビデオフレームは、前記エンコーダにおいて複数の圧縮済みビデオフレームに符号化され、各々の対応する圧縮済みビデオフレームは、1つ以上の対応する符号化済みスライスを含み、
前記方法では、前記複数の圧縮済みビデオフレームは、ネットワークを通じて前記クライアントに伝送される、請求項31に記載の非一時的コンピュータ可読媒体。
【請求項35】
前記複数の圧縮済みビデオフレームを受信するためのプログラム命令と、
前記クライアントと関連付けられたディスプレイにレンダリングするために前記複数の圧縮済みビデオフレームを圧縮解除するためのプログラム命令と、
を更に有する、請求項34に記載の非一時的コンピュータ可読媒体。
【請求項36】
さらに、前記ビデオフレームについての前記1つ以上の符号化済みスライスの第1の符号化済みスライスが前記サーバから前記クライアントへの伝送の間にロストしたと判定するためのプログラム命令を有し、
前記デコーダによって復号された前記第1の符号化済みスライスについての代替としてフィラースライスを生成するためのプログラム命令を有し、前記デコーダは、前記第1の符号化済みスライスに対応する表示の画素についてのスキップマクロブロックを挿入するものであり、
前記第1の符号化済みスライスに対応する前記画素についての前記スキップマクロブロックを補正するよう、参照フレーム無効化を実行するためのプログラム命令を有する、請求項31に記載の非一時的コンピュータ可読媒体。
【請求項37】
さらに、前記ビデオフレームについての前記1つ以上の符号化済みスライスの第1の符号化済みスライスが前記サーバから前記クライアントへの伝送の間にロストしたと判定するためのプログラム命令を有し、
ロストした前記第1の符号化済みスライスに対応する前方誤り訂正(FEC)スライスを受信するためのプログラム命令を有し、
前記第1の符号化済みスライスを再生成するために、前記FECスライスを使用するためのプログラム命令を有する、請求項31に記載の非一時的コンピュータ可読媒体。
【請求項38】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに結合され、そこに記憶された命令を有するメモリと、を備え、前記命令は、前記コンピュータシステムによって実行される場合、前記コンピュータシステムに、クラウドゲーミングのための方法を実行させ、前記方法では、
クライアントにおいてビデオフレームの1つ以上の符号化済みスライスを受信し、前記ビデオフレームは、ビデオゲームを実行する間にサーバにおいて生成されており、前記サーバにおけるエンコーダによって前記1つ以上の符号化済みスライスに符号化されており、
前記ビデオフレームの前記1つ以上の符号化済みスライスを完全に受信する前に、前記クライアントのデコーダにおいて第1の符号化済みスライスを復号する、コンピュータシステム。
【請求項39】
前記方法では、復号済みスライスの表示の低減した待ち時間を可能にするよう、クライアントVSYNC信号及びサーバVSYNC信号が同期及びオフセットされる、請求項38に記載のコンピュータシステム。
【請求項40】
前記1つ以上の符号化済みスライスの各々は、1つ以上のネットワーク通信パケットにパケット化され、
前記1つ以上のネットワーク通信パケットの各々は、前記エンコーダにおいて最大伝送ユニット(MTU)以下にサイジングされる、請求項38に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ネットワークにわたってコンテンツをストリーミングするように構成されたストリーミングシステムに関連し、より具体的に、クラウドゲーミングサーバとクライアントとの間の待ち時間を低減させるために、クラウドゲーミングサーバ及び/またはクライアントにおいて動作を重ね合わせることに関連する。
【背景技術】
【0002】
近年、ネットワークを通じて接続されたクラウドゲーミングサーバとクライアントとの間でストリーミングフォーマットでのオンラインゲーミングまたはクラウドゲーミングを可能にするオンラインサービスに対する継続した追及が存在してきた。オンデマンドでのゲームタイトルの可用性、マルチプレイヤゲーミングのためのプレイヤの間のネットワークに対する能力、プレイヤの間のアセットの共有、プレイヤ及び/または観客の間の即時的な経験の共有、フレンドがビデオゲームをプレイするフレンドを鑑賞し、フレンドをフレンドの進行しているゲームプレイに参加させることが可能となったことなどにより、ストリーミングフォーマットが次第により一般的になっている。
残念なことに、ネットワーク接続の能力、並びにクライアントに配信されるような高品質画像をレンダリングするのに十分に応答する、サーバ及びクライアントにおいて実行される処理の能力の制限に対する需要も増加している。例えば、サーバ上で実行される全てのゲーミング活動の結果は、最良のユーザ経験のために低いミリ秒の待ち時間において圧縮され、クライアントに伝送し戻される必要がある。ユーザのコントローラ入力とクライアントにおけるビデオフレームの表示との間の全体時間としてラウンドトリップ待ち時間が定義されることがあり、それは、制御情報の処理及びコントローラからクライアントへの制御情報の伝送、制御情報の処理及びクライアントからサーバへの制御情報の伝送、入力に応答してビデオフレームを生成するためのサーバにおけるその入力の使用、ビデオフレームの処理及び符号化ユニットへのビデオフレームの転送(例えば、スキャンアウト)、ビデオフレームの符号化、クライアントへの符号化済みビデオフレームの戻り伝送、ビデオフレームの受信及び復号、並びにその表示の前のビデオフレームのいずれかの処理またはステージングを含むことがある。
サーバにおける符号化ユニットへのビデオフレームの転送(例えば、スキャンアウト)の開始から、クライアントにおけるビデオフレームの表示の開始までの時間から構成されるラウンドトリップ待ち時間の一部であるとして一方向待ち時間が定義されることがある。ラウンドトリップ待ち時間及び一方向待ち時間の一部は、通信ネットワークを通じてデータストリームがクライアントからサーバに及びサーバからクライアントに送信されるのに要する時間と関連付けられる。別の部分は、クライアント及びサーバにおける処理と関連付けられ、フレーム復号及び表示に関連するアドバンスドストラテジなど、それらの動作における改善は、サーバとクライアントとの間のラウンドトリップ待ち時間及び一方向待ち時間を実質的に低減させることを結果としてもたらすことがあり、クラウドゲーミングサービスのユーザにより高い品質経験をもたらすことがある。
【0003】
本開示の実施形態は、このような背景の下になされたものである。
【発明の概要】
【0004】
本開示の実施形態は、ネットワークにわたってコンテンツ(例えば、ゲーミング)をストリーミングするように構成されたストリーミングシステムに関連し、より具体的に、サーバにおいて符号化動作及び送信動作を重ね合わせること、クライアントにおいて受信動作及び復号動作を重ね合わせること、並びにクライアントにおいて受信動作、復号動作、及びレンダリング動作を表示動作に重ね合わせることに関連する。
【0005】
本開示の実施形態は、クラウドゲーミングのための方法を開示する。方法は、クライアントにおいてビデオフレームの1つ以上の符号化済みスライスを受信することを含み、ビデオフレームは、ビデオゲームを実行する間にサーバにおいて生成されており、サーバにおけるエンコーダによって1つ以上の符号化済みスライスに符号化されている。方法は、ビデオフレームの1つ以上の符号化済みスライスを完全に受信する前に、クライアントのデコーダにおいて第1の符号化済みスライスを復号することを含む。サーバにおいて、クライアントとのセッションの間、ストリーミングモードにおいてサーバによるビデオゲームの処理に応答して、複数のビデオフレームが生成される。複数のビデオフレームは、エンコーダにおいて複数の圧縮済みビデオフレームに符号化され、各々の対応する圧縮済みビデオフレームは、1つ以上の対応する符号化済みスライスを含む。複数の圧縮済みビデオフレームは、ネットワークを通じてクライアントに伝送される。
【0006】
別の実施形態では、クラウドゲーミングのための方法が開示される。方法は、サーバにおいてビデオゲームを実行するときにビデオフレームを生成することを含む。方法は、サーバスキャンラインごとにエンコーダにビデオフレームをスキャンインすることを含む。方法は、エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のスキャンラインを符号化することを含み、各々の符号化済みスライスは、エンコーダフィルレートでバッファに配信される。方法は、ネットワークを通じてバッファドレイン速度においてクライアントに第1の符号化済みスライスをストリーミングするよう、バッファから第1の符号化済みスライスをドレインすることを含み、第1の符号化済みスライスは、ビデオフレームの1つ以上のスライスを完全に符号化する前にネットワークを通じてストリーミングされる。
【0007】
別の実施形態では、クラウドゲーミングのためのコンピュータプログラムを記憶した非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、クライアントにおいてビデオフレームの1つ以上の符号化済みスライスを受信するためのプログラム命令を含み、ビデオフレームは、ビデオゲームを実行する間にサーバにおいて生成されており、サーバにおけるエンコーダによって1つ以上の符号化済みスライスに符号化されている。
コンピュータ可読媒体は、ビデオフレームの1つ以上の符号化済みスライスを完全に受信する前に、クライアントのデコーダにおいて第1の符号化済みスライスを復号するためのプログラム命令を含む。サーバにおいて、クライアントとのセッションの間、ストリーミングモードにおいてサーバによるビデオゲームの処理に応答して、複数のビデオフレームが生成される。複数のビデオフレームは、エンコーダにおいて複数の圧縮済みビデオフレームに符号化され、各々の対応する圧縮済みビデオフレームは、1つ以上の対応する符号化済みスライスを含む。複数の圧縮済みビデオフレームは、ネットワークを通じてクライアントに伝送される。
【0008】
別の実施形態では、クラウドゲーミングのためのコンピュータプログラムを記憶した非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、サーバにおいてビデオゲームを実行するときにビデオフレームを生成するためのプログラム命令を含む。コンピュータ可読媒体は、サーバスキャンラインごとにエンコーダにビデオフレームをスキャンインするためのプログラム命令を含む。コンピュータ可読媒体は、エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のエンコーダスライスを符号化するためのプログラム命令を含み、各々の符号化済みスライスは、エンコーダフィルレートにおいてバッファに配信される。コンピュータ可読媒体は、ネットワークを通じてバッファドレイン速度においてクライアントに第1の符号化済みスライスをストリーミングするよう、バッファから第1の符号化済みスライスをドレインするためのプログラム命令を含み、第1の符号化済みスライスは、ビデオフレームの1つ以上のスライスを完全に符号化する前にネットワークを通じてストリーミングされる。
【0009】
更なる別の実施形態では、コンピュータシステムは、プロセッサと、プロセッサに結合され、そこに記憶された命令を有するメモリと、を含み、命令は、コンピュータシステムによって実行される場合、コンピュータシステムに、クラウドゲーミングのための方法を実行させる。方法は、クライアントにおいてビデオフレームの1つ以上の符号化済みスライスを受信することを含み、フレームは、ビデオゲームを実行する間にサーバにおいて生成されており、サーバにおけるエンコーダによって1つ以上の符号化済みスライスに符号化されている。方法は、ビデオフレームの1つ以上の符号化済みスライスを完全に受信する前に、クライアントのデコーダにおいて第1の符号化済みスライスを復号することを含む。サーバにおいて、クライアントとのセッションの間、ストリーミングモードにおいてサーバによるビデオゲームの処理に応答して、複数のビデオフレームが生成される。複数のビデオフレームは、エンコーダにおいて複数の圧縮済みビデオフレームに符号化され、各々の対応する圧縮済みビデオフレームは、1つ以上の対応する符号化済みスライスを含む。複数の圧縮済みビデオフレームは、ネットワークを通じてクライアントに伝送される。
【0010】
更なる別の実施形態では、コンピュータシステムは、プロセッサと、プロセッサに結合され、そこに記憶された命令を有するメモリと、を含み、命令は、コンピュータシステムによって実行される場合、コンピュータシステムに、クラウドゲーミングのための方法を実行させる。方法は、サーバにおいてビデオゲームを実行するときにビデオフレームを生成することを含む。方法は、サーバスキャンラインごとにエンコーダにビデオフレームをスキャンインすることを含む。方法は、エンコーダにおいて1つ以上の符号化済みスライスとして1つ以上のエンコーダスライスを符号化することを含み、各々の符号化済みスライスは、エンコーダフィルレートでバッファに配信される。方法は、ネットワークを通じてバッファドレイン速度においてクライアントに第1の符号化済みスライスをストリーミングするよう、バッファから第1の符号化済みスライスをドレインすることを含み、第1の符号化済みスライスは、ビデオフレームの1つ以上のスライスを完全に符号化する前にネットワークを通じてストリーミングされる。
【0011】
本開示の他の態様は、本開示の原理を例として示す、添付図面を併用して以下の詳細な説明から明らかになるであろう。
【0012】
本開示は、添付図面と併せて、以下の詳細な説明を参照することにより、最も良く理解することができる。
【図面の簡単な説明】
【0013】
【
図1A】本開示の1つの実施形態に従った、フレーム周期の開始におけるVSYNC信号の図である。
【
図1B】本開示の1つの実施形態に従った、VSYNC信号の頻度の図である。
【
図2A】本開示の1つの実施形態に従った、様々な構成にある、1つ以上のクラウドゲーミングサーバと1つ以上のクライアントデバイスとの間でネットワークを通じてゲーミングを提供するシステムの図であり、一方向待ち時間を低減させるためにVSYNC信号を同期及びオフセットすることができる。
【
図2B】本開示の1つの実施形態に従った、2つ以上のピアデバイスの間でゲーミングを提供する図であり、デバイスの間でコントローラ情報及び他の情報の受信の最適なタイミングを達成するために、VSYNC信号を同期及びオフセットすることができる。
【
図2C】本開示の1つの実施形態に従った、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利点を有する、様々なネットワーク構成を例示する。
【
図2D】本開示の1つの実施形態に従った、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利点を有する、クラウドゲーミングサーバと複数のクライアントとの間のマルチテナンシ構成を例示する。
【
図3】本開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトに起因した、クラウドゲーミングサーバとクライアントとの間の一方向待ち時間における変動を例示する。
【
図4】本開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、サーバ及びクライアントにおける動作を重ね合わせることを可能にし、サーバとクライアントとの間の一方向待ち時間の低減させるために、サーバとクライアントとの間のVSYNC信号が同期及びオフセットされる、クラウドゲーミングサーバ及びクライアントを含むネットワーク構成を例示する。
【
図5A】開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、サーバにおいて符号化動作及び送信動作を重ね合わせ、クライアントにおいて受信動作及び復号動作を重ね合わせることを例示する図である。
【
図5B】開示の1つの実施形態に従った、クラウドゲーミングのための方法を例示するフローチャートであり、サーバとクライアントとの間の一方向待ち時間を低減させるために、サーバにおける符号化動作及び送信動作が重ね合わされる。
【
図6】開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、クライアントの最大受信帯域幅に基づいてビデオフレームの符号化済みスライスの間隔を空けることを例示する図である。
【
図7A】開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、クライアントにおいて受信動作及び復号動作を重ね合わせることを例示する図である。
【
図7B】開示の1つの実施形態に従った、クラウドゲーミングのための方法を例示するフローチャートであり、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、サーバとクライアントとの間の一方向待ち時間を低減させるために、クライアントにおいて受信動作及び復号動作が重ね合わされ、圧縮解除済みビデオフレームのレンダリングも受信動作及び復号動作と重ね合わせることができる。
【
図8A】開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、ビデオフレームの符号化済みスライス内で前方誤り訂正(FEC)パケットをインタリーブすることを例示する図である。
【
図8B】開示の1つの実施形態に従った、符号化済みスライスのパケットのヘッダの図である。
【
図9】本開示の様々な実施形態の態様を実行するために使用することができる実施例のデバイスのコンポーネントを例示する。
【発明を実施するための形態】
【0014】
以下の詳細な説明は、例示の目的で多くの特定の詳細を含むが、当業者であれば、以下の詳細に対する多くの変形及び変更が本開示の範囲内にあることを理解するであろう。したがって、以下で説明される本開示の態様は、この説明に続く特許請求の範囲への一般性を失うことなく、また限定を課すことなく示される。
【0015】
一般的に言うと、本開示の様々な実施形態は、メディアコンテンツをストリーミングするとき(例えば、ビデオゲームから音声及びビデオをストリーミングする)、ソースデバイスとターゲットデバイスとの間の待ち時間及び/または待ち時間不安定性を低減させるように構成された方法及びシステムを説明する。特に、本開示のいくつかの実施形態では、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、サーバにおいてビデオフレームの符号化動作及び伝送動作を重ね合わせることによって、クラウドゲーミングアプリケーションにおける一方向待ち時間を低減させることができる。
クラウドゲーミングアプリケーションにおけるサーバは、ビデオフレームを符号化し、一方向待ち時間を低減させるために、パケットがサーバのエンコーダによって符号化されるとすぐに、サーバからクライアントへのデータの伝送が開始してもよい。これは、符号化ユニットとデータの伝送を実行するそれらのユニット(例えば、アプリケーション層において動作するストリーマ)との間で情報(例えば、所与の時間において符号化されるデータの量)がサーバ内で共有されることを必要とすることがある。
いくつかの実施形態では、エンコーダによって作成される自然な量のデータにパケットサイズが対応するように、パケットを符号化するようエンコーダが同調される。1つの実施例では、パケットサイズは、ネットワークに基づく最大伝送ユニット(MTU)に対応してもよい。
別の実施例では、パケットサイズは、MTUに対応してもよく、また、エンコーダによって生成された符号化済みスライスに制限されてもよい。更なる別の実施例では、パケットサイズは、1つの実施形態では、スキャンラインまたはスクリーンスライスに対応してもよい。そのようにして、必要とされる一方向待ち時間及びバッファリングの量が低減される。加えて、本開示のいくつかの実施形態では、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、クライアントにおいてビデオフレームの受信動作及び復号動作を重ね合わせることによって、クラウドゲーミングアプリケーションにおける一方向待ち時間を低減させることができる。
本開示の他の実施形態では、圧縮済みビデオフレーム及びそれらの表示の受信動作及び復号動作を重ね合わせることによって、クラウドゲーミングサーバとクライアントとの間の一方向待ち時間を低減させることができる。クラウドゲーミングアプリケーションにおけるクライアントは、クラウドゲーミングサーバから圧縮済みビデオフレームを受信し、圧縮済みビデオフレームを復号するように構成される。クライアントにおいて復号動作をできるだけ早く開始することによって、サーバとクライアントとの間の一方向待ち時間を低減させることができる。例えば、符号化済みスライスの各々のパケットは、それがサーバからクライアントによって受信されるときに復号されてもよい。また、クライアントにおいてフレームが完全に受信または復号される前に、ビデオフレームの表示を開始することによって、一方向待ち時間を低減させることができる。表示のためのサブミットのタイミングは、圧縮済みビデオフレームの受信及び復号のために必要な残り時間を予測する必要がある。前に導入されたように、パケットサイジングは、それが到達するときに各々のパケットを復号することを可能にする、エンコーダによって作成されるデータの自然な量(例えば、MTU、スキャンライン、MTUにサイジングされたエンコーダスライスなど)に対応してもよい。
【0016】
特に、サーバにおいて複雑なフレーム(例えば、シーン変化)を生成するために必要な追加の時間、サーバにおいて複雑なフレームを符号化/圧縮するための増大した時間、ネットワークを通じた可変の通信経路、及びクライアントにおいて複雑なフレームを復号するための増大した時間に起因して、サーバとクライアントとの間で待ち時間不安定性が導入されることがある。また、サーバVSYNC信号とクライアントVSYNC信号との間でドリフトを生じさせる、サーバ及びクライアントにおけるクロック内の差に起因して、待ち時間不安定性が導入されることがある。1つの実施形態では、サーバにおいて符号化動作及び伝送動作を重ね合わせ、クライアントにおいて受信動作及び復号動作を重ね合わせ、並びに/またはクライアントにおいて表示動作に対して受信動作、復号動作、及びレンダリング動作を重ね合わせることによって、この待ち時間不安定性を除去することができる。
【0017】
様々な実施形態の上記の一般的な理解により、様々な図面を参照して実施形態の実施例の詳細をここに説明する。
【0018】
本明細書全体を通して、「ゲーム」、「ビデオゲーム」、「ゲーミングアプリケーション」、または「アプリケーション」への言及は、入力コマンドの実行を通して指示されるいずれかのタイプの対話型アプリケーションを表すことを意味する。例示のみを目的として、対話型アプリケーションは、ゲーミング、文書処理、ビデオ処理、ビデオゲーム処理などのためのアプリケーションを含む。更に、上記導入された用語は、交換可能である。
【0019】
クラウドゲーミングは、ゲームレンダリング済みビデオフレームを生成するよう、サーバにおいてビデオゲームを実行することを含み、ゲームレンダリング済みビデオフレームは次いで、表示のためにクライアントに送信される。サーバ及びクライアントの両方における動作のタイミングは、それぞれの垂直同期(VSYNC)パラメータに結び付けられてもよい。サーバ及び/またはクライアントの間でVSYNC信号が適切に同期及び/またはオフセットされるとき、サーバにおいて実行される動作(例えば、1つ以上のフレーム周期を通じたビデオフレームの生成及び伝送)は、クライアントにおいて実行される動作(例えば、フレーム周期に対応する表示フレームまたはリフレッシュレートで、ディスプレイ上にビデオフレームを表示すること)と同期される。特に、サーバにおいて生成されたサーバVSYNC信号及びクライアントにおいて生成されたクライアントVSYNC信号は、サーバ及びクライアントにおける動作を同期するために使用されてもよい。すなわち、サーバVSYNC信号及びクライアントVSYNC信号が同期及び/またはオフセットされるとき、サーバは、クライアントがビデオフレームをどのように表示するかと同期して、それらのビデオフレームを生成及び送信する。
【0020】
サーバとクライアントとの間でメディアコンテンツをストリーミングするとき、ビデオフレームを生成し、それらのビデオフレーム表示するために、VSYNCシグナリング及び垂直帰線区間(VBI)が組み込まれてきた。例えば、サーバは、対応するサーバVSYNC信号によって定義されるように、1つまたはいくつかのフレーム周期内にゲームレンダリング済みビデオフレームを生成しようとし(例えば、フレーム周期が16.7ミリ秒である場合、フレーム周期ごとにビデオフレームを生成することは、60ヘルツ動作を結果としてもたらし、2つのフレーム周期ごとに1つのビデオフレームを生成することは、30ヘルツ動作を結果としてもたらす)、その後、そのビデオフレームを符号化し、クライアントに伝送しようとする。クライアントにおいて、受信された符号化済みビデオフレームが復号及び表示され、クライアントは、対応するクライアントVSYNCにより開始する表示のためにレンダリングされた各々のビデオフレームを表示する。
【0021】
例示のために、
図1Aは、VSYNC信号111がフレーム周期の開始をどのように指示することができるかを示し、サーバ及び/またはクライアントにおいて対応するフレーム周期の間に様々な動作が実行されてもよい。メディアコンテンツをストリーミングするとき、サーバは、ビデオフレームを生成及び符号化するために、サーバVSYNC信号を使用してもよく、クライアントは、ビデオフレームを表示するために、クライアントVSYNC信号を使用してもよい。VSYNC信号111は、
図1Bに示されるように、定義されたフレーム周期110に対応する定義された頻度において生成される。加えて、VBI105は、前のフレーム周期に対してディスプレイ上で最後のラスタラインが引かれたときと、ディスプレイに最初のラスタライン(例えば、最上部)が引かれるときとの間の時間周期を定義する。VBI105の後に示されるように、表示のためにレンダリングされたビデオフレームは、ラスタスキャンライン106を介して表示される(例えば、ラスタラインごとに、左から右へ)。
【0022】
加えて、メディアコンテンツ(例えば、ビデオゲームコンテンツ)をストリーミングするときなど、ソースデバイスとターゲットデバイスとの間の一方向待ち時間及び/または待ち時間不安定性を低減させるための本開示の様々な実施形態が開示される。例示のみを目的として、サーバ及びクライアントネットワーク構成内で、一方向待ち時間及び/または待ち時間不安定性を低減させるための様々な実施形態が説明される。しかしながら、一方向待ち時間及び/または待ち時間不安定性を低減させるための開示される様々な技術は、
図2A~2Dに示されるように、他のネットワーク構成内で、及び/またはピアツーピアネットワークを通じて実装されてもよいことが理解されよう。例えば、一方向待ち時間及び/または待ち時間不安定性を低減させるための開示される様々な実施形態は、様々な構成にある(例えば、サーバ及びクライアント、サーバ及びサーバ、サーバ及び複数のクライアント、サーバ及び複数のサーバ、クライアント及びクライアント、クライアント及び複数のクライアントなど)サーバ及びクライアントデバイスのうちの1つ以上の間で実装されてもよい。
【0023】
図2Aは、本開示の1つの実施形態に従った、様々な構成にある、1つ以上のクラウドゲーミングネットワーク290及び/またはサーバ260と1つ以上のクライアントデバイス210との間でネットワーク250を通じてゲーミングを提供するシステム200Aの図であり、サーバVSYNC信号及びクライアントVSYNC信号が同期及びオフセットされてもよく、並びに/または動的バッファリングがクライアント上で実行され、並びに/またはサーバ上で符号化動作及び伝送動作が重ね合わされてもよく、並びに/またはクライアントで受信動作及び復号動作が重ね合わされてもよく、並びに/またはサーバ260とクライアント210との間の一方向待ち時間を低減させるために、クライアント上で復号動作及び表示動作が重ね合わされてもよい。
特に、システム200Aは、本開示の1つの実施形態に従って、クラウドゲームネットワーク290を介してゲーミングを提供し、ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、シンクライアント)からリモートで実行されている。システム200Aは、シングルプレイヤモードまたはマルチプレイヤモードのいずれかにおいてネットワーク250を介してクラウドゲームネットワーク290を通じて1つ以上のゲームをプレイする1人以上のユーザにゲーミング制御をもたらすことができる。いくつかの実施形態では、クラウドゲームネットワーク290は、ホストマシンのハイパーバイザ上で稼働する複数の仮想マシン(VM)を含んでもよく、1つ以上の仮想マシンは、ホストのハイパーバイザに利用可能なハードウェアリソースを利用するゲームプロセッサモジュールを実行するように構成される。ネットワーク250は、1つ以上の通信技術を含んでもよい。いくつかの実施形態では、ネットワーク250は、アドバンスド無線通信システムを有する第5世代(5G)ネットワーク技術を含んでもよい。
【0024】
いくつかの実施形態では、通信は、無線技術を使用して促進されてもよい。そのような技術は、例えば、5G無線通信技術を含んでもよい。5Gは、第5世代のセルラネットワーク技術である。5Gネットワークは、プロバイダによってカバーされるサービスエリアがセルと称される小さな地理的エリアに分割されるデジタルセルラネットワークである。サウンド及び画像を表すアナログ信号は、電話機においてデジタル化され、アナログ-デジタル変換器によって変換され、ビットのストリームとして伝送される。セル内の全ての5G無線デバイスは、セル内のローカルアンテナアレイ及び低電力自動化送受信機(送信機及び受信機)と、他のセル内で再使用される周波数のプールから送受信機によって割り当てられた周波数チャネルを通じて、無線波によって通信する。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって、電話ネットワーク及びインターネットと接続される。他のセルネットワークにあるように、1つのセルから別のセルに横断するモバイルデバイスは、新たなセルに自動で転送される。5Gネットワークは、実施例のタイプの通信ネットワークであるにすぎず、開示の実施形態は、前の世代の無線通信または有線通信と共に、5Gの後に来る後の世代の有線技術または無線技術を利用してもよいことが理解されるべきである。
【0025】
図示されるように、クラウドゲームネットワーク290は、複数のビデオゲームへのアクセスをもたらすゲームサーバ260を含む。ゲームサーバ260は、クラウド内で利用可能ないずれかのタイプのサーバコンピューティングデバイスであってもよく、1つ以上のホスト上で実行する1つ以上の仮想マシンとして構成されてもよい。例えば、ゲームサーバ260は、ユーザに対してゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理してもよい。したがって、複数の仮想マシンと関連付けられたゲームサーバ260の複数のゲームプロセッサは、複数のユーザのゲームプレイと関連付けられた1つ以上のゲームの複数のインスタンスを実行するように構成される。そのようにして、バックエンドサーバサポートは、複数の対応するユーザに、複数のゲーミングアプリケーションのゲームプレイのメディア(例えば、ビデオ、音声など)のストリーミングをもたらす。
すなわち、ゲームサーバ260は、ネットワーク250を通じて対応するクライアントデバイス210にデータ(例えば、対応するゲームプレイのレンダリング済み画像及び/またはフレーム)をストリーミングし戻すように構成される。そのようにして、計算的に複雑なゲーミングアプリケーションは、クライアントデバイス210によって受信及び転送されたコントローラ入力に応答して、バックエンドサーバにおいて実行していてもよい。各々のサーバは、画像及び/またはフレームをレンダリングすることが可能であり、画像及び/またはフレームは次いで、表示のために符号化され(例えば、圧縮され)、対応するクライアントデバイスにストリーミングされる。
【0026】
例えば、複数のユーザは、ストリーミングメディアを受信するように構成された対応するクライアントデバイス210を使用して、通信ネットワーク250を介してクラウドゲームネットワーク290にアクセスしてもよい。1つの実施形態では、クライアントデバイス210は、計算機能性(例えば、ゲームタイトル処理エンジン211を含む)をもたらすように構成されたバックエンドサーバ(例えば、クラウドゲームネットワーク290のゲームサーバ260)と対話することをもたらすシンクライアントとして構成されてもよい。
別の実施形態では、クライアントデバイス210は、ビデオゲームの少なくとも一部のローカル処理のためのゲームタイトル処理エンジン及びゲームロジックにより構成されてもよく、バックエンドサーバにおいて実行するビデオゲームによって生成されるようなストリーミングコンテンツを受信するために、またはバックエンドサーバサポートによって提供される他のコンテンツのために更に利用されてもよい。ローカル処理のために、ゲームタイトル処理エンジンは、ビデオゲーム及びビデオゲームと関連付けられたサービスを実行するための基本的なプロセッサに基づく機能を含む。ゲームロジックは、ローカルクライアントデバイス210に記憶され、ビデオゲームを実行するために使用される。
【0027】
特に、対応するユーザ(図示せず)のクライアントデバイス210は、インターネットなどの通信ネットワーク250を通じてゲームへのアクセスを要求し、ゲームサーバ260によって実行されるビデオゲームによって生成された表示画像に対してレンダリングするように構成され、対応するユーザと共同して表示のために符号化済み画像がクライアントデバイス210に配信される。例えば、ユーザは、クライアントデバイス210を通じてゲームサーバ260のゲームプロセッサ上で実行するビデオゲームのインスタンスと対話していてもよい。より詳細に、ビデオゲームのインスタンスは、ゲームタイトル処理エンジン211によって実行される。ビデオゲームを実装する対応するゲームロジック(例えば、実行可能コード)215が記憶され、データストア(図示せず)を通じてアクセス可能であり、ビデオゲームを実行するために使用される。ゲームタイトル処理エンジン211は、その各々がユーザによって選択可能である、複数のゲームロジックを使用して複数のビデオゲームをサポートすることが可能である。
【0028】
例えば、クライアントデバイス210は、ゲームプレイを駆動するために使用される入力コマンドなどを通じて、対応するユーザのゲームプレイと共同してゲームタイトル処理エンジン211と対話するように構成される。特に、クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによって捕捉されるジェスチャ、マウス、タッチパッドなど、様々なタイプの入力デバイスから入力を受信してもよい。クライアントデバイス210は、ネットワーク250を通じてゲームサーバ260に接続する能力を有する、少なくともメモリ及びプロセッサモジュールを有するいずれかのタイプのコンピューティングデバイスであってもよい。バックエンドゲームタイトル処理エンジン211は、レンダリング済み画像を生成するように構成され、レンダリング済み画像は、クライアントデバイス210と共同して対応するディスプレイにおける表示のためにネットワーク250を通じて配信される。
例えば、クラウドに基づくサービスを通じて、ゲームサーバ260のエンジン211を実行するゲーム上で実行する対応するゲームのインスタンスによって、ゲームレンダリング済み画像が配信されてもよい。すなわち、クライアントデバイス210は、(例えば、ビデオゲームの実行を通じて生成されたゲームレンダリング済み画像から符号化された)符号化済み画像を受信し、ディスプレイ11に対してレンダリングされた画像を表示するように構成される。1つの実施形態では、ディスプレイ11は、HMD(例えば、VRコンテンツを表示する)を含む。いくつかの実施形態では、レンダリング済み画像は、クラウドに基づくサービスから直接、またはクライアントデバイス210(例えば、PlayStation(登録商標)Remote Play)を介して、無線または有線でスマートフォンまたはタブレットにストリーミングされてもよい。
【0029】
1つの実施形態では、ゲームサーバ260及び/またはゲームタイトル処理エンジン211は、ゲーム及びゲーミングアプリケーションと関連付けられたサービスを実行するための基本的なプロセッサに基づく機能を含む。例えば、プロセッサに基づく機能は、2Dまたは3Dレンダリング、物理学、物理学シミュレーション、スクリプティング、音声、アニメーション、グラフィック処理、ライティング、シェーディング、ラスタリゼーション、レイトレーシング、シャドーイング、カリング、トランスフォーメーション、人工知能などを含む。加えて、ゲーミングアプリケーションのためのサービスは、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅検査、ソーシャルネットワーキング、ソーシャルフレンドの管理、フレンドのソーシャルネットワークとの通信、通信チャネル、テキスティング、インスタントメッセージング、チャットサポートなどを含む。
【0030】
1つの実施形態では、クラウドゲームネットワーク290は、分散ゲームサーバシステム及び/またはアーキテクチャである。特に、ゲームロジックを実行する分散ゲームエンジンは、対応するゲームの対応するインスタンスとして構成される。概して、分散ゲームエンジンは、ゲームエンジンの機能の各々を引き受け、多数の処理エンティティによる実行のためにそれらの機能を分散させる。1つ以上の処理エンティティにわたって個々の機能が更に分散されてもよい。処理エンティティは、物理ハードウェアを含み、並びに/あるいは仮想コンポーネントもしくは仮想マシンとして、及び/または仮想コンテナとして異なる構成において構成されてもよく、コンテナは、それが仮想化オペレーティングシステム上で稼働するゲーミングアプリケーションのインスタンスを仮想化するように仮想マシンとは異なる。
処理エンティティは、クラウドゲームネットワーク290のサーバ及び1つ以上のサーバ上のそれらの下層ハードウェア(計算ノード)を利用してもよく、及び/またはそれらに依存してもよく、サーバは、1つ以上のラック上に位置してもよい。様々な処理エンティティへのそれらの機能の実行の調整、割り当て、及び管理は、分散同期レイヤによって実行される。そのようにして、それらの機能の実行は、プレイヤによるコントローラ入力に応答して、ゲーミングアプリケーションのためのメディア(例えば、ビデオフレーム、音声など)の生成を可能にするよう、分散同期レイヤによって制御される。分散同期レイヤは、分散処理エンティティにわたってそれらの機能を効率的に実行することが可能であり(例えば、負荷分散を通じて)、その結果、重大なゲームエンジンコンポーネント/機能がより効率的な処理のために分散及び再組み立てられる。
【0031】
ゲームタイトル処理エンジン211は、マルチテナンシGPU機能性を実行するように構成されてもよい、セントラルプロセシングユニット(CPU)及びグラフィックプロセシングユニット(GPU)のグループを含む。別の実施形態では、複数のGPUデバイスは、対応するCPU上で実行している単一のアプリケーションに対してグラフィック処理を実行するよう組み合わされる。
【0032】
図2Bは、本開示の1つの実施形態に従った、2つ以上のピアデバイスの間でゲーミングを提供する図であり、デバイスの間でコントローラ情報及び他の情報の受信の最適なタイミングを達成するために、VSYNC信号を同期及びオフセットすることができる。例えば、ネットワーク250を通じて、またはピアツーピア通信(例えば、Bluetooth(登録商標)、ローカルエリアネットワーキングなど)を通じて直接接続された2つ以上のピアデバイスを使用して、ヘッドツーヘッドゲーミングが実行されてもよい。
【0033】
示されるように、ビデオゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、ゲームコンソール)の各々上でローカルにゲームが実行されており、クライアントデバイス210は、ピアツーピアネットワーキングを通じて通信する。例えば、ビデオゲームのインスタンスは、対応するクライアントデバイス210のゲームタイトル処理エンジン211によって実行している。ビデオゲームを実装するゲームロジック(例えば、実行可能コード)は、対応するクライアントデバイス210に記憶され、ゲームを実行するために使用される。例示を目的として、ゲームロジック215は、携帯型媒体(例えば、光媒体)を通じて、またはネットワークを通じて対応するクライアントデバイス210に配信されてもよい(例えば、インターネットを通じてゲーミングプロバイダからダウンロードされる)。
【0034】
1つの実施形態では、対応するクライアントデバイス210のゲームタイトル処理エンジン211は、ゲーム及びゲーミングアプリケーションと関連付けられたサービスを実行するための基本的なプロセッサに基づく機能を含む。例えば、プロセッサに基づく機能は、2Dまたは3Dレンダリング、物理学、物理学シミュレーション、スクリプティング、音声、アニメーション、グラフィック処理、ライティング、シェーディング、ラスタリゼーション、レイトレーシング、シャドーイング、カリング、トランスフォーメーション、人工知能などを含む。加えて、ゲーミングアプリケーションのためのサービスは、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅検査、ソーシャルネットワーキング、ソーシャルフレンドの管理、フレンドのソーシャルネットワークとの通信、通信チャネル、テキスティング、インスタントメッセージング、チャットサポートなどを含む。
【0035】
クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによって捕捉されるジェスチャ、マウス、タッチパッドなど、様々なタイプの入力デバイスから入力を受信してもよい。クライアントデバイス210は、少なくともメモリ及びプロセッサモジュールを有するいずれかのタイプのコンピューティングデバイスであってもよく、ゲームタイトル処理エンジン211によって実行されるレンダリング済み画像を生成し、ディスプレイ(例えば、ディスプレイ11、またはヘッドマウントディスプレイ-HMDを含むディスプレイ11など)上でレンダリング済み画像を表示するように構成される。
例えば、レンダリング済み画像は、ゲームプレイを駆動するために使用される入力コマンドなどを通じて、対応するユーザのゲームプレイを実装するよう、クライアントデバイス210上でローカルに実行するゲームのインスタンスと関連付けられてもよい。クライアントデバイス210のいくつかの実施例は、パーソナルコンピュータ(PC)、ゲームコンソール、ホームシアタデバイス、汎用コンピュータ、モバイルコンピューティングデバイス、タブレット、電話、またはゲームのインスタンスを実行することができるいずれかの他のタイプのコンピューティングデバイスを含む。
【0036】
図2Cは、本開示の実施形態に従った、
図2A~2Bに示されたそれらの構成を含む、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利点を有する、様々なネットワーク構成を例示する。特に、様々なネットワーク構成は、サーバとクライアントとの間の一方向待ち時間及び/または待ち時間変動性を低減させることを目的として、サーバVSYNC信号及びクライアントVSYNC信号の頻度の適切な整合、並びにサーバVSYNC信号及びクライアントVSYNC信号のタイミングオフセットの適切な整合から利点を有する。
例えば、1つのネットワークデバイス構成は、クラウドゲーミングサーバ(例えば、ソース)ツークライアント(ターゲット)構成を含む。1つの実施形態では、クライアントは、ウェブブラウザ内部で音声通信及びビデオ通信をもたらすように構成されたWebRTCクライアントを含んでもよい。別のネットワーク構成は、クライアント(例えば、ソース)ツーサーバ(ターゲット)構成を含む。更なる別のネットワーク構成は、サーバ(例えば、ソース)ツーサーバ(例えば、ターゲット)構成を含む。別のネットワークデバイス構成は、クライアント(例えば、ソース)ツークライアント(ターゲット)構成を含み、クライアントは各々、例えば、ヘッドツーヘッドゲーミングを提供するゲーミングコンソールであってもよい。
【0037】
特に、VSYNC信号の整合は、サーバVSYNC信号及びクライアントVSYNC信号の頻度を同期することを含んでもよく、また、ドリフトを除去することを目的として、並びに/または一方向待ち時間及び/もしくは待ち時間変動性を低減させることを目的として、サーバVSYNC信号とクライアントVSYNC信号との間で理想的な関係を維持するために、クライアントVSYNC信号とサーバVSYNC信号との間でタイミングオフセットを調節することを含んでもよい。適切な整合を達成するために、1つの実施形態では、サーバ260及びクライアント210のペアの間で適切な整合を実装するために、サーバVSYNC信号が同調されてもよい。
別の実施形態では、サーバ260及びクライアント210のペアの間で適切な整合を実装するために、クライアントVSYNC信号が同調されてもよい。クライアントVSYNC信号及びサーバVSYNC信号が整合されると、サーバVSYNC信号及びクライアントVSYNC信号は、実質的に同一の頻度において発生し、時間ごとに調節することができる、タイミングオフセットによって相互にオフセットされる。
別の実施形態では、VSYNC信号の整合は、2つのクライアントに対してVSYNCの頻度を同期することを含んでもよく、また、ドリフトを除去し、並びに/またはコントローラ情報及び他の情報の受信の最適なタイミングを達成することを目的として、それらのVSYNC信号の間でタイミングオフセットを調節することを含んでもよく、この整合を達成するために、いずれかのVSYNC信号が同期されてもよい。
更なる別の実施形態では、整合は、複数のサーバに対してVSYNCの頻度を同期することを含んでもよく、また、例えば、ヘッドツーヘッドクラウドゲーミングのために、サーバVSYNC信号及びクライアントVSYNC信号の頻度を同期することと、クライアントVSYNC信号とサーバVSYNC信号との間でタイミングオフセットを調節することとを含んでもよい。サーバツークライアント構成及びクライアントツークライアント構成では、整合は、サーバVSYNC信号とクライアントVSYNC信号との間で頻度を同期することと共に、サーバVSYNC信号とクライアントVSYNC信号との間で適切なタイミングオフセットをもたらすこととの両方を含んでもよい。サーバツーサーバ構成では、整合は、タイミングオフセットを設定することなく、サーバVSYNC信号とクライアントVSYNC信号との間での頻度の同期を含んでもよい。
【0038】
図2Dは、本開示の1つの実施形態に従った、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利点を有する、クラウドゲーミングサーバ260と1つ以上のクライアント210との間のマルチテナンシ構成を例示する。サーバツークライアント構成では、整合は、サーバVSYNC信号とクライアントVSYNC信号との間で頻度を同期することと共に、サーバVSYNC信号とクライアントVSYNC信号との間の適切なタイミングオフセットをもたらすこととの両方を含んでもよい。マルチテナンシ構成では、1つの実施形態では、サーバ260及びクライアント210のペアの間で適切な整合を実装するために、各々のクライアント210においてクライアントVSYNC信号が同調される。
【0039】
例えば、1つの実施形態では、グラフィックサブシステムは、マルチテナンシGPU機能性を実行するように構成されてもよく、1つのグラフィックサブシステムは、複数のゲームのためのグラフィック及び/またはレンダリングパイプラインを実装している。すなわち、グラフィックサブシステムは、実行されている複数のゲームの間で共有される。特に、1つの実施形態では、ゲームタイトル処理エンジンは、マルチテナンシGPU機能性を実行するように構成されたCPU及びGPUのグループを含んでもよく、1つのCPU及びGPUのグループは、複数のゲームのためのグラフィック及び/またはレンダリングパイプラインを実装している。すなわち、CPU及びGPUのグループは、実行されている複数のゲームの間で共有される。CPU及びGPUのグループは、1つ以上の処理デバイスとして構成される。別の実施形態では、複数のGPUデバイスは、対応するCPU上で実行している単一のアプリケーションに対してグラフィック処理を実行するよう組み合わされる。
【0040】
図3は、ゲームレンダリング済みビデオフレームを生成するよう、サーバにおいてビデオゲームを実行し、表示のためにクライアントにそれらのビデオフレームを送信する全体処理を例示する。慣習的に、ゲームサーバ260及びクライアント210におけるいくつかの動作は、それぞれのVSYNC信号によって定義されるようにフレーム周期内に実行される。例えば、サーバ260は、301において、対応するサーバVSYNC信号311によって定義されるように、1つまたは複数のフレーム周期内にゲームレンダリング済みビデオフレームを生成しようとする。動作350において入力デバイスから配信された制御情報(例えば、ユーザの入力コマンド)、または制御情報によって駆動されないゲームロジックのいずれかに応答して、ビデオフレームがゲームによって生成される。
伝送ジッタ351は、サーバ260に制御情報を送信するときに存在することがあり、ジッタ351は、クライアントからサーバへのネットワーク待ち時間の変動を測定する(例えば、入力コマンドを送信するときの)。図示されるように、太矢印は、サーバ260に制御情報を送信するときの現在遅延を示すが、ジッタに起因して、サーバ260における制御情報についての或る範囲の到達時間が存在することがある(例えば、点線矢印によって境界付けられる範囲)。フリップ時間309において、GPUは、サーバ260において、対応するビデオフレームが完全に生成されており、フレームバッファに配置されていることを示す、フリップコマンドに到着する。
その後、サーバ260は、サーバVSYNC信号311によって定義されるように(明確性のためにVBIは省略される)後続のフレーム周期を通じてそのビデオフレームに対してスキャンアウト/スキャンインを実行する(動作302、スキャンアウトは、VSYNC信号311と整合されてもよい)。続いて、ビデオフレームが符号化され(動作303)(例えば、符号化は、VSYNC信号311の発生の後に開始し、符号化の終了は、VSYNC信号と整合されなくてもよい)、クライアント210に伝送される(動作304、伝送は、VSYNC信号311と整合されなくてもよい)。クライアント210において、符号化済みビデオフレームが受信され(動作305、受信は、クライアントVSYNC信号312と整合されなくてもよい)、復号され(動作306、復号は、クライアントVSYNC信号312と整合されなくてもよい)、バッファリングされ、表示される(動作307、表示の開始は、クライアントVSYNC信号312と整合されてもよい)。特に、クライアント210は、クライアントVSYNC信号312の対応する発生により開始する表示のためにレンダリングされた各々のビデオフレームを表示する。
【0041】
一方向待ち時間315は、サーバにおける符号化ユニットへのビデオフレームの転送(例えば、スキャンアウト302)の開始から、クライアント307におけるビデオフレームの表示の開始までの待ち時間であるとして定義されてもよい。すなわち、一方向待ち時間は、クライアントバッファリングを考慮して、サーバスキャンアウトからクライアント表示までの時間である。個々のフレームは、符号化303及び伝送304などのサーバ動作、ジッタ352を伴うサーバ260とクライアント210との間のネットワーク伝送、並びにクライアント受信305の高い程度の不一致に起因して、フレームごとに変動することがある、スキャンアウト302の開始から復号306の完了までの待ち時間を有する。
図示されるように、太直線は、クライアント210に対応するビデオフレームを送信するときの現在待ち時間を示すが、ジッタ352に起因して、クライアント210におけるビデオフレームについての或る範囲の到達時間が存在することがある(例えば、点線矢印によって境界付けられる範囲)。良好なプレイ経験を達成するために一方向待ち時間が相対的に安定する必要があるので(例えば、極めて一貫したままである)、慣習的に、低待ち時間(例えば、スキャンアウト302の開始から復号306の完了までの)を有する個々のフレームの表示がいくつかのフレーム周期の間に遅延される結果によりバッファリング320が実行される。すなわち、ネットワーク不安定性、または予測不可能な符号化/復号時間が存在する場合、一方向待ち時間が一貫したままであるように、特別なバッファリングが必要になる。
【0042】
クラウドゲーミングサーバとクライアントとの間の一方向待ち時間は、本開示の1つの実施形態に従って、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトに起因して変動することがある。すなわち、サーバVSYNC信号311及びクライアントVSYNC信号312の頻度における差は、サーバ260から到達するフレームに対してクライアントVSYNC信号をドリフトさせることがある。ドリフトは、サーバ及びクライアントにおけるそれぞれのクロックの各々において使用される水晶発振器における非常に僅かな差に起因することがある。更に、本開示の実施形態は、サーバとクライアントとの間の整合のためのVSYNC信号の同期及びオフセットのうちの1つ以上を実行し、クライアント上での動的バッファリングをもたらし、サーバにおいてビデオフレームの符号化及び伝送を重ね合わせ、クライアントにおいてビデオフレームの受信及び復号を重ね合わせ、クライアントにおいてビデオフレームの復号及び表示を重ね合わせることによって、一方向待ち時間を低減させる。
【0043】
図4は、本開示の実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするときの、高度に最適化されたクラウドゲーミングサーバ260及び高度に最適化されたクライアント210を含むネットワーク構成を通じたデータのフローを例示し、サーバ動作及びクライアント動作を重ね合わせることは、一方向待ち時間を低減させ、サーバとクライアントとの間でVSYNC信号を同期及びオフセットすることは、一方向待ち時間を低減させると共に、サーバとクライアントとの間の一方向待ち時間における変動性を低減させる。特に、
図4は、サーバVSYNC信号とクライアントVSYNC信号との間の所望の整合を示す。
1つの実施形態では、サーバ及びクライアントネットワーク構成などにおいて、サーバVSYNC信号とクライアントVSYNC信号との間の適切な整合を得るために、サーバVSYNC信号311の同調が実行される。
別の実施形態では、マルチテナントサーバツーマルチクライアントネットワーク構成などにおいて、サーバVSYNC信号とクライアントVSYNC信号との間の適切な整合を得るために、クライアントVSYNC信号312の同調が実行される。例示を目的として、サーバVSYNC信号及びクライアントVSYNC信号の頻度を同期し、並びに/または対応するクライアントVSYNC信号とサーバVSYNC信号との間でタイミングオフセットを調節することを目的として、サーバVSYNC信号311の同調が
図4において説明されるが、同調のためにクライアントVSYNC信号312も使用されてもよいことが理解されよう。本特許出願のコンテキストでは、「同期する」は、それらの頻度が一致するように信号を同調するが、位相が異なることがあることを意味すると解釈されるべきであり、「オフセット」は、信号の間の時間遅延、例えば、1つの信号がその最大値に到達するときと、他の信号がその最大値に到達するときとの間の時間遅延を意味すると解釈されるべきである。
【0044】
示されるように、
図4は、開示の実施形態において、レンダリング済みビデオフレームを生成するようサーバにおいてビデオゲームを実行し、表示のためにクライアントにそれらのビデオフレームを送信する改善された処理を例示する。サーバ及びクライアントにおける単一のビデオフレームの生成及び表示に関する処理が示される。特に、サーバは、401においてゲームレンダリング済みビデオフレームを生成する。例えば、サーバ260は、ゲームを実行するように構成されたCPU(例えば、ゲームタイトル処理エンジン211)を含む。
CPUは、ビデオフレームに対する1つ以上のドローコールを生成し、ドローコールは、グラフィックパイプラインにおいてサーバ260の対応するGPUによる実行のためのコマンドバッファに配置されたコマンドを含む。グラフィックパイプラインは、表示するためにビデオフレームに対してレンダリングされるようなテキスチャ値を生成するための、シーン内のオブジェクトの頂点に対する1つ以上のシェーダプログラムを含んでもよく、効率性のためにGPUを通じて並列して動作が実行される。フリップ時間409において、GPUは、サーバ260において、対応するビデオフレームが完全に生成及び/またはレンダリングされており、フレームバッファに配置されていることを示す、コマンドバッファ内のフリップコマンドに到着する。
【0045】
402において、サーバは、エンコーダへのゲームレンダリング済みビデオフレームのスキャンアウトを実行する。特に、スキャンアウトは、スキャンラインごとに、または連続したスキャンラインのグループにおいて実行され、スキャンラインは、例えば、スクリーンエッジからスクリーンエッジへの表示の単一の水平ラインを指す。それらのスキャンラインまたは連続したスキャンラインのグループは、スライスと称されることがあり、本明細書では、スクリーンスライスと称される。特に、スキャンアウト402は、別のフレームバッファからの情報によりそれを囲むために、別のフレームバッファとそれを重ね合わせること、またはそれを縮小させることを含む、ゲームレンダリング済みフレームを修正するいくつかの処理を含んでもよい。スキャンアウト402の間、修正済みビデオフレームは次いで、圧縮のためにエンコーダにスキャンインされる。1つの実施形態では、スキャンアウト402は、VSYNC信号311の発生311aにおいて実行される。他の実施形態では、スキャンアウト402は、フリップ時間409などにおいて、VSYNC信号311の発生の前に実行されてもよい。
【0046】
403において、1つ以上の符号化済みスライスを生成するよう、エンコーダにおいてエンコーダスライス単位でエンコーダスライスに対してゲームレンダリング済みビデオフレーム(修正を受けていることがある)が符号化され、符号化済みスライスは、スキャンラインまたはスクリーンスライスとは無関係である。したがって、エンコーダは、1つ以上の符号化済み(圧縮済み)スライスを生成する。
1つの実施形態では、対応するビデオフレームに対してスキャンアウト処理402が完全に完了する前に、符号化処理が開始する。更に、符号化403の開始及び/または終了は、サーバVSYNC信号311と整合されてもよく、または整合されなくてもよい。符号化済みスライスの境界は、単一のスキャンラインに規制されず、単一のスキャンライン、または複数のスキャンラインから構成されてもよい。加えて、符号化済みスライスの最後及び/または次のエンコーダスライスの先頭は、必ずしもディスプレイスクリーンのエッジにおいて発生しないことがあり(例えば、スクリーンの真ん中のどこかまたはスキャンラインの中間において発生することがある)、その結果、符号化済みスライスは、ディスプレイスクリーンのエッジからエッジまで完全にトラバースする必要がない。示されるように、1つ以上の符号化済みスライスは、ハッシュマークを有する圧縮された「符号化済みスライスA」を含む、圧縮及び/または符号化されてもよい。
【0047】
404において、符号化済みビデオフレームは、サーバからクライアントに伝送され、伝送は、符号化済みスライスごとの単位で発生することがあり、各々の符号化済みスライスは、圧縮されたエンコーダスライスである。1つの実施形態では、対応するビデオフレームに対して符号化処理403が完全に完了する前に、伝送処理404が開始する。更に、伝送404の開始及び/または終了は、サーバVSYNC信号311と整合されてもよく、または整合されなくてもよい。示されるように、圧縮された符号化済みスライスAは、レンダリング済みビデオフレームに対して他の圧縮済みエンコーダスライスとは独立してクライアントに伝送される。エンコーダスライスは、一度に、または並列して伝送されてもよい。
【0048】
405において、クライアントは、符号化済みスライスごとの単位で再度、圧縮済みビデオフレームを受信する。更に、受信405の開始及び終了は、クライアントVSYNC信号312と整合されてもよく、または整合されなくてもよい。示されるように、圧縮された符号化済みスライスAは、クライアントによって受信される。伝送ジッタ452は、サーバ260とクライアント210との間に存在することがあり、ジッタ452は、サーバ260からクライアント210へのネットワーク待ち時間における変動を測定する。より低いジッタ値は、より安定した接続を示す。示されるように、太直線は、クライアント210に対応するビデオフレームを送信するときの現在待ち時間を示すが、ジッタに起因して、クライアント210におけるビデオフレームについての或る範囲の到達時間が存在することがある(例えば、点線矢印によって境界付けられる範囲)。待ち時間における変動は、符号化403及び伝送404などのサーバにおける1つ以上の動作と共に、クライアント210にビデオフレームを伝送するときに待ち時間を導入したネットワーキング事項に起因することがある。
【0049】
406において、クライアントは、符号化済みスライスごとの単位で再度、圧縮済みビデオフレームを復号し、表示のために今では準備ができた復号済みスライスA(ハッシュマークなしに示される)を作成する。1つの実施形態では、対応するビデオフレームに対して受信処理405が完全に完了する前に、復号処理406が開始する。更に、復号406の開始及び/または終了は、クライアントVSYNC信号312と整合されてもよく、または整合されなくてもよい。407において、クライアントは、クライアントにおいてディスプレイ上で復号されたレンダリング済みビデオフレームを表示する。すなわち、例えば、ディスプレイデバイスに、スキャンラインごとの単位で、ストリーミングアウトされる、復号済みビデオフレームは、ディスプレイバッファに配置される。
1つの実施形態では、対応するビデオフレームに対して復号処理406が完全に完了した後に、表示処理407が開始し(すなわち、ディスプレイデバイスにストリーミングアウトする)、すなわち、復号済みビデオフレームはディスプレイバッファ内に完全に駐在する。別の実施形態では、対応するビデオフレームに対して複合処理406が完全に完了する前に、表示処理407が開始する。すなわち、復号済みフレームバッファの一部のみがディスプレイバッファ内に駐在する時間において、ディスプレイデバイスへのストリーミングアウトがディスプレイバッファのアドレスから開始する。ディスプレイバッファは次いで、表示するために時間内に対応するビデオフレームの残り部分により更新または充填され、その結果、ディプレイへのそれらの部分のストリーミングアウトの前に、ディスプレイバッファの更新が実行される。更に、表示407の開始及び/または終了は、クライアントVSYNC信号312と整合される。
【0050】
1つの実施形態では、サーバ260とクライアント210との間の一方向待ち時間416は、スキャンアウト402が開始するときと、表示407が開始するときとの間の経過時間として定義されてもよい。本開示の実施形態は、サーバとクライアントとの間の一方向待ち時間を低減させ、サーバとクライアントとの間の一方向待ち時間における変動性を低減させるために、サーバとクライアントとの間でVSYNC信号を整合する能力を有する(例えば、頻度を同期し、オフセットを調節する)。
例えば、本開示の実施形態は、サーバVSYNC信号311とクライアントVSYNC信号312との間のオフセット430への最適な調節を計算することが可能であり、その結果、符号化403及び伝送404などのサーバ処理に必要なほぼ最悪のケースの時間、サーバ260とクライアント210との間のほぼ最悪のケースのネットワーク待ち時間、並びに受信405及び復号406などの最悪のケースのクライアント処理のイベントでさえも、復号されたレンダリング済みビデオフレームが表示処理407のために時間内に利用可能である。すなわち、サーバVSYNCとクライアントVSYNCとの間の絶対オフセットを判定することが必要でなく、復号されたレンダリング済みビデオフレームが表示処理のために時間内に利用可能であるように、オフセットを調節するのに十分である。
【0051】
特に、サーバVSYNC信号311及びクライアントVSYNC信号312の頻度は、同期を通じて整合されてもよい。同期は、サーバVSYNC信号311またはクライアントVSYNC信号312を同調することを通じて達成される。例示を目的として、同調することは、サーバVSYNC信号311に関連して説明されるが、同調することは代わりに、クライアントVSYNC信号312に対して実行されてもよいことが理解されよう。例えば、
図4に示されるように、サーバフレーム周期410(例えば、サーバVSYNC信号311の2回の発生311c及び311dの間の時間)は、クライアントフレーム周期415(例えば、クライアントVSYNC信号312の2回の発生312a及び312bの間の時間)に実質的に等しく、それは、サーバVSYNC信号311及びクライアントVSYNC信号312の頻度も実質的に等しいことを示す。
【0052】
サーバVSYNC信号及びクライアントVSYNC信号の頻度の同期を維持するために、サーバVSYNC信号311のタイミングが操作されてもよい。例えば、サーバVSYNC信号311とクライアントVSYNC信号312との間のドリフトの原因となるなど、サーバVSYNC信号311における垂直帰線区間(VBI)が或る時間周期を通じて増大または低減してもよい。VBIにおける垂直帰線(VBLANK)ラインの操作は、サーバVSYNC信号311の1つ以上のフレーム周期の間にVBLANKに対して使用されるスキャンラインの数を調節することをもたらす。VBLANKのスキャンラインの数を下落させることは、サーバVSYNC信号311の2回の発生の間の対応するフレーム周期(例えば、時間間隔)を低減させる。逆に、VBLANKのスキャンラインの数を増大させることは、VSYNC信号311の2回の発生の間の対応するフレーム周期(例えば、時間間隔)を増大させる。そのようにして、サーバVSYNC信号311の頻度は、クライアントVSYNC信号311とサーバVSYNC信号312との間の頻度が実質的に同一の頻度であるように整合されるよう調節される。
また、サーバVSYNC信号とクライアントVSYNC信号との間のオフセットは、その元の値にVBIを戻す前に、短い時間周期の間にVBIを増大または低減させることによって調節されてもよい。1つの実施形態では、サーバVBIが調節される。別の実施形態では、クライアントVBIが調節される。更なる別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスが存在し、その各々は、調節される対応するVBIを有してもよい。1つの実施形態では、複数の接続されたデバイスの各々は、独立したピアデバイス(例えば、サーバデバイスを有さない)であってもよい。別の実施形態では、複数のデバイスは、1つ以上のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、または一部のそれらの組み合わせに配列された1つ以上のサーバデバイス及び/または1つ以上のクライアントデバイスを含んでもよい。
【0053】
代わりに、1つの実施形態では、サーバの画素クロック(例えば、サーバのノースブリッジ/サウスブリッジコアロジックチップセットのサウスブリッジに位置し、または離散GPUのケースでは、それは、その自身のハードウェアを使用して自身によって画素クロックを生成する)は、サーバVSYNC信号311とクライアントVSYNC信号312との間の頻度の同期を整合に戻すよう、或る時間周期を通じてサーバVSYNC信号311の頻度の粗い同調及び/または微細な同調を実行するよう操作されてもよい。特に、サーバのサウスブリッジにおける画素クロックは、サーバのVSYNC信号311の頻度全体を調節するよう、オーバークロックまたはアンダークロックされてもよい。そのようにして、サーバVSYNC信号311の頻度は、クライアントVSYNC信号311とサーバVSYNC信号312との間の頻度が実質的に同一の頻度であるように整合されるよう調節される。サーバVSYNCとクライアントVSYNCとの間のオフセットは、その元の値に画素クロックを戻す前に、短い時間周期の間にクライアントサーバ画素クロックを増大または低減させることによって調節されてもよい。
1つの実施形態では、サーバ画素クロックが調節される。別の実施形態では、クライアント画素クロックが調節される。更なる別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスが存在し、その各々は、調節される対応する画素クロックを有してもよい。1つの実施形態では、複数の接続されたデバイスの各々は、独立したピアデバイス(例えば、サーバデバイスを有さない)であってもよい。別の実施形態では、複数のデバイスは、1つ以上のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、または一部のそれらの組み合わせに配列された1つ以上のサーバデバイス及び1つ以上のクライアントデバイスを含んでもよい。
【0054】
図5Aは、開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、サーバ260において符号化動作及び伝送動作を重ね合わせること、並びにクライアント210において受信動作及び復号動作を重ね合わせることを例示する図である。特に、サーバ260においてビデオフレームの符号化動作及び伝送動作を重ね合わせること、並びにクライアント210においてビデオフレームの受信動作及び復号動作を重ね合わせることは、タイムライン501を参照してエンコーダスライスレベルにおいて実行されてもよい。
【0055】
特に、ビデオゲームを実行しているサーバ260によってレンダリング済みビデオフレームが生成される。例えば、ビデオフレームは、サーバ260のGPUグラフィックパイプラインとの組み合わせにおいてビデオゲームがCPU上で実行しているように、ビデオフレームが生成される。各々のビデオフレームは、1つ以上のエンコーダスライスに分割されてもよく、1つ以上のエンコーダスライスは次いで、1つ以上の符号化済みスライスとして圧縮される。前に説明されたように、符号化済みスライスの境界は、単一のスキャンラインに規制されず、単一のスキャンライン、または複数のスキャンラインから構成されてもよい。加えて、符号化済みスライスの最後及び/または次の符号化済みスライスの先頭は、ディスプレイスクリーンのエッジにおいて必ずしも発生しないことがある(例えば、スクリーンの真ん中のどこかまたはスキャンラインの中間において発生することがある)。
【0056】
更に、各々の符号化済みスライス(例えば、圧縮された)は、1つ以上のパケット(例えば、ユーザデータグラムプロトコル-UDP)を含んでもよい。符号化済みスライスが最大伝送ユニット(MTU)を超える場合、符号化済みスライスは、複数のパケットに分割され、その各々は、MTUまたはそれよりも小さくサイジングされる。MTUは、UDP上で送信されるときのパケットの最大サイズを定義する。例えば、符号化済みスライスAは、1つ以上のパケット503-Aに分割されてもよい。同様に、符号化済みスライスB、符号化済みスライスC、及び符号化済みスライスDは各々、1つ以上のパケットに分割されてもよい。
【0057】
サーバ260において、符号化済みスライスの1つ以上のパケットは、全てのエンコーダスライス(例えば、ビデオフレームの)が圧縮されること(例えば、符号化済みスライスに)、及びパケット化されることを待つことなく、別個に圧縮及び配信されてもよい(場合によっては、スライスによってグループ化されてもよい)。これは、符号化ユニットとデータの伝送を実行するそれらのユニット(例えば、アプリケーションレイヤにおいて動作するストリーマ)との間など、サーバ260内で情報(例えば、所与の時間に符号化されたデータの量)が共有されることを必要とすることがある。
特に、動作403において、エンコーダは、生成済みビデオフレームを受信し、1つ以上の符号化済みスライスを生成するよう、エンコーダスライスごとの単位で、エンコーダ上でビデオフレームを符号化する。いくつかの実施形態では、エンコーダは、前に説明されたように、追加のレイヤまたはオーバレイにより修正されたビデオゲームによって生成されたビデオフレームを受信する(例えば、スキャンアウト処理の間)。示されるように、生成済みビデオフレームの符号化済みスライスの各々は、エンコーダにおいて別個に圧縮される。例えば、動作403の符号化処理では、生成済みビデオフレームは、符号化済みスライスA(例えば、圧縮された)、符号化済みスライスB、符号化済みスライスC、及び符号化済みスライスDに符号化される。いくつかの実施形態では、プロセッサまたはハードウェアの数に応じて、複数のスライスが同時に(例えば、並列に)符号化されてもよい。例えば、一部のゲームコンソールは、4個の符号化済みスライスを並列に生成してもよい。より詳細に、ハードウェアエンコーダは、ハードウェアパイプライン化に起因して、複数のエンコーダスライスを並列に圧縮するように構成されてもよい(例えば、1つ以上の符号化済みスライスを生成するために)。
【0058】
動作404において、ネットワークを通じてクライアント210に符号化済みスライスが伝送される。特に、符号化済みスライスは、エンコーダからストリーマデバイスに配信され、ストリーマデバイスは、ネットワークを通じてクライアント210に符号化済みスライスを伝送するように構成される。例えば、ストリーマデバイスは、伝送制御プロトコル/インターネットプロトコルまたはUDP/IPコンピュータネットワーキングモデルのアプリケーションレイヤにおいて動作するように構成される。示されるように、本開示の1つの実施形態に従って、符号化処理及び伝送処理が重ね合わされてもよい。例えば、次の符号化済みスライスのパケットを送信することができる前に、対応する符号化済みスライスの1つ以上のパケットがグループとして送信されるように、符号化済みスライス(例えば、圧縮された)の各々が別個に伝送される。
特に、圧縮されると、対応する符号化済みスライス(例えば、符号化済みスライスの1つ以上のパケット)は次いで、全てのエンコーダスライスが対応するビデオフレームに対して圧縮されることを待つことなく、動作404においてストリーマによる伝送の準備ができている。示されるように、タイムライン501では、エンコーダスライスBがエンコーダによって圧縮される間(例えば、符号化済みスライスBに)、並びにエンコーダスライスC及びDが符号化処理を開始する前に、符号化済みスライスAがストリーマによって伝送される。より具体的に、エンコーダスライスBがエンコーダによって圧縮される前に、符号化済みスライスAのパケットは、ネットワークを通じてストリーマによってクライアント210に伝送される。
同様に、エンコーダスライスCがエンコーダによって圧縮されている間、及びエンコーダスライスDが符号化処理を開始する前に、符号化済みスライスBがストリーマによって伝送される。複数のスライスを同時に符号化することができるケースでは(例えば、並列に符号化された数Xのスライス)、次の数Xのエンコーダスライスが符号化されている(例えば、圧縮される)間に、数Xの符号化済みスライスが送信されてもよい。したがって、本開示の実施形態では、対応するエンコーダスライス及び/またはエンコーダスライスのパケットが符号化及び/または圧縮されるとすぐに、並びに完全なビデオフレームが符号化される前に(慣習的に行われるように)、サーバからクライアントへのデータ(例えば、符号化済みスライス及び/または対応する符号化済みスライスのパケット)の伝送を開始してもよい。そのようにして、データのパケットの相当する数がサーバによって符号化されるとすぐに、サーバからクライアントへのデータの伝送を開始することによって、サーバとクライアントとの間の一方向待ち時間を低減させることができる。
【0059】
クライアント210において、処理は、圧縮済みビデオフレーム(例えば、ビデオフレームの符号化済みスライス)を受信すること、次いで、圧縮済みビデオフレームを復号することを含む。クライアントにおいて、受信処理及び復号処理はまた、符号化済みスライスレベルにおいて実行されてもよく、その結果、対応する符号化済みスライスの1つ以上のパケットが受信されると、その符号化済みスライスは次いで、それらの1つ以上のパケットを使用して復号される。したがって、受信処理及び復号処理は、クライアントにおいて重ね合わされてもよい。特に、クライアント210において、対応するビデオフレームの1つ以上の符号化済みスライスは、動作405において別個に受信される。例示を目的として、タイムライン501では、符号化済みスライスAが最初に受信されてもよく、次いで、符号化済みスライスDが最後に受信されるまで、符号化済みスライスBが受信される、などである。
【0060】
特に、動作406において、受信された符号化済みスライスが次いで復号される。特に、受信されると、全ての符号化済みスライスが対応するビデオフレームに対して受信されることを待つことなく、受信された対応する符号化済みスライスは次いで、動作406においてデコーダによって復号する準備ができている。例えば、タイムライン501では、符号化済みスライスBが受信されている間、並びに符号化済みスライスC及び符号化済みスライスDがネットワークを通じてなおも伝送中である間に、符号化済みスライスAの1つ以上のパケットが復号される。
同様に、符号化済みスライスCが受信されている間、及び符号化済みスライスDがネットワークを通じてなおも伝送中である間に、符号化済みスライスBの1つ以上のパケットが復号される。したがって、本開示の実施形態では、符号化済みスライス及び/または符号化済みスライスのパケットが受信されるとすぐに、並びにビデオフレームについての符号化済みスライス及び/またはそれらの符号化済みスライスの対応するパケットの完全な補完が受信される前に、サーバからクライアントへのデータ(例えば、符号化済みスライス及び/または符号化済みスライスのパケット)の復号を開始してもよい。そのようにして、データのパケットの相当する数がクライアント210によって受信されるとすぐに、データの復号を開始することによって、サーバ260とクライアント210との間の一方向待ち時間を低減させることができる。
【0061】
対応するビデオフレームの符号化済みスライスは、様々なランダムな順序においてクライアントにおいて受信されてもよく(例えば、ネットワークジッタに起因して)、クライアントにおいてハードウェア構成に応じて並列に受信されてもよいことが認識されよう。すなわち、動作405では、伝送された符号化済みスライスは、ジッタに起因して、順番立てないでクライアント210において受信されてもよい。そのケースでは、ジッタの原因となるよう、順序立てないで符号化済みスライスを復号することが可能であることができる(例えば、順序立てないで対応するビデオフレームの符号化済みスライスを受信する)。例えば、ネットワークを通じて伝送される対応するビデオフレームについての符号化済みスライスのシーケンスでは、1つの符号化済みスライスが順序立てないで受信されるとき、復号も順序立てないで実行される。すなわち、各々の符号化済みスライスが受信されるにつれて、符号化がなおも行われる。
【0062】
より詳細に、対応するビデオフレームの符号化済みスライスの各々は、サーバ260のエンコーダにおいて1つ以上のネットワークパケットに分割されてもよく、1つ以上のネットワークパケットは次いで、ネットワークを通じてクライアント210に伝送される。したがって、次のビデオフレームのスライス及び/またはスライスの対応するパケットが受信される前に、クライアント210は、対応するビデオフレームの1つ以上のスライスの各々についての1つ以上のパケットを受信する。すなわち、1つの実施形態では、クライアントにおいて一度にまたは並列して、及び次のビデオフレームの1つ以上の符号化済みスライスが受信される前に、対応するビデオフレームについての1つ以上の符号化済みスライスが受信されてもよい。より具体的に、クライアントにおいて一度にまたは並列して、及び次のビデオフレームの1つ以上の符号化済みスライスが受信される前に、対応するビデオフレームの1つ以上の符号化済みスライスについてのパケットが受信されてもよい。
【0063】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲーミングネットワーク290(例えば、ゲームサーバ260における)の詳細な説明により、
図5Bのフローチャート500Bは、本開示の1つの実施形態に従った、クラウドゲーミングサーバとクライアントとの間の一方向待ち時間を低減させるためにサーバ動作を重ね合わせることができる、クラウドゲーミングのための方法を例示する。
【0064】
510において、方法は、サーバにおいてビデオゲームを実行するとき、ビデオフレームを生成することを含む。例えば、サーバは、ストリーミングモードにおいてビデオゲームを実行していてもよく、その結果、サーバのCPUは、ストリーミングのために使用することができるグラフィックパイプラインを使用してゲームレンダリング済みビデオフレームを生成するために、ユーザからの入力コマンドに応答してビデオゲームを実行する。特に、GPUグラフィックパイプラインと協働してビデオゲームを実行するCPUは、複数のビデオフレームを生成するように構成される。クラウドゲーミングでは、ゲーム生成済みビデオフレームは典型的には、仮想ディスプレイ上での表示のためにレンダリングされる。サーバは、ゲーム生成済みビデオフレームに対して追加の動作を実行してもよい。例えば、スキャンアウト処理の間など、1つ以上のオーバレイが対応するゲーム生成済みビデオフレームに追加されてもよい。
【0065】
520において、方法は、スキャンラインごとに、サーバにおけるエンコーダにゲーム生成済みビデオフレームをスキャンインすることを含む。前に説明されたように、1つ以上のオーバレイを追加することなど、スキャンアウト処理の間にゲーム生成済みビデオフレームが修正されてもよい。したがって、任意選択で、クライアントにビデオフレームをストリーミングすることに備えて、圧縮のために修正されたゲーム生成済みビデオフレームがエンコーダにスキャンインされる。
【0066】
530において、方法は、1つ以上の符号化済みスライスとして、対応するビデオフレームについての1つ以上のエンコーダスライスを符号化することを含む。すなわち、ビデオフレームは、1つ以上の符号化済みスライスを含む圧縮済みビデオフレームに圧縮されている。前に説明されたように、各々の符号化済みスライスは、1つ以上のスキャンラインに構成されてもよく、符号化済みスライスの最小サイズは、1つのスキャンラインであり、符号化済みスライスの最後は、ディスプレイスクリーンのエッジにおいて必ずしも発生しないことがある。
【0067】
符号化の後、1つ以上の符号化済みスライスがバッファに配信される。バッファを充填する速度は、エンコーダの能力に依存し、その結果、エンコーダフィルレートで各々の符号化済みスライスがバッファに配信される。例えば、バッファは、エンコーダがビデオフレームを符号化することが可能であるのと同程度に高速に、より具体的に、エンコーダが符号化済みスライス及び/または符号化済みスライスのパケットを生成することが可能であるのと同程度に高速に充填されてもよい。
【0068】
加えて、エンコーダによって圧縮されている対応するビデオフレームに対して1つ以上の前方誤り訂正(FEC)スライスが生成されてもよい。1つ以上のFECスライスは、クライアントへの伝送の間にロストしたいずれかの符号化済みスライスを訂正するためにクライアントによって使用されてもよい。1つの実施形態では、1つ以上のFECスライスは、ストリーミングの間に1つ以上の符号化済みスライス内でインタリーブされてもよい。すなわち、複数の符号化済みスライス及び複数のFECスライスを有する対応するビデオフレームについて、FECスライスは、ストリーミングの間に符号化済みスライス内でインタリーブされてもよい。例えば、符号化済みスライスのセットを訂正するために使用されるFECスライスは、セットにおける符号化済みスライスの各々が配信された直後に配信されてもよい。
【0069】
540において、方法は、バッファドレイン速度においてネットワークを通じてクライアントに第1の符号化済みスライスをストリーミングするよう、バッファから第1の符号化済みスライスをドレインすることを含む。すなわち、第1の符号化済みスライスは、ネットワークを通じてクライアントに配信され、クライアントは、ディスプレイへのレンダリングのために圧縮済みビデオフレームを受信及び圧縮解除するように構成される。より詳細に、第1の符号化済みスライスの1つ以上のパケットは、ストリーミングのためにドレイン速度においてバッファからドレインされる。1つの実施形態では、全ビデオフレームが符号化される前に、ビデオフレームの少なくとも1つの符号化済みスライスがドレインされる。1つの実施形態では、対応するビデオフレームの1つ以上のスライスを完全に符号化する前に、第1の符号化済みスライスがネットワークを通じてストリーミングされる。
【0070】
1つの実施形態では、ドレイン速度は、クライアントの測定済み最大受信帯域幅におおよそ等しくなるように動的に調節される。特に、圧縮された複数のビデオフレームの複数の符号化済みスライスの伝送は、クライアントの測定済み最大受信帯域幅に従って符号化済みスライスの間隔を空けることによって実行される。そのようにして、1つの実施形態では、バッファドレイン速度は、エンコーダフィルレートから分断される。特に、
図6は、開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするときの、複数のビデオフレームの複数の符号化済みスライスの間隔を空けることを例示し、間隔を空けることは、クライアント210の最大受信帯域幅に基づいている。
【0071】
1つの実施形態では、バッファリング及び待ち時間を低減させるために、対応する符号化済みスライスについてのパケットのサイズが、コーデックによって作成される自然の量のデータに対応するように、エンコーダ/デコーダ(コーデック)610またはコーデック使用率を同調することが有益である。符号化済みスライス(例えば、圧縮された)は、1つ以上のパケットを含んでもよく、1つ以上のパケットは次いで、ネットワークを通じてクライアントに配信される。1つの実施形態では、パケットサイズは、最大伝送ユニット(MTU)に結び付けられる。圧縮された(符号化済みスライスに)ビデオエンコーダスライスがMTUを超えるとき、符号化済みスライスは、いくつかのパケットに分割され、その各々は、MTU以下にサイジングされる。
【0072】
MTUよりも大きい符号化済みスライスの1つのシーケンスは、パケットロスが発生するときに引き起こされたパケットロス率及び視覚変造の量が増大することである。例えば、圧縮済みエンコーダスライスが符号化の間に3つのパケットに分割され、パケットの1つがクライアントへの途中にロストする場合、エンコーダスライス全体がクライアントにおいて無効になり、その結果、単一のパケットをロストさせることは、3つのパケットの効率的なロストを結果としてもたらす。したがって、1つの実施形態では、コーデックによって作成される自然な量のデータ(例えば、MTU)にパケットサイズが同調されてもよい。
1つの実装態様では、パケットサイズは、UDPパケットサイズに対応するように同調される。別の実装態様では、パケットサイズは、スクリーンスライスに対応するように同調されてもよく(例えば、スクリーンのエッジからエッジに)、パケットサイズ及び符号化済みスライスは、MTUに対応する。すなわち、符号化済みスライスは、MTUにサイジングされ、1つのパケットとして配信されてもよい。これは、対応するビデオフレームの符号化済みスライスの数を増大させることができる。パケットサイズがサーバ側におけるコーデックでの自然な何らか(例えば、MTUサイズ及び/または符号化済みスライス)に対応するように同調されるとき、パケットの各々が到達するとすぐにクライアント側上でパケットを復号することを可能にする。
【0073】
1つの実施形態では、特定の時間点において、ネットワークを通じて最大利用可能なビットレートまたは帯域幅に基づいた速度においてサーバからクライアントに圧縮済みビデオフレームが伝送される。すなわち、現在測定されている最大帯域幅に従って、圧縮済みビデオフレームの符号化済みスライスの伝送の速度が動的に調節される。したがって、最大の利用可能なビットレートまたは最大帯域幅に従ってクライアントへの配信のために、符号化済みスライス650のパケット655が間隔を空けられる。すなわち、コーデックのビットレートに従ってパケット配信の間隔を空ける(例えば、バッファドレイン速度635にエンコーダフィルレート615を連結する)代わりに、クライアント210の最大帯域幅に従って(クライアントの最大帯域幅に結び付けられるバッファドレイン速度635で)パケット655が配信される(例えば、バッファドレイン速度635からエンコーダフィルレート615を分断する)。そのようにして、より高い速度でクライアント210においてパケット655を受信することができる。1つの実施形態では、パケットの符号化は、それらが伝送される同一の速度で実行され、その結果、クライアントに利用可能な最大の利用可能な帯域幅に両方の動作が動的に同調される。
【0074】
加えて、サーバにおいて、追加の情報は、クライアントに利用可能であるとサーバが考える総ネットワークスループット(例えば、帯域幅)を定義する最大送信速度を含んでもよい。この最大送信速度は、同一の範囲のパケットに対してパケットロスがどの程度発生したかを示す、クライアントからサーバへのメッセージと結合される、或る範囲のパケットに対してクライアントに送信された帯域幅の量を追跡することによって、サーバによって判定されてもよい。これは、ビデオフレームの符号化済みスライスを送出することができる最大速度を判定するために使用されてもよい。最大速度は、クライアントへのネットワーク接続の安定性に基づいて変動し、変動に適合するために、オフセットが動的に調節されてもよい。更に、最大送信速度は、エンコーダパラメータとは独立して調節されてもよく、その結果、エンコーダが最大送信速度でスライスを作成しないように構成される場合、スライスをより迅速に送出することができる。
【0075】
1つの実施形態では、クライアントにおける最大帯域幅は、クライアントからのフィードバック機構によって判定される。特に、アプリケーションレイヤにおいて動作するストリーマ620は、帯域幅テスタ625などを使用して、クライアントの最大帯域幅を測定する。前に説明されたように、アプリケーションレイヤは、インターネットを通じてネットワークデバイスを相互接続するために使用されるプロトコルのUDPスイートにおいて使用される。例えば、アプリケーションレイヤは、IP通信ネットワークを通じてデバイスの間で通信するために使用される通信プロトコル及びインタフェース方法を定義する。
試験の間、ストリーマ620は、特別なFECパケット640を提供し、その結果、バッファ630(例えば、ファーストイン/ファーストアウトFIFOバッファ)は、試験済み最大帯域幅などの予め定義されたビットレートでパケットをストリーミングすることができる。1つの実施形態では、クライアントは、或る範囲のビデオフレームなどに対して、或る範囲の増分シーケンス識別子(ID)を通じてそれが受信したいくつかのパケットを、フィードバック690としてストリーマ620に戻す。例えば、クライアントは、シーケンスID100~250に対して受信された150個のビデオフレームのうち145個などのような何らか(例えば、150個のビデオフレーム)を報告してもよい。
したがって、サーバ260におけるストリーマ620は、パケットロスを計算することが可能であり、パケットのそのシーケンスの間に送信されていた(例えば、試験されるような)帯域幅の量をストリーマ620が知るので、ストリーマ620は、どのクライアントの最大帯域幅が特定の時点にあるかを動的に判定することができる。クライアントの測定済み最大帯域幅は、制御情報627としてストリーマ620からバッファ630に配信されてもよく、その結果、バッファ630は、クライアントの最大帯域幅におおよそ等しい速度でパケットを動的に伝送することができる。
【0076】
送信される帯域幅の量が可変のビットレート、シーン複雑度などに起因して絶えず変動することを理由に、クライアント210は、この判定を行うことが不可能である。したがって、クライアント210は、いずれかの所与の瞬間にクライアントが扱うことができる最大帯域幅をサーバが送信しているかどうかを知らない。例えば、最大帯域幅は、15Mbps(メガビット/秒)であってもよいが、メニュー上にいるユーザに起因して、シーン複雑度が低いことがあることを理由に、結果として、2Mbpsのみが送信されている。よって、クライアントが0%のパケットロスを報告する場合、これは、クライアント210が15Mbpsの最大帯域幅を扱うことができるかどうかをサーバ260に通知しない。よって、サーバ260が送信しているときのみ、最大帯域幅は、判定される真の最大帯域幅であることができる。
【0077】
図7Aは、開示の1つの実施形態に従った、サーバとクライアントとの間の一方向待ち時間を低減させるために、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、クライアントにおいて受信動作及び復号動作を重ね合わせることを例示する図である。加えて、本開示の1つの実施形態に従って、サーバとクライアントとの間の一方向待ち時間を低減させるために、表示のための圧縮解除済みビデオフレームの受信、復号、及びレンダリングは、クライアントにおいて重ね合わされてもよい。
【0078】
特に、クライアント210は、動作405において圧縮済みビデオフレーム705を受信し、サーバ(図示せず)は、ゲームレンダリング済みビデオフレームを生成するようビデオゲームを実行し、ゲームレンダリング済みビデオフレームは次いで、サーバにおけるエンコーダにおいて符号化され、圧縮済みビデオフレーム705としてクライアントに配信される。圧縮済みビデオフレーム705は、前に説明されたように、符号化済みスライスA(ハッシュされた)などの1つ以上の符号化済みスライスを含む。例えば、圧縮済みビデオフレーム705は、符号化済みスライスA~Gを含む。符号化済みスライスの各々は、異なるサイズの符号化済みスライスであってもよい。例えば、符号化済みスライスDは、符号化済みスライスEよりも大きい。更に、スライスの各々は、1つ以上のパケットに分割されてもよい。
【0079】
クライアント210は、動作406において対応する圧縮済みビデオフレームの1つ以上の符号化済みスライス(例えば、ハッシュされていない復号済みスライスA)を復号するように構成されたデコーダを含む。1つの実施形態では、対応する圧縮済みビデオフレームがクライアントにおいて完全に受信される前に復号処理が開始する。すなわち、対応するビデオフレームに対する符号化済みスライスの復号は、対応するビデオフレームの符号化済みスライスの全てが受信される前に開始する。デコーダが符号化済みスライスごとの単位で復号することを理由に、復号済みビデオフレーム706は、1つ以上のエンコーダスライス(復号されるような)を含む。その後、復号済みビデオフレーム706は次いで、復号済みビデオフレーム706内の情報をスキャンラインまたはスクリーンスライスにレンダリングすることなど、表示することに備えられる。したがって、クライアントレンダリング済みビデオフレーム707は、表示の準備ができている。
【0080】
フォールトトレラントモードでは、本開示の1つの実施形態に従って、動作406においてビデオフレームが完全に復号される前に、動作407においてクライアント210にビデオフレームの表示を開始させることによって、サーバとクライアントとの間の一方向待ち時間を低減させることができる。特に、圧縮済みビデオフレームが完全に復号される前に、ビデオフレームの1つ以上の復号済みスライスがディスプレイへのレンダリングに備えられてもよい。すなわち、407における表示動作は、406における復号動作と重ね合わさる。特に、第1の符号化済みスライス(例えば、スライスA)は、ディスプレイへのクライアントのスキャンアウトが開始する前に到達する必要があり、復号される必要がある。加えて、全ての後続の符号化済みスライスは、それらのそれぞれの圧縮解除済みデータが表示のためにレンダリング及びスキャンアウトされる前に到達する必要があり、復号される必要がある。
【0081】
更に、クライアントにおける受信動作及び復号動作を重ね合わせることに加えて、サーバによって送信された圧縮済みビデオフレームがクライアント210において完全に受信される前に、表示することに備えて次いでレンダリングされる1つ以上の復号済みスライスの表示が行われてもよい。すなわち、クライアントにおける受信動作、復号動作、及び表示動作のうちの1つ以上は、対応するビデオフレームに対して重ね合わされてもよい。
【0082】
その上、本開示の1つの実施形態に従って、サーバ及びクライアントの両方において複数の動作を重ね合わせるとき、サーバにおけるスキャンアウト動作が完全に完了する前でさえ、表示することに備えて次いでレンダリングされるビデオフレームの1つ以上の復号済みスライスがクライアントにおいて表示されてもよい。前に説明されたように、スキャンアウトは、サーバにおけるエンコーダにゲームレンダリング済みビデオフレームを配信し、スキャンアウト処理の間にゲームレンダリング済みビデオフレームは任意選択で修正されてもよい(例えば、オーバレイを追加する)。
【0083】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲーミングネットワーク290(例えば、ゲームサーバ260における)の詳細な説明により、
図7Bのフローチャート700Bは、本開示の1つの実施形態に従った、クラウドゲーミングサーバとクライアントとの間の一方向待ち時間を低減させるためにクライアント動作を重ね合わせることができる、クラウドゲーミングのための方法を例示する。特に、
図7Bは、開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、サーバとクライアントとの間の一方向待ち時間を低減させるためにクライアントにおいて受信動作及び復号動作を重ね合わせることを例示するフローチャートであり、圧縮解除済みビデオフレームをレンダリングすることは任意選択で、受信動作及び復号動作とも重ね合わされてもよい。
【0084】
710において、方法は、クライアントにおいて圧縮済みビデオフレームの1つ以上の符号化済みスライスを受信することを含む。特に、クライアントとのセッションの間、ストリーミングモードにおいてサーバによるビデオゲームの処理に応答して、複数のビデオフレームがサーバにおいて生成される。複数のビデオフレームは、エンコーダにおいて複数の圧縮済みビデオフレームに符号化され、複数の圧縮済みビデオフレームの各々は、1つ以上の対応する符号化済みスライスを含む圧縮済みビデオフレームに対応する。ネットワークを通じて複数の圧縮済みビデオフレームがクライアントに伝送され、より具体的に、複数の圧縮済みビデオフレームの符号化済みスライスがクライアントに伝送される。
【0085】
クライアントにおいて、方法は、デコーダにおいて複数の圧縮済みビデオフレームを受信することと、クライアントと関連付けられたディスプレイへのレンダリングのために複数の圧縮済みビデオフレームを圧縮解除することとを含み、それらの動作が重ね合わせられてもよい。特に、720において、方法は、対応する圧縮済みビデオフレームの1つ以上の符号化済みスライスを完全に受信する前に、クライアントにおいて第1の符号化済みスライスを復号することを含む。
【0086】
図8Aは、開示の1つの実施形態に従った、サーバ上で実行するビデオゲームから生成されたビデオフレームをストリーミングするとき、ビデオフレームの符号化済みスライス内で前方誤り訂正(FEC)パケットをインタリーブすることを例示する図である。対応するビデオフレームの符号化済みスライスの間でFECデータをインタリーブすることは、符号化済みスライスごとの単位で実行することができる、クライアントにおける表示動作に対して受信動作、復号動作、及びレンダリング動作を重ね合わせることを可能にする。特に、前方誤り訂正は、対応するビデオフレームのロストした符号化済みスライスの再構築及び/または符号化済みスライスのロストしたパケットの再構築をもたらす。したがって、前方誤り訂正は、1つ以上の後続の符号化済みスライスが受信及び/または復号される前に、クライアントにおける表示のために受信、復号、及びレンダリングされた符号化済みスライスの表示を可能にする。
【0087】
例えば、符号化済みスライスは、1つ以上のネットワークパケットに区分化されてもよい。スライスと関連付けられた1つ以上のパケットを訂正するために、FECパケットが使用されてもよい。したがって、FECを使用してロストしたパケットの回復を加速化させるために、FECパケットが対応する圧縮済みビデオフレームのデータパケット内で(例えば、符号化済みスライスのパケット内で)インタリーブされてもよい。すなわち、対応する圧縮済みビデオフレームに対するパケットのグループ化の終わりにFECパケットを置く代わりに、データパケット内でFECパケットがインタリーブされる。そのようにして、対応する圧縮済みビデオフレームの1つ以上のデータパケットがロストするとすぐに、対応するFECパケットを使用して、ほぼ瞬時にそれらのロストしたパケットを回復させることができる。
特に、データパケットのセット全体が配信されることを待つことなく、対応する圧縮済みビデオフレームのロストしたパケットの回復を行うことができる。これは、そのFECパケットが回復させることができるデータパケットの後に対応するFECパケットが配信されるからである。したがって、先に(例えば、対応する圧縮済みビデオフレームの符号化済みスライスの伝送の間)、場合によっては、全てのデータパケットが圧縮済みビデオフレームに対して受信される前に受信されたFECパケットは、1つ以上のロストしたパケットを回復させるために使用されてもよい。すなわち、本開示の実施形態では、圧縮済みビデオフレームのパケットのセット全体(例えば、データ及びFEC)がクライアントによって受信されることを待つことなく、符号化済みスライスの損失したパケット及び/または破損したパケットについて訂正するために、前方誤り訂正が先に(例えば、圧縮済みビデオフレームの受信の間)実行されてもよい。
典型的には、圧縮済みビデオフレームに対してパケットの全てを受信した後に、その圧縮済みビデオフレームのいずれかのパケットの前方誤り訂正が実行され、それによって、サーバとクライアントとの間の一方向待ち時間に加わり、開示の実施形態は、クライアントが圧縮済みビデオフレームをなおも受信している間に前方誤り訂正を実行し、それによって、一方向待ち時間を低減させる。したがって、対応する圧縮済みビデオフレームのデータパケット内でFECパケットをインタリーブすることによって、これは、クライアントにおいて復号動作及び表示動作を重ね合わせることをもたらす。
【0088】
加えて、本開示の1つの実施形態に従って、パケットがMTUに同調されるとき、これは、パケットロスからのより容易な回復を可能にすることができる。すなわち、パケットが符号化済みスライスに同調及び/またはサイジングされるので(すなわち、符号化済みスライスと対応するパケットとの間の1対1の関係)、対応するFECを使用してロストした完全な符号化済みスライスを回復させることができる。そのようにして、データパケットにわたってFEC作成が行われ、その結果、1つ以上の対応するデータパケットを訂正するためにFECパケットを使用することができ、各々のデータパケットは、符号化済みスライスに対応する。
図8Aに示されるように、符号化済みスライスの各々は、MTU850にまたはMTU850を下回ってサイジングされ、その結果、1つの対応するパケットを使用してネットワークを通じて各々の符号化済みスライスが伝送される。
【0089】
図8Aは、本開示の1つの実施形態に従った、符号化済みビデオフレームの圧縮済みエンコーダスライスのパケット内でFECパケットをインタリーブすることを示す。純粋に、例えば、符号化済みビデオフレームは、符号化済みスライス0、符号化済みスライス1、符号化済みスライス2、及び符号化済みスライス3を含んでもよい。また、符号化済みスライスは、MTU850またはそれよりも小さくサイジングされてもよい。示されるように、FEC-0及びFEC-1は、符号化済みスライス0、符号化済みスライス1、符号化済みスライス2、及び符号化済みスライス3に対してデータパケットとインタリーブされる。
【0090】
特に、圧縮の間に符号化済みスライス0に対してパケット810aが作成され、符号化済みスライス0は、1つのパケットに圧縮されるようにサイジングされる。符号化済みスライス0は、FEC作成及び回復を目的として、パディング済み部分810bを含んでもよい。1つの実施形態では、パディング済み部分810bが伝送の前にストリップされるにつれて、パケット810aのみがサーバからクライアントに伝送されることに留意することが重要であるが、回復を目的として、クライアントにおいて考慮することができる。同様に、圧縮の間に符号化済みスライスに対してパケット811aが作成され、符号化済みスライス1は、1つのパケットに圧縮されるようにサイジングされてもよい。符号化済みスライス1は、以下で説明されるように、それがFECの間に回復するパケットのセットにおける最大パケットであるように、FEC作成のための対応するパディング済み部分を含まない。
【0091】
FEC-0がパケット820として生成され、符号化済みスライス0及び符号化済みスライス1のパケットの後に伝送される。ロストすることがあるそれらの符号化済みスライスの各々に対して訂正するためにFEC-0 820が使用されてもよく、及び/またはそれらの圧縮された符号化済みスライスの各々のロストしたパケットに対して訂正するためにFEC-0 820が使用されてもよい。FEC-0についてのパケット820パケットサイズは、FEC作成及び回復を実行することを目的として圧縮された符号化済みスライス0及び符号化済みスライス1に対して使用されるパディングのサイズを指示することができる。
すなわち、FECパケットは、ブロックのサイジングに基づいて作成され、FECパケットのサイズは、その対応するFECパケットを使用して訂正することができるデータパケットのセットにおける最大データパケットのサイズに同調される。したがって、FEC作成は、セットにおけるデータパケットのサイジングの知識を必要とする。しかしながら、FEC作成を目的としてセットにおけるデータパケットのいずれかを伝送する前に、FECパケットに対応するデータパケットのセットにおけるデータパケットの各々が生成されることを待つのではなく、セットにおけるデータパケットは、圧縮されると瞬時に伝送されてもよい。
【0092】
特に、符号化済みスライス0についてのパケット810aは、FEC-0の生成を待つことなくサーバのエンコーダにおいて圧縮されるとすぐに伝送されてもよく、FEC作成のために記憶またはバッファリングされてもよい。また、符号化済みスライス1についてのパケット811aは、FEC-0の生成を待つこともなく、サーバのエンコーダにおいて圧縮されるとすぐに伝送されてもよく、FEC作成のために記憶またはバッファリングされてもよい。ブロックのサイジングを使用してFECパケットが作成されることを理由に、データパケットの各々のサイズは、ロストすることがあるそれらのデータパケットのいずれかを回復させるために使用することができる対応するFECパケットを作成する前に通信される必要がある。
【0093】
1つの実施形態では、各々のデータパケットのサイズは、FEC作成を目的として読み込まれる必要がある対応するデータパケットについてのヘッダに含まれる。別の実施形態では、FEC作成を目的として読み込まれる必要がある対応するデータパケットについてのヘッダ内の各々のデータパケットのサイズを通信するのではなく、符号化済みスライスについてのパケット810a及び811aの各々が記憶されることを理由に、それらのパケットの各々のサイジングが知られ、または判定されてもよい。対応するFECパケットを使用して訂正することができるデータパケットのセットにおける最大パケットのサイズが知られると、FEC-0についてのパケットのブロックのサイジングは、FEC-0を生成するときにパケット810a及び811aの最大に同調されてもよい。
【0094】
加えて、FEC-0のサイズが知られると、FEC作成及びデータ回復を目的として、FEC-0を使用して訂正することができるデータパケットのセットにおけるデータパケットに対してパディングサイズも知られる。
図8Aに示されるように、符号化済みスライス0及び符号化済みスライス1を包含したセットにおける最大パケットである、符号化済みスライス1のパケット811aのサイジングにFEC-0が同調される。したがって、FEC作成及び/またはデータ回復のために符号化済みスライス0についてのパディング810bが必要とされる。FEC-0パケット820のサイズが符号化済みスライス1のパケット811aのサイズ(すなわち、FEC-0を使用して訂正することができるデータパケットのセットにおける最大パケットである)に同調されることを理由に、符号化済みスライス1のパケット811aは、FEC作成及び/またはデータ回復のためにいずれのパディングをも必要としない。
【0095】
別の実施形態では、パディングは、1つの実施形態では、MTUに設定されてもよい。特に、FECパケットは、MTUのサイズに正規化される。また、FEC作成及び/またはデータ回復を目的として、対応するFECを使用して訂正することができるパケットのセットにおけるパケットの各々もMTUにパディングされる。例えば、FEC作成及び/またはデータ回復を目的として、FEC-0がMTUにパディングされ、符号化済みスライス0がMTUにパディングされ、符号化済みスライス1もMTUにパディングされる。
【0096】
図8Aの実施例を続けると、符号化済みスライス2及び符号化済みスライス3を含むデータパケットのセットを訂正するためにFEC-1が使用されてもよい。特に、圧縮の間に符号化済みスライス2に対してパケット812aが作成され、符号化済みスライス2は、1つのパケットに圧縮されるようにサイジングされてもよい。符号化済みスライス2は、それがFEC-1を使用して回復することができるパケットのサイズにおける最大パケットであるように、FEC作成及び/またはデータ回復のための対応するパディング済み部分を含まない。
また、圧縮の間に符号化済みスライス3に対してパケット813aが作成され、符号化済みスライス3は、1つのパケットに圧縮されるようにサイジングされてもよい。符号化済みスライス3は、伝送の前にストリップされるFEC作成及びデータ回復のための対応するパディング済み部分813bを含んでもよい。FEC-1がパケット825として生成され、符号化済みスライス2及び符号化済みスライス3の後に伝送される。FEC-1は、ロストすることがあるそれらの符号化済みスライスの各々に対して訂正するために使用されてもよく、及び/またはそれらの圧縮された符号化済みスライスの各々のロストしたパケットに対して訂正するために使用されてもよい。特に、符号化済みスライス1についてのパケット812aは、FEC-1の生成を待つことなく、サーバのエンコーダにおいてそれが圧縮されるとすぐに伝送されてもよく、FEC作成のために記憶及びバッファリングされてもよい。また、符号化済みスライス3についてのパケット813aは、FEC-1の生成を待つこともなく、サーバのエンコーダにおいてそれが圧縮されるとすぐに伝送されてもよく、FEC作成のために記憶及びバッファリングされてもよい。
【0097】
同様に、FEC-1についてのパケット825のパケットサイズは、符号化の間に符号化済みスライス2及び符号化済みスライス3に対して使用されるパディングのサイズを指示することができる。前に説明されたように、各々のデータパケットのサイズは、FEC作成を目的として読み込まれる必要がある対応するデータパケットについてのヘッダに含まれてもよい。前に説明されたように、FEC作成を目的として読み込まれる必要がある対応するデータパケットについてのヘッダ内の各々のデータパケットのサイズを通信するのではなく、符号化済みスライスについてのパケット812a及び813aの各々が記憶されることを理由に、それらのパケットの各々のサイジングが知られ、または判定されてもよい。
対応するFECパケットを使用して訂正することができるデータパケットのセットにおける最大パケットのサイズが知られると、FEC-1についてのパケットのブロックのサイジングは、FEC-1を生成するときにパケット812a及びの813aの最大に同調されてもよい。特に、FEC-1のサイズが知られると、FEC作成及びデータ回復を目的としてFEC-1を使用して訂正することができるデータパケットのセットにおけるデータパケットに対してパディングが知られる。
図8Aに示されるように、符号化済みスライス2及び符号化済みスライス3を包含したセットにおける最大パケットである、符号化済みスライス2のパケット812aのサイジングにFEC-1が同調される。したがって、FEC作成及び/またはデータ回復のために符号化済みスライス2に対してパディングが必要とされない。対照的に、FEC作成及び/またはデータ回復のために符号化済みスライス3に対するパディング813bが必要とされる。
【0098】
本開示の実施形態では、メディアコンテンツをストリーミングし、及び/またはストリーミング済みメディアコンテンツを受信するとき、サーバからクライアントへの伝送の間にロストした、クライアントにおける符号化済みスライス及び/または符号化済みスライスのパケットを回復させるための1つ以上の戦略が実装されてもよい。前に説明されたように、対応する圧縮済みビデオフレームの各々の符号化済みスライスは、1つの対応するネットワークパケットにパケット化され、その結果、パケットは、1対1の関係において単一の符号化済みスライスに対応する。サーバ動作及びクライアント動作の両方を含むパイプラインの全ての部分を重ね合わせるとき、対応するビデオフレームの追加のパケットをいつ待つか(例えば、ロスとしたパケットがいつ受信されたか)、及び次のビデオフレームにいつ移動するかについての判定が行われる必要がある。
【0099】
次のビデオフレームにいつ移動するかの判定を行うためにデータパケットのヘッダ内の情報が使用されてもよい。各々のデータパケットヘッダでは、対応するパケットがどのビデオフレームに属するかをビデオゲーム(例えば、ゲーミングアプリケーション)に通知するフレームインデックスが存在する。加えて、各々のパケットヘッダは、パケットインデックス及びそのフレームについてのパケットの総数に関する情報を包含する。
例えば、
図8Bは、開示の1つの実施形態に従った、対応するビデオフレームについての符号化済みスライスのデータパケット800Bのヘッダ850の図である。例えば、ヘッダ850内の情報は、対応するビデオフレームについてのフレーム番号851、対応するビデオフレームについての符号化済みスライスの総数852、フレーム生成タイムスタンプ(例えば、フリップ時間において要する)853、暗号化検証854、対応するFECパケットについての識別子855、符号化済みスライス番号856、及び対応する符号化済みスライスがいつ生成されたかを指定するタイムスタンプ857を含む。任意選択で、データパケット800Bのサイズがヘッダ850に含まれてもよい。データパケット800Bは、データ部分858を含む。
【0100】
次のビデオフレームからのデータパケットがクライアントにおいて受信されるポイントにおいて、カレントビデオフレームについての残りのデータパケットを待つかどうか、または次のビデオフレームに移動するかどうかの決定が行われる。特に、パケットがカレントビデオフレーム(N)に対して受信されるにつれて、どのパケットが受信されたかを追跡することが実行される。
1つの実施形態では、次のビデオフレーム(N+1)からのパケットが受信されるとすぐに、カレントビデオフレームに対して受信されていないいずれかのパケット(マイナスFECパケット)は、「predec」と称される方法などを通じて訂正される必要がある。H.264ビデオフレーム全体が構文的に正しいままにするために、構文的に正しいH.264符号化済みスライスを生成するようPredecが実行される。すなわち、符号化済みスライス及び/または符号化済みスライスの1つ以上のパケットがロストしたと判定されるとき、スキップマクロブロックを挿入することによって、ロストした符号化済みスライスの代替としてフィラースライスが生成される。そのようにして、ロストした符号化済みスライスが存在するとき、デコーダがクラッシュする可能性が低い。
【0101】
このポイントにおいて、クライアント側で破損が発生することがあり、スクリーン上でいずれかの破損した領域(例えば、ロストした符号化済みスライスに対応するスキップマクロブロック)を補正するために、参照フレーム無効化、FEC回復、または前のレンダリング済みビデオフレームからのデータを使用することが実行される必要があることがある。
【0102】
例えば、1つの実施形態では、第1の符号化済みスライスに対応する画素についてのスキップマクロブロックを補正するために、参照フレーム無効化が実行されてもよい。別の実施形態では、ロストした符号化済みスライス及び/またはロストしたデータパケットもしくは対応する符号化済みスライスのロストしたパケットを訂正するために、FEC回復が実行される。例えば、ロストした符号化済みスライス、ロストしたデータパケット、または対応する符号化済みスライスのロストしたデータパケットを再生成及び/または回復させるために、受信されたFECパケット及び/またはFECスライスが使用される。
【0103】
更なる別の実施形態では、スキップマクロブロックを補正するために、前のビデオフレームが使用される。例えば、クライアントにおいてカレントビデオフレームに対してディスプレイにレンダリングするとき、ロストした符号化済みスライスのスキップマクロブロックに対応する画素についての前のビデオフレームからの色値が使用される。特に、ロストした符号化済みスライスに対して画素及び/またはスキップマクロブロックと重ね合わせるように、前のビデオフレームについての画素データを保持したフレームバッファからの適切なデータが識別される。例えば、カレントビデオフレームは、その中から第2の符号化済みスライスが損失している8個のスライスを有してもよい。前のビデオフレームがクライアントにおける表示のために既にレンダリングされているので、カレントビデオフレームの損失した第2の符号化済みスライスに対処するために、前のビデオフレームからのデータが使用されてもよい。
例示を目的として、前のビデオフレームは、13個の符号化済みスライスに分割されていてもよい。クライアントにおける表示のためにレンダリングされたカレントビデオフレームについてのデータは、「新たな」ディスプレイバッファに配置される(例えば、画素ごとに)。ロストした符号化済みスライスに対応する画素と重ね合わさる前のビデオフレームについての画素データは、「古い」ディスプレイバッファから識別及びアクセスされてもよい。すなわち、カレントビデオフレームの損失した第2の符号化済みに対してスライス前のビデオフレームからの画素データが使用されてもよい。
【0104】
図9は、本開示の様々な実施形態の態様を実行するために使用することができる実施例のデバイス900のコンポーネントを例示する。例えば、
図9は、開示の実施形態に従った、サーバにおいて符号化動作及び送信動作を重ね合わせることと、クライアントにおいて受信動作及び復号動作を重ね合わせることと、クライアントにおいて表示動作に受信動作、復号動作、及びレンダリング動作を重ね合わせることとを含む、メディアコンテンツをストリーミングし、及び/またはストリーミング済みメディアコンテンツを受信するために適切な例示的なハードウェアシステムを例示する。このブロック図は、組み込むことができ、その各々が発明の実施形態を実施するために適切である、パーソナルコンピュータ、サーバコンピュータ、ゲームコンソール、モバイルデバイス、または他のデジタルデバイスであってもよいデバイス900を例示する。デバイス900は、ソフトウェアアプリケーション及び任意選択でオペレーティングシステムを稼働させるための中央処理装置(CPU)902を含む。CPU902は、1つ以上の同種または異種プロセシングかから構成されてもよい。
【0105】
様々な実施形態に従って、CPU902は、1つ以上のプロセシングコアを有する1つ以上の汎用マイクロプロセッサである。更なる実施形態は、ゲームの実行の間のグラフィック処理に対して構成されたアプリケーションのメディアアプリケーション及び対話型エンタテインメントアプリケーションなど、高度に並列したアプリケーション及び計算集中的なアプリケーションに対して特に適合されたマイクロプロセッサアーキテクチャを有する1つ以上のCPUを使用して実装されてもよい。
【0106】
メモリ904は、CPU902及びGPU916による使用のためのアプリケーション及びデータを記憶する。記憶装置906は、アプリケーション及びデータに対する不揮発性記憶装置及び他のコンピュータ可読媒体を提供し、固定ディスクドライブ、着脱可能ディスクドライブ、フラッシュメモリデバイス、及びCD-ROM、DVD-ROM、Blu-ray(登録商標)、HD-DVD、または他の光学記憶デバイスと共に信号伝送及び記憶媒体を含んでもよい。ユーザ入力デバイス908は、1人以上のユーザからのユーザ入力をデバイス500に通信し、その例は、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチルまたはビデオレコーダ/カメラ、及び/またはマイクロフォンを含んでもよい。
ネットワークインタフェース909は、デバイス900が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、ローカルエリアネットワーク、及びインターネットなどのワイドエリアネットワークを通じた有線通信または無線通信を含んでもよい。音声プロセッサ912は、CPU902、メモリ904、及び/または記憶装置906によって提供される命令及び/またはデータから、アナログまたはデジタルのオーディオ出力を生成するように適合される。CPU902、GPU916及びGPUキャッシュ918を含むグラフィックサブシステム、メモリ904、データ記憶装置、ユーザ入力デバイス908、ネットワークインタフェース909、並びに音声プロセッサ912を含むデバイス900のコンポーネントは、1つ以上のデータバス922を介して接続される。
【0107】
グラフィックサブシステム914は、デバイス900のデータバス922及びコンポーネントに更に接続される。グラフィックサブシステム914は、グラフィックプロセシングユニット(GPU)916及びグラフィックメモリ918を含む。グラフィックメモリ918は、出力画像の各画素の画素データを記憶するために使用される表示メモリ(例えばフレームバッファ)を含む。グラフィックメモリ918は、GPU916と同一のデバイスに統合されてもよく、9PU516と別個のデバイスとして接続されてもよく、及び/またはメモリ904内で実装されてもよい。CPU902から直接グラフィックメモリ918に画素データが提供されてもよい。
代わりに、CPU902は、それからGPU916が1つ以上の出力画像の画素データを生成する、所望の出力画像を定義したデータ及び/または命令をGPU916に提供する。所望の出力画像を定義したデータ及び/または命令は、メモリ904及び/またはグラフィックメモリ918に記憶されてもよい。実施形態では、GPU916は、シーンについてのジオメトリ、ライティング、シェーディング、テクスチャリング、動き、及び/またはカメラパラメータを定義した命令及びデータから出力画像についての画素データを生成するための3Dレンダリング能力を含む。GPU916は更に、シェーダプログラムを実行する能力を有する1つ以上のプログラム可能実行ユニットを含む。
【0108】
グラフィックサブシステム914は、ディスプレイデバイス910上で表示されることになり、または投影システム(図示せず)によって投影されることになる、画像についての画素データをグラフィックメモリ918から周期的に出力する。ディスプレイデバイス910は、CRT、LCD、プラズマ、及びOLEDディスプレイを含む、デバイス900からの信号に応答して視覚情報を表示する能力を有するいずれかのデバイスであってもよい。デバイス900は、例えば、アナログ信号またはデジタル信号をディスプレイデバイス910に提供することができる。
【0109】
グラフィックサブシステム914を最適化するための他の実施形態は、複数のアプリケーションと単一のゲームとサポートする分散GPUとの間でGPUインスタンスが共有される、マルチテナンシGPU動作を含む。グラフィックサブシステム914は、1つ以上のプロセシングデバイスとして構成される。
【0110】
例えば、1つの実施形態では、グラフィックサブシステム914は、マルチテナンシGPU機能性を実行するように構成されてもよく、1つのグラフィックサブシステムは、複数のゲームに対してグラフィックパイプライン及び/またはレンダリングパイプラインを実行している。すなわち、グラフィックサブシステム914は、実行されている複数のゲームの間で共有される。
【0111】
他の実施形態では、グラフィックサブシステム914は、対応するCPU上で実行している単一のアプリケーションに対してグラフィック処理を実行するよう組み合わされる複数のGPUデバイスを含む。例えば、複数のGPUは、代替的な形式のフレームレンダリングを実行することができ、最初のGPUが次のビデオフレームをレンダリングするとすぐに、最後のGPUに到達するまで、直列のフレーム周期内に、GPU1が第1のフレームをレンダリングし、GPU2が第2のフレームをレンダリングする、などである(例えば、2つのGPUのみが存在する場合、GPU1が第3のフレームをレンダリングする)。すなわち、フレームをレンダリングするときにGPUが回転する。レンダリング動作は重ね合わさってもよく、GPU2は、GPU1が第1のフレームをレンダリングすることを終了する前に第2のフレームをレンダリングすることを開始してもよい。
別の実施形態では、複数のGPUデバイスは、レンダリングパイプライン及び/またはグラフィックパイプラインにおいて異なるシェーダ動作が割り当てられてもよい。マスタGPUは、主要なレンダリング及び合成を実行している。例えば、3つのGPUを含むグループでは、マスタGPU1は、スレーブGPU2及びスレーブGPU3の出力のレンダリング(例えば、第1のシェーダ動作)及び合成を実行してもよく、スレーブGPU2は、第2のシェーダ(例えば、河川などの流体効果)動作を実行してもよく、スレーブGPU3は、第3のシェーダ(例えば、微量の煙)動作を実行してもよく、マスタGPU1は、GPU1、GPU2、及びGPU3の各々からの結果を合成する。そのようにして、ビデオフレームをレンダリングするように異なるシェーダ動作(例えば、旗を振ること、風、煙発生、火など)を実行するために、異なるGPUを割り当てることができる。更なる別の実施形態では、3つのGPUの各々は、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てられてもよい。上記実施形態及び実装態様では、それらの動作は、同一のフレーム周期内に(並列して同時に)、または異なるフレーム周期内に(並列して順番に)実行されてもよい。
【0112】
したがって、本開示は、サーバにおいて符号化動作及び送信動作を重ね合わせることと、クライアントにおいて受信動作及び復号動作を重ね合わせることと、クライアントにおいて表示動作に受信動作、復号動作、及びレンダリング動作を重ね合わせることとを含む、メディアコンテンツをストリーミングし、及び/またはストリーミング済みメディアコンテンツを受信するように構成された方法及びシステムを説明する。
【0113】
本明細書で定義される様々な実施形態が、本明細書に開示す様々な特徴を使用し、特定の実施態様に結合され得る、または組み込まれ得ることを理解されるべきである。よって、提供される実施例は、いくつかの可能な実施例にすぎず、様々な要素を組み合わせることでより多くの実施態様を定義することが可能な様々な実施態様に限定されない。いくつかの実施例では、一部の実施態様は、開示されたまたは同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
【0114】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な消費者向け電気製品、ミニコンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施されてよい。本開示の実施形態はまた、有線ベースネットワークまたは無線ネットワークを介してリンクされる遠隔処理デバイスによりタスクが行われる分散コンピューティング環境においても実施されてもよい。
【0115】
上記の実施形態を念頭に置いて、本開示の実施形態がコンピュータシステムに記憶されたデータを含む様々なコンピュータ実装の動作を使用することができることを理解されるべきである。これらの動作は、物理量の物理的操作を必要とする動作である。本開示の実施形態の一部を形成する、本明細書で説明される動作のうちのいずれも、有用な機械動作である。開示の実施形態はまた、これら動作を実行するためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築されてもよい。または、装置は、コンピュータに記憶されたコンピュータプログラムにより選択的に起動または構成される汎用コンピュータであってもよい。特に、本明細書の教示に従って書かれたコンピュータプログラムと共に様々な汎用マシンを使用することができる、あるいは、必要な動作を実行するためにさらに特化した装置を構築するほうがより好都合である場合もある。
【0116】
本開示はまた、コンピュータ可読媒体上のコンピュータ可読コードとしても具現化することができる。コンピュータ可読媒体は、後でコンピュータシステムにより読み出され得るデータを格納できる任意のデータストレージデバイスである。コンピュータ可読媒体の例には、ハードドライブ、ネットクワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、並びに他の光学及び非光学データストレージデバイスが含まれる。コンピュータ可読媒体には、コンピュータ可読コードが分散方式で格納され実行されるように、ネットワーク接続されたコンピュータシステムにわたり分散されたコンピュータ可読有形媒体が含まれてもよい。
【0117】
方法の動作が特定の順序で説明されたが、オーバレイ動作の処理が所望の方法で実行される限り、動作間に他のハウスキーピング動作が実行されてよく、または動作がわずかに異なる時間に起こるように調整されてよく、またはシステム内に動作を分散することで、処理に関連する様々な間隔で処理動作が起こることを可能にしてよいことを理解されるべきである。
【0118】
先述の開示は、理解を明確にするためにある程度詳細に説明されたが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。したがって、本実施形態は、限定ではなく例示としてみなされるべきであり、本開示の実施形態は、本明細書に提供される詳細に限定されるものではなく、添付の特許請求の範囲内及び均等物内で変更されてもよい。
【国際調査報告】