IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソニー・コンピュータエンタテインメントの特許一覧

特表2022-551587クラウドゲームサーバとクライアント間のVSYNCの同期及びオフセット
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-12
(54)【発明の名称】クラウドゲームサーバとクライアント間のVSYNCの同期及びオフセット
(51)【国際特許分類】
   H04N 21/236 20110101AFI20221205BHJP
   H04N 21/238 20110101ALI20221205BHJP
   H04N 21/43 20110101ALI20221205BHJP
   A63F 13/355 20140101ALI20221205BHJP
【FI】
H04N21/236
H04N21/238
H04N21/43
A63F13/355
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022520318
(86)(22)【出願日】2020-09-29
(85)【翻訳文提出日】2022-05-13
(86)【国際出願番号】 US2020053343
(87)【国際公開番号】W WO2021067317
(87)【国際公開日】2021-04-08
(31)【優先権主張番号】62/909,132
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/696,214
(32)【優先日】2019-11-26
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/909,142
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/909,152
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/909,118
(32)【優先日】2019-10-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/696,125
(32)【優先日】2019-11-26
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/696,363
(32)【優先日】2019-11-26
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/696,040
(32)【優先日】2019-11-26
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100099324
【弁理士】
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】マーク イー. サーニー
(72)【発明者】
【氏名】ケルビン エム. ヨン
【テーマコード(参考)】
5C164
【Fターム(参考)】
5C164FA06
5C164FA22
5C164SA21S
5C164SB01S
5C164SB14P
5C164SB21P
5C164UB04P
(57)【要約】
サーバにおいて、サーバVSYNC信号をサーバVSYNC周波数に設定することを含む方法が開示される。サーバVSYNC信号は、サーバVSYNC周波数の複数のフレーム期間中のビデオフレームの生成に対応する。この方法では、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定する。この方法では、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに圧縮ビデオフレームを送信し、圧縮ビデオフレームは、生成ビデオフレームに基づいている。この方法では、クライアントで、圧縮ビデオフレームを復号及び表示し、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、サーバVSYNC信号とクライアントVSYNC信号との間の相対的なタイミングを調整する。
【選択図】図4
【特許請求の範囲】
【請求項1】
サーバで、サーバVSYNC信号をサーバのVSYNC周波数に設定し、前記サーバVSYNC信号が前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでの複数のビデオフレームの生成に対応し、
クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整する、方法。
【請求項2】
さらに、生成された前記複数のビデオフレームに関連するタイムスタンプ情報を前記サーバから前記クライアントに送信する、請求項1に記載の方法。
【請求項3】
前記タイムスタンプ情報が前記複数の圧縮ビデオフレームと共に送信されるか、または前記タイムスタンプ情報が前記複数の圧縮ビデオフレームとは別に送信される、請求項2に記載の方法。
【請求項4】
前記タイムスタンプ情報は、生成された対応するビデオフレームに対応するタイムスタンプを含み、
前記対応するタイムスタンプは、前記サーバでの対応するフリップ時間、または前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生する、請求項2に記載の方法。
【請求項5】
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC周波数の少なくとも1つを類似するように調整することをさらに含む、請求項2に記載の方法。
【請求項6】
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC信号の間の前記相対的なオフセットを調整することをさらに含む、請求項2に記載の方法。
【請求項7】
前記サーバVSYNC信号と前記クライアントVSYNC信号の少なくとも1つを調整して、前記相対的なタイミングを調整することをさらに含む、請求項1に記載の方法。
【請求項8】
クライアントの操作の前記タイミングを継続的に分析し、かつ、
前記分析に基づいて、前記サーバVSYNC信号と前記クライアントVSYNC信号の少なくとも1つを調整することにより、前記相対的なタイミングを動的に調整することをさらに含む、請求項1に記載の方法。
【請求項9】
さらに、前記サーバまたはクライアントで、前記サーバVSYNC周波数と前記クライアントVSYNC周波数の間のドリフトを決定し、かつ、
前記サーバまたはクライアントで、前記対応するサーバVSYNC周波数または前記クライアントVSYNC周波数を1つ以上のフレーム期間で調整して、前記ドリフトを補償する、請求項7に記載の方法。
【請求項10】
前記サーバVSYNC信号または前記クライアントVSYNC信号の少なくとも1つの調整では、
前記サーバVSYNC信号または前記クライアントVSYNC信号のフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加する、請求項7に記載の方法。
【請求項11】
前記サーバVSYNC信号または前記クライアントVSYNC信号の少なくとも1つの前記調整では、
前記サーバまたは前記クライアントの対応するクロックをオーバークロックまたはアンダークロックする、請求項7に記載の方法。
【請求項12】
前記サーバは、前記複数の圧縮ビデオフレームを生成するためのエンコーダを含み、前記複数の圧縮ビデオフレームは、ストリーミングモードで前記サーバによるアプリケーションの処理に応答して生成され、セッション中に前記クライアントに配信される、請求項1に記載の方法。
【請求項13】
前記クライアントは、前記クライアントに関連付けられたディスプレイにレンダリングするために、前記複数の圧縮ビデオフレームを受信及び解凍するように構成される、請求項12に記載の方法。
【請求項14】
前記複数の圧縮ビデオフレームの前記クライアントによる前記復号のタイミングが分析され、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整するために使用される、請求項1に記載の方法。
【請求項15】
さらに、前記複数の圧縮ビデオフレーム内の複数の符号化されたスライスの前記クライアントにより前記復号のタイミングを分析し、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整する、請求項14に記載の方法。
【請求項16】
前記複数の圧縮ビデオフレームの最悪に近い場合の復号時間が分析され、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整する、請求項14に記載の方法。
【請求項17】
前記最悪に近い場合の復号時間は、前記クライアントで受信された前記複数の圧縮ビデオフレームの復号時間の分布を測定することによって決定される、請求項16に記載の方法。
【請求項18】
前記対応するビデオフレームの対応するスキャンアウトでエンコーダに生成される前記複数のビデオフレームのそれぞれについて、前記サーバで対応するタイムスタンプを提供し、
前記複数のビデオフレームの前記対応するタイムスタンプを前記クライアントに配信し、
前記複数のビデオフレームのそれぞれのタイミングを与えるヒストグラムを構築し、前記ビデオフレームは、前記サーバで提供される前記対応するタイムスタンプに関連する前記クライアントにおける対応する復号時間の前記クライアントに対して生成及び配信されるものであり、
前記複数の圧縮ビデオフレームの閾値パーセンテージが前記クライアントに到着し、前記対応するタイムスタンプによって示される前記クライアントVSYNC信号の対応する発生時に表示するために時間内に復号されるように、前記サーバVSYNC信号から前記クライアントVSYNC信号をオフセットすることをさらに含む、請求項1に記載の方法。
【請求項19】
フレーム期間がほぼ等しいサイズである複数のフレーム期間の間に前記サーバが複数のビデオフレームを生成し、
クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定し、
前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを前記サーバからゼクライアントに送信し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示し、かつ、
1つまたは複数のクライアント操作の前記タイミングを分析して、前記クライアントVSYNC信号の前記相対的なタイミングを調整し、前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、前記サーバで前記複数の圧縮ビデオフレームを生成する、方法。
【請求項20】
さらに、前記複数のフレーム期間に関連するタイムスタンプ情報を前記サーバから前記クライアントに定期的に送信する、請求項19に記載の方法。
【請求項21】
さらに、前記サーバまたはクライアントで、前記サーバVSYNC周波数と前記クライアントVSYNC周波数の間のドリフトを決定し、かつ、
前記サーバまたはクライアントで、前記対応するサーバVSYNC周波数または前記クライアントVSYNC周波数を1つ以上のフレーム期間で調整して、前記ドリフトを補償する、請求項19に記載の方法。
【請求項22】
前記対応するサーバVSYNC周波数または前記クライアントVSYNC周波数の調整では、
さらに、前記サーバVSYNC信号またはクライアントVSYNC信号のフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加する、請求項21に記載の方法。
【請求項23】
前記対応するサーバVSYNC周波数または前記クライアントVSYNC周波数の前記調整では、
前記サーバまたは前記クライアントの対応するクロックをオーバークロックまたはアンダークロックする、請求項21に記載の方法。
【請求項24】
方法を実行するためのコンピュータプログラムを格納する非一時的なコンピュータ可読媒体であって、
サーバVSYNC信号を、サーバで、サーバのVSYNC周波数に設定するためのプログラム命令を有し、前記サーバVSYNC信号が前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでの複数のビデオフレームの生成に対応し、
クライアントVSYNC信号を、クライアントで、クライアントVSYNC周波数に設定するためのプログラム命令を有し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信するためのプログラム命令を有し、
前記クライアントが前記複数の圧縮ビデオフレームを復号及び表示するためのプログラム命令を有し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整するためのプログラム命令を有する、非一時的コンピュータ可読媒体。
【請求項25】
生成された前記複数のビデオフレームに関連するタイムスタンプ情報を前記サーバから前記クライアントに送信するためのプログラム命令をさらに有し、
前記タイムスタンプ情報は、生成された対応するビデオフレームに対応するタイムスタンプを含み、
前記対応するタイムスタンプは、前記サーバでの対応するフリップ時間、または前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生する、請求項24に記載の非一時的コンピュータ可読媒体。
【請求項26】
さらに、前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC周波数の少なくとも1つを類似するように調整する、請求項24に記載の非一時的コンピュータ可読媒体。
【請求項27】
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC信号の間の前記相対的な位相またはオフセットを調整するためのプログラム命令をさらに有する、請求項24に記載の非一時的コンピュータ可読媒体。
【請求項28】
前記サーバVSYNC信号と前記クライアントVSYNC信号の少なくとも1つを調整して、前記相対的なタイミングを調整するためのプログラム命令をさらに有する、請求項24に記載の非一時的コンピュータ可読媒体。
【請求項29】
前記サーバまたはクライアントで、前記サーバVSYNC周波数と前記クライアントVSYNC周波数の間のドリフトを決定するためのプログラム命令、及び、
前記サーバまたはクライアントで、前記対応するサーバVSYNC周波数または前記クライアントVSYNC周波数を1つ以上のフレーム期間で調整して、前記ドリフトを補償するためのプログラム命令をさらに有する、請求項28に記載の非一時的コンピュータ可読媒体。
【請求項30】
前記サーバVSYNC信号または前記クライアントVSYNC信号の少なくとも1つを調整するための前記プログラム命令は、
対応するサーバVSYNC信号またはクライアントVSYNC信号のフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加するためのプログラム命令を有する、請求項28に記載の非一時的コンピュータ可読媒体。
【請求項31】
前記サーバVSYNC信号または前記クライアントVSYNC信号の少なくとも1つを調整するためのプログラム命令は、
前記サーバまたは前記クライアントの対応するクロックをオーバークロックまたはアンダークロックするためのプログラム命令を有する、請求項28に記載の非一時的コンピュータ可読媒体。
【請求項32】
サーバVSYNC信号を、サーバで、複数のフレーム期間を定義するサーバのVSYNC周波数に設定し、前記サーバVSYNC信号は、前記複数のフレーム期間中の前記サーバでの複数のビデオフレームの生成に対応するものであり、
クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記クライアントにより使用されるフレームバッファリングの前記量を設定する、方法。
【請求項33】
前記フレームバッファリングの量は、経時的に前記クライアントによって動的に設定される、請求項32に記載の方法。
【請求項34】
前記フレームバッファリングの量が、前記クライアントでバッファリングするフレームの数を定義する、請求項32に記載の方法。
【請求項35】
さらに、前記1つまたは複数のクライアント操作の前記タイミングに基づいて、前記サーバVSYNC信号と前記クライアントVSYNC信号の間の相対的なタイミングを調整する、請求項32に記載の方法。
【請求項36】
前記複数のビデオフレームに関連付けられたタイムスタンプ情報を送信し、
各ビデオフレームの前記タイミングを与えるヒストグラムを構築し、前記ビデオフレームは、前記対応するタイムスタンプ情報に関連する前記クライアントでの対応する復号時間の前記クライアントに対して生成及び配信されるものであり、
ある瞬間の前記ヒストグラムの幅を測定し、かつ、
前記ヒストグラムの前記幅と前記フレーム期間に基づいて、前記クライアントで表示バッファの数を動的に設定する、請求項32に記載の方法。
【請求項37】
対応する生成されたビデオフレームの対応するタイムスタンプ情報は、前記サーバでの対応するフリップタイムで発生するか、または、前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生する、請求項36に記載の方法。
【請求項38】
前記クライアントによって使用される前記フレームバッファリングの量は、待ち時間調整のための入力であり、前記待ち時間調整は、前記フレームが所定の時間より遅く到着した場合に前記クライアントでのフレームの表示をスキップすることを決定することを有する、請求項32に記載の方法。
【請求項39】
復号される前記複数の圧縮ビデオフレームは、前記クライアントVSYNC信号を使用して表示される、請求項32に記載の方法。
【請求項40】
方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体であって、
VSYNC信号を、サーバで、複数のフレーム期間を定義するサーバのVSYNC周波数に設定するためのプログラム命令を有し、前記サーバVSYNC信号は、前記複数のフレーム期間中の前記サーバでの複数のビデオフレームの生成に対応するものであり、
クライアントVSYNC信号を、クライアントで、クライアントVSYNC周波数に設定するためのプログラム命令を有し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信するためのプログラム命令を有し、
前記複数の圧縮ビデオフレームを、前記クライアントで、復号及び表示するためのプログラム命令を有し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記クライアントにより使用されるフレームバッファリングの前記量を設定するためのプログラム命令を有する、非一時的コンピュータ可読媒体。
【請求項41】
前記方法において、前記フレームバッファリングの量は、経時的に前記クライアントによって動的に設定される、請求項40に記載の非一時的コンピュータ可読媒体。
【請求項42】
前記方法において、前記フレームバッファリングの量は、前記クライアントで前記バッファリングするフレームの数を定義する、請求項40に記載の非一時的コンピュータ可読媒体。
【請求項43】
前記1つまたは複数のクライアント操作の前記タイミングに基づいて、前記サーバVSYNC信号と前記クライアントVSYNC信号の間の前記相対的なタイミングを調整するためのプログラム命令をさらに有する、請求項40に記載の非一時的コンピュータ可読媒体。
【請求項44】
前記複数のビデオフレームに関連付けられたタイムスタンプ情報を送信するためのプログラム命令を有し、
各ビデオフレームの前記タイミングを与えるヒストグラムを構築するためのプログラム命令を有し、前記ビデオフレームは、前記対応するタイムスタンプ情報に関連する前記クライアントでの対応する復号時間の前記クライアントに対して生成及び配信される
ある瞬間の前記ヒストグラムの幅を測定するためのプログラム命令を有し、かつ、
前記ヒストグラムの前記幅と前記フレーム期間に基づいて、前記クライアントで表示バッファの数を動的に設定するためのプログラム命令をさらに有する、請求項40に記載の非一時的コンピュータ可読媒体。
【請求項45】
前記方法において、生成される、前記対応するビデオフレームの対応するタイムスタンプ情報は、前記サーバでの対応するフリップタイムで、または前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生する、請求項44に記載の非一時的コンピュータ可読媒体。
【請求項46】
前記方法において、前記クライアントによって使用される前記フレームバッファリングの量は、待ち時間調整のための入力であり、前記待ち時間調整は、前記フレームが所定の時間より遅く到着した場合に前記クライアントでのフレームの表示をスキップすると決定する、請求項40に記載の非一時的コンピュータ可読媒体。
【請求項47】
前記方法において、前記復号される前記複数の圧縮ビデオフレームが、前記クライアントVSYNC信号を使用して表示される、請求項40に記載の非一時的コンピュータ可読媒体。
【請求項48】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに接続され、命令を格納しており、コンピュータシステムにより実行されると、方法を前記コンピュータシステムに実行させるメモリとを含み、前記方法では、
サーバVSYNC信号を、サーバで、複数のフレーム期間を定義するサーバのVSYNC周波数に設定し、前記サーバVSYNC信号は、前記複数のフレーム期間中の前記サーバでの複数のビデオフレームの生成に対応するものであり、
クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記クライアントにより使用されるフレームバッファリングの前記量を設定する、コンピュータシステム。
【請求項49】
前記方法において、前記フレームバッファリングの量は、経時的に前記クライアントによって動的に設定される、請求項48に記載のコンピュータシステム。
【請求項50】
前記方法において、前記フレームバッファリングの量が、前記クライアントでバッファリングするフレームの数を定義する、請求項48に記載のコンピュータシステム。
【請求項51】
前記方法では、さらに、
前記複数のビデオフレームに関連付けられたタイムスタンプ情報を送信し、
各ビデオフレームの前記タイミングを与えるヒストグラムを構築し、前記ビデオフレームは、前記対応するタイムスタンプ情報に関連する前記クライアントでの対応する復号時間の前記クライアントに対して生成及び配信されるものであり、
ある瞬間の前記ヒストグラムの幅を測定し、かつ、
前記ヒストグラムの前記幅と前記フレーム期間に基づいて、前記クライアントで表示バッファの数を動的に設定する、請求項48に記載のコンピュータシステム。
【請求項52】
方法であって、
複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定し、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスのVSYNC周波数に設定され、
前記複数のデバイス間で複数の信号を送信し、これらの信号は、少なくとも2つのデバイスの対応するデバイスのVSYNC信号間の相対的なタイミングを調整するために分析及び使用される、方法。
【請求項53】
さらに、第1のデバイスはサーバデバイスであり、前記サーバデバイスに対してサーバVSYNC信号をサーバVSYNC周波数に設定し、前記サーバVSYNC信号は、前記サーバVSYNC周波数の前記複数の間にサーバデバイスでアプリケーションを実行する間の複数のフレーム期間のビデオフレームの生成に対応し、
前記サーバVSYNC信号を使用して、ネットワークを介して、前記サーバデバイスから前記複数のデバイスの残りのデバイスのそれぞれに、前記複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信し、かつ、
前記複数のデバイスの前記残りのデバイスのそれぞれが、前記複数の圧縮ビデオフレームを復号及び表示し、
前記複数のデバイスの前記残りのデバイスのそれぞれでの前記複数の圧縮ビデオフレームの前記表示は同期されている、請求項52に記載の方法。
【請求項54】
前記複数のデバイスの前記残りのデバイスのそれぞれは、サーバ及び前記サーバデバイスを備えたクライアントアーキテクチャで構成されたクライアントデバイスである、請求項53に記載の方法。
【請求項55】
前記サーバデバイスは、前記複数のデバイスのうちの前記残りのデバイスと共にマルチテナント構成で構成される、請求項54に記載の方法。
【請求項56】
さらに、前記複数のデバイスの対応するデバイスでアプリケーションを処理するときに、対応する複数のビデオフレームを生成し、かつ、
前記複数の前記複数のデバイスのそれぞれの前記対応するデバイスが、前記対応する複数のビデオフレームを表示し、
前記複数のデバイスでの対応する複数のビデオフレームの表示は同期されている、請求項52に記載の方法。
【請求項57】
前記複数のデバイスのそれぞれは、独立したピアデバイスであり、
前記複数のデバイスは、ピアツーピアゲームのためにピアツーピア構成で配置されている、請求項52に記載の方法。
【請求項58】
前記複数の信号のうちの少なくとも1つがタイムスタンプ情報を有する、請求項52に記載の方法。
【請求項59】
前記複数の信号が分析されて、前記複数のデバイスのデバイスVSYNC信号が同期される、請求項52に記載の方法。
【請求項60】
少なくとも2つのデバイスの対応するデバイスVSYNC信号間の前記相対的なタイミングは、
対応するデバイスの対応するデバイスのVSYNC信号の対応するフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加することによって調整される、請求項59に記載の方法。
【請求項61】
少なくとも2つのデバイスの対応するデバイスVSYNC信号間の前記相対的なタイミングは、
対応するデバイスの対応するクロックをオーバークロックまたはアンダークロックすることにより調整される、請求項59に記載の方法。
【請求項62】
さらに、第1のデバイスの第1のデバイスのVSYNC周波数と第2のデバイスの第2のデバイスのVSYNC周波数との間のドリフトを決定し、かつ、
前記ドリフトを補償するために、前記第1のデバイスまたは前記第2のデバイスが、対応するデバイスのVSYNC周波数を1つまたは複数のフレーム期間で調整する、請求項52に記載の方法。
【請求項63】
方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体であって、
複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定するためのプログラム命令を有し、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスのVSYNC周波数に設定するものであり、かつ、
前記複数のデバイス間で複数の信号を送信するためのプログラム命令を有し、前記複数の信号は、少なくとも2つのデバイスの対応するデバイスVSYNC信号間の前記相対的なタイミングを調整するために分析及び使用される、非一時的コンピュータ可読媒体。
【請求項64】
サーバVSYNC信号を、サーバで、サーバのVSYNC周波数に設定するためのプログラム命令を有し、前記サーバVSYNC信号が前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでのアプリケーションの複数のビデオフレームの生成に対応するものであり、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記複数のデバイスに、ビデオフレームに基づく複数の圧縮ビデオフレームを送信するためのプログラム命令を有し、かつ、
複数のデバイスのそれぞれが、複数の圧縮ビデオフレームを復号及び表示するためのプログラム命令をさらに有し、
前記複数のデバイスでの前記複数の圧縮ビデオフレームの前記表示は同期されている、請求項63に記載の非一時的コンピュータ可読媒体。
【請求項65】
前記方法では、前記複数のデバイスのそれぞれがクライアントデバイスであり、
前記方法では、前記複数のデバイスのそれぞれがサーバ及びクライアントアーキテクチャで構成される、請求項64に記載の非一時的コンピュータ可読媒体。
【請求項66】
前記複数のデバイスの対応するデバイスでのアプリケーションの対応する複数のビデオフレームを生成するためのプログラム命令と、及び、
前記複数の複数のデバイスのそれぞれの対応するデバイスが、前記対応する複数のビデオフレームを表示するためのプログラム命令をさらに有し、
前記複数のデバイスでの対応する複数のビデオフレームの表示は同期されている、請求項63に記載の非一時的コンピュータ可読媒体。
【請求項67】
前記方法では、前記複数のデバイスのそれぞれは、独立したピアデバイスであり、
前記方法では、前記複数のデバイスは、ピアツーピアゲームのためにピアツーピア構成で配置されている、請求項66に記載の非一時的コンピュータ可読媒体。
【請求項68】
前記方法において、前記複数の信号が分析されて、複数のデバイスのデバイスVSYNC信号を同期させる、請求項63に記載の非一時的コンピュータ可読媒体。
【請求項69】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに接続され、命令を格納しており、前記コンピュータシステムにより実行されると、方法を前記コンピュータシステムに実行させるメモリとを有し、前記方法では、
複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定し、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスのVSYNC周波数に設定し、
前記複数のデバイス間で複数の信号を送信し、前記複数の信号は、少なくとも2つのデバイスの対応するデバイスのVSYNC信号間の相対的なタイミングを調整するために分析及び使用される、コンピュータシステム。
【請求項70】
前記方法では、さらに、
サーバVSYNC信号を、サーバで、サーバVSYNC周波数に設定し、前記サーバVSYNC信号は、前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでのアプリケーションの複数のビデオフレームの生成に対応し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記複数のデバイスに、ビデオフレームに基づく複数の圧縮ビデオフレームを送信し、かつ、
複数のデバイスのそれぞれが、複数の圧縮ビデオフレームを復号及び表示し、
前記複数のデバイスでの前記複数の圧縮ビデオフレームの前記表示は同期されている、請求項69に記載のコンピュータシステム。
【請求項71】
前記方法では、前記複数のデバイスのそれぞれがクライアントデバイスであり、
前記方法では、前記複数のデバイスのそれぞれがサーバ及びクライアントアーキテクチャで構成される、請求項70に記載のコンピュータシステム。
【請求項72】
さらに、前記複数のデバイスの対応するデバイスでのアプリケーションの対応する複数のビデオフレームを生成し、かつ、
前記複数の前記複数のデバイスのそれぞれの対応するデバイスが、前記対応する複数のビデオフレームを表示し、
前記複数のデバイスでの対応する複数のビデオフレームの表示は同期されている、請求項69に記載のコンピュータシステム。
【請求項73】
前記方法では、前記複数のデバイスのそれぞれは、独立したピアデバイスであり、
前記方法では、前記複数のデバイスは、ピアツーピアゲームのためにピアツーピア構成で配置されている、請求項72に記載のコンピュータシステム。
【請求項74】
前記方法において、前記複数の信号が分析されて、前記複数のデバイスのデバイスVSYNC信号が同期される、請求項69に記載のコンピュータシステム。
【請求項75】
クラウドゲームの方法であって、
クライアントで符号化されたビデオフレームを受信し、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次に前記サーバのエンコーダで符号化されたビデオフレームとして符号化され、前記符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを有するものであり、
1つまたは複数の復号されたスライスを生成するために、前記クライアントのデコーダで前記1つまたは複数の符号化されたスライスを復号し、
前記クライアントで表示するために前記1つ以上の復号されたスライスをレンダリングし、かつ、
前記クライアントで前記1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる前記1つまたは複数の復号されたスライスの表示を開始する、方法。
【請求項76】
前記クライアントで前記符号化されたビデオフレームを完全に受信する前に、前記1つ以上の符号化されたスライスの復号を開始することをさらに有する、請求項75に記載の方法。
【請求項77】
レンダリングされる前記1つまたは複数の復号されたスライスの表示の開始では、
前記1つまたは複数の符号化されたスライスを完全に復号する前にレンダリングされる前記1つまたは複数の復号されたスライスの表示を開始る、請求項75に記載の方法。
【請求項78】
さらに、前記サーバで、サーバVSYNC信号をサーバのVSYNC周波数に設定し、前記サーバVSYNC信号は、前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでの複数のレンダリングされたビデオフレームの生成に対応し、
前記クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のレンダリングされたビデオフレームに基づく複数の圧縮ビデオフレームを送信し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整する、請求項75に記載の方法。
【請求項79】
前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングの調整がなされ、この調整は、
生成された前記複数のビデオフレームに関連するタイムスタンプ情報を前記サーバから前記クライアントに送信し、ここで、対応するレンダリングされた生成されたビデオフレームの対応するタイムスタンプは、前記サーバでの対応するフリップタイムで、または前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生するものであり、
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数とクライアントのVSYNC周波数の少なくとも1つを類似するように調整し、かつ、
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC信号の間の前記相対的なオフセットを調整することによって行われる、請求項78に記載の方法。
【請求項80】
前記タイムスタンプ情報が前記複数の圧縮ビデオフレームと共に送信されるか、または前記タイムスタンプ情報が前記複数の圧縮ビデオフレームとは別に送信される、請求項79に記載の方法。
【請求項81】
前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングは、
前記サーバVSYNC信号または前記クライアントVSYNC信号のフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加することによって調整される、請求項78に記載の方法。
【請求項82】
クラウドゲームの方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体であって、
クライアントで符号化されたビデオフレームを受信するためのプログラム命令を有し、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次に前記サーバのエンコーダで前記符号化されたビデオフレームとして符号化され、前記符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを有するものであり、
1つまたは複数の復号されたスライスを生成するために、前記クライアントのデコーダで前記1つまたは複数の符号化されたスライスを復号するためのプログラム命令を有し、
前記クライアントで表示するために前記1つまたは複数の復号されたスライスをレンダリングするためのプログラム命令を有し、かつ、
前記クライアントで前記1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる前記1つまたは複数の復号されたスライスの表示を開始するためのプログラム命令を有する、非一時的コンピュータ可読媒体。
【請求項83】
前記クライアントで符号化されたビデオフレームを完全に受信する前に、前記1つ以上の符号化されたスライスの復号を開始するためのプログラム命令をさらに有する、請求項82に記載の非一時的コンピュータ可読媒体。
【請求項84】
レンダリングされる前記1つまたは複数の復号されたスライスの表示を開始するための前記プログラム命令が、
前記1つまたは複数の符号化されたスライスを完全に復号する前にレンダリングされる前記1つまたは複数の復号されたスライスの表示を開始するためのプログラム命令を有する、請求項82に記載の非一時的コンピュータ可読媒体。
【請求項85】
前記サーバで、サーバVSYNC信号をサーバのVSYNC周波数に設定するためのプログラム命令を有し、前記サーバVSYNC信号は、前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでの複数のレンダリングされたビデオフレームの生成に対応するものであり、
前記クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定するためのプログラム命令を有し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のレンダリングされたビデオフレームに基づく複数の圧縮ビデオフレームを送信するためのプログラム命令を有し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示するためのプログラム命令を有し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整するためのプログラム命令をさらに有する、請求項82に記載の非一時的コンピュータ可読媒体。
【請求項86】
前記プログラム命令において、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングの調整がなされ、この調整は、
生成された前記複数のレンダリングされたビデオフレームに関連するタイムスタンプ情報を前記サーバから前記クライアントに送信するためのプログラム命令であって、対応するレンダリングされた生成されたビデオフレームの対応するタイムスタンプは、前記サーバでの対応するフリップタイムで、または前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生するものである、プログラム命令と、
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC周波数の少なくとも1つを類似するように調整するためのプログラム命令と、
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC信号の間の前記相対的な位相またはオフセットを調整するためのプログラム命令と、によって行われる、請求項85に記載の非一時的コンピュータ可読媒体。
【請求項87】
前記方法において、前記タイムスタンプ情報が前記複数の圧縮ビデオフレームと共に送信されるか、または前記タイムスタンプ情報が前記複数の圧縮ビデオフレームとは別に送信される、請求項86に記載の非一時的コンピュータ可読媒体。
【請求項88】
前記方法において、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングは、
前記サーバVSYNC信号または前記クライアントVSYNC信号のフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加することによって調整される、請求項85に記載の非一時的コンピュータ可読媒体。
【請求項89】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに接続され、命令を格納しており、前記コンピュータシステムにより実行されると、クラウドゲームの方法を前記コンピュータシステムに実行させるメモリを含み、前記方法では、
クライアントで符号化されたビデオフレームを受信し、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次に前記サーバのエンコーダで符号化されたビデオフレームとして符号化され、前記符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを有するものであり、
1つまたは複数の復号されたスライスを生成するために、前記クライアントのデコーダで前記1つまたは複数の符号化されたスライスを復号し、
前記クライアントで表示するために前記1つ以上の復号されたスライスをレンダリングし、かつ、
前記クライアントで前記1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる前記1つまたは複数の復号されたスライスの表示を開始する、コンピュータシステム。
【請求項90】
前記方法では、
前記クライアントで符号化されたビデオフレームを完全に受信する前に、前記1つ以上の符号化されたスライスの復号を開始することをさらに有する、請求項89に記載のコンピュータシステム。
【請求項91】
前記方法において、レンダリングされる前記1つまたは複数の復号されたスライスの表示の開始では、
前記1つまたは複数の符号化されたスライスを完全に復号する前に前記ディスプレイでレンダリングされる前記1つまたは複数の復号されたスライスの表示を開始する、請求項89に記載のコンピュータシステム。
【請求項92】
前記方法では、さらに、
前記サーバで、サーバVSYNC信号をサーバのVSYNC周波数に設定し、前記サーバVSYNC信号は、前記サーバVSYNC周波数の複数のフレーム期間中の前記サーバでの複数のレンダリングされたビデオフレームの生成に対応するものであり、
前記クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定し、
前記サーバVSYNC信号を使用して、ネットワークを介して前記サーバから前記クライアントに前記複数のレンダリングされたビデオフレームに基づく複数の圧縮ビデオフレームを送信し、
前記クライアントで、前記複数の圧縮ビデオフレームを復号及び表示し、かつ、
前記クライアントが前記複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作の前記タイミングを分析して、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングを調整する、請求項89に記載のコンピュータシステム。
【請求項93】
前記方法において、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングの調整がなされ、この調整は、
生成された前記複数のビデオフレームに関連するタイムスタンプ情報を前記サーバから前記クライアントに送信し、ここで、対応するレンダリングされた生成されたビデオフレームの対応するタイムスタンプは、前記サーバでの対応するフリップタイムで、または前記対応するビデオフレームをエンコーダにスキャンするために使用される前記サーバVSYNC信号の対応する発生時に発生するものであり、
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数とクライアントのVSYNC周波数の少なくとも1つを類似するように調整し、及び
前記サーバから前記クライアントに送信された前記タイムスタンプ情報に基づいて、前記サーバVSYNC周波数と前記クライアントVSYNC信号の間の前記相対的なオフセットを調整することによって行われる、請求項92に記載のコンピュータシステム。
【請求項94】
前記方法において、前記サーバVSYNC信号と前記クライアントVSYNC信号との間の前記相対的なタイミングは、
前記サーバVSYNC信号または前記クライアントVSYNC信号のフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加することによって調整される、請求項92に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ネットワークを介してコンテンツをストリーミングするように構成されたストリーミングシステム、より具体的には、クラウドゲームサーバとクライアントとの間の待ち時間を短縮するためのクラウドゲームサーバとクライアントとの間の垂直同期(VSYNC)信号の同期に関する。
【背景技術】
【0002】
近年、クラウドゲームサーバとネットワークを介して接続されたクライアントとの間でストリーミング形式のオンラインまたはクラウドゲームを可能にするオンラインサービスが継続的に推進されている。ストリーミング形式は、オンデマンドのゲームタイトルの利用可能性、マルチプレイヤーゲームのためのプレイヤー間のネットワーク機能、プレイヤー間の資産の共有、プレイヤー及び/または観客間のインスタントエクスペリエンスの共有、友人がフレンドプレイビデオゲームを見ることを可能にする、友人を友人の進行中のゲームプレイに参加させるなどにより、いっそう人気が高まっている。残念ながら、需要は、ネットワーク接続の機能と、クライアントに配信される高品質の画像をレンダリングするのに十分な応答性を備えたサーバとクライアントで実行される処理の制限にも押し上げられている。
例えば、サーバで実行されるすべてのゲームアクティビティの結果は、最高のユーザエクスペリエンスを実現するために、圧縮して、低いミリ秒の待ち時間でクライアントに送り返す必要がある。ラウンドトリップの待ち時間は、ユーザのコントローラ入力からクライアントでのビデオフレームの表示までの全体的な時間として定義できる。これには、コントローラからクライアントへの制御情報の処理と送信、クライアントからサーバへの制御情報の処理と送信、入力に応答するビデオフレームを生成するためのサーバでのその入力の使用、エンコーディングユニットへのビデオフレームの処理と転送(スキャンアウトなど)、ビデオフレームの符号化、クライアントへの符号化されたビデオフレームの送り返し、ビデオフレームの受信と復号、及び表示前のビデオフレームのいずれかの処理またはステージングが含まれる場合がある。
一方向の待ち時間は、サーバでのビデオフレームの符号化ユニットへの転送(スキャンアウトなど)の開始から、クライアントでのビデオフレームの表示の開始までの時間で構成されるラウンドトリップ待ち時間の一部として定義できる。ラウンドトリップ及び一方向の待ち時間の一部は、データストリームが通信ネットワークを介してクライアントからサーバに送信され、サーバからクライアントに送信されるのにかかる時間に関連している。別の部分は、クライアントとサーバでの処理に関連している。フレームの復号と表示に関連する高度な戦略などの、これらの操作の改善により、サーバとクライアント間のラウンドトリップと一方向の待ち時間が大幅に削減され、クラウドゲームサービスのユーザに良質のエクスペリエンスが提供される。
【0003】
本開示の実施形態は、このような背景の下になされたものである。
【発明の概要】
【0004】
本開示の実施形態は、ネットワークを介してコンテンツ(例えば、ゲーム)をストリーミングするように構成されたストリーミングシステム、より具体的には、クラウドゲームサーバとクライアントとの間の待ち時間を短縮することを目的とした、クラウドゲームサーバとクライアントとの間のVSYNC信号の同期に関する。この特許出願の文脈では、「同期」とは、周波数が一致するように信号を調整することを意味すると解釈されるべきだが、位相は異なる場合がある。「オフセット」は、信号間の時間の遅延を意味すると解釈する必要がある。例えば、一方の信号が最大に達してからもう一方の信号が最大に達するまでの時間である。
【0005】
本開示の実施形態は、方法を開示する。方法は、サーバで、サーバVSYNC信号をサーバVSYNC周波数に設定し、サーバVSYNC信号がサーバVSYNC周波数の複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応する、設定することを含む。方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。方法は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信することを含む。方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。方法は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、サーバVSYNC信号とクライアントVSYNC信号との間の相対的なタイミングを調整することを含む。
【0006】
本開示の実施形態は、方法を開示する。方法は、フレーム期間がほぼ等しいサイズである、複数のフレーム期間の間にサーバで複数のビデオフレームを生成することを含む。方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。方法は、複数のビデオフレームに基づく複数の圧縮ビデオフレームをサーバからクライアントに送信することを含む。方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。方法は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、クライアントVSYNC信号の相対的なタイミングを調整し、サーバで複数の圧縮ビデオフレームを生成することを含む。
【0007】
本開示の他の実施形態は、方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、サーバで、サーバVSYNC信号をサーバVSYNC周波数に設定するためのプログラム命令であって、サーバVSYNC信号がサーバVSYNC周波数の複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応するプログラム命令を含む。コンピュータ可読媒体は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定するためのプログラム命令を含む。コンピュータ可読媒体は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントで複数の圧縮ビデオフレームを復号及び表示するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、サーバVSYNC信号とクライアントVSYNC信号との間の相対的なタイミングを調整するためのプログラム命令を含む。
【0008】
本開示の他の実施形態では、プロセッサと、プロセッサに結合されたメモリとを含むコンピュータシステムが開示され、メモリは命令を格納しており、当命令は、コンピュータシステムにより実行されると、方法をコンピュータシステムに実行させる。方法は、サーバで、サーバVSYNC信号をサーバVSYNC周波数に設定し、サーバVSYNC信号がサーバVSYNC周波数の複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応する、設定することを含む。方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。方法は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信することを含む。方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。方法は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、サーバVSYNC信号とクライアントVSYNC信号との間の相対的なタイミングを調整することを含む。
【0009】
本開示の他の実施形態は、別の方法を開示する。方法は、サーバで、サーバVSYNC信号を複数のフレーム期間を定義するサーバVSYNC周波数に設定し、サーバVSYNC信号が複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応する、設定することを含む。方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。方法は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信することを含む。方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。方法は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、クライアントにより使用されるフレームバッファリングの量を設定することを含む。
【0010】
本開示の他の実施形態は、方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、サーバで、サーバVSYNC信号を複数のフレーム期間を定義するサーバVSYNC周波数に設定するためのプログラム命令であって、サーバVSYNC信号が複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応する、設定するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定するためのプログラム命令を含む。コンピュータ可読媒体は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントで複数の圧縮ビデオフレームを復号及び表示するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、クライアントにより使用されるフレームバッファリングの量を設定するためのプログラム命令を含む。
【0011】
本開示の他の実施形態では、プロセッサと、プロセッサに結合されたメモリとを含むコンピュータシステムが開示され、メモリは命令を格納しており、当命令は、コンピュータシステムにより実行されると、方法をコンピュータシステムに実行させる。方法は、サーバで、サーバVSYNC信号を複数のフレーム期間を定義するサーバVSYNC周波数に設定し、サーバVSYNC信号が複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応する、設定することを含む。方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。方法は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに複数のビデオフレームに基づく複数の圧縮ビデオフレームを送信することを含む。方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。方法は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、クライアントにより使用されるフレームバッファリングの量を設定することを含む。
【0012】
本開示の他の実施形態は、別の方法を開示する。方法は、複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定することを含み、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスVSYNC周波数に設定される。方法は、複数のデバイス間で複数の信号を送信することを含み、これは、少なくとも2つのデバイスの対応するデバイスVSYNC信号間の相対的なタイミングを調整するために分析及び使用される。
【0013】
本開示の他の実施形態は、方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定するためのプログラム命令であって、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスVSYNC周波数に設定する、プログラム命令を含む。コンピュータ可読媒体は、複数のデバイス間で複数の信号を送信するためのプログラム命令であって、少なくとも2つのデバイスの対応するデバイスVSYNC信号間の相対的なタイミングを調整するために分析及び使用されるプログラム命令を含む。
【0014】
本開示の他の実施形態では、プロセッサと、プロセッサに結合されたメモリとを含むコンピュータシステムが開示され、メモリは命令を格納しており、当命令は、コンピュータシステムにより実行されると、方法をコンピュータシステムに実行させる。方法は、複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定することを含み、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスVSYNC周波数に設定される。方法は、複数のデバイス間で複数の信号を送信することを含み、これは、少なくとも2つのデバイスの対応するデバイスのVSYNC信号間の相対的なタイミングを調整するために分析及び使用される。
【0015】
本開示の他の実施形態は、別の方法を開示する。方法は、クライアントで符号化されたビデオフレームを受信することを含み、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次にサーバのエンコーダで符号化されたビデオフレームとして符号化され、符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを含む。方法は、1つまたは複数の復号されたスライスを生成するために、クライアントのデコーダで1つまたは複数の符号化されたスライスを復号することを含む。方法は、クライアントで表示するために1つ以上の復号されたスライスをレンダリングすることを含む。方法は、クライアントで1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる1つまたは複数の復号されたスライスの表示を開始することを含む。
【0016】
本開示の他の実施形態は、方法を実行するためのコンピュータプログラムを格納する非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、クライアントで符号化されたビデオフレームを受信するためのプログラム命令であって、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次にサーバのエンコーダで符号化されたビデオフレームとして符号化され、符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを有するものであるプログラム命令を含む。コンピュータ可読媒体は、クライアントのデコーダで1つまたは複数の符号化されたスライスを復号して1つまたは複数の復号されたスライスを生成するためのプログラム命令を含む。コンピュータ可読媒体は、クライアントで表示するために1つまたは複数の復号されたスライスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、クライアントで1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる1つまたは複数の復号されたスライスの表示を開始するプログラム命令を含む。
【0017】
本開示の他の実施形態では、プロセッサと、プロセッサに結合されたメモリとを含むコンピュータシステムが開示され、メモリは命令を格納しており、当命令は、コンピュータシステムにより実行されると、方法をコンピュータシステムに実行させる。方法は、クライアントで符号化されたビデオフレームを受信することを含み、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次にサーバのエンコーダで符号化されたビデオフレームとして符号化され、符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを含む。方法は、1つまたは複数の復号されたスライスを生成するために、クライアントのデコーダで1つまたは複数の符号化されたスライスを復号することを含む。方法は、クライアントで表示するために1つ以上の復号されたスライスをレンダリングすることを含む。方法は、クライアントで1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる1つまたは複数の復号されたスライスの表示を開始することを含む。
【0018】
本開示の他の態様は、本開示の原理を例として示す、添付図面を併用して以下の詳細な説明から明らかになるであろう。
【0019】
本開示は、添付図面と併せて、以下の詳細な説明を参照することにより、最も良く理解することができる。
【図面の簡単な説明】
【0020】
図1図1Aは、本開示の一実施形態による、フレーム期間の開始時のVSYNC信号の図である。図1Bは、本開示の一実施形態による、VSYNC信号の周波数の図である。
図2A】本開示の一実施形態による、様々な構成において、1つまたは複数のクラウドゲームサーバと1つまたは複数のクライアントデバイスとの間のネットワークを介してゲームを提供するためのシステムの図であり、VSYNC信号を同期及びオフセットして、一方向の待ち時間を短縮することができる。
図2B】本開示の一実施形態による、2つ以上のピアデバイス間でのゲームを提供するための図であり、VSYNC信号を同期及びオフセットして、デバイス間のコントローラ及び他の情報の受信の最適なタイミングを達成することができる。
図2C】本開示の一実施形態による、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利益を得る様々なネットワーク構成を示す。
図2D】本開示の一実施形態による、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利益を得る、クラウドゲームサーバと複数のクライアントとの間のマルチテナンシー構成を示す。
図3】本開示の一実施形態による、サーバ上で実行されるビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトによるクラウドゲームサーバとクライアントとの間の一方向の待ち時間の変動を示す。
図4】本開示の一実施形態による、サーバ上で実行されるビデオゲームから生成されたビデオフレームをストリーミングするときのクラウドゲームサーバ及びクライアントを含むネットワーク構成を示し、サーバとクライアントとの間のVSYNC信号は、サーバとクライアントでの操作の重複を可能にするために、及びサーバとクライアントとの間の一方向の待ち時間を短縮するために同期及びオフセットされる。
図5A】本開示の一実施形態による、クラウドゲームサーバとクライアントでのそれぞれのクロック間のドリフトによる、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングの可能な変動、及びクライアント及びサーバの動作にかかる時間及びネットワーク待ち時間の変動を示す図である。
図5B】本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングを示すヒストグラムを含み、クラウドゲームサーバとクライアントでのそれぞれのクロック間のドリフトによる後続のヒストグラムにおける測定される復号時間の増加を示す。
図5C】本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングを示すヒストグラムを含み、クラウドゲームサーバとクライアントでのそれぞれのクロック間の測定されるドリフトの補償後、後続のヒストグラムにおける復号時間の首尾一貫した測定値を示す。
図6A】本開示の一実施形態による、一方向の待ち時間を短縮する目的で、クラウドゲームサーバとクライアントとの間でVSYNC信号を調整するための方法を示す流れ図である。
図6B】本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングの分布を提供するヒストグラムの構築を含む、一方向の待ち時間を短縮する目的で、クラウドゲームサーバとクライアントとの間でVSYNC信号の調整を実行するときにVSYNC信号をアライメントさせる方法を示す流れ図であり、ヒストグラムがサーバとクライアントでのVSYNC信号間のオフセットの調整を決定するために構成され、ヒストグラムはまた、サーバVSYNC信号とクライアントVSYNC信号の間のドリフトを決定するために構成される。
図6C】本開示の一実施形態による、一方向の待ち時間を短縮する目的で、クラウドゲームサーバとクライアントとの間でVSYNC信号の調整を実行するときにVSYNC信号を同期させるための別の方法を示す流れ図である。
図7】本開示の一実施形態による、サーバでの圧縮ビデオフレームの生成に関連してクライアントVSYNC信号を調整するための方法を示す流れ図であり、ビデオフレームは、同様のサイズのフレーム期間中に生成される。
図8A】本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングの分布を提供するヒストグラムの構築を示す図であり、ヒストグラムが、サーバとクライアントでのVSYNC信号間のオフセットの調整を決定するために構成されている。
図8B】本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングの分布を提供するヒストグラムの図であり、ヒストグラムが、サーバとクライアントでのVSYNC信号間のオフセットの調整を決定するために構成されている。
図9】サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングの分布を提供するヒストグラムを構築するための方法を示す流れ図であり、ヒストグラムは、クライアントで復号されたビデオフレームの必要なバッファリングの量を決定するために構成されている。
図10】本開示の一実施形態による、2つ以上のデバイス間のVSYNC信号間の相対的なタイミングを調整するための方法を示す流れ図である。
図11A】本開示の一実施形態による、クライアントで表示するための解凍されたビデオフレームの受信、復号、及びレンダリングの重複を示している。
図11B】本開示の一実施形態による、クラウドゲームの方法を示す流れ図であり、符号化されたフレームがサーバからクライアントで受信され、復号されて表示のためにレンダリングされ、ビデオフレームの復号及び表示は、一方向の待ち時間を短縮する目的で重複することができる。
図12】本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイスの構成要素を示す。
【発明を実施するための形態】
【0021】
以下の詳細な説明は、例示の目的で多くの特定の詳細を含むが、当業者であれば、以下の詳細に対する多くの変形及び変更が本開示の範囲内にあることを理解するであろう。したがって、以下で説明される本開示の態様は、この説明に続く特許請求の範囲への一般性を失うことなく、また限定を課すことなく示される。
【0022】
概して、本開示の様々な実施形態は、メディアコンテンツをストリーミングするとき(例えば、ビデオゲームからオーディオ及びビデオをストリーミングするとき)、ソースデバイスとターゲットデバイスとの間の待ち時間及び/または待ち時間の不安定性を低減するように構成された方法及びシステムを説明する。特に、本開示のいくつかの実施形態では、クラウドゲームサーバとクライアントとの間のVSYNC信号は同期され、オフセットされる。クラウドゲームサーバとクライアントでのクロックの違いにより、クラウドゲームサーバとクライアントのVSYNC信号が相互にドリフトする。このドリフトは、最大フレーム期間の待ち時間の不安定性につながる。例えば、ゲームがビデオフレーム生成のために60Hzで実行されている場合、経時的に変化する追加の0~16.7ミリ秒の待ち時間がある。クライアントでの圧縮ビデオフレームの最悪または最悪に近い場合の到着時間を分析することにより、クラウドゲームサーバとクライアントの間の理想的なVSYNC関係を決定することができる。この理想的な関係は、クラウドゲームサーバまたはクライアントのいずれかでVSYNC周波数を調整することで確立できるため、待ち時間の不安定性を取り除くことができる。
本開示の他の実施形態では、ゲーム機(例えば、ゲームコンソール)間のVSYNC信号は、同期され、オフセットされて、ピアデバイス間の理想的なVSYNC関係及び最小の一方向の待ち時間を提供する。特に、対面型のゲームにおけるピアデバイス(ゲーム機など)間のクロックの違いにより、それらのVSYNC信号は相互にドリフトし、最大でフレーム期間の待ち時間が不安定になる。例えば、ゲームがビデオフレーム生成のために60Hzで実行されている場合、経時的に変化する追加の0~16.7ミリ秒の待ち時間がある。タイムスタンプ情報を交換することにより、ピアデバイス間の理想的なVSYNC関係を決定することができる。この理想的な関係は、ピアデバイスのいずれかでVSYNC周波数を調整することで確立できるため、待ち時間の不安定性を取り除くことができる。
本開示のさらに他の実施形態では、動的クライアントバッファリング、及びクラウドゲームサーバからクライアントで受信されたビデオフレームの選択された使用は、待ち時間の短縮及び調整をもたらす。ビデオフレームの生成のサーバ側のタイミングに関する知識により、クライアントは各フレームの理想的な表示時間を決定できる。クライアントへの圧縮ビデオフレームの到着時間の変動性に基づいて、フレームのバッファリング(シングルバッファリング、ダブルバッファリング、トリプルバッファリングなど)を動的に調整できる。待ち時間到着フレームの表示をスキップすることを選択するなどの、待ち時間の調整がまた、発生し得る。本開示の他の実施形態では、クラウドゲームサーバとクライアントとの間の一方向の待ち時間は、圧縮ビデオフレームとそれらのディスプレイの復号を重複させることによって低減され得る。クラウドゲームのクライアントは、クラウドゲームサーバから圧縮ビデオフレームを受信し、圧縮ビデオフレームを復号する。フレームがクライアントで完全に受信または復号される前にビデオフレームの表示を開始することにより、一方向の待ち時間を減らすことができる。表示のための送信のタイミングは、圧縮ビデオフレームの受信と復号に必要な残り時間を予測する必要がある。
【0023】
特に、サーバで複雑なフレーム(シーンの変更など)を生成するために必要な追加の時間、サーバで複雑なフレームを符号化/圧縮するための時間の増加、ネットワークを介した可変の通信パス、及びクライアントで複雑なフレームを復号するための時間の増加のために、サーバとクライアントの間に待ち時間の不安定性が生じる可能性がある。また、サーバとクライアントのクロックの違いが原因で待ち時間が不安定になることもある。これにより、サーバとクライアントのVSYNC信号がドリフトする。一実施形態では、この待ち時間の不安定性は、サーバVSYNC信号またはクライアントVSYNC信号のいずれかを調整して、サーバVSYNC信号及びクライアントVSYNC信号を同期されたアライメントに戻す(例えば、同じ周波数で動作する)ことによって取り除くことができる。
別の実施形態では、サーバVSYNC信号とクライアントVSYNC信号との間のタイミングオフセットを調整することは、クライアントでビデオフレームを受信及び表示するときの最悪に近い場合の待ち時間の条件を考慮することによって一方向の待ち時間を減らす。さらに別の実施形態では、クライアント側の動的バッファリングは、待ち時間が増加するときにクライアントでより多くの表示バッファを提供し、待ち時間が減少するときに使用する表示バッファを少なくすることによって、追加の待ち時間調整を提供する。別の実施形態では、一方向の待ち時間は、クライアントでのビデオフレームの復号と表示を重複させることによってさらに減らすことができる。
【0024】
上記の様々な実施形態の全般的な理解により、これより様々な図面を参照して実施形態の例の詳細を説明する。
【0025】
本明細書全体を通して、「ゲーム」「ビデオゲーム」、または「ゲームアプリケーション」または「アプリケーション」に対する言及は、入力コマンドの実行を通して指示されるいずれかのタイプのインタラクティブアプリケーションを表現することを意味する。例示のみを目的として、対話型アプリケーションは、ゲーミング、文書処理、ビデオ処理、ビデオゲーム処理などのためのアプリケーションを含む。さらに、上で導入されている用語は、交換可能である。
【0026】
クラウドゲームには、サーバでビデオゲームを実行して、ゲームでレンダリングされたビデオフレームを生成し、次いでそれをクライアントに送信して表示することが含まれる。サーバとクライアントの両方での操作のタイミングは、それぞれの垂直同期(VSYNC)パラメータに関連付けられている場合がある。VSYNC信号がサーバ及び/またはクライアント間で適切に同期及び/またはオフセットされると、サーバで実行される操作(例えば、1つ以上のフレーム期間にわたるビデオフレームの生成と送信)は、クライアントで実行される操作と同期される(例えば、フレーム期間に対応する表示フレームまたはリフレッシュレートでディスプレイにビデオフレームを表示する)。特に、サーバで生成されたサーバVSYNC信号とクライアントで生成されたクライアントVSYNC信号は、サーバとクライアントでの動作を同期させるために使用され得る。つまり、サーバとクライアントのVSYNC信号が同期及び/またはオフセットされると、サーバは、クライアントがそれらのビデオフレームを表示する方法と同期してビデオフレームを生成及び送信する。
【0027】
サーバとクライアント間でメディアコンテンツをストリーミングするときにビデオフレームを生成し、それらのビデオフレームを表示するために、VSYNCシグナリングと垂直帰線区間(VBI)が組み込まれている。例えば、サーバは、対応するサーバVSYNC信号で定義された1つまたは複数のフレーム期間で、ゲームレンダリングされたビデオフレームを生成しようとし(例えば、フレーム期間が16.7msの場合、フレーム期間ごとにビデオフレームを生成すると、60Hzの動作になり、2つのフレーム期間ごとに1つのビデオフレームを生成すると、30Hzの動作になる)、その後、そのビデオフレームを符号化してクライアントに送信する。クライアントでは、受信した符号化されたビデオフレームが復号されて表示され、クライアントは、対応するクライアントVSYNCで始まる表示用にレンダリングされた各ビデオフレームを表示する。
【0028】
説明のために、図1Aは、VSYNC信号111がフレーム期間の開始をどのように示し得るかを示し、ここで、様々な動作が、サーバ及び/またはクライアントで対応するフレーム期間中に実行され得る。メディアコンテンツをストリーミングする場合、サーバはビデオフレームの生成と符号化にサーバVSYNC信号を使用し、クライアントはビデオフレームの表示にクライアントVSYNC信号を使用する場合がある。VSYNC信号111は、図1Bに示すように、定義されたフレーム期間110に対応する定義された周波数で生成される。さらに、VBI105は、前のフレーム期間に最後のラスターラインがディスプレイに描画されてから最初のラスター線(例えば、上)がディスプレイに描画されるまでの期間を定義する。示されるように、VBI105の後、表示のためにレンダリングされたビデオフレームは、ラスタースキャンライン106を介して表示される(例えば、左から右へのラスターラインごとのラスターライン)。
【0029】
さらに、本開示の様々な実施形態が、メディアコンテンツ(例えば、ビデオゲームコンテンツ)をストリーミングする場合など、ソースデバイスとターゲットデバイスとの間の一方向の待ち時間及び/または待ち時間の不安定性を低減するために開示される。説明のみを目的として、一方向の待ち時間及び/または待ち時間の不安定性を低減するための様々な実施形態が、サーバ及びクライアントのネットワーク構成内で説明されている。しかし、一方向の待ち時間及び/または待ち時間の不安定性を低減するために開示された様々な技術は、図2A~2Dに示されるように、他のネットワーク構成内、及び/またはピアツーピアネットワーク上で実施され得ることが理解される。例えば、一方向の待ち時間及び/または待ち時間の不安定性を低減するために開示される様々な実施形態は、様々な構成(例えば、サーバとクライアント、サーバとサーバ、サーバと複数のクライアント、サーバと複数のサーバ、クライアントとクライアント、クライアントと複数のクライアントなど)におけるサーバ及びクライアントデバイスの1つまたは複数の間で実装され得る。
【0030】
図2Aは、本開示の実施形態により、様々な構成において、1つまたは複数のクラウドゲームネットワーク290及び/またはサーバ260と1つまたは複数のクライアントデバイス210との間のネットワーク250を介してゲームを提供するためのシステム200Aの図であり、サーバ及びクライアントのVSYNC信号を同期及びオフセットさせることができ、及び/または動的バッファリングがクライアントで実行される場合、及び/またはクライアントでの復号及び表示操作を重複させて、サーバ260とクライアント210との間の一方向の待ち時間を短縮することができる。特に、システム200Aは、クラウドゲームネットワーク290を介してゲームを提供し、本開示の一実施形態によれば、ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、シンクライアント)からリモートで実行されている。システム200Aは、シングルプレイヤーモードまたはマルチプレイヤーモードのいずれかで、ネットワーク250を介してクラウドゲームネットワーク290を介して1つまたは複数のゲームをプレイする1人または複数のユーザにゲームのコントロールをもたらすことができる。いくつかの実施形態において、クラウドゲームネットワーク290は、ホストマシンのハイパーバイザ上で実行する複数の仮想マシン(VM)を含むことができ、1つ以上の仮想マシンは、ホストのハイパーバイザに利用可能であるハードウェアリソースを利用するゲームプロセッサモジュールを実行するように構成される。ネットワーク250は、1つまたは複数の通信技術を含み得る。いくつかの実施形態では、ネットワーク250は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含み得る。
【0031】
いくつかの実施形態では、通信は、無線技術を使用して促進され得る。そのような技術には、例えば、5G無線通信技術が含まれ得る。5Gは、セルラーネットワークテクノロジーの第5世代である。5Gネットワークはデジタルセルラーネットワークであり、プロバイダーがカバーするサービスエリアはセルと呼ばれる小さな地理的エリアに分割されている。音と画像を表すアナログ信号は、電話でデジタル化され、アナログデジタルコンバーターによって変換され、ビットのストリームとして送信される。セル内のすべての5Gワイヤレスデバイスは、他のセルで再利用される周波数のプールからトランシーバーによって割り当てられた周波数チャネルを介して、セル内のローカルアンテナアレイ及び低電力自動トランシーバー(送信機兼受信機)と電波で通信する。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって、電話網及びインターネットに接続される。他のセルネットワークと同様に、あるセルから別のセルに移動するモバイルデバイスは、新しいセルに自動的に転送される。5Gネットワークは単なる一例のタイプの通信ネットワークであり、本開示の実施形態は、5Gに続く後の世代の有線または無線技術と同様に、前世代の無線または有線通信を利用することができることを理解されたい。
【0032】
示されるように、ゲームネットワーク290は、複数のビデオゲームへのアクセスを提供するゲームサーバ260を含む。ゲームサーバ260は、クラウド内で利用可能な任意の種類のサーバコンピューティングデバイスであり得るもので、1つ以上のホストで実行される1つ以上の仮想マシンとして構成され得る。例えば、ゲームサーバ260は、ユーザのゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理し得る。よって、複数の仮想マシンに対応付けられたゲームサーバ260の複数のゲームプロセッサは、複数のユーザのゲームプレイに関連付けられた1つまたは複数のゲームの複数のインスタンスを実行するように構成される。そのようにして、バックエンドサーバサポートは、複数のゲームアプリケーションのゲームプレイのメディア(例えば、ビデオ、オーディオなど)のストリーミングを、対応する複数のユーザに提供する。
つまり、ゲームサーバ260は、ネットワーク250を介して、データ(例えば、対応するゲームプレイのレンダリングされた画像及び/またはフレーム)を対応するクライアントデバイス210にストリーミング返信するように構成される。そのようにして、クライアントデバイス210によって受信されて転送されたコントローラの入力に応答して、計算の複雑なゲームアプリケーションが、バックエンドサーバで実行し続けることができる。各サーバは、画像及び/またはフレームをレンダリングし、次いでそれらを符号化(例えば、圧縮)して、対応するクライアントデバイスにストリーミングして表示することが可能である。
【0033】
例えば、複数のユーザは、ストリーミングメディアを受信するように構成された対応するクライアントデバイス210を使用して、通信ネットワーク250を介して、クラウドゲームネットワーク290にアクセスすることができる。一実施形態では、クライアントデバイス210は、計算機能(例えば、ゲームタイトル処理エンジン211を含む)を提供するように構成されたバックエンドサーバ(例えば、クラウドゲームネットワーク290のゲームサーバ260)とのインターフェースを提供するシンクライアントとして構成され得る。別の実施形態では、クライアントデバイス210は、ビデオゲームの少なくともいくつかのローカル処理のためのゲームタイトル処理エンジン及びゲームロジックで構成され得るもので、バックエンドサーバで実行されるビデオゲームによって生成されるストリーミングコンテンツを受信するために、またはバックエンドサーバサポートによって提供されるその他のコンテンツ用に、さらに利用され得る。ローカル処理の場合、ゲームタイトル処理エンジンには、ビデオゲームを実行するための基本的なプロセッサベースの機能と、ビデオゲームに関連するサービスが含まれている。ゲームロジックは、ローカルクライアントデバイス210に格納され、ビデオゲームを実行するために使用される。
【0034】
特に、対応するユーザ(示さず)のクライアントデバイス210は、インターネットなどの通信ネットワーク250経由でゲームへのアクセスを要求するために、及びゲームサーバ260により実行されるビデオゲームにより生成される表示画像をレンダリングするために構成され、その場合に符号化された画像が対応するユーザと関連する表示のためにクライアントデバイス210へ配信されている。例えば、ユーザは、ゲームサーバ260のゲームプロセッサ上で実行するビデオゲームのインスタンスとクライアントデバイス210を通してインタラクトすることができる。より具体的には、ビデオゲームのインスタンスは、ゲーム作品処理エンジン211により実行される。ビデオゲームを実装する対応するゲームロジック(例えば、実行可能コード)215は、データストア(図示せず)を介して格納及びアクセス可能であり、ビデオゲームを実行するために使用される。ゲームタイトル処理エンジン211は、複数のゲームロジックを使用して複数のビデオゲームをサポートすることができ、それぞれがユーザによって選択可能である。
【0035】
例えば、クライアントデバイス210は、ゲームプレイを駆動するために使用される入力コマンドを介するなどして、対応するユーザのゲームプレイに関連付けられたゲームタイトル処理エンジン211とインタラクトするように構成される。特に、クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボードなどの様々な種類の入力デバイスからの入力、ビデオカメラ、マウス、タッチパッドなどにより取り込まれたジェスチャを、受信し得る。クライアントデバイス210は、メモリとプロセッサモジュールとを少なくとも有する任意の種類のコンピューティングデバイスであり得るもので、ネットワーク250を介してゲームサーバ260に接続することができる。
バックエンドゲームタイトル処理エンジン211は、レンダリングされた画像を生成するように構成され、レンダリングされた画像は、クライアントデバイス210に関連する対応するディスプレイに表示するためにネットワーク250を介して配信される。例えば、クラウドベースのサービスを介して、ゲームレンダリングされた画像は、ゲームサーバ260のゲーム実行エンジン211で実行される対応するゲームのインスタンスによって配信され得る。すなわち、クライアントデバイス210は、符号化された画像(例えば、ビデオゲームの実行を通じて生成されたゲームレンダリング画像から符号化された)を受信し、ディスプレイ11のためにレンダリングされた画像を表示するように構成される。一実施形態では、ディスプレイ11は、HMDを含む(例えば、VRコンテンツを表示する)。いくつかの実施形態では、レンダリングされた画像は、クラウドベースのサービスから直接、またはクライアントデバイス210(例えば、プレイステーション(登録商標)リモートプレイ)を介して、無線または有線でスマートフォンまたはタブレットにストリーミングすることができる。
【0036】
一実施形態では、ゲームサーバ260及び/またはゲームタイトル処理エンジン211は、ゲーム及びゲームアプリケーションに関連するサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、プロセッサベースの機能には、2Dまたは3Dレンダリング、物理学、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィックス処理、ライティング、シェーディング、ラスター化、レイトレーシング、シャドーイング、カリング、変換、人工知能などが含まれる。さらに、ゲームアプリケーションのサービスには、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、ソーシャルネットワークのフレンドとの通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどが含まれる。
【0037】
一実施形態では、クラウドゲームネットワーク290は、分散型ゲームサーバシステム及び/またはアーキテクチャである。具体的には、ゲームロジックを実行する分散型ゲームエンジンが、対応するゲームの対応するインスタンスとして構成されている。一般に、分散型ゲームエンジンは、ゲームエンジンの各機能を取り込み、それらの機能を分散させて多数の処理エンティティによって実行する。個々の機能は、さらに1つ以上の処理エンティティにわたって分散させることができる。処理エンティティは、物理ハードウェア、及び/または仮想コンポーネントまたは仮想マシン、及び/または仮想コンテナなど、様々な構成で構成され得る。コンテナは、仮想化されたオペレーティングシステム上で動作するゲームアプリケーションのインスタンスを仮想化するものであるため、仮想マシンとは異なる。
処理エンティティは、クラウドゲームネットワーク290の1つ以上のサーバ(計算ノード)上のサーバ及びその基礎となるハードウェアを利用し、及び/またはそれらに依拠してもよく、サーバは1つ以上のラック上に配置され得る。種々の処理エンティティに対するそれらの機能の実行の協調、割り当て、及び管理は、分散同期層によって行われる。そのようにして、それらの機能の実行が分散同期層によって制御されて、プレイヤーによるコントローラ入力に応答して、ゲームアプリケーション用のメディア(例えば、ビデオフレーム、オーディオなど)を生成することが可能になる。分散同期層は、重要なゲームエンジンコンポーネント/機能が、より効率的な処理のために分散されて再構築されるように、分散処理エンティティ全体で(例えば、負荷バランシングを介して)それらの機能を効率的に実行することが可能である。
【0038】
ゲームタイトル処理エンジン211は、マルチテナンシーGPU機能を実行するように構成された中央処理装置(CPU)及びグラフィックス処理装置(GPU)グループを含む。別の実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行されている単一のアプリケーションのグラフィックス処理を実行する。
【0039】
図2Bは、2つ以上のピアデバイス間でゲームを提供するための図であり、本開示の一実施形態によれば、VSYNC信号を同期及びオフセットして、デバイス間のコントローラ及び他の情報の受信の最適なタイミングを達成することができる。例えば、対面型のゲームは、ネットワーク250を介して、またはピアツーピア通信(例えば、ブルートゥース(登録商標)、ローカルエリアネットワーキングなど)を介して直接接続された2つ以上のピアデバイスを使用して実行され得る。
【0040】
示されるように、ゲームは、ビデオゲームをプレイしている対応するユーザのクライアントデバイス210(例えば、ゲームコンソール)のそれぞれでローカルに実行されており、クライアントデバイス210は、ピアツーピアネットワーキングを介して通信する。例えば、ビデオゲームのインスタンスは、対応するクライアントデバイス210のゲームタイトル処理エンジン211によって実行されている。ビデオゲームを実施するゲームロジック215(例えば実行可能コード)は、該当クライアントデバイス210に格納され、ゲームを実行するために使用される。例示として、ゲームロジック215は、該当クライアントデバイス210に、ポータブルメディア(例えば光学的メディア)を介して、またはネットワークを介して配信され得る(例えばインターネットを介してゲームプロバイダからダウンロードされ得る)。
【0041】
一実施形態では、対応するクライアントデバイス210のゲームタイトル処理エンジン211は、ゲーム及びゲームアプリケーションに関連するサービスを実行するための基本的なプロセッサベースの機能を含む。例えば、プロセッサベースの機能には、2Dまたは3Dレンダリング、物理学、物理シミュレーション、スクリプト、オーディオ、アニメーション、グラフィックス処理、ライティング、シェーディング、ラスター化、レイトレーシング、シャドーイング、カリング、変換、人工知能などが含まれる。さらに、ゲームアプリケーションのサービスには、メモリ管理、マルチスレッド管理、サービス品質(QoS)、帯域幅テスト、ソーシャルネットワーキング、ソーシャルフレンドの管理、ソーシャルネットワークのフレンドとの通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどが含まれる。
【0042】
クライアントデバイス210は、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラ、マウス、タッチパッドなどによってキャプチャされたジェスチャなどの様々なタイプの入力デバイスから入力を受け取ることができる。クライアントデバイス210は、少なくともメモリ及びプロセッサモジュールを有する任意のタイプのコンピューティングデバイスであり得るもので、ゲームタイトル処理エンジン211によって実行されるレンダリングされた画像を生成し、レンダリングされた画像をディスプレイ(例えば、ディスプレイ11、またはヘッドマウントディスプレイ-HMDを含むディスプレイ11、など)に表示するために構成される。例えば、レンダリングされた画像は、ゲームプレイを駆動するために使用される入力コマンドなどを介して、対応するユーザのゲームプレイを実装するために、クライアントデバイス210上でローカルに実行されるゲームのインスタンスに関連付けられ得る。クライアントデバイス210のいくつかの例として、パーソナルコンピュータ(PC)、ゲーム機、ホームシアターデバイス、汎用コンピュータ、モバイルコンピューティングデバイス、タブレット、電話、または、ゲームのインスタンスを実行することができる任意の他の種類のコンピューティングデバイスが、挙げられる。
【0043】
図2Cは、本開示の実施形態による、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利益を得る、様々なネットワーク構成を示し、図2A図2Bに示す構成を含む。特に、様々なネットワーク構成は、サーバとクライアント間の一方向の待ち時間及び/または待ち時間の変動を減らす目的で、サーバとクライアントのVSYNC信号の周波数の適切なアライメント、及びサーバとクライアントのVSYNC信号のタイミングオフセットから利益が得られる。例えば、1つのネットワークデバイス構成には、クラウドゲームサーバ(例えば、ソース)からクライアント(ターゲット)への構成が含まれる。一実施形態では、クライアントは、ウェブブラウザ内でオーディオ及びビデオ通信を提供するように構成されたウェブRTCクライアントを含み得る。別のネットワーク構成には、クライアント(例えば、ソース)からサーバ(ターゲット)への構成が含まれる。さらに別のネットワーク構成には、サーバ(例えば、ソース)からサーバ(例えば、ターゲット)への構成が含まれる。別のネットワークデバイス構成は、クライアント(例えば、ソース)からクライアント(ターゲット)への構成を含み、クライアントはそれぞれ、例えば、対面型のゲームを提供するためのゲームコンソールであり得る。
【0044】
特に、VSYNC信号のアラインメントは、サーバVSYNC信号とクライアントVSYNC信号の周波数の同期を含み、ドリフトを除去する目的で、及び/またはクライアントVSYNC信号とサーバVSYNC信号の間の理想的な関係を維持するために、一方向の待ち時間及び/または待ち時間の変動を減らす目的で、クライアントVSYNC信号とサーバVSYNC信号間のタイミングオフセットを調整することも含み得る。適切なアライメントを達成するために、一実施形態では、サーバ260とクライアント210のペアとの間の適切なアライメントを実施するために、サーバVSYNC信号を調整することができる。
別の実施形態では、サーバ260とクライアント210のペアとの間の適切なアライメントを実施するために、クライアントVSYNC信号を調整することができる。クライアントとサーバのVSYNC信号がアライメントすると、サーバのVSYNC信号とクライアントのVSYNC信号は実質的に同じ周波数で発生し、タイミングオフセットによって互いにオフセットされる。タイミングオフセットは随時調整できる。
別の実施形態では、VSYNC信号のアライメントは、2つのクライアントのVSYNCの周波数を同期させることも可能であり、ドリフトを除去する目的で、それらのVSYNC信号間のタイミングオフセットを調整し、及び/またはコントローラ及びその他の情報の最適なタイミングでの受信を達成することを含み得るもので、どちらのVSYNC信号も、このアライメントを達成するように調整できる。
さらに別の実施形態では、アラインメントは、複数のサーバのVSYNCの周波数を同期させることも可能であり、また、サーバVSYNC信号及びクライアントVSYNC信号の周波数を同期し、例えば対面型のクラウドゲームの場合に、クライアントVSYNCとサーバVSYNC信号との間のタイミングオフセットを調整することを含み得る。サーバからクライアントへの構成及びクライアントからクライアントへの構成では、調整には、サーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期、及びサーバVSYNC信号とクライアントVSYNC信号の間の適切なタイミングオフセットの提供の両方が含まれる場合がある。サーバ間の構成では、アライメントには、タイミングオフセットを設定せずにサーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期が含まれる場合がある。
【0045】
図2Dは、本開示の一実施形態による、ソースデバイスとターゲットデバイスとの間のVSYNC信号の適切な同期及びオフセットから利益を得る、クラウドゲームサーバ260と1つまたは複数のクライアント210との間のマルチテナンシー構成を示す。サーバからクライアントへの構成では、調整には、サーバVSYNC信号とクライアントVSYNC信号の間の周波数の同期、及びサーバVSYNC信号とクライアントVSYNC信号の間の適切なタイミングオフセットの提供の両方が含まれる場合がある。マルチテナンシー構成では、一実施形態では、サーバ260とクライアント210のペアとの間の適切なアラインメントを実装するために、クライアントVSYNC信号が各クライアント210で調整される。
【0046】
例えば、グラフィックスサブシステムは、マルチテナンシーGPU機能を実行するように構成され得るもので、一実施形態では、1つのグラフィックスサブシステムが、複数のゲームのためのグラフィックス及び/またはレンダリングパイプラインを実装し得る。つまり、グラフィックスサブシステムは、実行されている複数のゲーム間で共有される。特に、ゲームタイトル処理エンジンは、マルチテナンシーGPU機能を実行するように構成されたCPU及びGPUグループを含むことも可能であり、一実施形態では、1つのCPU及びGPUグループが複数のゲームのグラフィックス及び/またはレンダリングパイプラインを実装し得る。つまり、CPUとGPUグループは、実行されている複数のゲーム間で共有される。CPU及びGPUグループは、1つ以上の処理デバイスとして構成できる。別の実施形態では、複数のGPUデバイスを組み合わせて、対応するCPU上で実行されている単一のアプリケーションのグラフィックス処理を実行する。
【0047】
図3は、サーバでビデオゲームを実行してゲームレンダリングされたビデオフレームを生成し、それらのビデオフレームをクライアントに送信して表示する一般的なプロセスを示している。従来、ゲームサーバ260及びクライアント210でのいくつかの操作は、それぞれのVSYNC信号によって定義されるフレーム期間内に実行される。例えば、サーバ260は、対応するサーバVSYNC信号311によって定義されるように、1つまたは複数のフレーム期間で、301でゲームレンダリングされたビデオフレームを生成しようとする。ビデオフレームは、操作350で入力デバイスから配信される制御情報(例えば、ユーザの入力コマンド)、または制御情報によって駆動されないゲームロジックのいずれかに応答して、ゲームによって生成される。送信ジッタ351は、制御情報をサーバ260に送信するときに存在することができ、ジッタ351は、クライアントからサーバへのネットワーク待ち時間の変動を測定する(例えば、入力コマンドを送信するとき)。
図示されるように、太い矢印は、制御情報をサーバ260に送信するときの現在の遅延を示しているが、ジッタのために、サーバ260での制御情報の到着時間の範囲(例えば、点線の矢印で囲まれた範囲)があり得る。フリップ時間309で、GPUは、対応するビデオフレームが完全に生成され、サーバ260のフレームバッファに配置されたことを示すフリップコマンドに到達する。その後、サーバ260は、サーバVSYNC信号311によって定義される後続のフレーム期間にわたって、そのビデオフレームに対してスキャンアウト/スキャンイン(操作302、スキャンアウトはVSYNC信号311とアライメントされる場合がある)を実行する(VBIは、わかりやすくするために省略されている)。続いて、ビデオフレームが符号化され(操作303)(例えば、VSYNC信号311の発生後に符号化が開始され、符号化の終わりがVSYNC信号とアライメントされない場合がある)、クライアント210へ送信される(操作304、送信がVSYNC信号311とアライメントされない場合がある)。
クライアント210において、符号化されたビデオフレームは、受信され(操作305、受信はクライアントVSYNC信号312とアライメントされない場合がある)、復号され(操作306、復号はクライアントVSYNC信号312とアライメントされない場合がある)、バッファリングされ、表示される(操作307、表示の開始は、クライアントのVSYNC信号312とアライメントされる場合がある)。特に、クライアント210は、クライアントVSYNC信号312の対応する発生で始まる表示のためにレンダリングされる各ビデオフレームを表示する。
【0048】
一方向の待ち時間315は、サーバでのビデオフレームの符号化ユニットへの転送(スキャンアウト302など)の開始から、クライアント307でのビデオフレームの表示の開始まで、待ち時間として定義できる。つまり、一方向の待ち時間は、クライアントのバッファリングを考慮した、サーバのスキャンアウトからクライアントの表示までの時間である。個々のフレームには、スキャンアウト302の開始から復号306の完了までの待ち時間があり、符号化303と送信304、サーバ260と付随するジッタ352を伴うクライアント210間のネットワーク送信、及びクライアントの受信305などのサーバの操作の高い度合の変動により、フレームごとに異なり得る。示されるように、真っ直ぐな太い矢印は、対応するビデオフレームをクライアント210に送信するときの現在の待ち時間を示すが、ジッタ352に起因して、クライアント210でのビデオフレームの到着時間の範囲(例えば、点線の矢印で仕切られた範囲)があり得る。
良好なプレイ体験を実現するには、一方向の待ち時間が比較的安定している(例えば、かなり一貫性が保たれている)必要があるため、従来はバッファリング320が実行され、その結果、待ち時間の少ない個々のフレームの表示(例えば、スキャンアウト302の開始から復号の306の完了まで)は、わずかなフレーム期間遅れる。つまり、ネットワークが不安定な場合、または予測できない符号化/復号時間が発生した場合は、一方向の待ち時間を一定に保つために追加のバッファリングが必要になる。
【0049】
本開示の一実施形態によれば、クラウドゲームサーバとクライアントとの間の一方向の待ち時間は、サーバで実行されるビデオゲームから生成されたビデオフレームをストリーミングするときのクロックドリフトに起因して、変動し得る。すなわち、サーバVSYNC信号311及びクライアントVSYNC信号312の周波数の違いにより、クライアントVSYNC信号は、サーバ260から到着するフレームに対してドリフトする可能性がある。ドリフトは、サーバとクライアントのそれぞれのクロックで使用される水晶発振器のごくわずかな違いが原因である可能性がある。さらに、本開示の実施形態は、サーバとクライアントとの間のアライメントのためにVSYNC信号の1つまたは複数の同期及びオフセットを実行することによって、クライアントに動的バッファリングを提供することによって、及びビデオフレームの復号及びクライアントでの表示を重複させることによって、一方向の待ち時間を短縮する。
【0050】
図4は、本開示の実施形態による、サーバ上で実行されるビデオゲームから生成されたビデオフレームをストリーミングするときの、高度に最適化されたクラウドゲームサーバ260及び高度に最適化されたクライアント210を含むネットワーク構成を介するデータの流れを示し、サーバの操作とクライアントの操作を重複させて、一方向の待ち時間が減少し、サーバとクライアント間でVSYNC信号を同期及びオフセットさせ、一方向の待ち時間が減少するだけでなく、サーバとクライアント間の一方向の待ち時間の変動も減少している。特に、図4は、サーバとクライアントのVSYNC信号間の望ましいアライメントを示している。
一実施形態では、サーバVSYNC信号311の調整は、サーバ及びクライアントネットワーク構成などにおいて、サーバ及びクライアントVSYNC信号間の適切なアライメントを得るために実行される。別の実施形態では、クライアントVSYNC信号312の調整は、マルチテナントサーバからマルチクライアントネットワーク構成へのように、サーバとクライアントVSYNC信号との間の適切なアラインメントを得るために実行される。説明のために、サーバのVSYNC信号311の調整が図4に記載されている。これは、サーバ及びクライアントのVSYNC信号の周波数を同期させる、及び/または対応するクライアント及びサーバのVSYNC信号間のタイミングオフセットを調整する目的であるが、クライアントVSYNC信号312も調整に使用できることが理解される。
【0051】
示されるように、図4は、本開示の実施形態において、サーバでビデオゲームを実行してレンダリングされたビデオフレームを生成し、それらのビデオフレームを表示のためにクライアントに送信する改善されたプロセスを示す。このプロセスは、サーバとクライアントでの単一のビデオフレームの生成と表示に関して示されている。特に、サーバは401で、ゲームレンダリングされたビデオフレームを生成する。例えば、サーバ260は、ゲームを実行するように構成されたCPU(例えば、ゲームタイトル処理エンジン211)を含む。CPUは、ビデオフレームに対して1つまたは複数のドローコールを生成し、ドローコールは、グラフィックスパイプライン内のサーバ260の対応するGPUによって実行するためにコマンドバッファに配置されたコマンドを含む。グラフィックスパイプラインには、シーン内のオブジェクトの頂点に1つ以上のシェーダープログラムを含めて、表示用のビデオフレームにレンダリングされたテクスチャ値を生成できる。この場合、操作は効率を上げるためにGPUを介して並行して実行される。フリップ時間409で、GPUは、対応するビデオフレームが完全に生成され、及び/またはサーバ260のフレームバッファにレンダリングされて配置されたことを示す、コマンドバッファのフリップコマンドに到達する。
【0052】
402で、サーバはゲームでレンダリングされたビデオフレームのスキャンアウトをエンコーダに実行する。特に、スキャンアウトは、スキャンラインごとに、または連続するスキャンラインのグループで実行され、スキャンラインは、例えば、画面の端から画面の端までの表示の単一の水平線を指す。これらのスキャンラインまたは連続するスキャンラインのグループは、スライスと呼ばれることもあり、本明細書ではスクリーンスライスと呼ばれる。特に、スキャンアウト402は、別のフレームバッファでそれをオーバーレイし、または別のフレームバッファからの情報でそれを囲むためにそれを縮小することを含む、ゲームレンダリングフレームを変更するいくつかのプロセスを含み得る。スキャンアウト402の間、次に、修正されたビデオフレームは、圧縮のためにエンコーダにスキャンされる。一実施形態では、スキャンアウト402は、VSYNC信号311の発生311aで実行される。他の実施形態では、スキャンアウト402は、フリップ時間409などで、VSYNC信号311の発生の前に実行され得る。
【0053】
403で、ゲームレンダリングされたビデオフレーム(変更された可能性がある)は、エンコーダでエンコーダスライスごとにエンコーダスライスに符号化されて、1つまたは複数の符号化スライスを生成する。この場合、符号化スライスは、スキャンラインまたはスクリーンスライスとは無関係である。そのため、エンコーダは1つ以上の符号化された(例えば、圧縮された)スライスを生成する。
一実施形態では、符号化プロセスは、対応するビデオフレームのスキャンアウト402のプロセスが完全に終了する前に開始する。さらに、符号化403の開始及び/または終了は、サーバVSYNC信号311とアライメントされてもされなくてもよい。符号化されたスライスの境界は、単一のスキャンラインに制限されず、単一のスキャンラインまたは複数のスキャンラインで構成され得る。さらに、符号化されたスライスの終了及び/または次のエンコーダスライスの開始は、必ずしも表示画面の端で発生するわけではなく(例えば、画面の中央またはスキャンラインの中央のどこかで発生する可能性がある)、符号化されたスライスは、表示画面の端から端まで完全にトラバースする必要はない。示されているように、1つまたは複数の符号化されたスライスは、ハッシュマークを有する圧縮された「符号化されたスライスA」を含めて、圧縮及び/または符号化され得る。
【0054】
404で、符号化されたビデオフレームは、サーバからクライアントに送信され、送信は、符号化されたスライスごとに行われ得るもので、各符号化されたスライスは、圧縮されたエンコーダスライスである。一実施形態では、送信プロセス404は、対応するビデオフレームの符号化プロセス403が完全に終了する前に開始する。さらに、送信404の開始及び/または終了は、サーバVSYNC信号311とアライメントされてもされなくてもよい。示されているように、圧縮された符号化されたスライスAは、レンダリングされたビデオフレームの他の圧縮されたエンコーダスライスとは独立してクライアントに送信される。エンコーダスライスは、一度に1つずつ、または並行して送信できる。
【0055】
405で、クライアントは、再び符号化されたスライスごとに、圧縮ビデオフレームを受信する。さらに、受信405の開始及び/または終了は、クライアントVSYNC信号312とアライメントされ得るか、またはされ得なくてもよい。示されているように、圧縮された符号化されたスライスAがクライアントによって受信される。送信ジッタ452は、サーバ260とクライアント210との間に存在することができ、ジッタ452は、サーバ260からクライアント210へのネットワーク待ち時間の変動を測定する。ジッタの値が低いほど、接続がより安定する。示されるように、太い真っ直ぐな矢印は、対応するビデオフレームをクライアント210に送信するときの現在の待ち時間を示すが、ジッタに起因して、クライアント210でのビデオフレームの到着時間の範囲(例えば、点線の矢印で仕切られた範囲)があり得る。待ち時間の変動は、符号化403や送信404などのサーバでの1つ以上の操作、及びビデオフレームをクライアント210に送信するときに待ち時間をもたらすネットワークの問題が原因である可能性もある。
【0056】
406で、クライアントは、圧縮ビデオフレームを、再び符号化されたスライスごとに復号し、復号されたスライスA(ハッシュマークなしで示される)を生成し、これは、現在、表示の準備ができている。一実施形態では、復号プロセス406は、受信プロセス405が対応するビデオフレームについて完全に完了する前に開始する。さらに、復号406の開始及び/または終了は、クライアントVSYNC信号312とアライメントされ得るか、またはされ得なくてもよい。407で、クライアントは、復号されたレンダリングされたビデオフレームをクライアントのディスプレイに表示する。すなわち、復号されたビデオフレームは、例えば、スキャンラインごとにディスプレイデバイスにストリーミングされるディスプレイバッファに配置される。
一実施形態では、表示プロセス407(すなわち、ディスプレイデバイスへのストリーミングアウト)は、復号プロセス406が対応するビデオフレームに対して完全に終了した後、すなわち、復号されたビデオフレームがディスプレイバッファに完全に常駐した後に開始する。別の実施形態では、表示プロセス407は、復号プロセス406が対応するビデオフレームについて完全に終了する前に開始する。つまり、ディスプレイデバイスへのストリームアウトは、復号されたフレームバッファの一部のみがディスプレイバッファに常駐する時点で、ディスプレイバッファのアドレスから開始される。次に、表示バッファは、表示に間に合うように対応するビデオフレームの残りの部分で更新または満たされ、その結果、表示バッファの更新は、それらの部分がディスプレイにストリームアウトする前に実行される。さらに、ディスプレイ407の開始及び/または終了は、クライアントVSYNC信号312とアライメントされる。
【0057】
一実施形態では、サーバ260とクライアント210との間の一方向の待ち時間416は、スキャンアウト402が開始されてからディスプレイ407が開始されるまでの経過時間として定義され得る。本開示の実施形態は、サーバとクライアントとの間のVSYNC信号をアライメントさせ(例えば、周波数を同期させ、オフセットを調整する)、サーバとクライアントとの間の一方向の待ち時間を低減し、サーバとクライアント間の待ち時間の一方向の変動を低減することができる。例えば、本開示の実施形態は、サーバVSYNC信号311とクライアントVSYNC信号312との間のオフセット430に対する最適な調整を計算することができ、その結果、符号化403及び送信404などのサーバの処理に必要な最悪に近い場合の時間のときでも、サーバ260とクライアント210との間の最悪に近い場合のネットワーク待ち時間のときでも、また受信405及び復号406などの最悪に近い場合のクライアント処理のときでも、復号されたレンダリングされたビデオフレームは、表示プロセス407に間に合うように利用可能である。つまり、サーバVSYNCとクライアントVSYNCの間の絶対オフセットを決定する必要はない。復号されたレンダリングされたビデオフレームが表示プロセスに間に合うようにオフセットを調整するだけで十分である。
【0058】
特に、サーバ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の周波数も実質的に等しいことを示している。
【0059】
サーバとクライアントのVSYNC信号の周波数の同期を維持するために、サーバのVSYNC信号311のタイミングを操作することができる。例えば、サーバVSYNC信号311の垂直帰線区間(VBI)は、例えば、サーバVSYNC信号311とクライアントVSYNC信号312との間のドリフトを説明するために、ある期間にわたって増加または減少され得る。VBIにおける垂直帰線(VBLANK)ラインの操作は、サーバVSYNC信号311の1つまたは複数のフレーム期間についてVBLANKに使用されるスキャンラインの数を調整することを実現する。VBLANKのスキャンラインの数が減ると、サーバVSYNC信号311の2つの発生間の対応するフレーム期間(例えば、時間間隔)が短縮される。逆に、VBLANKのスキャンラインの数を増やすと、VSYNC信号311の2つの発生間の対応するフレーム期間(例えば、時間間隔)が増える。
このようにして、サーバVSYNC信号311の周波数は、クライアントとサーバのVSYNC信号311と312との間の周波数が実質的に同じ周波数になるようアライメントすべく調整される。また、サーバとクライアントのVSYNC信号間のオフセットは、VBIを元の値に戻す前に、VBIを短時間増減することで調整できる。一実施形態では、サーバVBIが調整される。
別の実施形態では、クライアントVBIが調整される。さらに別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスがあり、それらのそれぞれは、調整された対応するVBIを有し得る。一実施形態では、複数の接続されたデバイスのそれぞれは、独立したピアデバイスであり得る(例えば、サーバデバイスなしで)。別の実施形態では、複数のデバイスは、1つまたは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらのいくつかの組み合わせに配置された1つまたは複数のサーバデバイス及び/または1つまたは複数のクライアントデバイスを含み得る。
【0060】
あるいは、一実施形態では、サーバのピクセルクロック(例えば、サーバのノースブリッジ/サウスブリッジコアロジックチップセットのサウスブリッジに位置する)を操作して、ある期間にわたってサーバのVSYNC信号311の周波数の大まかな調整及び/または微調整を実行し、サーバとクライアントのVSYNC信号311と312との間の周波数の同期を戻してアライメント状態にすることができる。具体的には、サーバのサウスブリッジのピクセルクロックをオーバークロックまたはアンダークロックして、サーバのVSYNC信号311の全体的な周波数を調整することができる。このようにして、サーバVSYNC信号311の周波数は、クライアントとサーバのVSYNC信号311と312との間の周波数が実質的に同じ周波数になるようアライメントすべく調整される。サーバとクライアントのVSYNC間のオフセットは、クライアントサーバのピクセルクロックを元の値に戻す前に、ピクセルクロックを短時間増減することで調整できる。
一実施形態では、サーバピクセルクロックが調整される。別の実施形態では、クライアントピクセルクロックが調整される。別の実施形態では、クライアントピクセルクロックが調整される。さらに別の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスがあり、それらのそれぞれは、調整された対応するピクセルクロックを有し得る。一実施形態では、複数の接続されたデバイスのそれぞれは、独立したピアデバイスであり得る(例えば、サーバデバイスなしで)。別の実施形態では、複数の接続されたデバイスは、1つまたは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらのいくつかの組み合わせに配置された1つまたは複数のサーバデバイス及び1つまたは複数のクライアントデバイスを含み得る。
【0061】
図5Aは、本開示の一実施形態による、クラウドゲームサーバ260のそれぞれのクロックとクライアント210の間のドリフト390、ならびに符号化403及び送信404などのサーバの操作により費やされる時間の変動、ネットワーク待ち時間、及び受信405及び復号406などのクライアントの操作に起因して、サーバ260で実行されたビデオゲームから生成されたビデオフレームをストリーミングするときのクライアント210による復号406の完了のタイミングの可能な変動を示す図である。
【0062】
y軸501はミリ秒単位の時間を示す。x軸502は、時間を分単位で示す。本開示の実施形態では、サーバ260は、圧縮ビデオフレームと共にタイムスタンプ情報をクライアント210に送信するか、またはサーバは、圧縮ビデオフレームとは別にタイムスタンプ情報を送信することができる。
一実施形態では、このタイムスタンプ情報は、サーバ260のピクセルクロックから導出された、対応するビデオフレームのスキャンアウト402の直前のサーバVSYNC信号の発生の時間を表すことができる。つまり、タイムスタンプは、ビデオフレームがすぐに表示されるかどうかなど、対応するビデオフレームの望ましい表示タイミングを示す。
別の実施形態では、このタイムスタンプ情報は、サーバ260のピクセルクロックから導出された、フリップ時間、例えば、対応するビデオフレームのレンダリングの完了の時間を表すことができる。さらに別の実施形態では、サーバVSYNC信号の代わりに通常のフレーム期間が使用され、このタイムスタンプ情報は、サーバ260のピクセルクロックから導出された、対応するフレーム期間の開始または終了の時間を表すことができる。
【0063】
復号406の完了時に、クライアント206は、クライアントのピクセルクロックから導出された時間を記録し、この時間を(サーバから配信された)タイムスタンプから差し引いて、「復号タイムスタンプ」(すなわち、対応するビデオフレームの復号にかかる時間ではなく、復号が完了した時間)を作成する。したがって、復号タイムスタンプは、サーバによって指定された(例えば、タイムスタンプによって示される)望ましい表示時間と比較して、対応するビデオフレームのクライアントでの表示の可用性を示す。図5Aに示されるように、一実施形態では、クライアントによって受信された第1の圧縮ビデオフレームの復号タイムスタンプは、ゼロの値が割り当てられる(すなわち、正規化される)。
また、他のすべての復号タイムスタンプは、正規化を参照して計算される(つまり、減算され、正規化が考慮される)。サーバとクライアントの操作のばらつき、及びネットワーク待ち時間のために、一連の圧縮ビデオフレームに対して測定された復号タイムスタンプは、前述のように、最初の圧縮ビデオフレーム511にゼロの復号タイムスタンプが割り当てられた分布510としてプロットされる場合がある。これらの復号タイムスタンプは、以下でさらに十分に説明する図5Bに示されるように、ヒストグラム515を作成するためにビニングされ得る。測定値520、530、及び540は、クライアントで受信された後続のビデオフレームについて計算された復号タイムスタンプの分布を示している。測定値520、530、及び540の復号タイムスタンプは、第1の圧縮ビデオフレーム511によって定義された正規化を参照して計算される。
【0064】
図5Bは、本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミング(例えば、対応するタイムスタンプ)を示すヒストグラムを含み、クラウドゲームサーバとクライアントでのそれぞれのクロック間のドリフトによる後続のヒストグラムにおける復号のタイムスタンプの増加を示す。特に、後続のビデオフレームについて後で決定される測定値520、530、及び540のそれぞれの復号タイムスタンプは、対応するヒストグラムを作成するためにビニングされ得る。例えば、測定値520にプロットされた復号タイムスタンプは、ヒストグラム525を作成するためにビニングされ得る。同様に、測定530でプロットされた復号タイムスタンプは、ヒストグラム535を作成するためにビニングされ得るもので、測定540でプロットされた復号タイムスタンプは、ヒストグラム545を作成するためにビニングされ得る。ヒストグラム515、525、535、及び545のそれぞれは、固有の特性を有し得る。示されているように、測定値515、525、535、及び545のそれぞれにおける復号タイムスタンプの分布の幅はほぼ類似しているが、後で決定されたヒストグラムは、VSYNC周波数の生成に使用されるサーバクロックとクライアントクロック間のドリフトなどに起因して、それらがそれぞれ右にシフトされるにつれて復号タイムスタンプの増加を示す。
【0065】
特に、後続のビデオフレームについて後で決定された復号タイムスタンプの測定値520、530、及び540(及び図5Bに示されるそれらの対応するヒストグラム525、535、及び545)は、サーバVSYNC信号311とクライアントVSYNC信号312(すなわち、図3のドリフト390)の間の違いの作用を示している。サーバクロックとクライアントクロックとの間のドリフト390は、対応するVSYNC信号に反映されるように、図5Bに590として示され得る。例えば、サーバとクライアントでVSYNC周波数を生成するために使用される水晶発振器の不正確さによるサーバとクライアントのクロックの10ppm(parts per million)の違いは、サーバとクライアント間で約30分ごとに1フレーム期間(16.7ms)のドリフトをもたらす。ドリフトは、サーバのVSYNC311がクライアントVSYNC信号312よりもわずかに高い周波数であるか低い周波数であるかに応じて、復号タイムスタンプの減少または増加の形をとることができる。
【0066】
図5Cは、本開示の一実施形態による、サーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングを示すヒストグラムを含み、クラウドゲームサーバとクライアントでのそれぞれのクロック間の測定されるドリフトの補償後、後続のヒストグラムにおける復号時間の首尾一貫した測定値を示す。一実施形態では、ヒストグラムを動的に再生成することにより、ドリフトの量を計算することができる。ドリフトの量を知ることで、VSYNC周波数の対応する調整とドリフトの除去が可能になり、経時的に516、526、536、546などのヒストグラムが得られる。そのようにして、プロットされた測定値520、530、及び540は、復号タイムスタンプの増加を示さない(例えば、図5Aのx軸501に沿って垂直に上方にシフトする)が、図5Aでは、測定値510とより水平にアライメントしてプロットされる(すなわち、一方向の待ち時間の増加はない)。これは図5Cに反映されている。この図で、ライン590‘は、サーバクロックとクライアントクロックとの間のゼロドリフトを示し、対応するVSYNC信号に反映される(すなわち、ヒストグラム526、536、及び546の一方向の待ち時間の増加を示さない)。
【0067】
別の実施形態では、サーバは、フレーム期間ごとに(フレーム期間はほぼ等しい長さである)圧縮ビデオフレームを送信し、対応するサーバタイムスタンプ(例えば、復号タイムスタンプの計算で使用される)がサーバからクライアントに送信されるのではなく、代わりに、対応するサーバのタイムスタンプ(受信中の対応するビデオフレームの場合)は、以前に計算されたサーバのタイムスタンプ(例えば、受信された前のビデオフレームの場合)にフレーム期間を追加することによってクライアントによって計算される。初期ビデオフレームの初期サーバタイムスタンプ及び/またはタイミング信号は、タイミングプロセスを開始するためにサーバからクライアントに配信され得る。
【0068】
さらに別の実施形態では、ドリフトは、例えば、タイムスタンプ情報とクライアントでのタイムスタンプ情報の受信のタイミングとの間の分散を分析することによって、圧縮ビデオフレームとは別にまたは一緒に、サーバからクライアントに送信されるタイムスタンプ情報を使用して計算される。さらに他の実施形態では、サーバは、サーバVSYNC信号を使用する代わりに、サイズがほぼ等しいフレーム期間を使用し、クライアントVSYNC(またはその数倍ぶん)に対するサーバフレーム期間のドリフトを計算することができる。そのため、サーバのフレーム期間は、ドリフトの計算に応じて調整できる。
【0069】
他の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスがあり、それらのそれぞれは、1つまたは複数の他のデバイスに対してそれらのドリフトを測定することができる。一実施形態では、複数の接続されたデバイスのそれぞれは、独立したピアデバイスであり得る(例えば、サーバデバイスなしで)。別の実施形態では、複数のデバイスは、1つまたは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらのいくつかの組み合わせに配置された1つまたは複数のサーバデバイス及び1つまたは複数のクライアントデバイスを含み得る。
【0070】
したがって、2つのデバイス(例えば、サーバとクライアント、またはサーバ、クライアント、及び独立したピアを備えた複数のネットワークデバイス内の任意の2つのデバイス)間のVSYNC信号の周波数間の測定されたドリフトを使用して、VSYNC信号を1つまたは複数のデバイスに調整できる。調整には、対応するフレーム期間の垂直帰線区間のラスタースキャンラインの除去または追加が含まれる場合がある。調整には、対応するクロックのオーバークロックまたはアンダークロックも含まれる場合がある。調整は動的に実行でき、対応するVSYNC信号の調整は時間と共に変化する。いくつかの実施形態では、サーバは、VSYNC信号を使用する代わりに、サイズがほぼ等しいフレーム期間を使用することができ、サーバフレーム期間は、ドリフトの計算に応答して調整することができる。
【0071】
さらに、図4に示されるようなサーバ及びクライアントのVSYNC信号のアライメントは、対応するクライアントとサーバのVSYNC信号の間に適切なタイミングオフセット430を設けるようにサーバVSYNC信号311を調整することを含み得る。一実施形態では、ヒストグラムデータ(例えば、少なくとも図5A~5Cに示される)を使用して、受信ビデオフレームの所定の数または閾値(例えば、99.99パーセント)が時間内にクライアントに到着するように、タイミングオフセットを決定することができ、クライアントVSYNC信号312の次の適切な発生時に表示される。
すなわち、タイミングオフセット430(例えば、図4に示される)は、クライアントVSYNC信号312の次の発生までの最小時間に間に合うように、ビデオフレームが表示する準備ができている(例えば、受信され、復号され、クライアントでのストリームアウトのための表示バッファに配置される)ようにビデオフレームの最悪に近い場合のシナリオに対応するように調整される。例として、99.99パーセントの閾値は、サーバ260で生成され、クライアント210で表示される1万のビデオフレームのうちの1つの欠落したビデオフレームを提供する。
【0072】
特に、適切なオフセット430を確立するために、サーバVSYNC信号311の周波数は、ある期間(例えば、1つまたは複数のフレーム期間)にわたって操作されて、対応するサーバVSYNC信号311の1つまたは複数の発生のタイミングを移動させ、それにより、両方のVSYNC信号がそれぞれの周波数を同期すると、クライアントとサーバのVSYNC信号間の相対的なタイミングオフセットをシフトまたは調整することができる。クライアントVSYNC信号312の周波数も同様に操作して、クライアントとサーバのVSYNC信号の間の相対的なタイミングオフセットを代替的に調整することができる。適切なオフセットの決定は、VSYNC信号の対応する動的操作を使用して、動的に、例えば経時的に繰り返し実行することができる。
他の実施形態では、最初にサーバVSYNC信号とクライアントVSYNC信号との間のドリフトを除去し、次にVSYNC信号間の適切なオフセットを確立するのではなく、代わりに、サーバVSYNC信号またはクライアントVSYNC信号の周波数をより頻繁に操作して相対的なタイミングオフセットを調整することによって、オフセットが維持される。さらに他の実施形態では、サーバは、サーバVSYNC信号を使用する代わりに、サイズがほぼ等しいフレーム期間を使用し、サーバフレーム期間またはクライアントVSYNC信号を操作して、クライアントVSYNC(またはその倍数)について、サーバフレーム期間の相対的なタイミングオフセットを調整することができる。
さらに他の実施形態では、2つのデバイス(サーバ及びクライアント)の代わりに、複数の接続されたデバイスがあり、それらのそれぞれは、自らのVSYNC信号を操作して、1つまたは複数の他のデバイスのVSYNCに関してVSYNCの相対的なタイミングオフセットを調整することができる。一実施形態では、複数の接続されたデバイスのそれぞれは、独立したピアデバイスであり得る(例えば、サーバデバイスなしで)。別の実施形態では、複数のデバイスは、1つまたは複数のサーバ/クライアントアーキテクチャ、マルチテナントサーバ/クライアント(複数可)アーキテクチャ、またはそれらのいくつかの組み合わせに配置された1つまたは複数のサーバデバイス及び1つまたは複数のクライアントデバイスを含み得る。
【0073】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260内)の詳細な説明と共に、図6A~6Cの流れ図600A、600B、及び600Cは、本開示の一実施形態による、一方向の待ち時間を短縮する目的で、クラウドゲームサーバとクライアントとの間でVSYNC信号を調整するための方法を示す。
【0074】
特に、図6Aは、本開示の一実施形態による、一方向の待ち時間を短縮する目的で、クラウドゲームサーバとクライアントのVSYNC信号間の相対的なタイミングを調整するための方法を示す。例えば、流れ図600Aを実行して、図4に示される対応するクライアント及びサーバのVSYNC信号間のタイミングを調整することができる。
【0075】
601で、この方法は、サーバで、サーバVSYNC信号をサーバVSYNC周波数に設定することを含む。前述のように、サーバVSYNC信号は、サーバVSYNC周波数の複数のフレーム期間中のサーバでの複数のビデオフレームの生成に対応する。例えば、サーバは、ストリーミングモードでビデオゲームを実行し、サーバのCPUは、ストリーミング用に使用可能なグラフィックスパイプラインを使用してゲームレンダリングされたビデオフレームを生成するために、ユーザからの入力コマンドに応答してビデオゲームを実行することができる。
【0076】
603で、この方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。クライアントVSYNC信号は、クライアントに関連付けられたディスプレイへのレンダリングに使用される。つまり、クライアントでビデオフレームをレンダリング及び表示するタイミングは、クライアントVSYNC信号を基準にすることができる。例えば、ビデオフレームは、対応するクライアントVSYNC信号の発生から開始して表示できる。
【0077】
一実施形態では、クライアントVSYNC周波数は、サーバVSYNC周波数にほぼ設定される。例えば、サーバは、制御信号をクライアントに送信することができ、制御信号は、クライアントによって、クライアントのVSYNC信号をサーバのVSYNC信号の見かけの周波数に設定するために使用される。つまり、制御信号には、クライアントVSYNC信号が設定されている見かけの周波数が含まれている場合がある。つまり、クライアントVSYNC周波数は、サーバVSYNC周波数と同じ見かけの周波数に設定されるが、サーバとクライアントのクロックに使用される水晶振動子の違いにより、実際のサーバとクライアントのVSYNC周波数は、一致しない場合がある。
【0078】
605で、この方法は、複数のビデオフレームに基づく複数の圧縮ビデオフレームを、サーバVSYNC信号を使用してネットワークを介してサーバからクライアントに送信することを含む。特に、ストリーミングモードでのサーバによるビデオゲームの処理に応答して生成されたゲームレンダリングされたビデオフレームは、圧縮を実行し、複数の圧縮ビデオフレームを生成するように構成されたエンコーダに配信される(例えば、スキャンアウト402される間に)。前述のように、対応するビデオフレームの符号化の開始は、サーバVSYNC信号の対応する発生とアライメントされる場合もあれば、フリップタイムなどの対応する発生の前に発生する場合もある。圧縮ビデオフレームは、ゲームセッション中に表示するためにクライアントに送信及び/または配信される。ビデオフレームの送信は、サーバVSYNC信号にアライメントさせて開始する必要はなく、図4に示すように、対応するビデオフレームの一部または完全なビデオフレームが符号化されるとすぐ、開始することができる。
【0079】
607で、この方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。前述のように、クライアントは複数の圧縮ビデオフレームを受信し、それらは次いでクライアントのデコーダによって復号される。例えば、クライアントは、対応する圧縮ビデオフレームの1つ以上の符号化されたスライスを受信する。次に、圧縮ビデオフレームが復号され、ディスプレイバッファに配置される。例えば、次に、対応する圧縮ビデオフレームの符号化されたスライスが復号され、復号されたビデオフレームが表示バッファに配置される。復号中に、復号されたスライスを表示用にレンダリングすることができ、レンダリングには、対応するビデオフレームの復号されたスライスから画面スライス(例えば、スキャンライン)を生成することが含まれ、これはその後、クライアントのディスプレイにストリーミングされる。特に、対応するビデオフレームの復号されたスライスのピクセルデータは、クライアントのディスプレイへのストリーミング(例えば、スキャンラインごと)のために、ディスプレイバッファの適切なアドレスに配置され得る。
【0080】
610で、方法は、クライアントが複数の圧縮ビデオフレームを受信するときに、1つまたは複数のクライアント操作のタイミングを分析して、サーバVSYNC信号とクライアントVSYNC信号との間の相対的なタイミングを調整することを含む。例えば、サーバとクライアント間の一方向の待ち時間を減らし、一方向の待ち時間の変動を減らす目的で、サーバとクライアントのVSYNC信号間の適切なアライメント(例えば、周波数の同期とオフセットの調整)を実現するために、相対的なタイミングが調整される。一実施形態では、サーバとクライアントのVSYNC信号の間の適切なタイミングは、サーバVSYNC信号とクライアントVSYNC信号の少なくとも1つを調整することによって達成される。サーバとクライアントのVSYNC信号間の相対的なタイミングを調整することについてのより詳細な議論は、以下の図6B~6Cに提供されている。
【0081】
図6Bは、本開示の一実施形態による、クラウドゲームサーバとクライアントとの間でVSYNC信号の調整を実行するときにVSYNC信号をアライメントさせるための方法を示す流れ図600Bである。例えば、アライメントには、一方向の待ち時間を減らす目的などでの、周波数の同期、及び/またはサーバVSYNC信号とクライアントVSYNC信号間のオフセットの調整が含まれる。特に、図6Bは、図6Aの操作610に概説されているサーバとクライアントのVSYNC信号の間の相対的なタイミングの調整に関する追加の詳細を提供する。
【0082】
611で、この方法は、複数のビデオフレーム(例えば、ゲームでレンダリングされたビデオフレームとしてサーバによって生成された)に関連するタイムスタンプ情報をサーバからクライアントに送信することを含む。一実施形態では、タイムスタンプ情報は、複数の圧縮ビデオフレームと共にクライアントに送信される。別の実施形態では、タイムスタンプ情報は、複数の圧縮ビデオフレームとは別にクライアントに送信される。
【0083】
特に、タイムスタンプ情報には、サーバのピクセルクロックによって導出された、サーバで生成された対応するビデオフレームの対応するタイムスタンプが含まれる。一実施態様では、対応するビデオフレームのタイムスタンプは、スキャンアウト中(例えば、対応するビデオフレームのスキャンアウトの直前のサーバVSYNC信号の発生)など、対応するビデオフレームをエンコーダにスキャンするために使用されるサーバVSYNC信号の対応する発生時に発生し得る。別の実施態様では、対応するビデオフレームのタイムスタンプは、サーバでの対応するフリップ時間に発生する可能性がある。タイムスタンプは、ネットワークを介した送信なしで、ローカルディスプレイへのスキャンやストリーミングなど、ビデオゲームによって決定された対応するビデオフレームの望ましい表示タイミングを示す。
【0084】
クライアントが圧縮ビデオフレームを受信して復号すると、タイムスタンプ情報が処理され、サーバによって指定された所望の表示時間(タイムスタンプ)と比較して、対応するビデオフレームのクライアントでの表示の可用性を示す復号タイムスタンプが作成される。前に説明したように、クライアントは、対応するビデオフレームの復号の完了時に、クライアントのピクセルクロックから導出された時間を記録する。この復号の完了時間は、サーバから配信された対応するタイムスタンプから差し引かれ、復号タイムスタンプが作成される。さらに、復号される第1の圧縮ビデオフレームは、その後に測定及び/または計算されるすべての復号時間に適用(例えば、加算または減算)され得る正規化係数を使用して、その復号タイムスタンプがゼロに調整されるように正規化され得るもので、その後クライアントで圧縮ビデオフレームを受信できるようにする。
【0085】
613で、この方法は、測定及び/または計算された復号タイムスタンプに基づいて1つまたは複数のヒストグラムを構築することを含む。特に、対応するヒストグラムは、ある期間にわたってクライアントで受信された圧縮ビデオフレームについて測定された復号タイムスタンプ情報をビニングすることによって作成される。上記のように、対応するビデオフレームに対して測定及び正規化された復号タイムスタンプは、サーバタイムスタンプによって示される所望の表示時間と比較して、復号されたビデオフレームがクライアントでいつ表示可能であるかを示す。このようにして、対応するヒストグラムは、複数のビデオフレームに対してサーバによって指定された所望の表示時間に対するクライアントによる復号の完了のタイミングの分布を提供する。したがって、サーバとクライアント間の一方向の待ち時間及び/または一方向の待ち時間の変動を減らす目的で、1つまたは複数の生成されたヒストグラムを使用して、サーバとクライアントのVSYNC信号間の相対的なタイミングを調整し得る。
【0086】
615で、サーバとクライアントのVSYNC信号間の相対的なタイミングは、サーバVSYNC信号のサーバVSYNC周波数とクライアントVSYNC信号のクライアントVSYNC周波数とを同期させるように調整される。一実施形態では、ドリフトは、対応するヒストグラムを使用して、サーバVSYNC信号とクライアントVSYNC信号との間で決定される。例えば、クライアントが受信したビデオフレームから生成された1つ以上のヒストグラムは、継続的かつ動的に更新される。ヒストグラムを分析して、サーバVSYNC信号とクライアントVSYNC信号の間のドリフトを判別する。例えば、図5Bは、前述のように、複数のヒストグラムをプロットするときにドリフト(例えば、線590によって反映される)がどのように決定され得るかを示している。
【0087】
サーバとクライアントのVSYNC信号間のドリフトを決定するための代替方法を同期に使用できる。例えば、ある期間にわたる復号タイムスタンプの分析を実行して、復号タイミングの増加または減少の傾向を決定することができ、これを使用してドリフトを決定することができる。別の例では、ドリフトは、サーバで生成されたタイムスタンプ情報と、サーバベースのタイムスタンプ情報の受信のクライアントベースのタイミングとの間の分散を分析することによって計算され得る。また、ドリフトは、ピアツーピアアーキテクチャ、サーバ/クライアントアーキテクチャ、またはそれらの組み合わせで配置された、独立したピアデバイス、サーバとクライアントデバイスであり得る、接続された複数のデバイス間で、測定できる。
【0088】
さらに、サーバからクライアントに送信されるタイムスタンプ情報に基づいて、サーバVSYNC周波数及びクライアントVSYNC周波数のうちの少なくとも1つを調整して、測定されたドリフトを補償することができる。例えば、サーバVSYNC信号またはクライアントVSYNC信号の周波数は、サーバとクライアントのVSYNC信号の実際の周波数がその期間にわたってほぼ同じになるように、一定期間調整できる。このようにして、サーバとクライアントのVSYNC信号の周波数が同期される。
【0089】
前述のように、対応するサーバまたはクライアントのVSYNC信号の周波数は、対応するフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加することによって調整することができ、VSYNC信号を一定期間調整することができる。調整には、サーバまたはクライアントの対応するピクセルクロックを、一定期間オーバークロックまたはアンダークロックすることが含まれる場合がある。さらに、調整は、対応するVSYNC信号を経時的に適切に、動的に調整することによって、継続的に実行することができる。
【0090】
617では、タイムスタンプ情報に基づいてサーバVSYNC信号とクライアントVSYNC信号との間の相対オフセットを調整することにより、サーバとクライアントのVSYNC信号の間の相対的なタイミングが調整される。同様に、サーバとクライアントのVSYNC信号間の相対位相は、タイムスタンプに基づいて調整できる。サーバとクライアントのVSYNC信号の周波数が同期されると、サーバとクライアントのVSYNC信号の相対位相またはオフセットの調整をサーバまたはクライアントのVSYNC信号に適用できる。
【0091】
特に、サーバVSYNC信号とクライアントVSYNC信号の間のオフセットの調整は、対応するヒストグラムで示される最悪に近い場合の復号タイムスタンプに基づいて決定される。例えば、タイミングオフセットは、受信したビデオフレームの所定の数または閾値(例えば、99.99パーセント)が、クライアントVSYNC信号の次の適切な発生時に復号及び表示される時間内にクライアントに到着するように決定できる。このように、サーバとクライアントのVSYNC信号間のタイミングオフセットを調整するときに、ビデオフレームの一方向の待ち時間の最悪に近いシナリオでも考慮され、最悪に近い場合のシナリオのビデオフレームが受信され、復号され、クライアントディスプレイへのストリームアウトのためにディスプレイバッファでペース調整される。適切なタイミングオフセットを決定することは、図8A~8Bに関連してさらに説明される。
【0092】
前述のように、サーバとクライアントのVSYNC信号間のタイミングオフセットの調整は、サーバVSYNC信号またはクライアントVSYNC信号を1つまたは複数のフレーム期間で調整することによって実現できる。例えば、タイミングオフセットの調整は、対応するサーバまたはクライアントのVSYNCの周波数を1つまたは複数のフレーム期間調整することによって実行できる。特に、対応するサーバまたはクライアントのVSYNC信号の周波数は、対応するフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加するか、サーバまたはクライアントの対応するピクセルクロックをオーバークロックまたはアンダークロックすることによって調整できる。
【0093】
いくつかの実施形態では、最初にサーバとクライアントのVSYNC信号の間のドリフトを除去し、次にVSYNC信号間の適切なオフセットを確立するのではなく、代わりに、サーバVSYNC信号またはクライアントVSYNC信号の周波数をより頻繁に操作して相対的なタイミングオフセットを調整することによって、タイミングオフセットが維持される。つまり、サーバVSYNC信号とクライアントVSYNC信号の間のオフセットの調整は、対応するヒストグラムによって示される最悪に近い場合の復号タイムスタンプに基づいて継続的に決定され、ヒストグラムが、タイミングオフセットの頻繁な決定と操作で短い時間にわたり発生され得る。
【0094】
図6Cは、本開示の一実施形態による、一方向の待ち時間を短縮する目的で、クラウドゲームサーバとクライアントとの間でVSYNC信号の調整を実行するときにVSYNC信号をアライメントさせるための別の方法を示す流れ図600Cである。前述のように、アライメントには、一方向の待ち時間を減らす目的などでの、周波数の同期、及び/またはサーバVSYNC信号とクライアントVSYNC信号間のオフセットの調整が含まれる。特に、図6Cは、図6Aの操作610に概説されているサーバとクライアントのVSYNC信号の間の相対的なタイミングの調整に関する追加の詳細を提供する。
【0095】
具体的には、操作621及び623を含め、操作620で概説されるように、サーバ及びクライアントのVSYNC信号間のドリフトを決定するための代替方法が同期のために使用される。特に、621で、この方法は、サーバからクライアントにタイミング情報を定期的に送信することを含む。例えば、サーバピクセルクロックから決定されるタイミング情報は、対応するフレーム期間の開始、対応するフレーム期間の時間の長さ、エンコーダへのビデオフレームのスキャンアウトタイミング、対応するビデオフレームのフリップ時間などを含み得る。
【0096】
また、623で、タイミング情報が分析されて、サーバVSYNC信号とクライアントVSYNC信号との間のドリフトが決定される。例えば、ドリフトは、サーバで生成されたタイミング情報と、サーバベースのタイミング情報の受信のクライアントベースのタイミングとの間の分散を分析することによって計算され得る。他の実施形態では、ドリフトは、ビデオフレームを生成するために使用されるサーバフレーム期間について測定され得るもので、サーバフレーム期間のドリフトは、クライアントVSYNC信号、またはその数倍ぶんを参照して測定される。また、ドリフトは、ピアツーピアアーキテクチャ、サーバ/クライアントアーキテクチャ、またはそれらの組み合わせで配置された、独立したピアデバイス、サーバとクライアントデバイスであり得る、接続された複数のデバイス間で、測定できる。
【0097】
ドリフトが決定されると、サーバVSYNC信号またはクライアントVSYNC信号の周波数を調整してドリフトを補償することができ、調整は一定期間にわたって適用することができる。前述のように、サーバとクライアントのVSYNC信号の周波数間で測定されたドリフトを使用して、サーバまたはクライアントで一定期間VSYNC信号を調整することができる。VSYNC信号の調整には、対応するフレーム期間の垂直帰線区間のラスタースキャンラインの除去または追加が含まれる場合があるか、または、サーバまたはクライアントの対応するピクセルクロックのオーバークロックまたはアンダークロックが含まれる場合がある。
【0098】
サーバとクライアントのVSYNC信号の周波数間のドリフトを補償した後、サーバとクライアントのVSYNC信号間の相対的な位相またはオフセットは、タイムスタンプ情報に基づいて調整でき、調整は、サーバVSYNC信号またはクライアントVSYNC信号に適用できる。特に、相対位相またはオフセットの調整は、サーバで生成されたビデオフレームに関連付けられたタイムスタンプ情報に基づいて実行される。
【0099】
特に、611で、タイムスタンプ情報がサーバからクライアントに送信される。実施形態では、タイムスタンプ情報は、複数のビデオフレームと共に送信されるか、または複数のビデオフレームとは別に送信される。流れ図600Cの操作611は、図6Bの流れ図600Bに関連して以前に説明された。例えば、サーバピクセルクロックによって決定されるタイムスタンプ情報は、対応するビデオフレームをエンコーダにスキャンするために使用されるサーバVSYNC信号の対応する発生のタイミングを示し得る(例えば、スキャンアウト中)。別の実施態様では、タイムスタンプ情報は、対応するビデオフレームの対応するフリップ時間のタイミングを示し得る。
【0100】
前述のように、タイムスタンプ情報は、復号タイムスタンプを作成するためにクライアントによって使用され、各々は、サーバによって指定された所望の表示時間(タイムスタンプ)と比較して、対応するビデオフレームのクライアントでの表示の可用性を示す。復号タイムスタンプは、対応するサーバベースのタイムスタンプ情報から、対応するビデオフレームの復号の完了を示すクライアントでの時間を差し引くことによって導出することができる。正規化は、復号タイムスタンプを生成するときにも適用できる。
【0101】
ドリフトはタイムスタンプ情報を使用せずに実行できるため、例えば複数のヒストグラムを生成するために、特定の時間に1つのヒストグラムが生成され、サーバとクライアントのVSYNC信号間のタイミングオフセットを調整するために使用される。つまり、ヒストグラムは、ヒストグラムに含まれる復号タイムスタンプを拡張することによって更新できるが、異なる期間にわたる複数のヒストグラムを生成する必要はない。特に、613-Aでは、ヒストグラムは復号タイムスタンプに基づいて作成される。流れ図600Cの操作613-Aは、図6Bの流れ図600Bに関連して前述した操作613と同様である。例えば、復号タイムスタンプ情報は、経時的にクライアントによって受信及び復号されたビデオフレームに対してビニングされ、サーバによって指定された所望の表示時間(サーバタイムスタンプ情報など)に対するクライアントによる復号の完了のタイミングの分布を提供する。
【0102】
617で、サーバとクライアントのVSYNC信号の間の相対的な位相またはオフセットは、タイムスタンプ情報に基づいて調整され得るもので、調整は、サーバVSYNC信号またはクライアントVSYNC信号に適用され得る。流れ図600Cの操作617は、図6Bの流れ図600Bに関連して以前に説明された。特に、オフセットの調整は、継続的に更新されるヒストグラムによって示される最悪に近い場合の復号タイムスタンプに基づいて決定される。例えば、タイミングオフセットは、受信したビデオフレームの所定の数の閾値(例えば、99.99パーセント)が、クライアントVSYNC信号の次の適切な発生時に復号及び表示される時間内にクライアントに到着するように決定できる。適切なタイミングオフセットの決定は、図8A~8Bに関連してさらに説明される。
【0103】
サーバとクライアントのVSYNC信号間のタイミングオフセットの調整は、サーバまたはクライアントのVSYNC信号を1つ以上のフレーム期間調整することによって実行される。例えば、調整は、対応するフレーム期間の垂直帰線区間のラスタースキャンラインを除去または追加することによって、またはサーバまたはクライアントの対応するピクセルクロックをオーバークロックまたはアンダークロックすることによって、1つまたは複数のフレーム期間のサーバまたはクライアントのVSYNC信号の周波数を調整することによって実行できる。
【0104】
いくつかの実施形態では、図6Cのドリフト操作620は、VSYNC信号間に適切なオフセットを確立する場合、実行されない。代わりに、タイミングオフセットは、サーバVSYNC信号またはクライアントVSYNC信号の周波数をより頻繁に操作して、相対的なタイミングオフセットを調整することによって維持される。すなわち、サーバVSYNC信号とクライアントVSYNC信号との間のオフセットへの調整は、対応するヒストグラムによって示される最悪に近い場合の復号タイムスタンプに基づいて継続的に決定され、オフセットへの調整は、短縮された間隔期間で実行され得る。
【0105】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260内)の詳細な説明と共に、図7の流れ図700は、本開示の一実施形態による、クラウドゲームサーバとクライアントとの間の一方向の待ち時間を短縮するための代替の方法を示している。特に、流れ図700は、本開示の一実施形態による、サーバでの圧縮ビデオフレームの生成に関連してクライアントVSYNC信号を調整するための方法を示し、ビデオフレームは、同様のサイズのフレーム期間中に生成される。
【0106】
710で、方法は、フレーム期間がほぼ等しいサイズである、複数のフレーム期間の間にサーバで複数のビデオフレームを生成することを含む。一実施形態では、ビデオフレームをクライアントにストリーミングするときにサーバに表示する必要がないので、クラウドゲームサーバは、サーバVSYNC信号をオフにするか、または実装しないことができる。代わりに、サーバは、ビデオゲームを処理するときにゲームレンダリングされたビデオフレームの生成中のタイミングに使用される規則的(例えば、周期的)またはほぼ規則的な信号を利用することができる。例えば、サーバは、サーバのVSYNC信号を使用する代わりに、サイズがほぼ等しいフレーム期間を使用する場合がある。複数のビデオフレームの生成は、ゲームレンダリングされたビデオフレームが対応するフレーム期間内に生成されるように、複数のフレーム期間内に発生する。サーバは、ストリーミングモードでビデオゲームを実行し、サーバのCPUは、グラフィックスパイプラインを使用してゲームレンダリングされたビデオフレームを生成するために、ユーザからの入力コマンドに応答してビデオゲームを実行することができる。
【0107】
720で、この方法は、クライアントで、クライアントVSYNC信号をクライアントVSYNC周波数に設定することを含む。クライアントVSYNC信号は、クライアントに関連付けられたディスプレイへのレンダリングに使用される。クライアントでビデオフレームをレンダリング及び表示するタイミングは、クライアントVSYNC信号を基準にすることができ、対応するビデオフレームは、対応するクライアントVSYNC信号の発生から開始して表示できる。
【0108】
730で、方法は、複数のビデオフレームに基づく複数の圧縮ビデオフレームをサーバからクライアントに送信することを含む。特に、ゲームレンダリングされたビデオフレームは、サーバのエンコーダに(例えば、スキャンアウト402中に)配信され、エンコーダは、ゲームレンダリングされたビデオフレームに対して圧縮を実行するように構成される。複数の圧縮ビデオフレームは、ゲームセッション中などに表示するためにクライアントに送信(例えばストリーミング)される。圧縮ビデオフレームの送信は、フレーム期間と一致している必要はなく、その結果、送信は、対応するビデオフレームの一部であるとすぐに、または完全なビデオフレームが符号化されたときに、行われる可能性がある。
【0109】
740で、この方法は、クライアントで、複数の圧縮ビデオフレームを復号及び表示することを含む。前述のように、クライアントは複数の圧縮ビデオフレームを受信して復号する。例えば、クライアントは、対応する圧縮ビデオフレームの1つまたは複数の符号化されたスライスを受信でき、それを復号する。復号されたビデオフレームは、ディスプレイバッファに配置される。復号中に、復号されたスライスを表示用にレンダリングすることができ、レンダリングには、対応するビデオの復号されたスライスから画面スライス(例えば、スキャンライン)を生成することが含まれ、これはその後、クライアントのディスプレイにストリーミングされる。例えば、対応するビデオフレームの復号されたスライスのピクセルデータは、ディスプレイへのストリーミング(例えば、スキャンラインごと)のために、ディスプレイバッファの適切なアドレスに配置され得る。
【0110】
750では、この方法は、複数のフレーム期間に関連するタイミング情報をサーバからクライアントに送信することを含む。タイミング情報は、各フレーム期間がサーバでいつ始まるかを示している場合がある。フレーム期間はほぼ等しいため、クライアントに配信される1つのフレーム期間のタイミング(サーバのタイムスタンプなど)により、クライアントは各フレーム期間のタイミングを追跡できる(例えば、最後に計算されたタイムスタンプに定期的にフレーム期間を追加する)。
このようにして、クライアントは、サーバから受信した、またはクライアントで計算したタイミング情報を、クライアントで受信した対応するビデオフレームに相関させることができる。クライアントで決定されたタイミング情報は、ビデオフレームが生成され、理論的にスキャンまたはローカルディスプレイへストリーミングされたときなど、クライアントで実行されているビデオゲームによって決定された対応するビデオフレームの所望の表示タイミングの指標を、ネットワーク経由での送信なしで与えることができる。
【0111】
760で、方法は、1つまたは複数のクライアント操作のタイミングを分析して、クライアントVSYNC信号の相対的なタイミングを調整し、クライアントが複数の圧縮ビデオフレームを受信するときにサーバで複数の圧縮ビデオフレームを生成することを含む。特に、サーバフレーム期間(例えば、持続時間)またはクライアントVSYNC信号は、クライアントVSYNC信号(またはその数倍ぶん)に関してサーバフレーム期間の相対的なタイミングオフセットを調整するように操作され得る。
【0112】
例えば、クライアントが計算したサーバフレーム期間とクライアントVSYNC信号との間のドリフトを決定することができる。ドリフトの補償は、同期のためにサーバフレーム期間またはクライアントVSYNC信号に適用できる。例えば、クライアントでは、クライアントVSYNC信号の周波数は、対応するフレーム期間の垂直平衡間隔のラスタースキャンラインを除去または追加することによって調整することができ、VSYNC信号を一定期間調整することができる。また、調整には、クライアントのピクセルクロックのオーバークロックまたはアンダークロックが含まれる場合がある。さらに、相対オフセットを調整するために、1つまたは複数のヒストグラムをクライアントで作成することができ、oは、サーバでビデオフレームが生成されたときと比較して、復号されたビデオフレームがクライアントでいつ利用可能かを示す(例えば、必要な表示時間)。ヒストグラムは、ビデオフレームがいつ生成され、表示されるかを示すためにクライアントが決定したフレーム期間を使用するなど、わずかな変更を加えて、前述と同じ手法を使用して作成できる。
【0113】
図8Aは、ビデオフレームの復号タイムスタンプの分布を提供するヒストグラム850の構築及び使用を示す図800Aであり、前述のように、サーバによって指定された所望の表示時間に対するビデオフレームのクライアントでの表示の可用性を示し、ヒストグラムは、本開示の一実施形態に従って、サーバとクライアントでのVSYNC信号間の オフセットの調整を決定するために構成される。示されるように、ビデオフレームはサーバで生成され(操作401)、スキャンアウトは、圧縮(操作403)のためにエンコーダ(操作402)にゲームレンダリングされたビデオフレームで実行され、クライアントに送信される(操作404)。クライアントは、符号化されたビデオフレームを受信し(操作405)、符号化されたビデオフレームを解凍し(操作406)、表示のためにビデオフレームをレンダリングする(例えば、操作407において、復号されたビデオフレームをスキャンラインに変換する)。
【0114】
前述のように、サーバベースのタイムスタンプ情報は、オフセットの決定に使用される1つ以上のヒストグラムを作成する目的で、圧縮/符号化されたビデオフレームに関連してクライアントに配信される。タイムスタンプ情報は、サーバによって指定された望ましい表示時間を提供する。サーバは、フレーム期間ごとに圧縮ビデオフレームを送信しない場合がある。特に、ヒストグラムは、サーバによって指定された所望の表示時間(例えば、サーバベースのタイムスタンプ情報)と比較して、ビデオフレームのクライアントでの表示の可用性を示す復号タイムスタンプを含み得る。サーバのタイムスタンプとクライアントのタイムスタンプは、同期されていない個々のクロックによって定義される可能性があるため、復号のタイムスタンプを正規化すると便利な場合がある。例えば、正規化には、すべての復号タイムスタンプから最初の復号タイムスタンプの値を減算することが含まれる場合がある。これにより、最初の復号タイムスタンプはゼロになり、後続のすべてのタイムスタンプはそれに関連する。
【0115】
図8Aに示されるように、構築されたヒストグラム850は、サーバVSYNC信号とクライアントVSYNC信号との間の適切なオフセットを決定するために使用され得る。前述のように、ヒストグラムは復号タイムスタンプの分布を提供する。これは、所望の表示時間に対する表示の可用性を示す。サーバとクライアントとの間のVSYNCオフセット430は、受信されたビデオフレームの所定の数または閾値(例えば、99.99パーセント)がクライアントに到着し、クライアントVSYNC信号の次の適切な発生時に表示されるように時間内に復号されるように存在する。一実施形態では、残りの数(例えば、0.01パーセント)は、表示するには遅すぎて、漏れる可能性がある。言い換えれば、VSYNCオフセット430は、レンダリングされたビデオフレームを受信、復号、及び表示するときに、最悪に近い場合の待ち時間に対応する。
図8Aの符号化403、送信404、受信405、及び復号406は、最悪に近いフレーム(例えば、99.99パーセンタイル)を示している。適切なVSYNCオフセット430が確立されている場合、このフレームの復号とその表示の間にマージンはない。1つまたは複数のクライアントバッファ820は、符号化403、送信404、受信405、及び復号406が早い段階でヒストグラム(例えば、25パーセンタイル未満)においてビニングされるように、復号タイムスタンプが低い(例えば、一方向の待ち時間が最も短いことを示す)ビデオフレームに対応するように実装できる。この特定の例では、4つのバッファが必要で、3つは復号時のフレーム用(3つのバッファ820)、もう1つは現在表示されているフレーム用(図示せず)である。
【0116】
一連の理論的なタイミング図850Aから850Dが、クライアントVSYNC信号312のために提供され、タイミング図850C(及び付随するディスプレイ407)は、理想的なクライアントVSYNC312Cを示している。クロックまたはタイムスタンプの直接同期がないため(例えば、ユニバーサルクロックなどのサードパーティのタイミングメカニズムを介して)、オフセット430は直接設定されず、代わりに、現在のクライアントVSYNC312は、ヒストグラムの最悪に近い場合のタイミング情報を使用して調整され、前述のように理想的なクライアントVSYNCタイミング312Cになる。または、前述のように、サーバVSYNCを調整して適切なオフセットを作成することもできる。
【0117】
サーバのタイムスタンプ情報は、クライアントによって収集及び/または受信される。前述のように、タイムスタンプ情報には、対応するビデオフレームが生成された時刻が含まれる場合がある(例えば、フリップ時間、スキャンアウトが発生したとき、スキャンアウトが発生したときのサーバVSYNC信号の発生など)。追加情報は、サーバ及び/またはクライアントで収集され、ヒストグラムの作成または解釈に使用される場合があり、以下でより詳細に説明するように、「ヒストグラム情報」と呼ばれる。
【0118】
サーバ側では、追加のヒストグラム情報に、シーンの変化数、Iフレームの符号化時間の平均及び/または標準偏差、及びPフレームの符号化時間の平均及び/または標準偏差のような符号化時間の統計が含まれる場合がある。符号化時間の統計は、サーバからクライアントに定期的なメッセージとして配信される場合がある。さらに、ヒストグラム情報には、エンコーダによってエンコーダスライスを準備する時間が含まれる場合がある。これは、サーバからクライアントに定期的なメッセージとして配信される場合がある。また、ヒストグラム情報には、実際のサーバ側のVSYNCタイミングとターゲットのVSYNCタイミングが含まれる場合があり、これらはパケットヘッダーに追加される場合がある。さらに、ヒストグラム情報は、Iフレーム対Pフレームあたりのスライスの平均数を含み得る。
【0119】
サーバでは、ヒストグラムの情報に、符号化されたスライス(例えば、圧縮されたエンコーダスライス)を送信するための一方向のネットワーク待ち時間を導出するためのラウンドトリップ時間(RTT)測定が含まれる場合がある。RTT測定は、パケットをクライアントに送信するために必要な送信時間を決定するために使用され得る(例えば、復号及びレンダリングなどのクライアントによって実行されるさらなる処理なしで)。例えば、RTTは、ハートビートパケットをサーバからクライアントに送信することによって決定できる。このパケットには、一意の識別子が含まれている。クライアントは、サーバがRTTを計算できるように、一意の識別子と共にハートビート応答をサーバに送り返す。一方向のネットワーク待ち時間は、RTTの約半分である。ヒストグラムを作成するために使用される場合、RTTを定期的に測定することにより、ネットワークまたは伝送ジッタを分析及び/または決定できる(例えば、RTTのスパイク)。例えば、RTTを介して測定された一方向ネットワーク待ち時間の測定値は、次のRTT測定までに受信されたすべてのビデオフレームの送信時間として使用できる。
【0120】
クライアントでは、追加のヒストグラム情報に、受信した符号化されたビデオフレームごとの復号時間が含まれる場合がある。さらに、ヒストグラム情報は、復号されたビデオフレームごとのレンダリング準備時間を含むことができ、レンダリング準備は、復号されたビデオフレームスライスをスキャンラインまたはスクリーンスライスに変換することを含み得る。
【0121】
さらに、サーバでは、追加のヒストグラム情報に、サーバがクライアントに利用可能であると考える総ネットワークスループット(帯域幅など)を定義する最大送信レートが含まれる場合がある。これは、符号化されたビデオフレームのエンコーダスライスを送信できる最大レートを決定するために使用できる。最大レートはクライアントへのネットワーク接続の安定性に基づいて変動し、オフセットは変動に対応するように動的に調整できる。さらに、最大送信速度は、エンコーダのパラメータとは無関係に調整できるため、エンコーダが最大送信速度でスライスを生成しないように構成されている場合、スライスをより迅速に送信できる。
【0122】
例えば、最大帯域幅または最大送信速度は、クライアントからのフィードバックメカニズムによって決定され得る。これを実行する1つの方法は、クライアントがインクリメンタルシーケンスID(識別子)の範囲またはフレームの範囲で受信したパケットの数を返すようにすることである。例えば、クライアントは、シーケンスID100~250に対して150フレームのうち145フレーム受信したといったことを報告する場合がある。サーバはパケット損失を計算し、その一連のパケット中に送信された帯域幅の量を認識し、クライアントの最大帯域幅を判別できる。送信される帯域幅の量は、可変ビットレート、シーンの複雑さなどのために絶えず変動しているため、クライアントはこの決定を行うことができない。つまり、クライアントは、任意の所与の瞬間、サーバがクライアントが処理できる最大帯域幅を送信しているかどうかわからない。例えば、最大帯域幅は15Mbps(メガビット/秒)だが、ユーザがメニューを表示しているため、シーンの複雑さは低くなる可能性がある(静的ビデオフレームは複雑さが低く、フレーム間の変動がない)。その結果、2Mbpsのみが送信される。したがって、クライアントが0%のパケット損失を報告した場合、クライアントが15Mbpsを依然処理できるかどうかはサーバに通知されない。したがって、サーバが最大帯域幅を送信している場合にのみ、真の最大帯域幅を決定できる。
【0123】
図8Bは、復号タイムスタンプの分布を示すヒストグラム850を示している。この場合、一実施形態では、数値的に最小の復号タイムスタンプにゼロの値が割り当てられるように(例えば、最小の復号タイムスタンプがすべての復号タイムスタンプから差し引かれる)、正規化される。特に、x軸は、0~60ミリ秒(ms)を超えるなど、対応する復号タイムスタンプの時間をミリ秒単位で示す。y軸は、対応する復号タイムスタンプに対してクライアントが受信したビデオフレームの数を示す。
【0124】
純粋に説明のために、復号のタイムスタンプは約60ミリ秒(ミリ秒)の範囲で変化する可能性があり、サーバによって指定された所望の表示時間と比較して、ビデオフレームのクライアントでの表示の可用性に60ミリ秒の変動があることを示す。つまり、一部のフレームは、他のフレームと比較して約60ms早くまたは遅く表示できる場合がある。表示用の特定のフレームの可用性の変動は、サーバとクライアントの処理の変動、シーンの複雑さ、ネットワークパスの変動、パケット遅延の変動、及びその他の要因が原因である可能性がある。
最悪または最悪に近い復号タイムスタンプを分析することにより、サーバVSYNC信号とクライアントVSYNC信号の間の理想的な関係を決定することができる。つまり、前述のように、クライアントVSYNC信号とサーバVSYNC信号のタイミング間の理想的な相対オフセットを決定して、適切なクライアントVSYNC信号で表示できる受信及び解凍されたビデオフレームの数を、最大化することができる。そのようにして、図800Bは、復号タイムスタンプ755の分布の幅(例えば、約57ミリ秒)を示し、その範囲内で、クライアントによって受信されたビデオフレームの99.99パーセントが到着し、クライアントVSYNC信号の次の適切な発生時に表示するのに間に合うように復号される。
【0125】
復号タイムスタンプ755の分布のこの幅(最悪に近い場合までのすべての復号タイムスタンプを含むが、それを超えるものを除く)を使用して、復号されたビデオフレームに必要な全体的なバッファリングの必要量を決定することができる。幅755がフレーム期間よりも小さい場合は、2つのバッファが必要である。1つは復号時にフレームに必要であり、もう1つは表示に必要である。例えば、幅が1フレーム期間よりも大きく、2フレーム期間よりも小さい場合は、3つのバッファが必要になる。57msの幅の特定の例では、フレーム期間が16.67msの場合、5つのフレームバッファが必要である。復号タイムスタンプは、所望の表示時間に対する復号されたフレームの可用性を示し、したがって、復号タイムスタンプが低いビデオフレームは、表示前により長い期間バッファに保持され、復号タイムスタンプが高いビデオフレームは、表示前のより短い時間バッファに保持される。
【0126】
一実施形態では、ヒストグラムは動的に再生成される。別の実施形態では、フレームバッファリングの量は、経時的にクライアントによって動的に設定される。さらに別の実施形態では、到着し、復号が遅すぎて所望の表示時間に表示できないフレームはスキップされる(すなわち、表示されない)。
【0127】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260内)の詳細な説明と共に、図9の流れ図900は、本開示の一実施形態による、ビデオフレームがクラウドゲームサーバで生成されてから到着するまで、及び/またはクライアントに表示する準備ができるまでのビデオフレームの経過タイミングの分布を提供するヒストグラムを構築する方法を示し、ヒストグラムは、クライアントでのバッファサイズの決定に対して構成される。前述のように、ヒストグラムは、サーバとクライアントでのVSYNC信号間の適切なオフセットを決定するためにも構成される。
【0128】
操作601、603、605、611、及び613は、図6Aの流れ図600A及び図6Bの流れ図600Bに関連して以前に説明され、サーバとクライアントのVSYNC信号間の相対的なタイミングの調整を開示する(例えば、周波数を同期し、タイミングオフセットまたは位相を調整する)。要約すると、601で、この方法は、サーバにおいて、サーバVSYNC信号のフレーム期間中のサーバでのビデオフレームの生成に対応するサーバVSYNC信号を周波数に設定することを含む。603で、この方法は、クライアントで、周波数に対応するクライアントVSYNC信号を、クライアントに関連付けられたディスプレイへのレンダリングに使用されるクライアントVSYNC信号を設定することを含む。605で、この方法は、サーバVSYNC信号を使用して、ネットワークを介してサーバからクライアントに生成ビデオフレームに基づいて圧縮ビデオフレームを送信することを含む。
【0129】
611で、この方法は、圧縮ビデオフレームに関連するタイムスタンプ情報をクライアントに送信することを含む。例えば、タイムスタンプ情報は、圧縮ビデオフレームと共に、またはそれとは別に送信され得るもので、タイムスタンプ情報は、理論的にスキャンまたはローカルディスプレイにストリーミングするときなど、ビデオゲームによって決定されるときに、ネットワーク経由での送信なしで対応するビデオフレームの所望の表示タイミングの指標を与える。クライアントが圧縮ビデオフレームを受信及び復号すると、タイムスタンプ情報が処理され、サーバによって指定された所望の表示時間(例えば、サーバタイムスタンプ)と比較して、対応するビデオフレームのクライアントでの表示の可用性を示す復号タイムスタンプが作成される。一実施形態では、サーバ及びクライアントのタイミングは、同期されていない対応する個々のクロックによって定義され得るので、復号タイムスタンプは正規化され得る。タイムスタンプ情報に関する完全な議論は、図6B~6C、及び8A~8Bに関連して提供され、図9に関連して等しく適用可能である。
【0130】
613で、この方法は、クライアントで測定及び/または計算された復号タイムスタンプに基づいてヒストグラムを構築することを含む。例えば、対応するヒストグラムは、ある期間にわたってクライアントで受信及び復号された圧縮ビデオフレームに関連する復号タイムスタンプ情報をビニングすることによって作成され得る。復号タイムスタンプは、サーバによって指定された所望の表示時間(サーバタイムスタンプなど)と比較して、ビデオフレームのクライアントでの表示の可用性を示すことを示しているため、ヒストグラムはサーバ(サーバのタイムスタンプ情報など)によって指定された所望の表示時間に関連してクライアントが受信したビデオフレームの復号完了のタイミングの分布も提供する。タイムスタンプ情報に関する完全な議論は、図6B~6C、及び8A~8Bに関連して提供され、図9に関連して等しく適用可能である。
【0131】
910で、この方法は、特定の時点でのヒストグラムの幅を測定することを含む。例えば、ヒストグラムにおける復号タイムスタンプの分布の幅は、受信されたビデオフレームの所定の数または閾値(例えば、99.99パーセント)が、クライアントVSYNC信号312の次の適切な発生時に表示される時間内にクライアントに到着するように測定され得る(明確にするために、受信したビデオフレームの残りの0.01%は、幅を測定するときに含まれていない)。
特に、ヒストグラムの幅は、特定の時点でクライアントが必要とするフレームバッファリングの量を設定するために使用できる。したがって、920で、この方法は、ヒストグラムの幅と、同期されたサーバ及びクライアントVSYNC信号のフレーム期間に基づいて、クライアントに多数の表示バッファを動的に設定し、ヒストグラム750は、時間内の特定の点で生成される。前述のように、幅がフレーム期間未満の場合は、例えば2つのフレームバッファが必要になる。このように、復号タイムスタンプが低いビデオフレームはバッファに長期間保持されるが、ビデオフレームは復号タイムスタンプが高いほど、バッファに保持される期間が短くなる。
【0132】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260内)の詳細な説明と共に、図10の流れ図1000は、本開示の一実施形態による、2つ以上のデバイス間のVSYNC信号間の相対的なタイミングを調整するための方法を示している。特に、流れ図1000は、ドリフトを補償するため、及び/または対応するデバイスの2つ以上のVSYNC信号間のオフセットまたは位相を調整するために使用され得る。
【0133】
1010で、この方法は、複数のデバイスにおいて、複数のVSYNC信号を複数のVSYNC周波数に設定することを含み、対応するデバイスの対応するデバイスVSYNC信号は、対応するデバイスのVSYNC周波数に設定される。つまり、各デバイスは、対応するピクセルクロックを使用して対応するVSYNC信号を設定する。さらに、周波数は、同じ見かけの周波数に設定されるなど、類似している場合があるが、実際の周波数は、様々なピクセルクロック間の差異のために異なる場合がある。これらのVSYNC信号は、ビデオフレームの生成(サーバ/クライアントアーキテクチャのサーバなど)及び/またはビデオフレームの表示(サーバ/クライアントアーキテクチャのクライアントなど)に使用できる。また、これらのVSYNC信号は、ビデオフレームの生成とビデオフレームの表示の両方に使用できる。例えば、各デバイスがローカルでビデオゲームを実行しているピアツーピアアーキテクチャのデバイスでは、そのタイミングはビデオフレームの実行と表示を調整することができる。
【0134】
1020で、この方法は、複数のデバイス間で複数の信号を送信することを含み、これは、少なくとも2つのデバイスの対応するデバイスのVSYNC信号間の相対的なタイミングを調整するために分析及び使用される。相対的なタイミングは、サーバ/クライアントアーキテクチャで構成されたデバイス間、またはピアツーピアアーキテクチャで構成されたデバイス間で調整できる。例えば、信号は、前述のように、対応するビデオフレームがいつサーバによって表示されることを意図されているかについての指示を与えるサーバタイムスタンプ情報またはサーバタイミング情報を含み得る。そのようにして、複数のデバイスのVSYNC信号は、少なくとも2つのVSYNC信号間のドリフトを決定することによって同期化され得る(例えば、VSYNC信号の周波数を同期化する)。また、タイミングオフセット及び/またはタイミング位相は、少なくとも2つのVSYNC信号間で調整することができる。
【0135】
特に、一実施形態では、デバイスのうちの少なくとも2つは、サーバ/クライアントアーキテクチャで構成され得る。別の実施形態では、デバイスは、マルチテナント構成(例えば、複数のクライアントデバイス用の1つのサーバ)に配置される。例えば、第1のデバイスは、サーバVSYNC信号がサーバVSYNC周波数に設定されるサーバデバイスであり得る。サーバVSYNC信号は、サーバVSYNC周波数の複数のフレーム期間中のサーバデバイスでのアプリケーションの実行中の複数のビデオフレームの生成に対応する。複数の圧縮ビデオフレームが、サーバVSYNC信号に基づいて、ネットワークを介してサーバデバイスから複数のデバイス内の残りのデバイス(クライアントデバイスなど)のそれぞれに送信される。例えば、サーバVSYNC信号は、サーバでのビデオフレームの生成と符号化のタイミングを提供する。圧縮ビデオフレームはサーバデバイスによって生成されているビデオフレームに基づく。各受信デバイス(残りのデバイスなど)は、受信された圧縮ビデオフレームを復号して表示する。復号されたビデオフレームの表示は、各受信デバイス間で同期させることができる。
【0136】
特に、相対タイミングは、ドリフトを補償するために、及び/またはデバイスのVSYNC信号間のタイミングオフセットまたは位相を調整するために、デバイス間で調整され得る。ドリフト及びタイミングオフセットまたは位相の調整は、図6A~6C、7、及び8A~8Bに関連して前述した技法を使用して決定することができる。2つのデバイスのVSYNC信号間の相対的なタイミングの調整は、どちらのデバイスでも発生する可能性があり、対応するデバイスの対応するデバイスVSYNC信号の対応するフレーム周期の垂直帰線区間のラスタースキャンラインを除去または追加することによる周波数の調整、または対応するデバイスの対応するクロックのオーバークロックまたはアンダークロックを含む場合がある。
【0137】
特に、一実施形態では、デバイスのうちの少なくとも2つは、ピアツーピアアーキテクチャで構成され得る。例えば、各デバイスは独立したピアデバイスである場合がある。つまり、どのデバイスもサーバデバイスではない。そのようにして、デバイスは、ピアツーピアゲーム用に構成され得る。各デバイスは、同じビデオゲームを処理することによって複数のビデオフレームを生成している。独立したピアデバイスは、マルチプレイヤーゲームセッションを制御するバックエンドサーバサポートを使用して、特定のビデオゲームのマルチプレイヤーモードで動作している場合がある。
バックエンドサーバは、マルチプレイヤーゲームセッションの各ユーザの状態データを管理することにより、デバイス間の状態共有を可能にすることができる。状態データは、特定箇所における該当ユーザの(ゲームアプリケーションの)ゲームプレイの状態を定義するゲーム状態データを含み得る。例えば、ゲーム状態データには、ゲームキャラクター、ゲームオブジェクト、ゲームオブジェクト属性、ゲーム属性、ゲームオブジェクト状態、グラフィックオーバーレイなどが含まれ得る。このようにして、オブジェクトとキャラクターを、マルチプレイヤーゲームセッションに参加しているユーザの各ゲーム環境に挿入でき、各ユーザのゲームプレイが状態の共有を介して各ユーザにカスタマイズされるようにする。
また、各ユーザのゲームプレイは、状態共有に基づいて同期することができる。すなわち、各デバイスで表示されているビデオフレームは、同期されたゲームプレイに反映されるように同期され得る。このように、あるユーザは、他のユーザのゲームプレイのビデオフレームよりも早く、対応するデバイス上でビデオフレームを継続的に受信及び表示することによって利点を得ることができない場合がある。または、バックエンドサーバは関与せず、この場合ピア間のVSYNC関係は、他のピアからの制御または状態情報の受信と、他のピアから受信した情報を使用するビデオフレームの表示との間の待ち時間を最小限に抑えるように最適化される。
【0138】
図11Aは、本開示の一実施形態による、クライアント210で表示するための解凍されたビデオフレームの受信、復号、及びレンダリングの重複を示している。特に、クラウドゲームアプリケーションにおけるサーバ(図示せず)とクライアント210との間の一方向の待ち時間は、特定のビデオフレームの受信、復号、及び表示の重複する操作によって低減され得る。
【0139】
例えば、クラウドゲームアプリケーションのクライアントは、ビデオフレームを受信して復号する。特に、受信操作405で符号化されたビデオフレーム1105を受信するクライアントは、サーバがビデオゲームを実行してゲームレンダリングされたビデオフレームを生成し、次にサーバのエンコーダで符号化され、符号化されたビデオフレーム1105としてクライアントに配信される。符号化されたビデオフレーム1105は、サーバのエンコーダによって圧縮される1つまたは複数の符号化されたスライスを含む。クライアントは、復号操作406で、符号化されたビデオフレーム内の1つまたは複数の符号化されたスライスを復号するように構成されたデコーダを含む。一実施形態では、復号プロセスは、対応するビデオフレームがクライアントで完全に受信される前に開始する。デコーダは、符号化されたスライスごとに復号を実行するため、復号されたビデオフレーム1106は、1つまたは複数のエンコーダスライスを含む。その後、復号されたビデオフレーム1106は、次に、復号されたビデオフレーム1106内の情報をスキャンラインまたはスクリーンスライスにレンダリングするなどの表示のために準備される。その後、クライアントレンダリングされたビデオフレーム1107は、表示の準備ができている。
【0140】
サーバとクライアントとの間の一方向の待ち時間は、ビデオフレームが操作406で完全に復号される前に、クライアント210に操作407でビデオフレームの表示を開始させることによって減らすことができる。特に、ビデオフレームの1つまたは複数の復号されたスライスは、ビデオフレームが完全に復号される前に、ディスプレイにレンダリングするために準備され得る。すなわち、407での表示操作は、406での復号操作と重複する。特に、最初に符号化されたスライス(スライスAなど)は、クライアントのスキャンアウトが表示を開始する前に到着して復号する必要がある。さらに、後続のすべての符号化されたスライスは、それぞれの解凍されたデータがレンダリングされて表示のためにスキャンアウトされる前に、到着して復号される必要がある。
【0141】
さらに、クライアントでの受信及び復号操作の重複に加えて、サーバによって送信された符号化されたビデオフレームがクライアントで完全に受信される前であっても、次いで表示の準備においてレンダリングされる1つまたは複数の復号されたスライスの表示が発生する可能性がある。つまり、クライアントでの受信、復号、及び表示操作の1つまたは複数が、対応するビデオフレームに対して重複する場合がある。さらに、サーバとクライアントの両方で複数の操作を重複させている場合、サーバでのスキャンアウト操作が完全に完了する前であっても、表示の準備において次いでレンダリングされるレンダリングされたビデオフレームの1つ以上の復号されたスライスをクライアントで表示でき、この場合一実施形態で、スキャンアウトは、ゲームでレンダリングされたビデオフレームをサーバのエンコーダに配信する。
【0142】
操作407での表示と操作406での復号の重複は、エンコーダスライスごとに実行することができる。このようにして、1つまたは複数の後続の符号化されたスライスが受信される前に、符号化されたスライスを表示することができる。これを行うには、前方誤り訂正(FEC)データを、対応するビデオフレームの符号化されたスライス間でインターリーブする必要がある。特に、符号化されたスライスは、1つまたは複数のネットワークパケットに分割され得る。FECパケットは、スライスに関連付けられた1つ以上のパケットを修正するために使用できる。そのため、FECパケットは、複数のスライスのパケット間でインターリーブされる場合がある。このようにして、前方誤り訂正を早期に使用して、フレームのパケットのセット全体(例えば、データ及びFEC)がクライアントによって受信されるのを待たずに、スライスの欠落及び/または破損したパケットを訂正できる。これにより、クライアントでの復号操作と表示操作を重複させることができる。
【0143】
一実施形態では、復号タイムスタンプをスライスごとに作成することができ、サーバによって指定された所望の表示時間と比較して、クライアントで表示するためのスライスの可用性を示す。復号タイムスタンプは、クライアントでのスライスの復号406の完了時間を取り、フレームの理想的な表示時間を示すサーバから受信したタイムスタンプを差し引き、表示プロセス407内での解凍されたスライスが使用される時間を加算する(つまり、例えば、解凍されたスライスデータがすぐに必要な場合は0msを追加し、16.67msのフレーム期間の途中でスライスデータが必要な場合は8.33msを追加する)ことによって計算することができる。他のすべてのタイムスタンプから最初の復号タイムスタンプを差し引くなど、何らかの方法で復号タイムスタンプを正規化すると便利な場合がある。
【0144】
復号タイムスタンプは、図5A~5B及び8A~8Bに示されているものと同様のヒストグラムに配置することができる。ヒストグラムによって決定される最悪の場合または最悪に近い場合(例えば、99.999%)の復号タイムスタンプを使用して、相対的なサーバとクライアントのVSYNCタイミングを調整し、それによって一方向の待ち時間を減らすことができる。スライスが到着して遅れて復号されると、表示バッファの既存のコンテンツが表示に使用され、目に見える破損または「ティアリング」が発生するため、99.999%などの非常に高い閾値が望ましく、サーバ260で生成され、クライアント210で表示されるビデオフレーム10万フレームのうち、1フレームが欠落することを規定する。
【0145】
図2A~2Dの様々なクライアントデバイス210及び/またはクラウドゲームネットワーク290(例えば、ゲームサーバ260内)の詳細な説明と共に、本開示の実施形態によれば、図11Bの流れ図1100Bは、符号化されたフレームがサーバからクライアントで受信され、復号されて表示のためにレンダリングされるクラウドゲームの方法を示し、ビデオフレームの復号及び表示は、一方向の待ち時間を短縮する目的で重複することができる。クライアントでの1つまたは複数の操作を重複できることは、図4~10で前述したように、サーバとクライアントとの間の一方向の待ち時間を管理することによって達成される。例えば、サーバとクライアントのVSYNC信号間の相対的なタイミングは、サーバとクライアント間の一方向の待ち時間の変動を低減及び/または最小化するように調整される。
【0146】
1110で、この方法はクライアントで符号化されたビデオフレームを受信することを含み、サーバがアプリケーションを実行してレンダリングされたビデオフレームを生成し、それが次にサーバのエンコーダで符号化されたビデオフレームとして符号化され、符号化されたビデオフレームは、圧縮された1つまたは複数の符号化されたスライスを含む。例えば、サーバはサーバVSYNC信号を使用して複数のビデオフレームを生成する。各ビデオフレームは、圧縮のためにエンコーダに送信することができ、各ビデオフレームは、1つまたは複数の符号化されたスライスに符号化することができる。前述のように、対応するビデオフレームの符号化の開始は、サーバVSYNC信号にアライメントすることができる。次に、圧縮ビデオフレームがクライアントに送信され、送信はサーバVSYNC信号と一致している必要はなく、エンコーダスライスまたは完全なビデオフレームが符号化されるとすぐに開始される。圧縮ビデオフレームはクライアントによって受信される。
【0147】
1120で、この方法は、1つまたは複数の復号されたスライスを生成するために、クライアントのデコーダで1つまたは複数の符号化されたスライスを復号することを含む。一実施形態では、1つまたは複数の符号化されたスライスの復号は、クライアントで符号化されたビデオフレームを完全に受信する前に開始することができる。例えば、クライアントは、対応するビデオフレームの1つ以上の符号化されたスライスを受信する。次に、符号化されたスライスのそれぞれが復号され、表示バッファに配置され、復号されたビデオフレームが表示バッファに配置される。
【0148】
1130で、この方法は、クライアントで表示するために1つ以上の復号されたスライスをレンダリングすることを含む。特に、復号のプロセスの間に、復号されたスライスを表示用にレンダリングすることができ、レンダリングには、対応するビデオフレームの復号されたスライスから画面スライス(例えば、スキャンライン)を生成することが含まれ、これはその後、クライアントのディスプレイにストリーミングされる。
【0149】
1140で、この方法は、一実施形態では、クライアントで1つまたは複数の符号化されたスライスを完全に受信する前にレンダリングされる1つまたは複数の復号されたスライスの表示を開始することを含む。特に、ディスプレイバッファに配置された復号されたスライスは、クライアントのディスプレイにすぐにストリーミングされる場合がある。そのため、受信と表示のクライアント操作が重複する場合がある。
【0150】
別の実施形態では、この方法は、1つまたは複数の符号化されたスライスを完全に復号する前に、ディスプレイでレンダリングされる1つまたは複数の復号されたスライスの表示を開始することを含む。特に、ディスプレイバッファに配置された復号されたスライスは、クライアントのディスプレイにすぐにストリーミングされる場合がある。そのため、復号と表示のクライアント操作が重複する場合がある。
【0151】
図12は、本開示の様々な実施形態の態様を実行するために使用することができる例示的なデバイス1200の構成要素を示す。例えば、図12は、本開示の実施形態による、サーバまたはクライアントのVSYNC信号を調整して、サーバとクライアント間のVSYNC信号のオフセットを同期及び/または調整するなど、メディアコンテンツのストリーミング及び/またはストリーミングメディアコンテンツの受信に適し、クライアントで動的バッファリングを提供するのに適し、クライアントでのビデオフレームの重複する復号及び表示に適している例示的なハードウェアシステムを示している。
このブロック図は、各々が本発明の実施形態を実施するために適した、パーソナルコンピュータ、サーバコンピュータ、ゲーム機、モバイル機器、または他のデジタルデバイスを組み込むことができる、またはそれらである場合があるデバイス1200を示す。デバイス1200は、ソフトウェアアプリケーション及び任意選択的にオペレーティングシステムを作動させる中央処理装置(CPU)1202を含む。CPU1202は、1つまたは複数の同種または異種の処理コアで構成され得る。
【0152】
様々な実施形態によれば、CPU1202は、1つ以上の処理コアを有する1つ以上の汎用マイクロプロセッサである。さらなる実施形態は、ゲーム実行中のグラフィック処理のために構成されたアプリケーションの、媒体及び双方向エンターテインメントアプリケーションなどのきわめて並列かつ計算集約的なアプリケーションに特に適合されたマイクロプロセッサアーキテクチャを有する1つ以上のCPUを使用し、実装することができる。
【0153】
メモリ1204は、CPU1202及びGPU1216が使用するアプリケーション及びデータを格納する。ストレージ1206は、アプリケーション及びデータ用の不揮発性ストレージ及び他のコンピュータ可読媒体を提供し、ストレージ1206には、固定ディスクドライブ、取り外し可能ディスクドライブ、フラッシュメモリデバイス、及びCD‐ROM、DVD‐ROM、Blu‐ray(登録商標)、HD‐DVD、または他の光学記憶デバイス、ならびに信号伝送及び記憶媒体が含まれ得る。ユーザ入力デバイス1208は、1人以上のユーザからのユーザ入力をデバイス1200に伝達するものであり、その例としては、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチルまたはビデオレコーダ/カメラ、及び/またはマイクロフォンがあり得る。
ネットワークインターフェース1209は、デバイス1200が電子通信ネットワークを介して他のコンピュータシステムと通信することを可能にし、かつ、ローカルエリアネットワーク、及びインターネットなどの広域ネットワークを介する有線または無線通信を含み得る。音声プロセッサ1212は、CPU1202、メモリ1204、及び/またはストレージ1206により提供される命令及び/またはデータから、アナログまたはデジタルの音声出力を生成するように適合される。CPU1202、グラフィックスサブシステム1214、例えばGPU1216及びGPUキャッシュ1218、メモリ1204、データストレージ1206、ユーザ入力デバイス1208、ネットワークインターフェース1209、及び音声プロセッサ1212を含むデバイス1200の構成要素は、1つ以上のデータバス1222を介して接続されている。
【0154】
グラフィックスサブシステム1214はさらに、データバス1222及びデバイス1200の構成要素と接続されている。グラフィックスサブシステム1214は、グラフィック処理ユニット(GPU)1216と、グラフィックスメモリ1218とを含む。グラフィックスメモリ1218は、出力画像の各画素の画素データを格納するために使用される表示メモリ(例えばフレームバッファ)を含む。グラフィックスメモリ1218は、GPU1216と同じデバイスに統合されてもよく、GPU1216と別個のデバイスとして接続されてもよく、かつ/またはメモリ1204内に実装されてもよい。画素データは、直接CPU1202からグラフィックスメモリ1218へ提供され得る。あるいは、CPU1202は、所望の出力画像を定義するデータ及び/または命令をGPU1216に提供し、これによりGPU1216は、1つ以上の出力画像の画素データを生成する。所望の出力画像を定義するデータ及び/または命令は、メモリ1204及び/またはグラフィックスメモリ1218に格納され得る。実施形態において、GPU1216は、シーンの形状、照明、シャドウィング、質感、動き、及び/またはカメラのパラメータを定義する命令及びデータから、出力画像の画素データを生成する3Dレンダリング機能を含む。GPU1216はさらに、シェーダープログラムを実行することができる1つ以上のプログラム可能実行ユニットを含み得る。
【0155】
グラフィックスサブシステム1214は、グラフィックスメモリ1218から画像の画素データを定期的に出力して、ディスプレイデバイス1210に表示させる、または投影システム(図示せず)により投影させる。ディスプレイデバイス1210は、デバイス1200からの信号に応じて視覚情報を表示することができる任意のデバイスであり得るもので、これにはCRT、LCD、プラズマ、及びOLEDディスプレイが含まれる。デバイス1200は、ディスプレイデバイス1210に、例えばアナログ信号またはデジタル信号を提供することができる。
【0156】
グラフィックスサブシステム1214を最適化するための他の実施形態は、GPUインスタンスが複数のアプリケーション間で共有されるマルチテナンシーGPU操作、及び単一のゲームをサポートする分散GPUを含むことができる。グラフィックスサブシステム1214は、1つまたは複数の処理デバイスとして構成することができる。
【0157】
例えば、グラフィックスサブシステム1214は、マルチテナンシーGPU機能を実行するように構成され得るもので、一実施形態では、1つのグラフィックスサブシステムが、複数のゲームのためのグラフィックス及び/またはレンダリングパイプラインを実装し得る。つまり、グラフィックスサブシステム1214は、実行されている複数のゲーム間で共有される。
【0158】
他の実施形態では、グラフィックスサブシステム1214は、対応するCPU上で実行されている単一のアプリケーションのためにグラフィック処理を実行するために組み合わされる複数のGPUデバイスを含む。例えば、複数のGPUは、フレームレンダリングの代替形式を実行でき、この場合、例えばGPU1は最初のフレームをレンダリングし、GPU2は2番目のフレームを連続したフレーム期間でレンダリングし、最後のGPUに到達すると、最初のGPUが次のビデオフレームをレンダリングする(例えば、GPUが2つしかない場合、GPU1は3番目のフレームをレンダリングする)。つまり、フレームをレンダリングするときにGPUが回転する。レンダリング操作は重複する可能性があり、それにおいて、GPU1が最初のフレームのレンダリングを終了する前にGPU2が2番目のフレームのレンダリングを開始できる。
別の実施形態では、複数のGPUデバイスに、レンダリング及び/またはグラフィックスパイプラインで異なるシェーダー操作を割り当てることができる。マスターGPUがメインのレンダリングと合成を実行している。例えば、3つのGPUを含むグループでは、マスターGPU1がメインレンダリング(例えば、最初のシェーダー操作)を実行し、スレーブGPU2とスレーブGPU3からの出力の合成を実行でき、スレーブGPU2は2番目のシェーダー(例えば、川などの流体エフェクト)操作を実行でき、スレーブGPU3は3番目のシェーダー(例えば、粒子の煙)操作を実行でき、マスターGPU1は、GPU1、GPU2、及びGPU3のそれぞれからの結果を合成する。このようにして、様々なGPUを割り当てて、様々なシェーダー操作(フラグを振る、風、煙の発生、火など)を実行してビデオフレームをレンダリングできる。さらに別の実施形態では、3つのGPUのそれぞれを、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てることができる。上記の実施形態及び実施態様では、これらの操作は、同じフレーム期間で(同時に並行して)、または異なるフレーム期間で(順次並列に)実行することができる。
【0159】
したがって、本開示は、サーバまたはクライアントのVSYNC信号を調整してサーバとクライアントとの間のVSYNC信号のオフセットを同期及び/または調整することを含む、メディアコンテンツをストリーミングするため及び/またはストリーミングメディアコンテンツを受信するため、クライアントで動的バッファリングを提供するため、及びクライアントでビデオフレームの復号と表示を重複させるために構成された方法及びシステムを説明する。
【0160】
本明細書で定義される様々な実施形態が、本明細書に開示する様々な特徴を使用し、特定の実施態様に結合され得る、または組み込まれ得ることを理解されたい。したがって、提供される実施例は、いくつかの可能な実施例にすぎず、様々な要素を組み合わせることでより多くの実施態様を定義することが可能な様々な実施態様に限定されない。ある例では、ある実施態様は、開示されたまたは同等の実施態様の趣旨から逸脱することなく、より少ない要素を含んでもよい。
【0161】
本開示の実施形態は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースもしくはプログラム可能な消費者向け電気製品、ミニコンピュータ、及びメインフレームコンピュータなどを含む様々なコンピュータシステム構成で実施されてよい。本開示の実施形態はまた、有線ベースネットワークまたは無線ネットワークを介してリンクされる遠隔処理デバイスによりタスクが行われる分散コンピューティング環境においても、実施することができる。
【0162】
上記の実施形態を念頭に置いて、本開示の実施形態がコンピュータシステムに格納されたデータを含む様々なコンピュータ実装の動作を使用し得ることを理解されたい。これらの動作は、物理量の物理的操作を要する動作である。本開示の実施形態の一部を形成する、本明細書で説明される動作のうちのいずれも、有用な機械動作である。開示の実施形態はまた、これら動作を実行するためのデバイスまたは装置に関する。装置は、必要な目的のために特別に構築されてもよい。または、装置は、コンピュータに記憶されたコンピュータプログラムにより選択的に起動または構成される汎用コンピュータであってもよい。具体的には、本明細書の教示に従って書かれたコンピュータプログラムと共に様々な汎用マシンを使用することができる、あるいは、必要な動作を実行するためにさらに特化した装置を構築するほうがより好都合である場合もある。
【0163】
本開示はまた、コンピュータ可読媒体上のコンピュータ可読コードとしても具現化することができる。コンピュータ可読媒体は、後でコンピュータシステムにより読み出され得るデータを格納できる任意のデータストレージデバイスである。コンピュータ可読媒体の例には、ハードドライブ、ネットクワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、並びに他の光学及び非光学データストレージデバイスが含まれる。コンピュータ可読媒体には、コンピュータ可読コードが分散方式で格納され実行されるように、ネットワーク接続されたコンピュータシステムにわたり分散されたコンピュータ可読有形媒体が含まれ得る。
【0164】
方法の動作を特定の順序で記載したが、オーバーレイ動作の処理が所望の方法で実行される限り、動作間に他のハウスキーピング動作が実行されてよく、または動作がわずかに異なる時間に起こるように調整されてよく、またはシステム内に動作を分散することで、処理に関連する様々な間隔で処理動作が起こることを可能にしてよいことを、理解すべきである。
【0165】
前述の開示は、理解を明確にするためにある程度詳細に説明されたが、添付の特許請求の範囲内で特定の変更及び修正を実施できることは明らかであろう。したがって、本実施形態は、限定ではなく例示としてみなされるべきであり、本開示の実施形態は、本明細書に提供される詳細に限定されるものではなく、添付の特許請求の範囲内及び均等物内で変更されてもよい。
図1
図2A
図2B
図2C
図2D
図3
図4
図5A
図5B
図5C
図6A
図6B
図6C
図7
図8A
図8B
図9
図10
図11A
図11B
図12
【国際調査報告】