(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022091767
(43)【公開日】2022-06-21
(54)【発明の名称】GPUベースの仮想現実ビデオストリーミングサーバのための方法
(51)【国際特許分類】
H04N 21/2343 20110101AFI20220614BHJP
H04N 21/4728 20110101ALI20220614BHJP
G06T 19/00 20110101ALI20220614BHJP
【FI】
H04N21/2343
H04N21/4728
G06T19/00 A
【審査請求】有
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022032850
(22)【出願日】2022-03-03
(62)【分割の表示】P 2020022170の分割
【原出願日】2017-02-17
(31)【優先権主張番号】62/297,394
(32)【優先日】2016-02-19
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】518297237
【氏名又は名称】アルカクルーズ インク
(74)【代理人】
【識別番号】100112737
【弁理士】
【氏名又は名称】藤田 考晴
(74)【代理人】
【識別番号】100136168
【弁理士】
【氏名又は名称】川上 美紀
(74)【代理人】
【識別番号】100196117
【弁理士】
【氏名又は名称】河合 利恵
(72)【発明者】
【氏名】サンギョー ハ
(72)【発明者】
【氏名】サロモン イ
(57)【要約】 (修正有)
【課題】GPU(Graphic Processing Unit)を用いて仮想現実ビデオをストリーミングする画像処理方法を提供する。
【解決手段】ネットワーク環境1000において、VRビデオストリーミングシステムによる方法は、ビデオサーバのプロセッサが、ビデオデータソースから多数の球体画像フレームデータを含むソースビデオデータを読み込み、ソースビデオデータを第1メモリに保存し、第1球体画像フレームデータを第2メモリの第1フレームバッファに保存することに応答して、GPUが、第1球体画像フレームデータを、第1球体画像フレームデータによって表現される球体画像の一部分に対応する第1エクイレクタングラー画像フレームに変換し、変換した第1エクイレクタングラー画像フレームデータをエンコードし、エンコードした第1エクイレクタングラー画像フレームデータを、第2メモリのエンコードされたフレームバッファに保存する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
一つ以上のプロセッサによって、第1FOVに関する(associated with)第1球体画像(a first spherical image)を前記第1FOVに関する第1エクイレクタングラー画像(a first equirectangular image)に変換(conversion)する動作を開始し、前記第1エクイレクタングラー画像を保存する動作を開始する段階と、
一つ以上の前記プロセッサによって、前記第1球体画像を変換する動作を開始した後前記第1エクイレクタングラー画像を保存する動作が完了する前に、前記第1FOVから第2FOVへの転換(switch)を探知する段階と、
一つ以上の前記プロセッサによって、前記第1FOVに関する前記第1球体画像を前記第2FOVに関する第2エクイレクタングラー画像に変換し、前記変換動作が開始された前記第1エクイレクタングラー画像を保存することの代わりに前記第2エクイレクタングラー画像を保存する段階とを含む、画像処理方法。
【請求項2】
前記第1球体画像を前記第1エクイレクタングラー画像に変換する動作を開始した後、前記第1エクイレクタングラー画像を保存する動作が完了する前に前記第2FOVへの転換を探知することに応答して、前記第2FOVに関する第2球体画像を前記第2FOVに関する第2エクイレクタングラー画像に変換する動作を省略する段階をさらに含む、請求項1に記載の画像処理方法。
【請求項3】
前記第1FOVに関する前記第1球体画像を前記第2FOVに関する前記第2エクイレクタングラー画像に変換する動作は、前記第2FOVに関する第2球体画像を前記第2FOVに関する前記第2エクイレクタングラー画像に変換する動作の代わりに行われる、請求項1に記載の画像処理方法。
【請求項4】
前記第1球体画像を前記第1エクイレクタングラー画像に変換する動作を開始した後前記第1エクイレクタングラー画像を保存する動作を完了する前に、前記第1FOVから前記第2FOVへの転換の探知を決定する段階をさらに含む、請求項1に記載の画像処理方法。
【請求項5】
前記第1FOVに関する前記第1球体画像を、前記第2FOVに関する第2球体画像のアクセスが可能なソース(a source)からアクセスする段階と、
前記第1球体画像を前記第1エクイレクタングラー画像に変換する動作を開始した後、前記第1エクイレクタングラー画像を保存する動作を完了する前に前記第1FOVから前記第2FOVへの転換を探知することに応答して、前記第2FOVに関する前記第2球体画像のアクセスを省略する段階とをさらに含む、請求項1に記載の画像処理方法。
【請求項6】
前記第1球体画像を前記第1エクイレクタングラー画像に変換する動作を開始した後、前記第1エクイレクタングラー画像を保存する動作を完了する前に前記第1FOVから前記第2FOVへの転換を探知することに応答して、前記第2FOVに関する前記第2エクイレクタングラー画像を装置に提供する段階をさらに含み、
前記第2エクイレクタングラー画像は前記第2FOVに関する第2球体画像を変換する代わりに前記第1FOVに関する前記第1球体画像を変換することによって生成される、請求項1に記載の画像処理方法。
【請求項7】
前記第1FOVは、第1範囲の方位角(azimuth angles)および第1範囲のピッチ角(pitch angles)により特定されるものであり、
前記第2FOVは、第2範囲の方位角および第2範囲のピッチ角によって特定されるものである、請求項1に記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想現実ビデオストリーミングのためのシステムおよび方法に関する。より詳細には、本発明は、GPU(Graphic Processing Unit)を用いて仮想現実ビデオをストリーミングし、処理するための方法に関する。
【背景技術】
【0002】
仮想現実(Virtual Reality;VR)ビデオコンテンツは、一般に、360度ビデオデータを提供するために非常に高い解像度を持つ。例えば、360度ビデオデータは、1秒あたりのフレーム(Frame Per Second;FPS)が30~60であり、4K(3840×1920)以上の解像度を持つUHD(Ultra High Definition)ビデオデータを含むことができる。
【0003】
GPU(Graphic Processing Unit)は、ディスプレイ出力用フレームバッファでの画像生成を加速化するために、メモリを迅速に読み取ったり書き込んだりするように設計された特殊な電子回路である。CPU(Central Processing Unit)と比較して、GPUは低電力消費(例えば、CPUの25%)および低コスト(例えば、2016年基準、768コアのGPUの場合は160ドル)で高速の実時間画像処理を提供することができる。また、GPUは、マルチコアを活用することにより、並列コンピューティング性能を提供することができる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明が解決しようとする技術的課題は、GPUを用いて、仮想現実ビデオを処理しストリーミングする方法を提供することである。
【0005】
本発明が解決しようとする他の技術的課題は、仮想現実ビデオのエンコード遅延を最小化するための処理方法を提供することである。
【0006】
本発明が解決しようとする別の技術的課題は、クライアント端末で仮想現実ビデオを効果的に表示する方法を提供することである。
【0007】
本発明の技術的課題は上述した技術的課題に限定されず、上述していない別の技術的課題は以降の記載から通常の技術者に明確に理解できるだろう。
【課題を解決するための手段】
【0008】
本発明の一態様に係る仮想現実ビデオストリーミングシステムは、第1プロセッサと、第1メモリと、GPU(Graphic Processing Unit)と、複数のフレームバッファを含む第2メモリと、前記第1プロセッサまたは前記GPUのうちの少なくとも一つによって実現されるビデオサーバとを含み、前記ビデオサーバは、前記第1プロセッサによって、ビデオデータソースから複数の球体画像フレームデータを含むソースビデオデータを取得し、前記ソースビデオデータを前記第1メモリに保存し、前記ビデオサーバは、前記第2メモリの第1フレームバッファに第1球体画像フレームデータが保存されることに応答して、前記GPUによって、前記第1球体画像フレームデータを、前記第1球体画像フレームデータが示す球体画像の一部分に対応する第1エクイレクタングラー(equirectangular)画像フレームデータに変換し、前記変換された第1エクイレクタングラー画像フレームデータをエンコードし、前記エンコードされた第1エクイレクタングラー画像フレームデータを前記第2メモリのエンコードされたフレームバッファに保存することができる。一実施形態において、前記第1プロセッサまたは前記GPUのうちの少なくとも一つによって実現されるストリーミングサーバをさらに含み、前記ストリーミングサーバは、前記第1プロセッサによって、クライアント端末との第1接続を設定し、前記第2メモリの前記エンコードされたフレームバッファから前記エンコードされた第1エクイレクタングラー画像フレームデータを取得し、前記エンコードされた第1エクイレクタングラー画像フレームデータを前記第1接続を介して前記クライアント端末にストリーミングすることができる。一実施形態において、前記ビデオサーバと前記ストリーミングサーバは、別個のプロセスで実行できる。一実施形態において、前記第1プロセッサまたは前記GPUのうちの少なくとも一つによって実現される通信サーバをさらに含み、前記通信サーバは、前記第1プロセッサによって、前記クライアント端末との第2接続を設定し、前記第1エクイレクタングラー画像フレームデータに対応するFOV(Field of View)に関する第1情報を前記クライアント端末へ伝送し、前記クライアント端末から第2FOVに関する第2情報を受信し、前記ビデオサーバは、前記GPUによって、第2球体画像フレームデータを、前記第2球体画像フレームデータが示す球体画像の前記第2FOVに対応する第2エクイレクタングラー画像フレームデータに変換することができる。一実施形態において、前記通信サーバと前記ストリーミングサーバは単一のプロセスで実行できる。一実施形態において、第1FOVに関する前記第1情報と前記第2FOVに関する前記第2情報は、方位角とピッチ角を指し示す視野角データを含むことができる。
【0009】
本発明の他の態様に係るビデオ処理方法は、ビデオサーバのGPUが、ビデオの第1球体画像フレームを示す第1球体画像フレームデータを第1フレームバッファメモリに保存する段階と、前記ビデオサーバの第1プロセッサがクライアント端末から第1FOVに関する第1情報を受信する段階と、前記ビデオサーバの前記GPUが、前記第1フレームバッファメモリに保存された前記第1球体画像フレームデータを、前記第1球体画像フレームデータが示す前記第1球体画像フレームの前記第1FOVに対応する第1エクイレクタングラー画像フレームデータに変換する段階と、前記ビデオサーバの前記GPUが、第1エンコードされた画像フレームデータを生成するために、前記変換された第1エクイレクタングラー画像フレームデータをエンコードする段階とを含むことができる。一実施形態において、前記ビデオサーバの前記GPUが、前記第1球体画像フレームデータを生成するために前記ビデオをパーシングしデコードする段階をさらに含むことができる。一実施形態において、第1FOVに関する前記第1情報は、方位角とピッチ角を指し示す視野角データを含むことができる。一実施形態において、前記第1エクイレクタングラー画像フレームデータに変換する段階は、前記GPUが前記第1球体画像フレームデータから前記第1エクイレクタングラー画像フレームデータへの変換を開始する前に前記第1情報が受信されたと判定する段階を含むことができる。一実施形態において、前記ビデオサーバの前記第1プロセッサが、前記クライアント端末から第2FOVに関する第2情報を受信する段階と、前記ビデオサーバの前記GPUが、前記ビデオの前記第1球体画像フレームに後続する第2球体画像フレームを示す第2球体画像フレームデータを、前記第1フレームバッファメモリに保存する段階と、前記ビデオサーバの前記GPUが、前記第1球体画像フレームデータを前記第1エクイレクタングラー画像フレームデータに変換した後の時点と、前記第1フレームバッファメモリに前記第2球体画像フレームデータを保存する前の時点との間に前記第2情報が受信されたと判定したことに応答して、(i)前記ビデオサーバの前記GPUが、前記第1フレームバッファメモリに保存された前記第1球体画像フレームデータを、前記第1球体画像フレームデータが示す前記第1球体画像フレームの前記第2FOVに対応する第2エクイレクタングラー画像フレームデータに変換し、(ii)前記ビデオサーバの前記GPUが、前記変換された第2エクイレクタングラー画像フレームデータを第2エンコードされた画像フレームデータにエンコードし、(iii)前記第1フレームバッファメモリに保存された前記第2球体画像フレームデータの変換およびエンコードを省略する段階とを含むことができる。
【0010】
本発明の別の態様に係るコンピュータプログラムは、ビデオサーバのGPUによって実行され、ビデオサーバのGPUが、ビデオの第1球体画像フレームを示す第1球体画像フレームデータを第1フレームバッファメモリに保存する段階と、前記ビデオサーバの第1プロセッサが、クライアント端末から第1FOVに関する第1情報を受信する段階と、前記ビデオサーバの前記GPUが、前記第1バッファメモリに保存された前記第1球体画像フレームデータを前記球体画像フレームデータが示す前記第1球体画像フレームの前記第1FOVに対応する第1エクイレクタングラー画像フレームデータに変換する段階と、前記ビデオサーバの前記GPUが、第1エンコードされた画像フレームデータを生成するために、前記変換された第1エクイレクタングラー画像フレームデータをエンコードする段階とを含むことができる。一実施形態において、前記ビデオサーバの前記GPUが、前記第1球体画像フレームデータを生成するために前記ビデオをパーシングしデコードする段階を実行させるために、コンピュータ可読の記録媒体に保存できる。一実施形態において、第1FOVに関する前記第1情報は、方位角とピッチ角が指し示す視野角データを含むことができる。一実施形態において、前記第1エクイレクタングラー画像フレームデータに変換する段階は、前記GPUが前記第1球体画像フレームデータから前記第1エクイレクタングラー画像フレームデータへの変換を開始する前に前記第1情報が受信されたと判定する段階を含むことができる。一実施形態において、前記ビデオサーバの前記第1プロセッサが、前記クライアント端末から第2FOVに関する第2情報を受信する段階と、前記ビデオサーバの前記GPUが、前記ビデオの前記第1球体画像フレームに後続する第2球体画像フレームを示す第2球体画像フレームデータを前記第1フレームバッファメモリに保存する段階と、前記ビデオサーバの前記GPUが、前記第1球体画像フレームデータを前記第1エクイレクタングラー画像フレームデータに変換した後の時点と、前記第1フレームバッファメモリに前記第2球体画像フレームデータを保存する前の時点との間に前記第2情報が受信されたと判定したことに応答して、(i)前記ビデオサーバの前記GPUが、前記第1フレームバッファメモリに保存された前記第1球体画像フレームデータを、前記第1球体画像フレームデータが示す前記第1球体画像フレームの前記第2FOVに対応する第2エクイレクタングラー画像フレームデータに変換し、(ii)前記ビデオサーバの前記GPUが、前記変換された第2エクイレクタングラー画像フレームデータを第2エンコードされた画像フレームデータにエンコードし、(iii)前記第1フレームバッファメモリに保存された前記第2球体画像フレームデータの変換およびエンコードを省略する段階とを含むことができる。
【0011】
本発明の別の態様に係るビデオディスプレイ方法は、クライアント端末の第1プロセッサが、ビデオストリーミングサーバからビデオの第1画像フレームを示す第1画像フレームデータを受信する段階と、前記クライアント端末のGPUが、少なくとも前記第1画像フレームのサイズよりも小さいか或いはそれと同じサイズを有する、前記クライアント端末のディスプレイ上に、前記ディスプレイの第1表示領域に前記第1画像フレームの第1領域をレンダリングし、前記ディスプレイの第2表示領域に前記第1画像フレームの残り領域を隠された状態でレンダリングする段階と、前記クライアント端末の前記第1プロセッサが、第1FOVを指し示すユーザ入力の受信に応答して、前記クライアント端末のGPUが、前記第1FOV内に位置し且つ以前に前記第2表示領域に隠された前記第1画像フレームの第2領域をレンダリングする段階とを含むことができる。一実施形態において、第1FOVに関する前記ユーザ入力は、方位角およびピッチ角を指し示す視野角データを含むことができる。一実施形態において、前記第1画像フレームの前記第2領域をレンダリングする段階は、前記クライアント端末の前記GPUが、前記ディスプレイのレンダリング領域を、前記第1表示領域から、前記第1表示領域と同じ形状を有し且つ前記第1画像フレームの前記第2領域を含む第3表示領域に再配置する段階を含むことができる。一実施形態において、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバへ、前記第1FOVを指し示す情報を伝送する段階と、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバから前記第1FOVに対応する前記ビデオの第2画像フレームを示す第2画像フレームデータを受信する段階と、前記クライアント端末の前記GPUが、前記クライアント端末の前記ディスプレイ上に、前記ディスプレイの前記第1表示領域に前記第2画像フレームの一部領域をレンダリングし、前記ディスプレイの前記第2表示領域に前記第1画像フレームの前記第2領域をレンダリングする段階とをさらに含むことができる。一実施形態において、前記ディスプレイは長方形の形状であり、前記ディスプレイの前記第1表示領域は、長方形の形状であり、前記ディスプレイの中央に位置し、前記ディスプレイの前記第2表示領域は、前記ディスプレイの左余白、右余白、上余白および下余白のうちの少なくとも一つを含むことができる。一実施形態において、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバへ、前記第1FOVを指し示す情報を伝送する段階と、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバから、前記第1FOVに対応し且つ前記ビデオの第2画像フレームを示す第2画像フレームデータを受信する段階と、前記クライアント端末の前記GPUが、前記ディスプレイの前記レンダリング領域を前記第3表示領域から前記第1表示領域に再配置する段階をさらに含むことができる。
【0012】
本発明の別の態様に係るコンピュータプログラムは、クライアント端末の第1プロセッサまたはGPUによって実行され、クライアント端末の第1プロセッサが、ビデオストリーミングサーバから、ビデオの第1画像フレームを示す第1画像フレームデータを受信する段階と、前記クライアント端末のGPUが、前記第1画像フレームと同じサイズまたはそれより小さいサイズを有する前記クライアント端末のディスプレイ上に、前記ディスプレイの第1表示領域に前記第1画像フレームの第1領域をレンダリングし、前記ディスプレイの第2表示領域に前記第1画像フレームの残り領域を隠された状態でレンダリングする段階と、前記クライアント端末の前記第1プロセッサが第1FOVを指し示すユーザ入力の受信に応答して、前記クライアント端末のGPUが、前記第1FOV内に位置し且つ以前に前記第2表示領域に隠された前記第1画像フレームの第2領域をレンダリングする段階とを実行させるために、コンピュータ可読の記録媒体に保存できる。一実施形態において、第1FOVに関する前記ユーザ入力は、方位角とピッチ角を指し示す視野角データを含むことができる。一実施形態において、前記第1画像フレームの前記第2領域をレンダリングする段階は、前記クライアント端末の前記GPUが、前記ディスプレイのレンダリング領域を、前記第1表示領域から、前記第1表示領域と同じ形状を有し且つ前記第1画像フレームの前記第2領域を含む第3表示領域に再配置する段階を含むことができる。一実施形態において、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバに、前記第1FOVを指し示す情報を伝送する段階と、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバから、前記第1FOVに対応する前記ビデオの第2画像フレームを示す第2画像フレームデータを受信する段階と、前記クライアント端末の前記GPUが、前記クライアント端末の前記ディスプレイ上に、前記ディスプレイの前記第1表示領域に前記第2画像フレームの一部領域をレンダリングし、前記ディスプレイの前記第2表示領域に前記第1画像フレームの前記第2領域をレンダリングする段階とをさらに含むことができる。一実施形態において、前記ディスプレイは長方形の形状であり、前記ディスプレイの前記第1表示領域は、長方形の形状であり、前記ディスプレイの中央に位置し、前記ディスプレイの前記第2表示領域は、前記ディスプレイの左余白、右余白、上余白および下余白のうちの少なくとも一つを含むことができる。一実施形態において、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバに、前記第1FOVを指し示す情報を伝送する段階と、前記クライアント端末の前記第1プロセッサが、前記ビデオストリーミングサーバから、前記第1FOVに対応し且つ前記ビデオの第2画像フレームを示す第2画像フレームデータを受信する段階と、前記クライアント端末の前記GPUが、前記ディスプレイの前記レンダリング領域を前記第3表示領域から前記第1表示領域に再配置する段階とをさらに含むことができる。
【発明の効果】
【0013】
上述した本発明によれば、VRビデオストリーミングシステムは、高解像度VRビデオデータを処理する際に、GPUコンピューティング性能(例えば、マルチコアを用いた並列コンピューティング性能)を効果的に活用することができる。
【0014】
また、現在の視野範囲(Field of View;FOV)が反映されたビデオ部分だけを伝送することにより、相当なネットワーク帯域幅要求量(例えば、FOVビデオデータ伝送は1~2Mbpsの帯域幅のみ要求されるのに対し、4K UHDビデオデータ伝送は16~20Mbpsの帯域幅が要求される)が削減できる。
【0015】
また、FOVが反映されたビデオ部分だけを伝送することにより、ユーザの経験だけでなく、ストリーミング費用まですべて改善することができる。
【0016】
また、FOVが反映されたビデオ部分だけを伝送することにより、低いデータ伝送速度でストリーミングサービスを提供することができる。そうすることにより、データバッファリングを除去し、クライアント端末のバッテリー消耗を減少させることができる。
【0017】
また、FOVが反映されたビデオ部分だけを伝送することにより、ストリーミングサービス費用も減らすことができる。なぜなら、ストリーミングサービスのプロバイダは、自分のネットワークサービスの使用量に応じて料金を支払う必要があるからである。
【0018】
また、FOVが反映されたビデオ部分だけを伝送することにより、コンテンツの不正コピーも防止することができる。FOVが反映されたビデオ部分が伝送されることにより、受信した部分的にストリーミングされたビデオデータは、動的に変更されるFOVが反映されたビデオの一部分だけを含むことができるので、これにより、ビデオのコンテンツが不正コピーされることを防止する。
【0019】
また、現在のFOVに基づいて、クライアント端末に含まれているディスプレイのレンダリング領域を変更することにより、クライアント端末は、遅延なく、変更された視野角に対するビデオ部分をユーザに即刻的に提供することができる。
【0020】
本発明の効果は上述した効果に限定されず、上述していない別の効果は以降の記載から通常の技術者に明確に理解できるだろう。
【図面の簡単な説明】
【0021】
上述した本発明、または上述した本発明に関連する目的、特徴および/または利点は、下記の図面と共に後述する詳細な説明を参照すると、より明確に理解されるだろう。
【
図1】本発明の幾つかの実施形態に係るクライアント端末とVRビデオストリーミングシステムを含むネットワーク環境のブロック図である。
【
図2】本発明の実施形態に係るコンピューティングシステムを例示的に示すブロック図である。
【
図3】本発明の実施形態に係るVRビデオストリーミングシステムを例示的に示すブロック図である。
【
図5】本発明の幾つかの実施形態に係る、VRビデオストリーミングシステムによって行われるFOVベースの後処理方法の動作を示すフローチャートである。
【
図6】本発明の幾つかの実施形態に係る、VRビデオストリーミングシステムによって行われるFOVベースの後処理方法の動作を示すフローチャートである。
【
図7】本発明の実施形態に係るVRビデオストリーミングシステムで行われるFOVベースの後処理方法を例示的に示すブロック図である。
【
図8】本発明の実施形態に係るVRビデオストリーミングシステムで行われるFOVベースの後処理方法を例示的に示すブロック図である。
【
図9】本発明の実施形態に係るVRビデオストリーミングシステムで行われるFOVベースの後処理方法を例示的に示すブロック図である。
【
図10】本発明の実施形態に係るVRビデオストリーミングシステムでエンコード遅延時間を減少させるためのFOVベースの後処理方法を例示的に示すブロック図である。
【
図11】本発明の実施形態に係るVRビデオストリーミングシステムでエンコード遅延時間を減少させるためのFOVベースの後処理方法を例示的に示すブロック図である。
【
図12】本発明の実施形態に係るVRビデオストリーミングシステムでエンコード遅延時間を減少させるためのFOVベースの後処理方法を例示的に示すブロック図である。
【
図13】本発明の幾つかの実施形態に係るクライアント端末のビデオディスプレイ方法の動作を示すフローチャートである。
【
図14】本発明の幾つかの実施形態において、ビデオディスプレイ方法で表示されたクライアント端末の表示画面を例示的に示す図である。
【
図15】本発明の幾つかの実施形態において、ビデオディスプレイ方法で表示されたクライアント端末の表示画面を例示的に示す図である。
【
図16】本発明の幾つかの実施形態において、ビデオディスプレイ方法で表示されたクライアント端末の表示画面を例示的に示す図である。
【発明を実施するための形態】
【0022】
仮想現実(Virtual Reality;VR)ビデオストリーミングのための方法およびシステムに関する発明が提供される。より詳しくは、GPU(Graphic
Processing Unit)を用いて仮想現実ビデオをストリーミングし処理するための方法およびシステムに関する発明が提供される。幾つかの実施形態において、VRビデオストリーミングシステムに含まれているビデオサーバのGPUは、球体画像(spherical image)フレームデータを、第1球体画像フレームデータの一部分に対応するエクイレクタングラー(equirectangular)画像フレームデータに変換することができる。これにより、VRビデオストリーミングシステムは、高解像度のVRビデオデータを処理するとき、GPUのコンピューティング性能(例えば、多重コアを用いた並列コンピューティング性能)を効果的に活用することができる。
【0023】
幾つかの実施形態において、ビデオサーバのプロセッサは、クライアント端末から第1視野範囲(Field of View;FOV)に関する情報を受信することができ、ビデオサーバのGPUは、第1球体画像フレームデータを第1球体画像フレームの第1FOVに対応する第1エクイレクタングラー画像フレームデータに変換することができる。ここで、第1球体画像フレームは、第1球体画像フレームデータが示す画像フレームのことをいう。このような構成で、クライアント端末からのユーザ入力ごとに、VRビデオストリーミングシステムは、ユーザが現在見たがっているビデオデータ部分のみをクライアント端末に提供することができる。例えば、VRビデオストリーミングシステムは、ユーザが入力した現在のFOVに関するビデオ部分のみをクライアント端末に提供することができる。現在のFOVに関するビデオ部分だけを伝送することにより得られる利点は非常に多い。第一に、これにより、相当なネットワーク帯域幅要求量(例えば、FOVビデオデータ伝送は1~2Mbpsの帯域幅だけ要求されるのに対し、4K UHDビデオデータ伝送は16~20Mbpsの帯域幅が要求される)が削減できる。第二に、FOVビデオデータのみを伝送することにより、ユーザの経験、およびストリーミングサービスの費用をすべて改善することができる。FOVビデオデータのみを伝送することにより、低いデータ伝送速度でストリーミングサービスを提供することができるので、データバッファリングを除去し、クライアント端末のバッテリー消耗も減らすことができる。また、FOVビデオデータのみを伝送することにより、ストリーミングサービス費用も減らすことができる。なぜなら、ストリーミングサービスプロバイダは、ネットワークサービスの使用量に応じて料金を支払う必要があるからである。第三に、FOVビデオデータのみを伝送することにより、コンテンツの不正コピーを防止することができる。たとえば、4K UHDビデオコンテンツは、不正コピーにさらされる可能性が大きい。FOVビデオデータの伝送を介して受信した、部分的にストリーミングされたビデオデータは、動的に変更された視野角についてのビデオデータ部分のみを含むことができるので、ビデオコンテンツが不正コピーされることを防止する。
【0024】
幾つかの実施形態において、クライアント端末のGPUは、ビデオストリーミングサーバから受信した画像フレームの第1領域を、ディスプレイの第1表示領域(例えば、ディスプレイの中央領域)にレンダリング(rendering)する一方、画像フレームの残り領域をディスプレイの第2表示領域(例えば、長方形ディスプレイの四方向の余白)から隠す。特定のFOV(例えば、ディスプレイの左上隅を向く視野角)を指し示すユーザ入力の受信に応答して、GPUは、以前に第2表示領域に隠され、第1FOV(例えば、以前にディスプレイの左上端付近に隠された領域)内に位置した第1画像フレームの第2領域をレンダリングすることができる。このような構成により、例えば、クライアント端末のユーザが画像フレームを見ながら、ディスプレイの左上隅に向けて視野角を変化させるとき、クライアント端末は、以前に隠しておいた画像フレームの一部分を直ちに示すことができる。したがって、クライアント端末は、ビデオストリーミングサーバから新しいビデオ部分を受信した後に、変更された視野角の新しいビデオ部分を提供する場合に発生する可能性のある遅延なく、変更された視野角のビデオ部分を即刻的にユーザに提供することができる。
【0025】
図1はVRビデオストリーミングシステム100、クライアント端末200A、200B、およびVRコンテンツサーバ750を含むネットワーク環境1000を例示的に示すブロック図である。概略的には、
図1に示されたネットワーク環境では、相互接続されたネットワークノード(例えば、VRビデオシステムとVRコンテンツサーバ)に対するネットワーク650と、相互接続されたネットワークノード(例えば、クライアント端末とVRビデオシステム)に対するネットワーク650’とを含む。幾つかの実施形態において、ネットワーク650は、ネットワーク650’と同様のネットワークである。
図1を参照してより詳細に説明すると、ネットワーク650または650’は、ネットワーク環境1000に参加する装置間のインタラクション(interaction)を容易にするために使用される。実例となる例題のネットワーク650または650’はインターネットである。しかし、他の実施形態によれば、ネットワーク650は、データセンター内のローカルネットワーク(local network)、ネットワークファブリック(network fabric)または他の近距離領域または広域ネットワークなど、さまざまな種類のネットワークであり得る。ネットワーク650または650’は、多数の接続されたサブネットワークまたは自律的なネットワークから構成できる。また、ネットワーク650または650’は、企業のイントラネット(intranet)のようなLAN(Local Area Network)、MAN(Metropolitan
Area Network)、WAN(Wide Area Network)、インターネットのようなネットワーク間ネットワークまたはP2P(Peer-to-Peer)ネットワーク(例えば、アドホック(ad hoc)WiFi P2Pネットワーク)であり得る。任意の類型および/または形態のデータネットワークおよび/または通信ネットワークがネットワーク650または650’に利用できる。ネットワーク650または650’は、パブリックネットワーク(public network)、プライベートネットワーク(private network)、またはパブリックネットワークとプライベートネットワークとの組み合わせであり得る。一般に、ネットワーク650または650’は、コンピューティング装置間の情報の伝達に用いられる。たとえば、クライアント端末200A、200B、VRビデオストリーミングシステム100およびVRコンテンツサーバ750の間で情報を伝達することに用いられる。
【0026】
図1を参照すると、VRビデオストリーミングシステム100は、ビデオサーバ120とストリーマー(streamer)180を含む。幾つかの実施形態において、ビデオサーバ120は、VRビデオデータをローカルに保存(例えば、ビデオファイルとして)し、或いはVRコンテンツサーバ750からストリーミングされるビデオデータを受信する。幾つかの実施形態において、ストリーマー180は、通信サーバ130とストリーミングサーバ140を含む。幾つかの実施形態において、通信サーバ130は、クライアント端末200A、200BそれぞれとVRビデオストリーミングシステム100のサービスに関する情報(例えば、ユーザログイン、VRビデオコンテンツの選択、低遅延ビデオストリーミングなど)を通信する。幾つかの実施形態において、ストリーミングサーバ140は、VRビデオフレームデータを各クライアント端末200A、200Bにストリーミングする。幾つかの実施形態において、VRビデオストリーミングシステム100は、
図2に示されたコンピューティングシステム300と類似の構成を持つ。コンピューティングシステム300は、
図2を参照して以下でより詳細に説明する。
図1に示されたVRビデオストリーミングシステム100の幾つかの実施形態において、
図2に示されたコンピューティングシステム300の構成要素の一部は省略されてもよい。
【0027】
再び
図1を参照すると、それぞれのクライアント端末200A、200Bは、VRビデオストリーミングシステム100からビデオストリーミングデータを受信する。より詳しくは、ストリーマー180のストリーミングサーバ140からビデオストリームデータを受信することができる。幾つかの実施形態において、クライアント端末200A、200Bそれぞれは、ディスプレイ(例えば、HMD(Head Mounted Display)、光学HMD)、入力装置(例えば、カメラ、ヘッドセット)およびセンサ(例えば、モーションセンサ、位置/方向センサ、モーションシミュレータ、ジェスチャー追跡システムなど)を持つ仮想現実クライアント端末であり得る。幾つかの実施形態において、クライアント端末200A、200Bそれぞれは、VRビデオストリーミングシステム100のサービスに関する情報を交換するために、通信サーバ130と通信することができる。例えば、クライアント端末200A、200Bそれぞれは、方位角およびピッチ角を指し示す視野角データの形でユーザの現在のFOVを通信サーバ130に提供することができる。幾つかの実施形態において、クライアント端末200A、200Bは、
図2に示されたコンピューティングシステム300と類似の構成を有する。
図1に示されたクライアント端末200A、200Bの幾つかの実施形態において、
図2に示されたコンピューティングシステム300の構成要素の一部は省略されてもよい。
【0028】
図2はコンピューティングシステム300を例示的に示すブロック図である。例示的な実施形態において、例示的なコンピューティングシステム300は、本明細書に記載されたコンピュータ化構成要素を実現する用途に適する。概略的には、コンピューティングシステム300は、インストラクション(instruction)に基づいて動作を行うための少なくとも一つのプロセッサ310と、インストラクションおよびデータを保存するための一つ以上のメモリ装置360または320とを含む。また、コンピューティングシステム300は、次のセクションで説明されるように、少なくとも一つのGPU(Graphic Processing Unit)370とビデオメモリ380とを含む。
【0029】
図2を参照すると、図示された例示的なコンピューティングシステム300は、通信システム340(例えば、バス)を介してメモリ350と通信する一つ以上のプロセッサ310、ネットワーク(図示せず)に接続するためのネットワークインターフェースポートを有する少なくとも一つのネットワークインターフェースコントローラ330、および入力/出力(I/O)コンポーネント350などの他のコンポーネントを含む。一般に、プロセッサ(ら)310は、メモリ360から受信したイントラクション(またはコンピュータプログラム)を実行する。図示されたプロセッサ310は、キャッシュメモリ320を含むか或いは直接接続される。場合に応じて、キャッシュメモリ320は、メモリ360からイントラクションを読み込み、プロセッサ310は、キャッシュメモリ320からイントラクションを読み込んで実行する。
【0030】
より詳しくは、プロセッサ(ら)310は、例えば、メモリ360またはキャッシュメモリ320からフェッチ(fetch)されたイントラクションを処理する任意の論理回路であり得る。多くの実施形態において、プロセッサ310は、マイクロプロセッサユニット(microprocessor unit)または特殊な目的のプロセッサである。コンピューティングシステム300は、ここで説明したように動作することが可能な任意のプロセッサまたはプロセッサの集合に基づくことができる。プロセッサ(ら)310は、単一コアまたはマルチコアプロセッサであり得る。プロセッサ(ら)310は、多数の別個のプロセッサであり得る。
【0031】
メモリ360は、コンピュータ可読データの保存に適した任意の装置であり得る。メモリ360は、固定式記憶装置または移動式記憶媒体を読み取るための装置であり得る。メモリ360の例としては、すべての形態の不揮発性メモリ、媒体およびメモリ装置、半導体メモリ装置(例えば、EPROM、EEPROM、SDRAMおよびフラッシュメモリ装置)、磁気ディスク、光磁気ディスクおよび光ディスク(例えば、CD ROM、DVD-ROMまたはBlu-ray(登録商標)ディスク)が含まれ得る。コンピューティングシステム300は、任意の数のメモリ装置360を持つことができる。
【0032】
キャッシュメモリ320は、一般に、高速アクセス時間を提供するために、プロセッサ(ら)310に近接して配置されたコンピュータメモリの形態である。幾つかの実施形態において、キャッシュメモリ320は、プロセッサ(ら)310の一部であるか或いはプロセッサ310と同一のチップ上にあり得る。幾つかの実施形態において、L2およびL3キャッシュレイヤのように多重レベルのキャッシュ320があり得る。
【0033】
ネットワークインターフェースコントローラ330は、ネットワークインターフェース(場合によってはネットワークインターフェースポートと命名される。)を介したデータ交換を管理する。ネットワークインターフェースコントローラ330は、ネットワーク通信のために、OSIモデルの物理階層およびデータリンク階層を処理する。幾つかの実施形態において、ネットワークインターフェースコントローラ330のタスクのうちの一部は、一つ以上のプロセッサ(ら)310によって処理される。幾つかの実施形態において、ネットワークインターフェースコントローラ330は、プロセッサ310の一部であり得る。幾つかの実施形態において、コンピューティングシステム300は、単一コントローラ330によって制御される多数のネットワークインターフェースを有する。幾つかの実施形態において、コンピューティングシステム300は、多数のネットワークインターフェースコントローラ330を有する。幾つかの実施形態において、それぞれのネットワークインターフェースは、物理的ネットワークリンク(例えば、cat-5イーサネットリンク)に対する接続点である。幾つかの実施形態において、ネットワークインターフェースコントローラ330は、無線ネットワーク接続をサポートし、ネットワークインターフェースポートは、無線(例えば、ラジオ)送/受信機(例えば、IEEE 802.11プロトコル、NFC(Near Field Communication)、ブルートゥース(登録商標)(Bluetooth(登録商標))、ANTまたは他の無線プロトコルのいずれかのものに対する)である。幾つかの実施形態において、ネットワークインターフェースコントローラ330は、イーサネット(Ethernet)などの1つ以上のネットワークプロトコルを実現する。一般に、コンピューティングシステム300は、ネットワークインターフェースを用いることにより、物理的または無線リンクを介して他のコンピューティング装置とデータを交換する。ネットワークインターフェースは、コンピューティングシステム300を直接他の装置と接続させるか、或いは中継装置を介してコンピューティングシステム300を他の装置に接続することができる。ここで、中継装置は、例えば、ハブ、ブリッジ、スイッチまたはルータのように、コンピューティングシステム300をインターネットなどのデータネットワークに接続させるネットワーク装置を意味することができる。
【0034】
コンピューティングシステム300は、一つ以上の入力または出力(I/O)装置を含むか、またはそれに対するインターフェースを提供することができる。入力装置には、キーボード、マイク、タッチスクリーン、フットペダル、センサ、MIDI装置、およびマウスやトラックボールなどのポインティング装置が含まれ得るが、これに限定されるものではない。出力装置には、ビデオディスプレイ、スピーカー、再生可能な点字端末、照明、MIDI装置および2-Dまたは3-Dプリンターが含まれ得るが、これに限定されるものではない。
【0035】
他の構成要素には、I/Oインターフェース、外部シリアル装置ポートおよび追加のコプロセッサ(co-processor)が含まれ得る。例えば、コンピューティングシステム300は、入力装置、出力装置または追加のメモリ装置(例えば、携帯用フラッシュドライブまたは外部メディアドライブ)を接続するためのインターフェース(例えば、USB(Universal Serial Bus)インターフェース)を含むことができる。幾つかの実施形態において、コンピューティングシステム300は、コプロセッサなどの付加装置を含むことができる。例えば、コンピューティングシステム300は、数値動作コプロセッサを含むことができ、数値動作コプロセッサは、高精度または複雑な計算を行うことによりプロセッサ310を補助することができる。
【0036】
GPU370は、グラフィックスアクセラレータチップ、プロセッサ、ASIC(Application Specific Integrated Circuit)、アナログ回路、デジタル回路、アクセラレータカード、またはこれらの組み合わせであり得る。一実施形態において、GPU370は、nVidia、ATIまたはMatroxによって製造されたもののようなパーソナルコンピュータグラフィックスアクセラレータカードまたはコンポーネントであり得る。GPU370は、3次元テクスチャマッピング(3D texture mapping)のためのAPI(Application Programming Interface)を利用するのと同様に、ボリュームレンダリング(olume rendering)プロセスを加速化するためのハードウェア装置を提供する。例えば、そのようなAPIは、OpenGLおよびDirectXを含むが、他のAPIは、GPU370とは独立して利用されるか、或いはGPU370と共に利用され得る。nVidia GPUに対する例示的なAPIは、http://docs.nvidia.com/cuda/#axzz40TIGVdNLで利用可能な「CUDA Toolkit Documentation v.7.5」というタイトルのWebドキュメントに説明されており、本特許出願で説明された機能を行うようにGPUを構成する方法についての詳細は、本明細書に参照として含まれる。幾つかの実施形態において、APIまたはAPIを制御するアプリケーション(application)に基づいて、GPU370は、コンピュータグラフィックスに対する変換(transformation)、投影(projection)およびマッピング(例えば、球体投影(spherical projection)および座標系変換)を行うように動作することができる。
【0037】
ビデオメモリ380は、VRAM(Video Random Access Memory)、RAM(Random Access Memory)、RAMドライブまたはRAMディスク、またはデータまたはビデオ情報を保存するための他のメモリ装置を含む。一実施形態において、ビデオメモリ380は、GPU370に対するVRAMである。GPU370用のドライバまたはメモリドライバは、ビデオメモリ380によるデータ保存を制御する。ビデオメモリ380は、データを保存、伝送およびフェッチするためにドライバに応答する。ビデオメモリ380は、データのサブセット(subset)またはブロックを保存するように動作することができる。
【0038】
図3はVRビデオストリーミングシステムを例示的に示すブロック図である。
図3を参照すると、幾つかの実施形態において、VRビデオストリーミングシステム100は、第1プロセッサ101、第1メモリ110、GPU102および第2メモリ150を含む。また、第2メモリ150は、例えば、デコードされたフレームバッファ160、第1フレームバッファ161、第2フレームバッファ162、およびエンコードされたフレームバッファ164などの複数のフレームバッファを含む。幾つかの実施形態において、第1プロセッサ101は、
図2に示されたプロセッサ310と類似の構成を持つ。幾つかの実施形態において、GPU102は、
図2のGPU370と類似の構成を持つ。幾つかの実施形態において、第1メモリ110は、
図2に示されたメモリ360と類似の構成を持つ。幾つかの実施形態において、第2メモリ150は、
図2に示されたビデオメモリ380と類似の構成を持つ。幾つかの実施形態において、VRビデオストリーミングシステム100は、第1メモリ110または第2メモリ150に常駐することが可能なソースビデオメモリ(source video memory)115を含む。
【0039】
図3を参照すると、幾つかの実施形態において、ビデオサーバ120は、第1プロセッサ101またはGPU102によって実行または実現され得る。たとえば、ビデオサーバ120は、第1プロセッサ101を介して、ソースビデオデータ(例えば、ビデオサーバ120のローカルに保存されたビデオファイル、またはVRコンテンツサーバ750からストリーミングされたビデオデータ)を得るように構成できる。幾つかの実施形態において、ソースビデオデータは、多数の球体画像フレームデータ(例えば、360度4K
UHDフレームデータ)を含む。幾つかの実施形態において、ビデオサーバ120は、ソースビデオデータをソースビデオメモリ115に保存することができる。
【0040】
幾つかの実施形態において、ビデオサーバ120は、GPU102によって実行または実現できるパーサー(parser)121、デコーダ(decoder)122、ポストプロセッサ(post-processor)123およびエンコーダ(encoder)124を含むことができる。幾つかの実施形態において、パーサー121は、GPU102を介して、ソースビデオメモリ115に保存されたソースビデオデータをパーシングし、ソースビデオデータから互いに異なる球体画像フレームを特定する。幾つかの実施形態において、デコーダ122は、GPU102を介してパーシングされた球体画像フレームをデコードし、デコードされた球体画像フレームをデコードされたフレームバッファ160に保存する。幾つかの実施形態において、デコーダ122及びエンコーダ124は、H.264、H.265/HEVC(High Efficiency Video Coding)などの産業標準(industrial standard)の圧縮/圧縮解除技術を利用することができる。幾つかの実施形態において、デコーダ122は、第1球体画像フレームデータをデコードし、デコードされたデータをデコードされたフレームバッファ160に保存する。例示的なデコーダは、2015年11月の「NVIDIA VIDEO DECODER(NVCUVID) INTERFACE Programming Guide」というタイトルの文書に説明されており、本特許出願で説明されたデコード機能を達成するためにデコーダを構成する方法についての詳細は、本明細書に参照として含まれる。幾つかの実施形態において、ポストプロセッサ123は、カラーフォーマット変換(color format conversion)を行う。例えば、ポストプロセッサ123は、デコードされたフレームバッファ160に保存されたフレームデータを輝度(luminance)/色差(chrominance)フォーマットからARGB(Alpha Red Green Blue)カラーフォーマットに変換することができる。幾つかの実施形態において、ポストプロセッサ123は、カラーフォーマットに変換されたフレームデータを第1フレームバッファ161に保存する。幾つかの実施形態において、ポストプロセッサ123は、GPU102を介して球体-エクイレクタングラー変換(例えば、球体/エクイレクタングラー投影またはマッピング方法を利用)を行う。例示的な球体/エクイレクタングラー投影は、Paul Bourkeによって作成された「Transformations and projections」というタイトルの文書に説明されており、本特許出願で説明された投影、変換およびマッピングに対する方法についての詳細は、本明細書に参照として含まれる。幾つかの実施形態において、第1球体画像フレームデータが第1フレームバッファ161に保存されることに応答して、ポストプロセッサ123は、GPU102を介して第1球体画像フレームデータを第1エクイレクタングラー画像フレームデータに変換する。たとえば、ポストプロセッサ123は、GPU102を介して360度4K UHD画像フレームデータを、補正されていない(corrected)或いは歪んでいない(undistorted)エクイレクタングラー画像フレームデータに変換する。幾つかの実施形態において、ポストプロセッサ123は、GPU102を介して第1球体画像フレームデータ(例えば、360度4K UHD画像フレームデータ)を、第1球体画像フレームデータが示す球体画像の一部分に対応する第1エクイレクタングラー画像フレームデータ(例えば、クライアント端末におけるユーザの現在FOVに対応する360度4K UHD画像フレームデータの一部分)に変換する。
図4は球体フレーム画像301と現在のFOVに対応する球体フレーム画像301の一部分302を例示的に示す。
【0041】
また、幾つかの実施形態において、ポストプロセッサ123は、GPU102を介して拡張現実(Augmented Reality;AR)のための画像処理を行う。たとえば、ポストプロセッサ123は、変換された第1エクイレクタングラー画像フレームをグラフィックコンテンツ(例えば、道路画像を車両画像とブレンド)、またはテキスト/グラフィック情報(例えば、距離画像を商店画像とブレンド)と共にブレンド(blending)することができる。幾つかの実施形態において、後処理動作(例えば、球体-エクイレクタングラー変換)完了に応答して、ポストプロセッサ123は、後処理されたフレームデータを第2フレームバッファ162に保存する。幾つかの実施形態において、エンコーダ124は、GPU102を介して、第2フレームバッファ162に保存された、後処理されたフレームデータをエンコードし、エンコードされたフレームデータをエンコードされたフレームバッファ164に保存する。例示的なエンコーダは、「NVIDIA VIDEO ENCODER(NVENC) INTERFACE Programming Guide」というタイトルの文書に説明されており、本特許出願で説明されたエンコード機能を達成するためにエンコーダを構成する方法についての詳細は、本明細書に参照として含まれる。幾つかの実施形態において、パーサー121、デコーダ122、ポストプロセッサ123およびエンコーダ124は、VRビデオストリーミングシステム100のGPU102によって実行される。幾つかの実施形態において、パーサー121、デコーダ122、ポストプロセッサ123およびエンコーダ124の一部の動作は第1プロセッサ101によって実行され、他の動作はGPU102によって実行される。
【0042】
図3を参照すると、幾つかの実施形態において、VRビデオストリーミングシステム100は通信サーバ130を含む。また、通信サーバ130は、第1プロセッサ101またはGPU102のうちの少なくとも一つによって実行または実現できる。幾つかの実施形態において、通信サーバ130は、第1プロセッサ101を介してクライアント端末(例えば、クライアント端末200A)との接続を設定する。幾つかの実施形態において、設定された接続は、例えば、Webソケットプロトコルのように全二重チャネルプロトコル(full-duplex channel protocol)を用いる。そうすることで、大量のプロトコルヘッダ(例えば、httpヘッダ)を通信することなく、幾つかのフレーム(例えば、Webソケットフレーム)を用いて接続が設定できるため、遅延時間が減少できる。幾つかの実施形態において、通信サーバ130は、ポストプロセッサ123によって変換された第1エクイレクタングラー画像フレームデータに対応する第1FOVに関する第1情報をクライアント端末へ伝送することができる。幾つかの実施形態において、通信サーバ130は、クライアント端末から第2FOV(例えば、前記クライアント端末のユーザの現在FOV)に関する第2情報を受信することができる。幾つかの実施形態において、クライアント端末200AおよびVRビデオストリーミングシステム100の両方ともで、初期FOVは、デフォルトで、ユーザが現在見ている画像フレームの中心から一直線に右を向く角度に設定できる。幾つかの実施形態において、FOVに関する情報は、ピッチ角および方位角を指し示す視野角情報を含む。幾つかの実施形態において、クライアント端末からの要求に応じて(例えば、Webソケットプロトコルを介して)、通信サーバ130は、第1プロセッサ101を介してユーザの現在FOVを非同期的に更新することができる。また、更新は、GPU102がビデオサーバ120の動作(例えば、パーサー121、デコーダ122、ポストプロセッサ123およびエンコーダ124によって行われる動作)を処理する間に行われ得る。幾つかの実施形態において、非同期的に更新されたFOVは、
図4乃至
図6を参照して、後述されるように、エンコード遅延時間を減らすために活用できる。たとえば、ビデオサーバ120は、GPU102を介して、球体画像フレームデータを、球体画像フレームデータが示す球体画像から、非同期的に更新されたFOVに対応するエクイレクタングラー球体画像フレームデータに直ちに変換することにより、エンコード遅延時間を減少させることができる。幾つかの実施形態において、クライアント端末は、通信サーバ130との安定した接続方法(例えば、jettyベースのWebソケットプロトコル)を用いてクライアント端末のユーザの現在視野角に対して通信サーバを更新することができる。そうすることで、一定の接続状態を提供することができ、セキュリティオーバーヘッドおよび遅延時間を減少させることができる。
【0043】
幾つかの実施形態において、クライアント端末は、特定のVR画像/ビデオデータを通信サーバ130に要求することができる。たとえば、クライアント端末は、Webソケットプロトコルを介して通信サーバ130にVR画像要求を伝送することができる。幾つかの実施形態において、このようなクライアント端末の要求に応じて、通信サーバ130は、第1プロセッサ101を介して、要求に対応するソースビデオデータ(例えば、ローカルファイルに保存されるか或いはVRコンテンツサーバ750によってストリーミングされたソースビデオデータ)をフェッチし、GPU102に、対応するソースビデオデータを提供することができる。GPU102は、対応するソースビデオデータに対して、上述したデコード/後処理/エンコード動作を行うことができる。幾つかの実施形態において、通信サーバ130は、VRビデオストリーミングシステム100のサービスを管理するための用途で、Webサービスを提供することができる(例えば、サービスに対するユーザのログインおよび認証書(credential)検査管理、ユーザアカウント/プロファイル管理、およびユーザが視聴するビデオコンテンツを選択することができるようにするためのVRビデオコンテンツリスト)。
【0044】
図3を参照すると、VRビデオストリーミングシステム100はストリーミングサーバ140を含むことができる。また、ストリーミングサーバ140は、第1プロセッサ101またはGPU102の少なくとも一つによって実行または実現できる。幾つかの実施形態において、ストリーミングサーバ140は、第1プロセッサ101を介してクライアント端末(例えば、クライアント端末200A)との第1接続を設定する。幾つかの実施形態において、ストリーミングサーバ140は、クライアント端末のユーザにビデオデータを適時に伝達するために、RTSP(Real Time Streaming Protocol)を使用する。幾つかの実施形態において、ストリーミングサーバ140は、エンコードされたフレームバッファ164からエンコードされた第1エクイレクタングラー画像フレームデータを読み込み、エンコードされた第1エクイレクタングラー画像フレームデータを第1接続を介してクライアント端末200Aにストリーミングする。幾つかの実施形態において、ビデオサーバ120とストリーミングサーバ140は、別個のプロセスとして実行される。幾つかの実施形態において、通信サーバ130とストリーミングサーバ140は、単一プロセスとして実行されるように構成できる。幾つかの実施形態において、通信サーバ130は、Webソケットプロトコルを介してクライアント端末と直接イントラクションし、ビデオサーバ120と同一の物理的サーバ上で実行される。そうすることにより、フィードバックおよび通信遅延時間が減少できる。幾つかの実施形態において、ストリーミングサーバ140と通信サーバ130(以下、総称して「ストリーマー」180)は、同一の単一プロセスとして実行されるのに対し、ビデオサーバ120は、ストリーマー180によって開始および管理できる別のプロセスとして実行される。このような二重プロセス構成は、ネットワーク応答性(遅延減少によって)およびシステム安定性を向上させることができる。幾つかの実施形態において、ストリーミングサーバ140とビデオサーバ120は、RAMドライブまたはRAMディスクを介してビデオストリームデータ(最終的にクライアント端末に提供される)を共有することができる。このようなRAMドライブまたはRAMディスクは、実際データがシステムRAMにある間にファイルにアクセスできるので、ハードウェアI/Oオーバーヘッドおよび遅延時間が除去される。
【0045】
図5は本発明の幾つかの実施形態に係るVRビデオストリーミングシステム100のFOVベースの後処理方法400の動作を示すフローチャートである。概略的には、FOVベースの後処理方法400は、段階410で開始し、ここで、ビデオサーバのGPU(例えば、
図3のGPU102)は、第1球体画像フレームデータを生成するためにソースビデオをパーシングし、デコードすることができる。段階420で、GPU102は、ビデオの第1球体画像フレームを示す第1球体画像フレームデータを第1フレームバッファメモリ(例えば、第1フレームバッファ161)に保存することができる。段階440で、ビデオサーバの第1プロセッサ(例えば、
図3のプロセッサ101)は、クライアント端末から第1FOVに関する第1情報を受信することができる。段階450で、ビデオサーバのGPU102は、第1フレームバッファメモリに保存された球体画像フレームデータを第1球体画像フレームの第1FOVに対応するエクイレクタングラー画像フレームデータに変換することができる。段階460で、ビデオサーバのGPU102は、ストリーミングサーバ(例えば、
図3のストリーミングサーバ140)が、第1FOVに対応するエンコードされたエクイレクタングラー画像フレームデータだけをクライアント端末にストリーミングすることができるように、変換されたエクイレクタングラー画像フレームデータをエンコードすることができる。また、エンコーディングによってエンコードされた画像フレームデータが生成される。
図5に示されたフローチャートは、
図7乃至
図9を参照してより詳細に説明する。
【0046】
図7、
図8および
図9は、例示的なVRビデオストリーミングシステムで行われるFOVベースの後処理方法を例示的に示すブロック図である。
図7は、連続的なビデオフレーム(例えば、フレーム#N、フレーム#N+1、およびフレーム#N+2)に対するGPU処理のタイミングを例示的に示す。一般なビデオファイルのFPSは、通常、秒あたり24、25、29または30フレームである。例えば、
図7に示すように、30FPSビデオファイルの場合は、各フレームのエンコード完了間の時間間隔は33msであり、デコーダからのフレーム#Nのタイムスタンプ(time stamp)はN*33msであり、フレーム#N+1のタイムスタンプはN+1*33msなどであり得る。言い換えれば、
図7を参照すると、フレーム#N(501)とフレーム#N+1(502)のデコード/後処理/エンコードの完了間の時間間隔は33msであり、フレーム#N+1(502)とフレーム#N+2(503)のデコード/後処理/エンコードの完了間の時間間隔も33msである。したがって、本例において、各フレームは、1秒あたり30フレームを生成(およびストリーム)するために33msごとにエンコードされる。
【0047】
図8はフレーム#Nを後処理する前にクライアント端末からFOV変更入力(例えば、方位角およびピッチ角)が受信される場合にFOVベースの後処理方法が行われる例を示す。
図8を参照すると、例えば、GPUがフレーム#Nに対してデコード511/後処理513/エンコード514を行い、フレーム#N+1に対してデコード515/後処理516/エンコード518を行う。幾つかの実施形態において、VRビデオストリーミングシステム100のプロセッサ(例えば、
図3のプロセッサ101)が、フレーム#Nの後処理513を行う前にクライアント端末から(第1FOVに関する)第1FOV変更入力V1(512)を受信すると、GPUは、フレーム#N+1の後処理516を行う間に第1FOV変更入力V1を反映(517)することができる。幾つかの実施形態において、GPUは、フレーム#N+1に関連する球体画像データを、フレーム#N+1の球体画像フレームデータが示す球体画像フレームの第1FOVに対応するエクイレクタングラー画像フレームデータに変換することにより、第1FOV変更入力V1を反映することができる。本例において、フレーム#Nのエンコード完了とフレーム#N+1のエンコーディング完了との間の時間間隔は33msに維持できる。
【0048】
図9はフレーム#Nの後処理の間にクライアント端末からのFOV変更入力(例えば、変更された方位角およびピッチ角)が受信される場合にFOVベースの後処理方法が行われる他の例を示す。
図9を参照すると、例えば、GPUは、フレーム#Nのデコード521/後処理523/エンコーディング524を行い、次いでフレーム#N+1のデコード525/後処理526/デコード528を行う。幾つかの実施形態において、VRビデオストリーミングシステム100のプロセッサがフレーム#Nの後処理523の後にクライアント端末から(第2FOVに関する)第2FOV変更入力V2を受信(522)すると、GPUは、フレーム#N+1を後処理(526)する間に第2FOV変更入力V2を反映(527)する。幾つかの実施形態において、GPUは、フレーム#N+1に関連する球体画像データを、フレーム#N+1の球体画像フレームデータが示す球体画像フレームの第2FOVに対応するエクイレクタングラー画像フレームデータに変換することにより、第2FOV変更入力V2を反映することができる。本例において、フレーム#Nのエンコード完了とフレーム#N+1のエンコード完了との間の時間間隔は33msに維持できる。
【0049】
次に、
図5に示したフローチャートを
図7乃至
図9を参照してより詳細に説明する。段階410で、ビデオサーバ(例えば、
図3に示されたビデオサーバ120)のGPU(例えば、
図3に示されたGPU102)は、第1球体画像フレームデータを生成するためにソースビデオをパーシングし、デコードすることができる。例えば、
図8を参照すると、GPUが、フレーム#Nに対する球体画像フレームデータを生成するために、フレーム#Nをパーシングおよびデコード(511)する。
【0050】
段階420で、ビデオサーバのGPUは、ソースビデオの第1球体画像フレームを示す第1球体画像フレームデータを第1フレームバッファメモリ(例えば、
図3に示された第1フレームバッファ161)に保存することができる。幾つかの実施形態において、次いで、GPUは、第1フレームバッファ161から第1球体画像フレームデータを読み込み、第1球体画像フレームデータを後処理する。例えば、
図8を参照すると、GPUは、第1フレームバッファ161からフレーム#Nに対する球体画像フレームデータを読み込み、フレーム#Nに対する第1球体画像フレームデータを後処理(513)する。同様に、
図9を参照すると、GPUは、第1フレームバッファ161からフレーム#Nに対する球体画像フレームデータを読み込み、フレーム#Nに対する第1球体画像フレームデータを後処理(523)する。
【0051】
段階440で、ビデオサーバの第1プロセッサ101は、クライアント端末(例えば、
図1および
図3に示されたクライアント端末200A)から第1FOVに関する第1情報を受信することができる。例えば、
図8を参照すると、第1プロセッサは、フレーム#Nを後処理(513)する前に第1FOV変更入力V1(512)をクライアント端末から受信する。同様に、
図9を参照すると、第1プロセッサ101は、クライアント端末からフレーム#Nを後処理(523)する間または後に、第2FOV変更入力V2(522)を受信する。幾つかの実施形態において、クライアント端末は、方位角およびピッチ角を指し示す視野角データを含むFOV変更入力をVRビデオストリーミングシステム(例えば、
図1および
図3に示されたVRビデオストリーミングシステム100)に伝送する。
【0052】
段階450で、ビデオサーバのGPU102は、第1フレームバッファメモリに保存された球体画像フレームデータを、球体画像フレームデータが示す第1球体画像フレームの第1FOVに対応するエクイレクタングラー画像フレームデータに変換することができる。例えば、
図8を参照すると、ビデオサーバのGPUは、(後処理516の間)フレーム#N+1の球体画像フレームデータを、第1FOV変更入力V1に対応するフレーム#N+1のエクイレクタングラー画像フレームデータに変換する(第1FOV変更入力V1がフレーム#N+1に対する球体画像フレームデータに反映されるようにするため)。同様に、
図9を参照すると、ビデオサーバのGPUは、(後処理526の間)フレーム#N+1の球体画像フレームデータを第2FOV変更入力V2に対応するフレーム#N+1のエクイレクタングラー画像フレームデータに変換する(第2FOV変更入力V2がフレーム#N+1に対する球体画像フレームデータに反映されるようにするため)。エンコード遅延時間を減らすための段階450の変形動作は、
図6および
図10乃至
図12を参照してより詳細に後述する。
【0053】
段階460で、ビデオサーバのGPU102は、ストリーミングサーバが第1FOVに対応するエンコードされたエクイレクタングラー画像フレームデータのみをクライアント端末にストリーミングすることができるように変換されたエクイレクタングラー画像フレームデータをエンコードし、エンコードされた画像フレームデータを生成することができる。例えば、
図8を参照すると、ビデオサーバのGPUは、フレーム#N+1に対する変換されたエクイレクタングラー画像フレームデータをエンコード(518)して、フレーム#N+1に対するエンコードされた画像フレームデータを生成する。同様に、
図9を参照すると、ビデオサーバのGPUは、フレーム#N+1に対する変換されたエクイレクタングラー画像フレームデータをエンコード(528)して、フレーム#N+1に対するエンコードされた画像フレームデータを生成する。
【0054】
図6は本発明の幾つかの実施形態によって、VRビデオストリーミングシステム100が行うFOVベースの後処理方法(例えば、エンコード遅延時間を減らすために、
図6に示された段階450の変形動作)の動作を示すフローチャートである。概略的には、方法450は、段階451で開始し、ここで、ビデオサーバ120は、GPU102が第1球体画像フレームデータを第1エクイレクタングラー画像フレームデータに変換し始める前にクライアント端末から第1FOVに関する第1情報が受信されたか否かを判定することができる。段階452で、GPUが第1球体画像フレームデータを第1エクイレクタングラー画像フレームデータに変換し始める前にクライアント端末から第1FOV情報が受信されたという判定に応答して、GPUは、第1球体画像フレームデータを、第1球体画像フレームデータが示す第1球体画像フレームの第1FOVに対応する第1エクイレクタングラー画像フレームデータに変換することができる。段階453で、GPUが第1球体画像フレームデータを第1エクイレクタングラー画像フレームデータに変換する動作を行い始めた後、第1FOVに関する第1情報が受信されたという判定に応答して、ビデオサーバ120は、GPUが第2球体画像フレームデータ(例えば、第1球体画像フレームデータに後続する球体画像フレームデータ)を第1フレームバッファメモリに保存する前に第1FOV情報が受信されたか否かをさらに判定することができる。段階454で、GPUが第2球体画像フレームデータを第1フレームバッファメモリに保存する前に第1FOV情報が受信されたという判定に応答して、GPUは、第1フレームバッファメモリに保存された第1球体画像フレームデータを、第1球体画像フレームデータが示す第1球体画像フレームの第1FOVに対応するエクイレクタングラー画像フレームデータに変換し、変換されたエクイレクタングラー画像フレームデータをエンコードして、第2エクイレクタングラー画像フレームデータを生成する。段階455で、GPUは、第1フレームバッファメモリに保存された第2球体画像フレームデータの変換およびエンコードを省略することができる。
図6に示されたフローチャートは、
図10乃至
図12を参照してより詳細に説明する。
【0055】
図10、
図11および
図12は、例示的なVRビデオストリーミングシステムでエンコード遅延時間を減少させるために行われるFOVベースの後処理方法を例示的に示すブロック図である。
図10を参照すると、例えば、GPUが、フレーム#Nをデコード(601)し/フレーム#Nに対する球体画像フレームデータをエクイレクタングラー画像フレームデータに変換(604)し/フレーム#Nをエンコード(606)し、次いでフレーム#N+1をデコード(607)する。幾つかの実施形態において、ビデオストリーミングシステム100のプロセッサ(例えば、
図3に示されたプロセッサ101)が、フレーム#Nの変換(604)の前にクライアント端末から第3FOV変更入力V3(602)を受信すると、GPUは、フレーム#Nを変換(604)する間に第3FOV変更入力V3を反映することができる。幾つかの実施形態において、GPUは、フレーム#Nに関連した球体画像フレームデータを、フレーム#Nの球体画像フレームデータが示す球体画像フレームの第3FOVに対応するエクイレクタングラー画像フレームデータに変換することにより、第3FOV変更入力V3を反映(605)することができる。
【0056】
図11を参照すると、例えば、GPUは、フレーム#Nをデコード(610)し/フレーム#Nの球体画像フレームデータをエクイレクタングラーフレームデータに変換(612)し/フレーム#Nをエンコード(615)し、次いでフレーム#N+1をデコード(617)する。幾つかの実施形態において、ビデオストリーミングシステム100のプロセッサがフレーム#Nを変換(612)する間または後にクライアント端末から(第4FOVに関する)第4FOV変更入力V4を受信すると(613)、GPUは、フレーム#N+1に対する変換614およびエンコード616段階で、第4FOV変更入力を反映(614’)することができる。幾つかの実施形態において、フレーム#N+1に対するデコード617が完了するまでを待つ代わりに、GPUは、第1フレームバッファ161に保存されたフレーム#Nを用いて、即刻的にフレーム#Nに対する球体画像フレームデータを、フレーム#Nに対する球体画像フレームデータが示す球体画像フレームの第4FOVに対応するエクイレクタングラーフレームデータに変換することができる(614)。次いで、GPUは、エンコードされたフレーム#N+1に対して変換されたエクイレクタングラー画像をエンコード(616)することができる。また、フレーム#N+1のデコード617が完了した後、GPUは、フレーム#N+1の追加処理(例えば、フレーム#N+1の変換およびエンコード)を省略(例えば、行わない)することができる(619)。なぜなら、エンコードされたフレーム#N+1が既に他の変換(614)およびエンコード(616)動作から利用可能(利用可能である予定)であるからである。このような方式で、フレーム#Nのエンコード完了とフレーム#N+1のエンコード完了との間の時間間隔は33mm未満のランダム時間であり得るので、フレームのエンコードにかかる時間を減少させることができる。
【0057】
図12を参照すると、例えば、GPUは、フレーム#Nをデコード(620)し/フレーム#Nの球体画像フレームデータをエクイレクタングラーフレームデータに変換(622)し/フレーム#Nをエンコード(623)し、次いでフレーム#N+1をデコード(624)する。幾つかの実施形態において、ビデオストリーミングシステム100のプロセッサがフレーム#N+1をデコード(624)する間または後にクライアント端末から(第5FOVに関する)第5FOV変更入力V5を受信すると(625)、GPUは、フレーム#N+1に対する変換(626)およびエンコード(628)段階で、第5FOV変更入力を反映(627)することができる。幾つかの実施形態において、フレーム#N+1に対するデコード(624)が完了するまでお待ちする代わりに、GPUは、第1フレームバッファ161に保存されたフレーム#Nを用いて、即刻的にフレーム#Nに対する球体画像フレームデータをフレーム#Nの球体画像フレームデータが示す球体画像フレームの第5FOVに対応するエクイレクタングラーフレームデータに変換することができる(626)。次いで、GPUは、エンコードされたフレーム#N+1に対して、変換されたエクイレクタングラー画像をエンコード(628)することができる。また、フレーム#N+1のデコード(624)が完了した後、GPUは、フレーム#N+1の追加処理(例えば、フレーム#N+1の変換およびエンコード)を省略(例えば、行わないこと)することができる(630)。なぜなら、エンコードされたフレーム#N+1が既に他の変換(626)およびエンコード(628)動作から利用可能(利用可能である予定)であるからである。このような方式で、フレーム#Nのエンコード完了とフレーム#N+1のエンコード完了との間の時間間隔は33mm未満のランダム時間であり得るので、フレームのエンコードにかかる時間を減少させることができる。
【0058】
次に、
図10乃至
図12を参照して、
図6に示されたフローチャートをより詳細に説明する。
図6を参照すると、段階451で、第1プロセッサ101またはGPU102は、GPUが第1球体画像フレームデータを第1エクイレクタングラー画像フレームデータに変換し始める前にクライアント端末から第1FOVに関する第1情報が受信されたか否かを判定することができる。例えば、
図10を参照すると、第1プロセッサ101またはGPU102は、GPU102がフレーム#Nの球体画像フレームデータをフレーム#Nのエクイレクタングラー画像フレームデータに変換(604)し始める前に第3FOV変更入力V3が受信されたと判定する。他方、
図11を参照すると、第1プロセッサ101またはGPU102は、GPU102がフレーム#Nの球体画像フレームデータをフレーム#Nのエクイレクタングラー画像フレームデータに変換(612)する間または後に第4FOV変更入力V4が受信されたと判定する。
【0059】
段階452で、GPUが第1球体画像フレームデータを第1エクイレクタングラー画像フレームデータに変換し始める前にクライアント端末から第1FOVに関する第1情報が受信されたという判定に応答して、ビデオサーバのGPUは、第1フレームバッファメモリ(例えば、
図3に示されたフレームバッファ161)に保存された第1球体画像フレームデータを、第1球体画像フレームデータが示す第1球体画像フレームの第1FOVに対応する第1エクイレクタングラー画像フレームデータに変換することができる。例えば、
図10を参照すると、GPUがフレーム#Nに対する球体画像フレームデータをフレーム#Nに対するエクイレクタングラー画像フレームデータに変換(604)し始める前に第3FOV変更入力V3が受信(602)されるので、GPUは、フレーム#Nに対する球体画像フレームデータを第3FOV変更入力V3に対応するフレーム#Nのエクイレクタングラー画像フレームデータに変換する(第3FOV変更入力V3がフレーム#Nに対する球体画像フレームデータに反映(605)されるようにするため)。
【0060】
図6を参照すると、ビデオサーバのGPUは、第1球体画像フレームに後続するビデオの第2球体画像フレームを示す第2球体画像フレームデータをデコードし、デコードされた第2球体画像フレームデータを第1フレームバッファ(例えば、
図3の第1フレームバッファ161)に保存することができる。例えば、
図11を参照すると、ビデオサーバのGPUは、フレーム#N+1(フレーム#Nの次のフレーム)をデコードし、デコードされたフレーム#N+1を示す球体画像フレームデータを第1フレームバッファ161に保存する。段階453で、第1プロセッサ101またはビデオサーバのGPUは、GPUが第2球体画像フレームデータを第1フレームバッファメモリに保存する前に第1FOV情報が受信されたと判定することができる。例えば、
図11を参照すると、GPUが第1フレームバッファ161にフレーム#N+1に対する球体画像フレームデータを保存する前に第4FOV変更入力V4が受信されたと判定される(なぜなら、保存がフレーム#N+1のデコード617の後に発生するから)。同様に、
図12を参照すると、GPUが第1フレームバッファ161にフレーム#N+1に対する球体画像フレームデータを保存する前に第5FOV変更入力V5が受信されたと決定される(なぜなら、保存がフレーム#N+1のデコード624の後に発生するから)。
【0061】
段階454で、ビデオサーバのGPUが第2球体画像フレームデータを第1フレームバッファメモリに保存する前に第1FOVに関する第1情報が受信されたという判定に応答して、ビデオサーバのGPUは、第1フレームバッファメモリに保存された第1球体画像フレームデータを、第1球体画像フレームデータが示す第1球体画像フレームの第2FOVに対応する第2エクイレクタングラー画像フレームデータに変換することができる。例えば、
図11を参照すると、ビデオサーバのGPUが第1フレームバッファ161にフレーム#N+1に対する球体画像フレームデータを保存する前に第4FOV変更入力V4が受信されたという判定に応答して、GPUは、変換614時点で、第1フレームバッファ161に保存されたフレーム#Nに対する球体画像フレームデータを第4FOV変更入力V4に対応するエクイレクタングラー画像フレームデータに変換(614)する(第4FOV変更入力V4がフレーム#Nに対する球体画像フレームデータに反映(614’)されるようにするため)。同様に、
図12を参照すると、GPUが第1フレームバッファ161にフレーム#N+1に対する球体画像フレームデータを保存する前に第5FOV変更入力V5が受信されたという判定に応答して、GPUは、変換626時点で、第1フレームバッファ161に保存されたフレーム#Nに対する球体画像フレームデータを、第5FOV変更入力V5に対応するエクイレクタングラー画像フレームデータに変換(626)する(第5FOV変更入力V5がフレーム#Nに対する球体画像フレームデータに反映(627)されるようにするため)。幾つかの実施形態において、段階454で、第1球体画像フレームデータの変換過程の後に、ストリーミングサーバ(例えば、
図3に示されたストリーミングサーバ140)が、現在のFOVに対応するエンコードされた第2エクイレクタングラー画像フレームデータだけをクライアント端末にストリーミングするように、GPUは、変換されたエクイレクタングラー画像フレームデータを、第2エンコードされた画像フレームデータにエンコードすることができる。例えば、
図11を参照すると、フレーム#Nに対する球体画像フレームデータの変換(614)に続いて、GPUは、変換されたエクイレクタングラー画像フレームデータをフレーム#N+1に対するエンコードされた画像フレームデータにエンコード(616)する。同様に、
図12を参照すると、フレーム#Nに対する球体画像フレームデータの変換(626)に続いて、GPUは、変換されたエクイレクタングラー画像フレームデータをフレーム#N+1に対するエンコードされた画像フレームデータにエンコード(628)する。
【0062】
段階455で、第2球体画像フレームデータをデコードした後に、GPUは、第1フレームバッファメモリに保存された第2球体画像フレームデータに対する変換およびエンコードを省略することができる。例えば、
図11を参照すると、フレーム#N+1をデコード(617)した後に、GPUは、第1フレームバッファ161に保存されたフレーム#N+1に対する球体画像フレームデータをそれ以上変換およびエンコードしない。なぜなら、エンコードされたフレーム#N+1は、既に他の変換614およびエンコード616動作から利用可能(利用可能である予定)であるためである。同様に、
図12を参照すると、フレーム#N+1をデコード(624)した後に、GPUは、第1フレームバッファ161に保存されたフレーム#N+1に対する球体画像フレームデータをそれ以上変換およびエンコードしない。なぜなら、エンコードされたフレーム#N+1は、既に他の変換626およびエンコード628動作から利用可能(利用可能である予定である)であるためである。
【0063】
図13は本発明の幾つかの実施形態によって、クライアント端末が行うビデオディスプレイ方法700の動作を示すフローチャートである。概略的には、ビデオディスプレイ方法700は、段階710で開始し、ここで、クライアント端末(例えば、
図1および
図3に示されたクライアント端末200A)のGPU(例えば、
図2に示されたGPU370)は、ディスプレイの第1表示領域に第1画像フレームの第1領域をレンダリングし、ディスプレイの第2表示領域に第1画像フレームの残り領域は見えないように隠された状態でレンダリングすることができる。段階720で、第1FOVを指し示すユーザ入力がクライアント端末のプロセッサ(例えば、
図2に示されたプロセッサ310)によって受信されることに応答して、クライアント端末のGPUが第2表示領域に予め隠されており、第1FOV内に位置した第1画像フレームの第2領域をレンダリングすることができる。段階730で、クライアント端末のプロセッサは、ビデオストリーミングサーバ(例えば、
図3に示されたストリーマー180)へ、第1FOVを指し示す情報を伝送することができる。また、クライアント端末のプロセッサは、ビデオストリーミングサーバから第1FOVに対応する第2画像フレームデータを受信することができる。段階740で、ビデオストリーミングサーバからビデオの第2画像フレームを示す第2画像フレームデータを受信することに応答して、GPUは、ディスプレイの第1表示領域に第2画像フレームの一部領域をレンダリングし、ディスプレイの第2表示領域に第1画像フレームの隠されていた第2領域をレンダリングすることができる。
【0064】
次に、
図13に示されたフローチャートを、
図1~
図3および
図14~
図16を参照してより詳細に説明する。
図14~
図16は本発明の幾つかの実施形態に係るビデオディスプレイ方法で表示されたクライアント端末の表示画面を例示的に示す図である。
【0065】
段階710で、クライアント端末(例えば、
図1および
図3に示されたクライアント端末200A)のGPU(例えば、
図2に示されたGPU370)は、ビデオストリーミングサーバ(例えば、
図3に示されたストリーマー180)からビデオの第1画像フレームを示す第1画像フレームデータを受信することができる。
図14を参照すると、クライアント端末のGPU(例えば、
図2に示されたGPU370)は、クライアント端末のディスプレイ800の第1表示領域810に第1画像フレームの第1領域をレンダリングし、ディスプレイの第2表示領域820に第1画像フレームの残り領域は見えないように隠された状態でレンダリングすることができる。幾つかの実施形態において、クライアント端末のディスプレイ800は、少なくとも第1画像フレームと同一のサイズまたは小さいサイズであり得る。幾つかの実施形態において、ディスプレイ800は長方形の形状であってもよい。幾つかの実施形態において、ディスプレイ800は、例えば円形、多角形などの様々な形状であってもよい。第1表示領域810は、長方形のディスプレイ800の中央に位置した長方形形状の領域であり得る。ディスプレイの第2表示領域820は、長方形のディスプレイ800の左余白、右余白、上余白および下余白のうちの少なくとも一つを含むことができる。
【0066】
段階720で、
図15を参照すると、第1FOV(図示せず)を指し示すユーザの入力がクライアント端末のプロセッサ(例えば、
図2に示されたプロセッサ310)によって受信されることに応答して、クライアント端末のGPUは、第2表示領域820に予め隠されており、第1FOV内に位置した第1画像フレームの第2領域825をレンダリングすることができる。例えば、
図14を参照すると、クライアント端末のユーザは、自分の視野角を方向830に変更し、そうすることにより、変更された視野角が第1FOVを指し示す。幾つかの実施形態において、クライアント端末は、このような視野角の変化を検出することができ、GPUが以前に隠しておいた第2領域825をレンダリングすることができるようにFOV変更入力をクライアント端末のGPUに提供することができる。幾つかの実施形態において、第1画像フレームの第2領域825をレンダリングするとき、クライアント端末のGPUは、ディスプレイ800のレンダリング領域を第1表示領域810(
図14参照)から第3表示領域840(
図15参照)に再配置することができる。このとき、第3表示領域840は、第1表示領域810と同一の形状をもって第1画像フレームの第2表示領域825を含むことができる。
【0067】
段階730で、クライアント端末のプロセッサは、ビデオストリーミングサーバ(例えば、
図3に示されたストリーマー180)へ、第1FOVを指し示す情報を伝送することができる。また、クライアント端末のプロセッサは、ビデオストリーミングサーバから、第1FOVに対応する第2画像フレームデータを受信することができる。幾つかの実施形態で、クライアント端末のプロセッサは、ビデオストリーミングサーバからビデオの第2画像フレームを示し、第1FOVに対応する第2画像フレームデータを受信することができる。幾つかの実施形態で、クライアント端末のプロセッサは、また、ビデオストリーミングサーバから第2画像フレームデータの補正されたFOV情報を受信することもできる。
【0068】
段階740で、
図16を参照すると、GPUは、ディスプレイ800の第1表示領域810に第2画像フレームの一部の領域をレンダリングし、ディスプレイ800の第2表示領域820に第1画像フレームの隠されていた第2領域をレンダリングすることができる。クライアント端末のGPUは、ディスプレイのレンダリング領域を第3表示領域840(
図15を参照)から、ディスプレイの中央に位置した第1表示領域810に再配置することができる。以前に隠されていた表示領域825(
図15参照)の即刻的なレンダリングに後続して、表示領域をディスプレイの中央に再配置することは、クライアント端末のユーザが段階720で第3表示領域840にレンダリングされたフレーム画像と、段階740で第1表示領域810にレンダリングされたフレーム画像との間の差を認識しないようにすることができる。
【0069】
幾つかの実施形態で、VRビデオストリーミングシステムは、次の利点を提供することができる。第一に、VRビデオストリーミングシステムは、高解像度VRビデオデータを処理する際にGPUコンピューティング性能(例えば、マルチコアを用いた並列コンピューティング性能)を効果的に活用することができる。第二に、現在のFOVが反映されたビデオ部分のみを伝送することにより、相当なネットワーク帯域幅要求量(例えば、FOVビデオデータ伝送は1~2Mbpsの帯域幅だけが要求されるのに対し、4K UHDビデオデータ伝送は16~20Mbpsの帯域幅が要求される)が削減できる。第三に、FOVが反映されたビデオ部分だけを伝送することにより、ユーザの経験だけでなく、ストリーミング費用まですべて改善することができる。第四に、FOVが反映されたビデオ部分だけを伝送することにより、低いデータ伝送速度でもストリーミングサービスを提供することができる。そうすることにより、データバッファリングを除去し、クライアント端末のバッテリー消耗を減少させることができる。第五に、FOVが反映されたビデオの部分だけを伝送することにより、ストリーミングサービスの費用も減らすことができる。なぜなら、ストリーミングサービスのプロバイダは、自分のネットワークサービスの使用量に応じて料金を支払う必要があるからである。第六に、FOVが反映されたビデオ部分だけを伝送することにより、コンテンツの不正コピーも防止することができる。FOVが反映されたビデオ部分が伝送されることにより、受信した部分的にストリーミングされたビデオデータは、動的に変更されるFOVが反映されたビデオの一部だけを含むことができるので、これにより、ビデオのコンテンツが不正コピーされることを防止する。第七に、現在のFOVに基づいて、クライアント端末に含まれているディスプレイのレンダリング領域を変更することにより、クライアント端末は、変更された遅延なく、変更された視野角に対するビデオ部分をユーザに即刻的に提供することができる。このとき、遅延は、例えば、ビデオストリーミングサーバから新しいビデオ部分を受信した後に、変更された視野角に対する新しいビデオ部分を提供するときに発生することができる。
【0070】
様々な実施形態を説明するために本明細書で使用される「例」または「例示的」という用語は、それらの実施形態の可能な例、表現および/または例示であることを指し示すものに過ぎないことに留意すべきである(そして、このような用語は、それらの実施形態が必然的に大変な、最上または最善の例であることを暗示するものではない)。
【0071】
本明細書に使用される、「結合された」、「連結された」などの用語は、2つの構成要素またはコンポーネントを互いに直接または間接的に結合することを意味する。このような結合は、固定式(例えば、永久的)または移動式(例えば、除去可能、解除可能など)であり得る。このような結合は、2つの構成要素、または2つの構成要素と任意の追加の中間構成要素が互いに一つの単一体に形成されるか、或いは2つの構成要素または2つの構成要素および任意の追加の中間構成要素が互いに付着することにより達成できる。
【0072】
本発明は、様々な動作を達成するために、任意の機械可読媒体上の方法、システム、およびプログラム製品を考慮する。本発明の実施形態は、既存のコンピュータプロセッサを用いて実現できる。または、本発明の目的または他の目的のために統合された適切なシステムに対する専用コンピュータプロセッサまたはハードワイヤードシステム(hardwired system)によって行われることも可能である。本開示の範囲内の実施形態は、機械実行可能な命令セットまたはデータ構造を伝達するために、機械可読媒体が含まれたプログラム製品を含む。このような機械可読媒体は、汎用または特殊な目的のコンピュータまたはプロセッサを有する他の機械によってアクセスできる任意の利用可能な媒体であり得る。例えば、そのような機械可読媒体は、RAM、ROM、EPROM、EEPROM、CD-ROMまたは他の光学ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶装置、または任意の他の不揮発性媒体を含むことができる。上述した機械可読媒体は、機械実行可能命令セットまたはデータ構造形式で所望のプログラムコードを保存したり伝達したりするために使用できる。また、上述した機械可読媒体は、汎用または特殊な目的のコンピュータまたはプロセッサを有する他の機械によってアクセスできる。情報がネットワークまたは他の通信接続(有線、無線、または有線と無線との組み合わせ)を介して任意の機械に伝送または提供されると、前記機械は、当該接続をコンピュータ可読媒体としてみなす。よって、そのような接続は、適切に、機械可読媒体と呼ばれる。上述したものの組み合わせも機械可読媒体の範囲内に含まれる。機械実行可能命令セットは、例えば、汎用コンピュータ、特殊目的のコンピュータまたは特殊目的の処理機械が特定の機能または機能のグループを行うようにする命令およびデータを含む。
【0073】
例示的な実施形態に示された方法およびシステムの構成と、前記方法およびシステムの構成要素の配列は、例示的なものに過ぎないことに留意すべきである。たとえ本発明の幾つかの実施形態が詳細に説明されたが、本開示を検討する当該技術分野における通常の技術者であれば、本明細書に列挙された発明の主題の新規な教示および利点から実質的に逸脱することなく多くの修正が可能であることを容易に理解するだろう。例えば、一体に形成されていると図示された構成要素は、多数の部分または構成要素から構成できる。よって、このようなすべての修正は本発明の範囲内に含まれるものと意図される。本発明の範囲または添付された特許請求の範囲の思想を逸脱することなく好適な実施形態、または他の代表的な実施形態に対する設計、作動条件および配列においてその他の置換、修正、変更および省略が行われ得る。