以下、本発明の実施形態を図面に基づいて説明する。
[1.通信システムSの構成及び動作概要]
始めに、図1等を参照して、本実施形態の通信システムの構成及び動作概要について説明する。図1は、本実施形態の通信システムSの概要構成例を示す図である。図1に示すように、通信システムSは、配信サーバ1、及び複数のクライアント2を含んで構成される。クライアント2は、本発明の情報処理装置及び表示装置の一例である。配信サーバ1とクライアント2とはネットワークNWを介して通信可能になっている。ネットワークNWは、例えば、インターネット、携帯通信網、及びゲートウェイ等により構成される。ネットワークNWは、通信手段の一例である。
配信サーバ1は、例えばクライアント2からの要求に応じて、コンテンツをクライアント2へ送信する。コンテンツは、動画データを含む。動画データは、動画を表すデータである。動画データは、本発明の映像情報の一例である。また、コンテンツは、音声データを含んでいてもよい。コンテンツの送信は、例えばネットワークNWを介してストリーミング配信により行われる。これにより、クライアント2は、コンテンツを取得する。クライアント2は、取得したコンテンツを再生することにより、動画としての映像を、表示部24aの画面に表示させる。クライアント2は、例えば、パーソナルコンピュータ、スマートフォン、携帯電話、テレビ、テレビゲーム機等であってもよい。
コンテンツの再生によりクライアント2が映像を表示しているとき、ユーザは、擬似的なカメラワーク操作を行うことができる。カメラワークとは、撮影者がカメラを動かすことで、カメラの被写体に対する位置、カメラの被写体に対する角度、及び被写体のサイズを決める動作をいう。疑似カメラワーク操作により、ユーザは、映像の表示範囲を変更することができる。ユーザは、クライアント2に接続された操作部25a又はクライアント2と通信可能な操作部25aを操作することにより、疑似カメラワーク操作を行う。これにより、操作部25aは、ユーザから、表示部24aの画面に表示される映像の表示範囲の変更指示を受け付ける。表示範囲の変更指示とは、表示範囲を変更するために操作部25aに対してユーザが操作を行うことにより、操作部25aから入力される指示である。表示範囲の変更は、例えば、視点位置、視線方向及び視野面積のうち少なくとも何れか1つを変更することである。三次元仮想空間において、映像を見る人物が存在すると仮定し、その人物が見える映像が画面に表示されると仮定する。視点位置は、その人物の位置である。視線方向は、その人物の視線の方向である。視野面積は、三次元仮想空間に配置された仮想スクリーン上において、その人物の視野の範囲にある領域の面積である。仮想スクリーンについては後述する。また、視野面積は、その人物の視野の範囲としてもよい。操作部25aは、例えば、キーボード、マウス、リモコン、タッチパネル、ゲームコントローラ、スマートフォン等であってもよい。操作部25aは、例えば、電子コンパス、ジャイロセンサ、加速度センサ等を備えていてもよい。スマートフォンや携帯電話等の携帯機器が操作部25aである場合、例えば、操作部25aと、パーソナルコンピュータ等であるクライアント2とが、Bluetooth(登録商標)やIrDA(Infrared Data Association)等の通信手段により通信可能になっていてもよい。
本実施形態では、仮想スクリーンを定義し、仮想スクリーンに映像全体が表示又は投影されるものとする。そして、疑似カメラワーク操作により、仮想スクリーン上において、映像の表示範囲が決定される。つまり、仮想スクリーンから、表示範囲として決定された範囲の映像が切り出され、切り出された映像がクライアント2の表示部24aの画面に表示される。仮想スクリーンは、例えば三次元仮想空間内に配置された仮想的なスクリーンである。仮想スクリーン全体に映像が表示されてもよいし、仮想スクリーンの一部に映像が表示されてもよい。
図2(A)乃至(C)は、仮想スクリーンの例と、仮想スクリーンに対する表示範囲の例とを示す図である。図2(A)の例では、仮想スクリーンとしてスクリーンSC1が定義される。スクリーンSC1は、長方形の平面スクリーンである。スクリーンSC1上の表示範囲R1は、例えば、X座標、Y座標、幅及び高さにより示される。例えば、スクリーンSC1の左上の頂点をスクリーンSC1の座標系における原点とする。X座標及びY座標は、視点位置を定める。X座標は、表示範囲R1の左上の頂点の横方向の座標であり、Y座標は、表示範囲R1の左上の頂点の縦方向の座標である。例えば三次元仮想空間において、スクリーンSC1から所定距離離れている点を視点と仮定してもよい。例えば、視点を通り、スクリーンSC1と垂直に交わる線を、視線とする。視線とスクリーンSC1とが交わる点が、表示範囲R1の中心となる。幅及び高さは、視野面積を定める。幅及び高さは、表示範囲R1の横の長さ及び縦の長さである。視線方向は、予め定められている。
図2(B)の例では、仮想スクリーンとしてスクリーンSC2が定義される。スクリーンSC2は、円筒形のスクリーンであり、円筒の側面に映像が表示される。スクリーンSC2には、例えば円筒状のパノラマ映像が表示される。パノラマ映像は、例えば、全方位映像である。パノラマ映像は、360度より視野角が狭い部分方位映像であってもよい。スクリーンSC2上の表示範囲R2は、例えば、方位角、横視野角、高さにより示される。方位角は、視線方向を定める。例えば、スクリーンSC2の円筒の中心軸の中点を、視点とする。また、視点を、三次元仮想空間の座標系における原点とし、スクリーンSC2の中心軸をZ軸とする。X軸は、原点を通り、Y軸及びZ軸に垂直である。Y軸は、原点を通り、X軸及びZ軸に垂直である。方位角は、視点からの視線の方向を定める。視線は、例えば、Z軸と垂直である。方位角は、例えば、X軸と視線とがなす角度である。横視野角及び高さは、視野面積を定める。横視野角は、視線の方向を中心とした横方向の視野の範囲を示す角度である。高さは、表示範囲R2の縦の長さである。方位角、横視野角及び高さに基づいて、三次元仮想空間における視野範囲を示す四角錐が定義される。この四角錐がビューボリュームである。実際のビューボリュームは四角錐台であるが、説明の便宜上、四角錐を用いる。ビューボリュームの頂点が視点であり、ビューボリュームの底面の中心を視線が通る。ビューボリュームの側面P21〜P24のうち、Z軸と平行な側面P21と側面P22とがなす角度が横視野角である。ビューボリュームとスクリーンSC2とが交わる面の縦方向の長さが、高さである。そして、ビューボリュームとスクリーンSC2とが交わる面が、表示範囲R2である。視点位置は、予め定められている。
図2(C)の例では、仮想スクリーンとしてスクリーンSC3が定義される。スクリーンSC3は、球状のスクリーンであり、球面に映像が表示される。スクリーンSC3には、例えば球状のパノラマ映像が表示される。スクリーンSC3上の表示範囲R3は、例えば、方位角、仰俯角、横視野角、縦視野角により示される。方位角及び仰俯角は、視線方向を定める。三次元仮想空間において、例えば、スクリーンSC3に囲まれている範囲内に、視点が位置する。例えば、スクリーンSC3の球の中心を、視点とする。また、視点を、三次元仮想空間の座標系における原点とし、縦方向の座標軸をZ軸とする。X軸は、原点を通り、Y軸及びZ軸に垂直である。Y軸は、原点を通り、X軸及びZ軸に垂直である。方位角は、例えば、XZ平面と視線とがなす角度である。仰俯角は、例えば、XY平面と視線とがなす角度である。横視野角及び縦視野角は、視野面積を定める。横視野角は、視線の方向を中心とした横方向の視野の範囲を示す角度である。縦視野角は、視線の方向を中心とした縦方向の視野の範囲を示す角度である。XY平面上の線であって、原点を通り、視線と垂直に交わる線を、視線の縦回転軸とする。原点を通り、視線と縦回転軸とのそれぞれに垂直に交わる線を、視線の横回転軸とする。方位角、仰俯角、横視野角及び縦視野角に基づいて、三次元仮想空間における視野範囲を示す四角錐が定義される。この四角錐がビューボリュームである。ビューボリュームの頂点が視点であり、ビューボリュームの底面の中心を視線が通る。ビューボリュームの側面P31〜P34のうち、Z軸と平行な側面P31と側面P32とがなす角度が横視野角である。側面P33と側面P34とがなす角度が縦視野角である。そして、ビューボリュームとスクリーンSC3とが交わる面が、表示範囲R3である。視点位置は、予め定められている。
透視変換により、視点位置、視線方向及び視野面積に基づいて、仮想スクリーン上の表示範囲の三次元座標が、二次元座標に変換される。変換された二次元座標により、パノラマ映像全体のうちどの部分が表示範囲内にあるかを特定することができる。方位角及び仰俯角の少なくとも何れかが変化することにより、視線方向が変化すると、視線方向に応じて表示範囲R3が変化する。また、縦視野角および横視野角の少なくとも何れかが変化することにより、視野面積が変化すると、視野面積に応じて表示範囲R3は変化する。つまり、表示範囲R3は、視線方向および視野面積に応じた範囲となる。なお、スクリーンSC3は、一般に視点を完全に覆う立体であればよく、例えば、立方体等の形状をしたスクリーンであってもよい。
スクリーンSC1〜SC3のうち何れの仮想スクリーンが用いられるかは、例えば、動画データの種類に応じて、仮想スクリーンが決定されてもよい。例えば、パノラマ映像以外の映像の動画データに対しては、スクリーンSC1が決定され、円筒状のパノラマ映像の動画データに対しては、スクリーンSC2が決定され、球状のパノラマ映像の動画データに対しては、スクリーンSC3が決定されてもよい。
通信システムSにおいては、配信サーバ1が同一のコンテンツを複数のクライアント2に配信することにより、複数のクライアント2が、同一のコンテンツをほぼ同時に再生することができる。これにより、複数のユーザが同一のコンテンツを同時に視聴することができる。
また、同一のコンテンツを再生する複数のクライアント2のうち、一のクライアント2のユーザが撮影者役となることができる。この場合、他のクライアント2のユーザは、視聴者役になる。撮影者役のユーザは、疑似カメラワーク操作を行うことにより、映像の表示範囲を指定する。疑似カメラワーク操作により、撮影者役のユーザのクライアント2は、指定された表示範囲に従って映像を表示させるとともに、カメラワークデータを生成する。そして、撮影者役のユーザのクライアント2は、生成したカメラワークデータを視聴者役のユーザのクライアント2へ送信する。カメラワークデータは、擬似的なカメラワークに関する情報である。具体的に、カメラワークデータは、表示範囲を示す情報である。カメラワークデータは、本発明の範囲情報の一例である。カメラワークデータを受信したクライアント2は、カメラワークデータが示す表示範囲に従って映像を表示する。これにより、視聴者役のユーザのクライアント2は、撮影者役のユーザが行った疑似カメラワークに応じた表示範囲と同じ表示範囲で映像を表示することができる。そのため、複数のユーザが臨場感のある映像を共有することができる。なお、撮影者役のユーザが利用するクライアント2を、送信クライアントという。視聴者役のユーザが利用するクライアント2を、受信クライアントという。
仮想スクリーンが長方形のスクリーンSC1である場合、カメラワークデータは、再生位置、X座標、Y座標、幅及び高さで構成される。仮想スクリーンが円筒形のスクリーンSC2である場合、カメラワークデータは、再生位置、方位角、横視野角、高さで構成される。仮想スクリーンが球形のスクリーンSC3である場合、カメラワークデータは、再生位置、方位角、仰俯角、横視野角、縦視野角で構成される。再生位置は、動画データの再生開始からの時間的な位置である。映像が表示される画面のアスペクト比が決められている場合、カメラワークデータを構成する情報を減らすことができる。スクリーンSC1の場合、幅及び高さのうち何れか一方と、再生位置、X座標及びY座標とで構成されてもよい。また、スクリーンSC2の場合、横視野角及び高さの何れか一方と、再生位置及び方位角、とで構成されてもよい。また、スクリーンSC3の場合、横視野角及び縦視野角のうち何れか一方と、再生位置、方位角及び仰俯角とで構成されてもよい。
送信クライアントから受信クライアントへのカメラワークデータの送信方法としては、例えば、配信サーバ1を経由する方法がある。この場合、送信クライアントは、カメラワークデータを配信サーバ1へ送信し、配信サーバ1は、受信したカメラワークデータを受信クライアントへ転送する。また、送信クライアントが直接受信クライアントへカメラワークデータを送信する方法がある。例えば、配信サーバ1が、受信クライアントのIPアドレス及びポート番号を送信クライアントへ送信してもよい。そして、送信クライアントは、受信したIPアドレス及びポート番号に基づいて、カメラワークデータを受信クライアントへ送信してもよい。また、送信クライアントは、複数の受信クライアントにマルチキャストでカメラワークデータを送信してもよい。
[2.表示範囲の予測値を示すカメラワークデータの生成]
送信クライアントがカメラワークデータを送信するとき、所定時間間隔ごとに、そのときの映像の表示範囲を示すカメラワークデータを送信する。カメラワークデータを送信する時間間隔を、送信間隔という。送信間隔は、例えば、動画データのフレーム間隔と一致してもよいし、表示部24aの画面のリフレッシュ間隔と一致してもよい。また、送信間隔は、フレーム間隔やリフレッシュ間隔と異なっていてもよい。フレーム間隔はフレームレートの逆数である。リフレッシュ間隔は、リフレッシュレートの逆数である。受信クライアントは、基本的には送信間隔と同じ時間間隔でカメラワークデータを受信する。しかしながら、一部のカメラワークが受信クライアントに到達するまでの時間が遅延する可能性がある。この場合、カメラワークデータを受信する時間間隔にムラが生じる。また、一部のカメラワークデータが受信クライアントに到達しないことにより、カメラワークデータに欠けが生じる可能性がある。例えば、UDP(User Datagram Protocol)を用いてカメラワークデータが送信される場合である。或る再生位置の映像を表示させなければならないときに、その再生位置に対応するカメラワークデータを受信クライアントが受信していないと、受信クライアントは、表示範囲を決定することができない。この場合、受信クライアントは、例えば、これまでに受信されているカメラワークデータに従って表示範囲を決定したり、カメラワークデータを受信するまで、コンテンツの再生を一時停止したりするなどの対応を行うことが考えられる。しかしながら、これらの対応では、疑似カメラワークや動画再生が不自然になる。疑似カメラワークや動画再生を自然にするためには、例えば、受信クライアントは、これまでに受信されているカメラワークデータに基づいて、表示範囲を推測したり補間したりする必要がある。
そこで、送信クライアントは、操作部25aにより表示範囲の変更指示が受け付けられたとき、表示範囲の予測値を示すカメラワークデータを生成する。そして制御部21は、生成したカメラワークデータを受信クライアントへ送信する。表示範囲の予測値を示すカメラワークデータは、本発明の予測範囲情報の一例である。例えば、ユーザが操作部25aを操作することによって操作部25aが表示範囲の変更指示を受け付けたとき、現時点から或る程度先の時点までの表示範囲が、現時点で計算可能となる場合がある。送信クライアントは、例えば、現時点の表示範囲と、変更指示とに基づいて、現時点から、表示範囲が計算可能な最も未来の時点又は所定時間後までの間における送信間隔ごとの表示範囲を示すカメラワークデータを計算することにより、複数のカメラワークデータを生成する。そして、送信クライアントは、生成された複数のワークデータのうち、例えば、現時点の表示範囲を示すワークデータから、再生位置が現時点の再生位置に近い順に所定数のカメラワークデータを、受信クライアントへ一度に送信する。このとき、送信クライアントは、例えば、少なくとも2以上のカメラワークデータを送信する。送信される複数のワークデータのうち、現時点の表示範囲を示すカメラワークデータ以外のカメラワークデータは、表示範囲の予測値を示すカメラワークデータである。
クライアント2が備える制御部21は、操作部25aにより受け付けられた表示範囲の変更指示と、表示範囲を変更するための所定のアルゴリズムとに基づいて、映像の表示範囲を決定する。操作部25aにより変更指示が受け付けられると、その後ユーザが何も操作を行わなくとも、一度受け付けられた変更指示に従って表示範囲の変動がしばらくの間持続するようなアルゴリズムがある。このようなアルゴリズムを表示範囲変動持続アルゴリズムという。表示範囲変動持続アルゴリズムでは、変更指示が受け付けられた時点で、その後の表示範囲の変動が継続する間における表示範囲が、予め決定されていることになる。そこで、制御部21は、この表示範囲変動持続アルゴリズムを用いて、現在よりも後における表示範囲を示すカメラワークデータを計算する。
表示範囲変動持続アルゴリズムを適用可能な操作として、例えば、フリック操作がある。フリック操作は、例えばタッチパネルで採用される。フリック操作は、例えば、ユーザがタッチパネル上で指やペン等の接触物を素早くスライドさせて、接触物をタッチパネルから離す操作である。フリック操作がされた場合、例えば、スライドの方向とは逆方向に、スライドの速度に応じて表示範囲が移動する。その後、表示範囲の移動速度は徐々に遅くなり、表示範囲の移動が停止する。この場合、フリック操作が行われた時点で、表示範囲の移動が停止するまでの間における送信間隔ごとの表示範囲が決まる。従って、制御部21は、表示範囲変動持続アルゴリズムを用いて、未来の表示範囲を示すカメラワークデータを計算することができる。
表示範囲変動持続アルゴリズムを用いる方法は、一般的な表示範囲の予測、推定、補間等の方法とは異なる。これらの方法では、例えば、現時点までの表示範囲の履歴等に基づいて、予測等を行う。しかしながら、採用されるアルゴリズムによって、予測等された表示範囲が異なる。そのため、送信クライアントが表示部24aに映像を表示させるために実際に決定する表示範囲と異なる表示範囲が予測される可能性がある。これに対し、表示範囲変動持続アルゴリズムを用いる方法では、例えば、現時点の表示範囲の状態、操作部25aにより受け付けられた変更指示の内容等に基づいて、未来の表示範囲が決まる。表示範囲の状態としては、例えば、仮想スクリーンにおける表示範囲の位置、大きさ等がある。また、表示範囲が変動中である場合、表示範囲の状態として、例えば、変動方向、変動速度等がある。表示範囲変動持続アルゴリズムは、送信クライアントが表示部24aの画面における映像の表示範囲を決定するためのアルゴリズムである。従って、送信クライアントが表示部24aに映像を表示させるために実際に決定する表示範囲と同じ表示範囲を予測することができる。表示範囲変動持続アルゴリズムと同じアルゴリズムを用いることにより、未来の表示範囲が一意に決まる。そのため、制御部21は、表示範囲の適切な予測値を示すカメラワークデータを生成することができる。
現在より後の表示範囲を計算により予め決定することができるとしても、決定された表示範囲が有効である期間は、ユーザが更に操作部25aに対して操作を行うまでの期間である。例えば、フリック操作により表示範囲が移動している間に、ユーザがタッチパネルに接触物を接触させる。すると、表示範囲の移動が停止する。このように、操作部25aにより新たな変更指示が受け付けられると、予め決定された表示範囲のうち、新たな変更指示が受け付けられた時点以降の表示範囲は無効となる。従って、変更指示が受け付けられた時点で計算可能な未来の表示範囲を示すカメラワークデータは、あくまでも予測値である。
表示範囲変動持続アルゴリズムは、例えば、操作部25aに対する操作方法に応じて決まったり、特定の操作方法に対してのみ適用されたりする。つまり、操作部25aにより受け付けられた変更指示に応じて表示範囲変動持続アルゴリズムが定められる。制御部21は、操作部25aにより受け付けられる変更指示に基づいて、表示範囲を変更するためのパラメータを取得する。そして、制御部21は、例えば、表示範囲変動持続アルゴリズムと、現在の表示範囲を示すカメラワークデータと、パラメータと、予め設定された設定値とに基づいて、表示範囲の予測値を示すカメラワークデータを生成する。
上述したように、表示範囲変動持続アルゴリズムを適用可能な操作として、例えば、フリック操作がある。フリック操作が行われた場合、表示範囲が移動する。仮想スクリーンが長方形のスクリーンSC1である場合、表示範囲の移動は、例えば、視点がスクリーンSC1に対して平行に移動することである。つまり、表示範囲の移動は、表示範囲R1のX座標及びY座標の少なくとも何れかの変動である。仮想スクリーンが円筒形のスクリーンSC2又は球形のスクリーンSC3である場合、表示範囲の移動は、視点を中心とした視線の回転運動である。つまり、スクリーンSC2の場合、表示範囲の移動は、方位角の変動である。スクリーンSC3の場合、表示範囲の移動は、方位角及び仰俯角の少なくとも何れかの変動である。表示範囲の移動に関するX座標、Y座標、方位角及び仰俯角を総称して、アングル情報という。
フリック操作により、制御部21は、表示範囲の移動方向及び初速を取得する。具体的に、タッチパネルは、タッチパネル上の接触位置の座標を検出する。接触位置とは、接触物がタッチパネルに接触している位置である。制御部21は、タッチパネルから所定時間間隔ごとに接触位置の座標を取得する。制御部21は、取得した座標に基づいて、接触位置の移動方向及び移動速度を計算する。そして、制御部21は、接触位置の移動方向の逆方向を表示範囲の移動方向とし、接触位置の移動速度に応じて、表示範囲の初速を決定する。例えば、制御部21は、接触位置の移動速度に比例して表示範囲の初速を大きくしてもよい。表示範囲の加速度は、例えば、予め設定されている。この加速度は、マイナスの値である。制御部21は、現在の表示範囲を示すカメラワークデータ、移動方向、初速、及び加速度に基づいて、送信間隔ごとの仮想スクリーンにおけるカメラワークデータを計算する。表示範囲の移動においては、カメラワークデータを構成する情報のうち計算が必要な情報はアングル情報である。アングル情報及び再生位置以外の情報は、現在の表示範囲を示すカメラワークデータからコピーされる。制御部21は、この計算を、表示範囲の移動速度が0になるまで行う。
表示範囲変動持続アルゴリズムを適用可能な操作として、例えば、電子コンパス、ジャイロセンサ、加速度センサを利用した操作がある。例えば、ユーザが操作部25aを、操作部25aが静止した状態から所定角度だけ傾け又は回転させる。このような操作が行われた場合、表示範囲は、例えば、操作部25aが傾けられた角度又は回転された角度に応じた距離又は角度だけ移動する。この操作により、制御部21は、表示範囲の移動方向及び移動量をパラメータとして取得する。具体的に、制御部21は、センサからの信号に基づいて、操作部25aの傾き角度や傾き方向、あるいは、回転角度、回転方向を計算する。このとき、手ぶれ等の影響により、操作部25aが滑らかに傾けられなかったり回転させられなかったりする場合がある。そこで、制御部21は、表示範囲が滑らかに移動するように、制御する。例えば、制御部21は、操作部25aに対する操作に応じて直ぐには表示範囲を移動させず、表示範囲は加速して移動した後、減速して停止するように、表示範囲を移動させる。制御部21は、傾き角度及び傾き方向、または、回転角度及び回転方向に基づいて、表示範囲の移動方向及び移動量を計算する。仮想スクリーンが長方形のスクリーンSC1である場合、移動量は、表示範囲の移動距離である。仮想スクリーンが円筒形のスクリーンSC2又は球形のスクリーンSC3である場合、移動量は、視点を中心とした視線の回転角度である。制御部21は、現在の表示範囲を示すカメラワークデータ、移動方向、移動量、及び予め設定された加速度に基づいて、移動後の表示範囲を示すカメラワークデータを計算する。例えば、表示範囲が移動量の半分まで移動するまでの表示範囲について、所定の加速度で表示範囲の移動速度が速くなるように、制御部21は、送信間隔ごとの表示範囲を示すカメラワークデータを計算する。その後、表示範囲が移動量までの表示範囲について、所定の加速度で表示範囲の移動速度が遅くなるように、制御部21は、送信間隔ごとの表示範囲を示すカメラワークデータを計算する。
表示範囲変動持続アルゴリズムを適用可能な操作として、例えば、映像が表示された画面に対してマウスでマウスカーソルを動かし、クリック操作により画面の任意の位置を指定することにより、表示範囲の移動先を指定する方法がある。この操作が行われた場合、指定された位置が表示範囲の中心になるように表示範囲が移動する。このとき、表示範囲は加速して移動した後、減速して停止する。この操作により、制御部21は、移動先の表示範囲を示すカメラワークデータを取得する。具体的に、制御部21は、マウスから送信される信号に基づいて、画面においてマウスカーソルが位置する移動先の座標を特定する。そして、制御部21は、画面の中心の座標と移動先の座標とに基づいて、移動先の表示範囲を示すカメラワークデータを計算する。そして、制御部21は、現在の表示範囲を示すカメラワークデータ、及び移動先の表示範囲を示すカメラワークデータに基づいて、表示範囲の移動方向及び移動量を計算する。送信間隔ごとのカメラワークデータの計算方法は、例えば、電子コンパス、ジャイロセンサ、加速度センサを利用した操作の場合と同様である。制御部21は、現在の表示範囲から移動先の表示範囲まで、表示範囲が等速度で移動するように、カメラワークデータを生成してもよい。移動先を指定する操作では、移動先が表示範囲の中心の目標地点とされ、表示範囲の中心が目標地点まで、所定のアルゴリズムに基づく挙動で移動する。このような移動は、操舵行動の一種といえる。操舵行動に基づくアルゴリズムは、表示範囲変動持続アルゴリズムとして採用することができる。
表示範囲変動持続アルゴリズムを適用可能な操作として、画面上で表示範囲の移動方向を指定する操作がある。例えば、ユーザがマウスボタンを押しながらマウスカーソルを動かして、マウスボタンを押し始めたときのマウスカーソルの位置からマウスカーソルが移動する方向を、表示範囲の移動方向として指定する。この場合、表示範囲は加速して移動し、移動速度が所定の速度となると、表示範囲は等速で移動する。ユーザがマウスポインタを更に動かさない限り、表示範囲は等速で移動し続ける。制御部21は、マウスボタンを押し始めたときの画面におけるマウスカーソルの座標と画面におけるマウスカーソルの座標とに基づいて、表示範囲の移動方向を計算する。そして、制御部21は、現在の表示範囲を示すカメラワークデータと、移動方向と、予め設定された加速度及び最高速度に基づいて、送信間隔ごとのカメラワークデータを計算する。このとき、制御部21は、表示範囲が予め設定された加速度で加速し、移動速度が予め設定された最高速度に達すると、等速で移動するように計算を行う。ここで、制御部21は、マウスボタンを押し始めたときのマウスカーソルの座標とマウスカーソルの座標との距離が長いほど、最高速度を高くしたり加速度を大きくしたりしてもよい。なお、移動方向を指定する操作の例として、操作部25aに設けられたボタンをユーザが押すことにより、表示範囲を移動させる操作がある。また、例えば、画面に表示されたボタンをユーザがマウス等で選択することにより、表示範囲を移動させる操作がある。
表示範囲を拡大したり縮小させたりする操作の例として、例えば、操作部25aに設けられたボタンや画面に表示されたボタン等をユーザが押すことにより、表示範囲を拡大したり縮小させたりする操作がある。この操作の場合、表示範囲の単位時間あたり変動量が大きくなりながら表示範囲が拡大又は縮小する変動が行われ、その後、単位時間あたり変動量が一定となって、表示範囲が変動する。ユーザがボタンを押すことをやめる操作を行わない限り、表示範囲が変動し、表示範囲の大きさが最大又は最少となった時点で、変動は停止する。仮想スクリーンが長方形のスクリーンSC1である場合、表示範囲の拡大・縮小は、表示範囲R1の幅及び高さの変動である。仮想スクリーンが円筒形のスクリーンSC2である場合、表示範囲の拡大・縮小は、横視野角及び高さの変動である。仮想スクリーンが円筒形のスクリーンSC3である場合、表示範囲の拡大・縮小は、縦視野角及び横視野角の変動である。幅、高さ、横視野角、縦視野角を総称して、ズーム情報という。この操作の場合、制御部21は、拡大及び縮小の何れであるかをパラメータとして取得する。具体的に、制御部21は、操作されたボタン等に基づいて、表示範囲を拡大するか縮小させるかを判定する。制御部21は、現在の表示範囲を示すカメラワークデータと、予め設定された単位時間あたりの増加度、単位時間あたりの変動量の最大値に基づいて、送信時間間隔ごとのカメラワークデータを計算する。このとき、制御部21は、予め設定された単位時間あたりの増加度で、表示範囲の単位時間あたりの変動量が大きくなるようにカメラワークデータを計算する。単位時間あたりの変動量が最大値に達した後は、制御部21は、一定の変動量で表示範囲が変動するようにカメラワークデータを計算する。表示範囲の拡大・縮小においては、カメラワークデータを構成する情報のうち計算が必要な情報はズーム情報である。ズーム情報及び再生位置以外の情報は、現在の表示範囲を示すカメラワークデータからコピーされる。
なお、上述した操作は、あくまでも例示に過ぎない。未来における表示範囲が計算可能な操作であれば、如何なる操作であってもよい。
図3(A)乃至図3(C)は、送信クライアントが生成するカメラワークデータの一例である。図3(A)乃至図3(C)の例は、送信間隔が16.7ミリ秒である場合の例である。16.7ミリ秒は、60fpsに対応する。図3(A)は、仮想スクリーンが長方形のスクリーンSC1である場合の例を示す。図3(B)は、仮想スクリーンが円筒形のスクリーンSC2である場合の例を示す。図3(C)は、仮想スクリーンが球形のスクリーンSC3である場合の例を示す。
例えば、再生位置が0ミリ秒であるときに、ユーザが操作部25aを操作したとする。すると、送信クライアントは、操作部25aにより受け付けられた変更指示に基づいて、0ミリ秒、16ミリ秒、33ミリ秒、49ミリ秒等のそれぞれの再生位置に対応するカメラワークデータを生成する。そして、送信クライアントは、例えば、0ミリ秒、16ミリ秒及び33ミリ秒のそれぞれに対応するカメラワークデータを受信クライアントへ送信する。なお、一度に送信されるカメラワークデータの数は任意である。16ミリ秒が経過すると、送信クライアントは、16ミリ秒、33ミリ秒及び49ミリ秒のそれぞれに対応するカメラワークデータを受信クライアントへ送信する。更に16ミリ秒が経過すると、送信クライアントは、33ミリ秒、49ミリ秒及び65ミリ秒のそれぞれに対応するカメラワークデータを受信クライアントへ送信する。ユーザが操作部25aを更に操作した場合、送信クライアントは、生成したカメラワークデータを削除する。そして、送信クライアントは、操作部25aにより受け付けられた新たな変更指示に基づいて、カメラワークデータを生成する。
複数のカメラワークデータを受信した受信クライアントは、受信した複数のカメラワークデータを記憶する。その後更に、受信クライアントが複数のカメラワークデータを受信したとする。この場合、受信クライアントは、これまで記憶している古いカメラワークデータを新しいカメラワークデータで上書きする。これにより、受信クライアントは、撮影者としてのユーザによる最新の疑似カメラワークを反映させるようにしている。
このようにして、受信クライアントは、送信クライアントから未来の表示範囲としての予測値を示すカメラワークデータを受信する。そのため、その後、カメラワークデータの受信の遅延が発生したり、カメラワークデータの欠けが生じたとしても、既に受信してあるカメラワークデータに従って、表示範囲を決定することができる。受信クライアントは、表示範囲を推定したり補間したりしなくてもよい。例えば、再生位置が33ミリ秒であるときに、受信クライアントは、33ミリ秒、49ミリ秒及び65ミリ秒のそれぞれに対応するカメラワークデータを受信する。受信クライアントは、33ミリ秒に対応するカメラワークデータに従って、映像の表示範囲を決定する。再生位置が49ミリ秒であるときに、受信クライアントは、新たなカメラワークデータを受信することができなかったとする。しかしながら、受信クライアントは、既に受信してあるカメラワークデータのうち、49ミリ秒に対応するカメラワークデータに従って、映像の表示範囲を決定することができる。
なお、これまでは、送信クライアントがネットワークNWを介して受信クライアントへカメラワークデータを送信するものとして説明していた。しかしながら、例えば、スマートフォンや携帯電話機等を、疑似カメラワーク操作を行うためのリモコンとし、リモコンがカメラワークデータを生成してもよい。そして、リモコンが、カメラワークデータをPAN(Personal Area Network)を介してクライアント2へ送信してもよい。その理由は、このような態様であっても、カメラワークデータの遅延や欠けが生じる可能性があるからである。PANにおける通信には、例えば、BluetoothやIrDA等の通信手段が用いられてもよい。この態様の場合、リモコンが送信クライアントであり、リモコンからカメラワークデータを受信するクライアント2が受信クライアントである。送信クライアントとしてのリモコンは、リモコンの画面に動画データに基づく映像を表示する必要はない。
[3.各装置の構成]
[3−1.配信サーバ1の構成]
配信サーバ1は、図1に示すように、記憶装置11を備える。記憶装置11は、例えばハードディスクドライブ (HDD)により構成される。記憶装置11には、動画データ記憶領域11aが設けられている。動画データ記憶領域11aには、1つ以上の動画データが記憶される。動画データは、コンテンツIDに対応付けて記憶される。コンテンツIDは、コンテンツの識別情報である。動画データは複数の画像フレームにより構成されている。画像フレームは、静止画像の画像データである。各画像フレームは、動画データにおける画像フレームの再生位置と対応付けられている。各画像フレームは、例えば、複数の分割画像フレームに分割されている。各分割画像フレームには、分割番号が割り当てられている。例えば、画像フレームが縦10個及び横10個の計100個の分割画像フレームに分割されているとする。この場合、各分割画像フレームには、0〜100の何れかの分割番号が割り当てられる。分割番号により、仮想スクリーン上における分割画像フレームの表示位置の座標を特定することができる。なお、画像フレームあたりの分割画像フレームの数は任意である。
また、記憶装置11には、例えば、クライアント対応情報が記憶される。クライアント対応情報は、送信クライアントとしてのクライアント2と、受信クライアントとしてのクライアント2との対応関係を示す情報である。クライアント情報は、例えば、現在疑似カメラワーク操作が行われている送信クライアントごとに記憶される。クライアント対応情報は、例えば、カメラワークID、コンテンツID、送信クライアントのIPアドレス及びポート番号、受信クライアントのIPアドレス及びポート番号を含む。カメラワークIDは、クライアント対応情報の識別情報である。
配信サーバ1は、例えばクライアント2からのコンテンツの要求に応じて、コンテンツに対応する動画データをクライアント2へ送信する。動画データの送信は、例えばネットワークNWを介してストリーミング配信により行われる。この場合、配信サーバ1は、動画データ記憶領域11aに格納された動画データに基づき動画データブロックを送信する。動画データブロックには、1又は複数の画像フレームの分割画像フレームが含まれる。
[3−2.クライアント2の構成]
クライアント2は、図1に示すように、制御部21、記憶部22、ビデオRAM23、映像制御部24、操作処理部25、音声制御部26、インターフェース部27、及びバス28等を備えて構成される。これらの構成要素は、バス28に接続されている。映像制御部24には、ディスプレイを備える表示部24aが接続される。表示部24aは、本発明の表示手段の一例である。操作処理部25には、操作部25aが接続される。操作部25aは、本発明の受付手段の一例である。制御部21は、ユーザによる操作部25aからの操作指示を、操作処理部25を介して受け付ける。ユーザは、操作部25aを用いて、上述した疑似カメラワーク操作を行うことができる。音声制御部26には、スピーカ26aが接続される。インターフェース部27は、ネットワークNWに接続される。
制御部21は、コンピュータとしてのCPU、ROM、及びRAM等により構成される。制御部21は、タイマー機能を備える。制御部21は、本発明の生成手段、送信手段、取得手段、受信手段及び表示制御手段の一例である。記憶部22は、例えば、例えばハードディスクドライブ(HDD)により構成される。記憶部22には、OS(Operating System)、プレイヤーソフトウェア等が記憶されている。プレイヤーソフトウェアは、コンテンツを再生するためのプログラムである。また、プレイヤーソフトウェアは、ユーザが疑似カメラワーク操作を行うことにより、再生中のコンテンツの映像の表示範囲を変更するためのプログラムである。プレイヤーソフトウェアには、本発明のプログラムが含まれる。なお、プレイヤーソフトウェアは、例えば、ネットワークNWに接続された所定のサーバからダウンロードされるようにしてもよい。或いは、プレイヤーソフトウェアは、例えば、記録媒体に記録されて記録媒体のドライブを介して読み込まれるようにしてもよい。
制御部21は、プレイヤーソフトウェアを実行することでコンテンツを再生するプレイヤーとして機能する。制御部21はプレイヤーの機能により、配信サーバ1からストリーミング配信された動画データブロックを順次取得し、動画データブロックに基づいてコンテンツを再生させる。より具体的には、制御部21におけるRAMにはバッファメモリが設けられている。バッファメモリには、配信サーバ1からストリーミング配信された動画データブロックが一時的に保持される。制御部21は、バッファメモリから動画データを再生してビデオRAM23へ出力する。ビデオRAM23にはフレームバッファが設けられている。フレームバッファには再生された動画データの画像フレームが書き込まれる。映像制御部24は、制御部21からの制御信号に従って、フレームバッファに書き込まれた画像フレームを、表示部24aにおけるディスプレイの画面に描画することで表示させる。つまり、制御部21は、配信サーバ1から取得された動画データを構成する画像フレームに基づいて、動画を表示させる。
なお、送信クライアントがリモコンである場合、リモコンは、図3に示す構成と同様の構成を備えてもよい。リモコンがスマートフォン等の携帯機器である場合、リモコンは、表示部24a、操作部25a及びスピーカ26aを備える。
[4.通信システムSの動作]
次に、図4乃至図6等を参照して、通信システムSの動作について説明する。図4は、送信クライアントの制御部21におけるカメラワークデータ送信処理の例を示すフローチャートである。例えば、ユーザは、操作部25aを操作して、疑似カメラワーク操作の開始を指示する。これにより、制御部21は、カメラワークデータ送信処理を開始する。このとき、制御部21は、現在の再生位置を、例えば0に設定して、RAMに記憶させる。また、制御部21は、送信カメラワークデータリストを初期化する。送信カメラワークデータリストは、受信クライアントへ送信されるカメラワークデータのリストである。
図4に示すように、制御部21は、操作部25aからの操作指示に基づいて、ユーザが疑似カメラワーク操作の終了を指示したか否かを判定する(ステップS1)。このとき、制御部21は、ユーザが疑似カメラワーク操作の終了を指示していないと判定した場合には(ステップS1:NO)、ステップS2に進む。ステップS2において、制御部21は、疑似カメラワーク操作があったか否かを判定する。つまり、制御部21は、操作部25aから、操作指示として、表示範囲の変更指示が受け付けられたか否かを判定する。このとき、制御部21は、疑似カメラワーク操作があったと判定した場合には(ステップS2:YES)、ステップS3に進む。一方、制御部21は、疑似カメラワーク操作がなかったと判定した場合には(ステップS2:NO)、ステップS5に進む。
ステップS3において、制御部21は、送信カメラワークデータリストを空にする。つまり、制御部21は、送信カメラワークデータリストに保存されているカメラワークデータを全て削除する。
次いで、制御部21は、操作部25aにより受け付けられた変更指示に基づいて、現在の再生位置に対応する表示範囲を示すカメラワークデータと、未来の再生位置に対応する表示範囲の予測値を示すカメラワークデータとを生成する(ステップS4)。予測値を示すカメラワークデータを生成するとき、制御部21は、表示範囲を計算可能な再生位置の範囲内で、送信間隔が経過するごとのカメラワークデータを生成する。未来の再生位置に対応する表示範囲を示すカメラワークデータの計算方法については既に説明しているので、カメラワークデータの生成方法の詳細な説明を省略する。制御部21は、生成したカメラワークデータを送信カメラワークリストに保存する。次いで、制御部21は、ステップS5に進む。
ステップS5において、制御部21は、送信カメラワークデータリストから、現在の再生位置よりも小さい値の再生位置が設定されているカメラワークデータを削除する(ステップS5)。次いで、制御部21は、送信カメラワークリストから空であるか否かを判定する(ステップS6)。このとき、制御部21は、送信カメラワークリストから空であると判定した場合には(ステップS6:YES)、ステップS8に進む。一方、制御部21は、送信カメラワークリストが空ではないと判定した場合には(ステップS6:NO)、ステップS7に進む。
ステップS7において、制御部21は、送信カメラワークリストに保存されているカメラワークデータのうち、現在の再生位置に対応するカメラワークデータから、所定時間後の再生位置に対応するカメラワークデータまで、複数のカメラワークデータリストを取得する。そして、制御部21は、取得した複数のカメラワークデータリストを受信クライアントへ送信する。次いで、制御部21は、ステップS8に進む。送信クライアントがカメラワークデータリストを、配信サーバ1を経由して受信クライアントへ送信する場合、送信クライアントは、カメラワークデータリストを配信サーバ1へ送信する。配信サーバ1は、カメラワークデータリストのパケットのヘッダから、送信クライアントのIPアドレス及びポート番号取得する。配信サーバ1は、送信クライアントのIPアドレス及びポート番号で、クライアント対応情報を検索する。そして、配信サーバ1は、検索したクライアント対応情報に登録された受信クライアントのIPアドレス及びポート番号に基づいて、カメラワークデータを受信クライアントへ送信する。次いで、制御部21は、ステップS8に進む。
ステップS8において、制御部21は、現在の再生位置に送信間隔を加算する。そして、制御部21は、カメラワークデータ送信処理が開始されてから経過する時間が、現在の再生位置が示す時間になるまで待機する。つまり、制御部21は、カメラワークデータの次の送信タイミングになるまで待機する。次いで、制御部21は、ステップS1に進む。
ステップS1において、制御部21は、ユーザが疑似カメラワーク操作の終了を指示したと判定した場合には(ステップS1:YES)、カメラワークデータ送信処理を終了させる。
図5は、受信クライアントの制御部21の受信クライアントメイン処理の例を示すフローチャートである。受信クライアントがネットワークNWを介してカメラワークデータを受信する場合、制御部21は、例えば、配信サーバ1からクライアント対応情報をダウンロードする。そして、制御部21は、クライアント対応情報に基づいて、現在疑似カメラワーク操作が行われている他のクライアント2及びコンテンツの組み合わせの一覧をディスプレイに表示する。ユーザは、一覧の中から所望のクライアント2及びコンテンツの組み合わせを選択する。すると、制御部21は、受信クライアントメイン処理を開始する。受信クライアントが送信クライアントとしてのリモコンからカメラワークデータを受信する場合、制御部21は、コンテンツの一覧をディスプレイに表示する。ユーザは、一覧の中から所望のコンテンツを選択する。すると、制御部21は、受信クライアントメイン処理を開始する。
図5に示すように、制御部21は、要求用カメラワークデータリストを初期化する(ステップS21)。要求用カメラワークデータリストは、コンテンツを要求するために用いられるカメラワークデータのリストである。次いで、制御部21は、受信クライアントメイン処理と並行して、カメラワークデータ受信処理を開始させる(ステップS22)。
図6は、受信クライアントの制御部21のカメラワークデータ受信処理の例を示すフローチャートである。図6に示すように、制御部21は、カメラワークデータを受信するための初期化を行う(ステップS41)。受信クライアントがネットワークNWを介してカメラワークデータを受信する場合、例えば、制御部21は、ユーザにより選択されたクライアント2及びコンテンツの組み合わせに対応するクライアント対応情報から、カメラワークIDを取得する。そして、制御部21は、カメラワークIDを含む登録要求を配信サーバ1へ送信する。配信サーバ1は、登録要求のパケットのヘッダから、受信クライアントのIPアドレス及びポート番号を取得する。また、配信サーバ1は、登録要求に含まれるカメラワークIDで、クライアント対応情報を検索する。そして、配信サーバ1は、検索されたクライアント対応情報に、受信クライアントのIPアドレス及びポート番号を追加する。受信クライアントが送信クライアントから直接カメラワークデータを受信する場合、例えば、制御部21は、選択された組み合わせに対応するクライアント対応情報から、送信クライアントのIPアドレス及びポート番号を取得する。そして、制御部21は、取得したIPアドレス及びポート番号に基づいて、送信クライアントへ登録要求を送信する。送信クライアントは、受信した登録要求のパケットのヘッダに格納された受信クライアントのIPアドレス及びポート番号をRAMに保持する。その後送信クライアントは、保持したIPアドレス及びポート番号に基づいて、受信クライアントへカメラワークデータを送信することになる。受信クライアントが送信クライアントとしてのリモコンからカメラワークデータを受信する場合、例えば、制御部21は、BluetoothやIrDA等による送信クライアントとの接続を確立する。
次いで、制御部21は、受信カメラワークデータリストを初期化する(ステップS42)。受信カメラワークデータリストは、受信されたカメラワークデータのリストである。次いで、制御部21は、操作部25aからの操作指示に基づいて、ユーザがコンテンツの再生の終了を指示したか否かを判定する(ステップS43)。このとき、制御部21は、ユーザがコンテンツの再生の終了を指示していないと判定した場合には(ステップS43:NO)、ステップS44に進む。ステップS44において、制御部21は、送信クライアントからのカメラワークデータの受信があったか否かを判定する。このとき、制御部21は、送信クライアントからカメラワークデータを受信がなかったと判定した場合には(ステップS44:NO)、ステップS43に進む。一方、制御部21は、送信クライアントからのカメラワークデータの受信があった判定した場合には(ステップS44:YES)、ステップS45に進む。
ステップS45において、制御部21は、受信した複数のカメラワークデータのうち、最も小さい再生位置が設定されたカメラワークデータから、再生位置を、再生位置Pminとして取得する。次いで、制御部21は、受信カメラワークリストから、Pmin以上の再生位置が設定されたカメラワークデータを削除する(ステップS46)。次いで、制御部21は、受信した複数のカメラワークデータを、再生位置が小さい順に、受信カメラワークリストの末尾に追加する(ステップS47)。次いで、制御部21は、ステップS43に進む。ステップS43において、制御部21は、ユーザがコンテンツの再生の終了を指示したと判定した場合には(ステップS43:YES)、カメラワークデータ受信処理を終了させる。
図5のステップS22において、カメラワークデータ受信処理が開始されると、制御部21は、要求するコンテンツの再生位置pを0に設定する(ステップS23)。次いで、制御部21は、操作部25aからの操作指示に基づいて、ユーザがコンテンツの再生の終了を指示したか否かを判定する(ステップS24)。このとき、制御部21は、ユーザがコンテンツの再生の終了を指示していないと判定した場合には(ステップS24:NO)、ステップS25に進む。ステップS25において、制御部21は、受信カメラワークデータリストに、p以下の再生位置が設定されたカメラワークデータがあるか否かを判定する。このとき、制御部21は、p以下の再生位置が設定されたカメラワークデータがあると判定した場合には(ステップS25:YES)、ステップS26に進む。一方、制御部21は、p以下の再生位置が設定されたカメラワークデータがないと判定した場合には(ステップS25:NO)、ステップS27に進む。
ステップS26において、制御部21は、受信カメラワークデータリストに保存されているp以下の再生位置が設定されたカメラワークデータのうち、pに最も近い再生位置が設定されたカメラワークデータを、要求用カメラワークデータとして設定する。つまり、再生位置pが設定されたカメラワークデータがある場合、制御部21は、このカメラワークデータを要求用カメラワークデータとして設定する。つまり、制御部21は、現在の再生位置に対応するカメラワークデータを用いて動画データブロックを要求する。一方、再生位置pが設定されたカメラワークデータがない場合、古い再生位置に対応するカメラワークデータを用いて動画データブロックを要求する。その理由を説明する。例えば、送信クライアントにおいてユーザが疑似カメラワーク操作を行うと、或る程度の時間、表示範囲は変動し続けるが、その間ユーザが新たな疑似カメラワーク操作を行わないと、表示範囲の変動は止まる。この場合、送信クライアントは、ユーザが疑似カメラワーク操作を行ったときの再生位置から、表示範囲の変動が止まるまでの再生位置に対応するカメラワークデータを生成する。その後、ユーザが新たな疑似カメラワーク操作を行わないと、送信クライアントは、新たなカメラワークデータを生成しない。現在の再生位置が、表示範囲の変動が止まったときの再生位置まで進み、送信クライアントが、表示範囲の変動が止まったときの再生位置に対応するカメラワークデータを送信すると、送信カメラワークデータリストが空になる。そのため、この後、送信クライアントはカメラワークデータを送信しない。この場合、pに最も近い再生位置が設定されたカメラワークデータが、表示範囲の変動が止まったときの再生位置に対応するカメラワークデータである。つまり、pに最も近い再生位置が設定されたカメラワークデータが、現在の表示範囲を示すカメラワークデータである。また例えば、送信クライアントから送信されたカメラワークデータの受信クライアントへの到達が遅延したり、カメラワークデータが受信クライアントに到達しなかったりする場合がある。この場合、受信クライアントは、現在の表示範囲を示すカメラワークデータを取得することができない場合がある。そのため、受信クライアントは、極力新しい再生位置に対応するカメラワークデータを用いる。制御部21は、ステップS26を終えると、ステップS27に進む。
ステップS27において、制御部21は、要求カメラワークデータに基づいて、配信サーバ1に動画データブロックを要求する。具体的に、制御部21は、要求カメラワークデータに基づいて、仮想スクリーン上における表示範囲の座標、幅及び高さを取得する。仮想スクリーンが長方形のスクリーンSC1である場合、要求カメラワークデータに設定された座標、幅及び高さが、表示範囲R1のスクリーンSC1における座標、幅及び高さである。仮想スクリーンが円筒形のスクリーンSC2である場合、要求カメラワークデータに設定された高さが、表示範囲R2の高さである。制御部21は、要求カメラワークデータに設定された方位角及び横視野角に基づいて、スクリーンSC2上における表示範囲R2の座標及び幅を計算する。仮想スクリーンが球形のスクリーンSC3である場合、制御部21は、要求カメラワークデータに設定された方位角、仰俯角、横視野角及び縦視野角に基づいて、スクリーンSC3上における表示範囲R3の座標、幅及び高さを計算する。
制御部21は、表示範囲の座標、幅及び高さに基づいて、仮想スクリーン上で表示範囲の少なくとも一部と重なる分割画像フレームの分割番号を特定する。表示範囲が複数の分割画像フレームにまたがる場合、制御部21は、複数の分割画像フレームの分割番号を特定する。制御部21は、ユーザが選択したコンテンツのコンテンツIDと、要求カメラワークデータに設定されている再生位置と、特定した分割番号を含む要求リストを生成する。要求リストは、1つの画像フレームについて配信サーバ1に要求する分割画像フレームのリストである。制御部21は、要求する画像フレームごとに要求リストを生成する。例えば、送信間隔が動画データのフレーム間隔よりも長い場合、制御部21は、複数の要求リストを生成する。例えば、送信間隔がフレーム間隔の2倍である場合、制御部21は、31つの要求リストを生成する。複数の要求リストを生成する場合、再生位置を除いて、各要求リストの内容は同一である。再生位置は、フレーム間隔ごとにずれている。制御部21は、生成した要求リストを含むコンテンツ要求を配信サーバ1へ送信する。
配信サーバ1は、受信したコンテンツ要求から要求リストを取得する。配信サーバ1は、動画データ格納領域11aから、要求リストに設定されたコンテンツID、再生位置及び分割番号に対応する分割画像フレームを取得する。そして、配信サーバ1は、取得した分割画像フレームを順次受信クライアントへ送信する。制御部21は、配信サーバ1から順次送信されてくる分割画像フレームを受信する。これにより、制御部21は、動画データブロックを受信する。制御部21は、受信した動画データブロックをバッファメモリに保持する。
次いで、制御部21は、再生位置pに送信間隔を加算する(ステップS28)。次いで、制御部21は、再生に十分な動画データブロックがバッファメモリに蓄積されているか否かを判定する(ステップS29)。例えば、制御部21は、予め設定された数分の画像フレームに対応する分割画像データがバッファメモリに保持されている場合、再生に十分な動画データブロックが蓄積されていると判定する。制御部21は、再生に十分な動画データブロックがバッファメモリに蓄積されていないと判定した場合には(ステップS29:NO)、ステップS30に進む。一方、制御部21は、再生に十分な動画データブロックがバッファメモリに蓄積されていると判定した場合には(ステップS29:YES)、ステップS31に進む。ステップS30において、制御部21は、コンテンツが再生中の場合、コンテンツの再生を一時停止させる。次いで、制御部21は、ステップS24に進む。
ステップS31において、制御部21は、コンテンツが再生中ではない場合、コンテンツの再生を開始又は再開させる。コンテンツが再生中である場合、制御部21は、コンテンツの再生を継続させる。次いで、制御部21は、ステップS24に進む。コンテンツの再生処理は、例えば、受信クライアントメイン処理と並行して実行される。コンテンツの再生処理において、制御部21は、動画データの再生位置に対応したカメラワークデータを受信カメラワークデータリストから取得する。そして、制御部21は、カメラワークデータに基づいて、仮想スクリーン上における表示範囲の座標、幅及び高さを取得する。制御部21は、表示範囲の座標、幅及び高さに基づいて、再生位置に対応する画像フレームの分割画像データについて、表示部24aの画面における表示位置及び拡大率(又は縮小率)を決定する。そして、表示部24aは、決定した表示位置及び拡大率と、分割画像データとに基づいて、フレームバッファへの画像の書き込みを行う。これにより、制御部21は、カメラワークデータが示す表示範囲に従って、1つの画像フレームの映像を表示部24aに表示させる。制御部21は、このような処理を画像フレームごとに行う。
ステップS24において、制御部21は、ユーザがコンテンツの再生の終了を指示したと判定した場合には(ステップS24:YES)、カメラワークデータ受信処理を終了させる。
以上説明したように、本実施形態によれば、送信クライアントは、操作部25aにより変更指示が受け付けられたとき、変更指示に基づいて表示範囲の予測値を示すカメラワークデータを生成する。送信クライアントは、生成されたカメラワークデータを受信クライアントに送信する。そのため、受信クライアントが表示範囲を推定しなくても適切な表示範囲で映像を表示させることができる。
なお、操作部25aに対する操作により、表示範囲の傾き角度の変更が可能になっていてもよい。表示範囲の傾き角度は、視線を中心として表示範囲が回転した角度である。この場合、カメラワークデータの中に、表示範囲の傾き角度が含まれる。例えば、仮想スクリーンが長方形のスクリーンSC1である場合、表示範囲R1の底辺とX軸とがなす角度が傾き角度である。また、仮想スクリーンが円筒形のスクリーンSC2や球形のスクリーンSC3である場合に、操作部25aに対する操作により、視点位置の変更が可能になっていてもよい。例えば、仮想スクリーンが円筒形のスクリーンSC2である場合に、視点位置がZ軸方向に移動可能であってもよい。この場合、カメラワークデータの中に、視点位置のZ座標が含まれる。視点位置のX座標及びY座標はいずれも0である。また、例えば、視点位置が任意の方向に移動可能であってもよい。この場合、カメラワークデータの中に、視点位置のX座標、Y座標及びZ座標が含まれる。