以下、本発明の実施形態を図面に基づいて説明する。
[1.通信システムSの構成及び動作概要]
図1は、本実施形態の通信システムSの概要構成例を示す図である。図1に示すように、通信システムSは、配信サーバ1及び複数のクライアント2を含んで構成される。配信サーバ1は、本発明の情報処理装置の一例である。クライアント2は、本発明の端末装置の一例である。配信サーバ1とクライアント2とはネットワークNWを介して通信可能になっている。ネットワークNWは、例えば、インターネット、携帯通信網、及びゲートウェイ等により構成される。
配信サーバ1は、例えばクライアント2からの要求に応じて、コンテンツをクライアント2へ送信する。配信サーバ1は、複数の異なるコンテンツを同時に別々の1又は複数のクライアント2へ送信することが可能であってもよい。コンテンツは、動画データを含む。動画データは、動画を表すデータである。また、コンテンツは、音声データを含んでいてもよい。コンテンツの送信は、例えばネットワークNWを介してストリーミングを用いて行われる。配信サーバ1は、所定のビデオカメラによる撮影中に、ビデオカメラから送信されてくるコンテンツをリアルタイムで配信するライブ配信を実行してもよい。或いは、配信サーバ1は、コンテンツを予め記憶し、記憶しておいたコンテンツを、予め定められた時間帯に複数のクライアント2へ同時に配信してもよい。
ビデオカメラで撮影された動画を例として、ビデオカメラの撮影範囲全領域を示す動画が仮想的なスクリーンに表示されたと仮定した場合、この動画を表示するスクリーンを全画面という。全画面の形状は例えば矩形であってもよい。全画面は、本発明の仮想の映像面の一例である。配信サーバ1は、全画面のうち、クライアント2のユーザによる操作部25aの操作に基づいて指定された表示範囲に基づいて決定される範囲の動画部分を抽出する。具体的には、配信サーバ1は、動画データから、決定された範囲に対応するデータをデコードする。これにより、全画面の動画の一部が抽出される。決定される範囲をデコード範囲という。デコード範囲は、本発明の抽出範囲の一例である。表示範囲及びデコード範囲の形状は、例えば矩形であってもよい。配信サーバ1は、デコードにより生成された動画データをクライアント2へ送信する。デコード範囲の決定方法については後述する。
クライアント2は、配信サーバ1から配信されてくるコンテンツを受信する。クライアント2は、受信したコンテンツを再生することにより、動画としての映像を、表示部24aの画面に表示させる。コンテンツの再生中、クライアント2は、操作部25aを用いたユーザによる疑似的なカメラワーク操作を受け付ける。カメラワークとは、撮影者がカメラを動かすことで、カメラの被写体に対する位置、カメラの被写体に対する角度、及び被写体のサイズを決める動作をいう。本実施形態では、全画面を示す動画データを構成する複数の画像フレームにおける表示対象に対するカメラワークをユーザがあたかも実際のカメラを動かすように操作部25aを操作して疑似的に行う。このような操作を、表示範囲の変更操作という。この操作により、ユーザは、全画面の中で所望の表示範囲を指定可能なように、表示範囲を変更することができる。ユーザは、表示範囲の変更操作により、全画面に対する表示範囲の位置座標を、画像フレームごとに異なるように指定することができる。また、ユーザは、表示範囲の変更操作により、全画面に対する表示範囲のサイズを拡大または縮小することができる。これにより、表示範囲内の画像を拡大または縮小することできる。なお、画像を拡大及び縮小する操作はできないようになっていてもよい。この場合、全画面に対する表示範囲の縦及び横の長さは固定である。クライアント2は、ユーザにより指定された表示範囲を示すカメラワークデータを配信サーバ1へ送信する。カメラワークデータは、例えば、コンテンツID、ユーザ識別子、全画面における表示範囲の横及び縦の位置を示す座標、拡大率を含む。拡大率は、表示範囲内の画像の表示倍率を示す。コンテンツIDは、ユーザが視聴するコンテンツを識別する識別情報である。ユーザ識別子は、ユーザを識別する識別情報である。カメラワークデータは、更に現在時刻を含んでもよい。クライアント2は、配信サーバ1から送信されてきた動画データを受信する。クライアント2は、受信された動画データに基づいて、全画面のうち、ユーザが指定した表示範囲に応じたデコード範囲内の動画を表示部24aに表示させる。クライアント2は、例えば、パーソナルコンピュータ、スマートフォン、携帯電話、テレビ、テレビゲーム機等であってもよい。
[2.各装置の構成]
次に、図1及び図3を参照して、本実施形態の通信システムSに含まれる各装置の構成について説明する。配信サーバ1は、図1に示すように、制御部11、記憶部12、及びインターフェース部13等を備えて構成される。これらの構成要素は、バス14に接続されている。インターフェース部13は、ネットワークNWに接続される。制御部11は、コンピュータとしてのCPU(Central Processing Unit)、ROM(Read Only Memory)、及びRAM(Random Access Memory)等により構成される。記憶部12は、例えばハードディスクドライブにより構成される。記憶部12には、OS、及びサーバプログラム等が記憶されている。サーバプログラムは、コンテンツの配信処理等をCPUに実行させるプログラムである。
また、記憶部12には、サーバ最大視点数、ユーザ数管理テーブル、全ユーザ数が記憶される。サーバ最大視点数は、制御部11が実行可能な動画のデコードの総数である。サーバ最大視点数は、例えば制御部11の処理能力に応じた数である。サーバ最大視点数は、例えば通信システムSの管理者により予め設定される。サーバ最大視点数は、制御部11の処理能力として制御部11が実行可能な動画のデコードの総数よりも小さい数であってもよい。ユーザ数管理テーブルは、現在配信中の1又は複数のコンテンツのそれぞれを現在視聴中のユーザの数を示す。具体的には、ユーザ数管理テーブルには、配信中のコンテンツごとに、コンテンツID及びユーザ数が対応付けて記憶される。コンテンツIDは、コンテンツを識別する識別情報である。全ユーザ数は、現在配信中の1又は複数のコンテンツを現在視聴中のユーザの数の合計である。
また、記憶部12には、現在配信中のコンテンツごとに、コンテンツIDに対応付けて、ユーザリスト及びデコード視点リストが記憶される。ユーザリストには、コンテンツを視聴中のユーザが指定した視聴範囲に関する情報が記憶される。図3(A)に示すように、ユーザリストには、コンテンツを視聴中のユーザごとに、ユーザ識別子、会員属性、ユーザ視点情報、デコード視点識別子及び距離が記憶される。ユーザ識別子は、ユーザを識別する識別情報である。会員属性は、通信システムSを利用するユーザの会員としての属性を示す。会員属性として、「0」又は「1」が設定される。会員属性「1」のユーザは、会員属性「0」のユーザよりも優先度が高いユーザである。例えば、会員属性「0」のユーザは無料で通信システムSを利用するユーザであり、会員属性「1」のユーザは有料で通信システムSを利用するユーザであってもよい。なお、優先度は3段階以上あってもよい。ユーザ視点情報は、ユーザが指定した表示範囲を示す情報である。ユーザ視点情報は、x座標、y座標、及びz座標を含む。x座標は、表示範囲の中心点の全画面における横方向の位置を示す。y座標は、表示範囲の中心点の全画面における縦方向の位置を示す。z座標は、ユーザが指定した動画の拡大率を示す。例えば、z座標には、拡大率の1000倍が設定されてもよい。全画面において、ユーザ視点情報に含まれるx座標及びy座標の組み合わせが示す表示範囲の中心点を、ユーザ視点という。或いは、仮想上の三次元空間にいて、ユーザ視点情報に含まれるx座標、y座標及びz座標の組み合わせが示す点が、ユーザ視点と称されてもよい。本実施形態においては、表示範囲という用語と、ユーザ視点という用語が使用される。全画面において表示範囲が占める領域を重視する場合、表示範囲という用語を用い、全画面又は仮想上の三次元空間における表示範囲の位置を重視する場合、ユーザ視点という用語を用いる。デコード視点識別子は、ユーザ視点に対して割り当てられたデコード視点を識別する識別情報である。距離は、ユーザ視点からデコード視点までの長さである。
制御部11は、クライアント2から受信したカメラワークデータに基づいて、ユーザ視点情報を更新する。例えば、制御部11は、受信したカメラワークデータに含まれる座標x、座標y、及び拡大率に基づいて、ユーザ視点情報を生成する。カメラワークデータに含まれるユーザ識別子がユーザリストに記憶されていない場合、制御部11は、ユーザ識別子及び生成したユーザ視点情報をユーザリストに追加する。カメラワークデータに含まれるユーザ識別子がユーザリストに記憶されている場合、制御部11は、ユーザリストにおいて、ユーザ識別子に対応するユーザ視点情報を、生成したユーザ視点情報で書き換える。クライアント2から、ユーザの操作に基づいてコンテンツの再生を終了することを示すメッセージを受信した場合、制御部11は、ユーザリストから、メッセージに含まれるユーザ識別子に対応するユーザ視点情報を削除する。
デコード視点リストには、コンテンツに対して決定されたデコード範囲に関する情報が記憶される。本実施形態においては、1つのコンテンツを視聴する複数のユーザが1又は複数のクラスタに分けられる。デコード範囲はクラスタごとに決定される。図3(B)に示すように、デコード視点リストには、デコード範囲ごとに、デコード視点識別子、デコード視点情報、ユーザ識別子リスト、及びユーザ数が記憶される。デコード視点識別子は、デコード範囲を識別する識別情報である。デコード視点情報は、デコード範囲を示す情報である。デコード視点情報は、x座標、y座標、及びz座標を含む。x座標は、デコード範囲の中心点の全画面における横方向の位置を示す。y座標は、デコード範囲の中心点の全画面における縦方向の位置を示す。z座標は、動画の拡大率を示す。例えば、z座標には、拡大率の1000倍が設定されてもよい。全画面において、デコード視点情報に含まれるx座標及びy座標の組み合わせが示すデコード範囲の中心点を、デコード視点という。或いは、仮想上の三次元空間にいて、デコード視点情報に含まれるx座標、y座標及びz座標の組み合わせが示す点が、デコード視点と称されてもよい。本実施形態においては、デコード範囲という用語と、デコード視点という用語が使用される。全画面においてデコード範囲が占める領域を重視する場合、デコード範囲という用語を用い、全画面又は仮想上の三次元空間におけるデコード範囲の位置を重視する場合、デコード視点という用語を用いる。ユーザ識別子リストは、デコード視点に対応するクラスタに含まれるユーザのユーザ識別子のリストである。ユーザ数は、デコード視点に対応するクラスタに含まれるユーザの数を示す。
次に、クライアント2は、図1に示すように、制御部21、記憶部22、ビデオRAM23、映像制御部24、操作処理部25、音声制御部26、及びインターフェース部27等を備えて構成される。これらの構成要素は、バス28に接続されている。映像制御部24には、ディスプレイを備える表示部24aが接続される。制御部21は、コンピュータとしてのCPU、ROM、及びRAM等により構成される。操作処理部25には、操作部25aが接続される。操作部25aには、例えば、マウス、キーボード、リモコン等がある。表示部24aと操作部25aとを兼ねるタッチパネルが適用されてもよい。制御部21は、ユーザによる操作部25aからの操作指示を、操作処理部25を介して受け付ける。音声制御部26には、スピーカ26aが接続される。インターフェース部27は、ネットワークNWに接続される。記憶部22は、例えば、ハードディスクドライブ又はフラッシュメモリ等により構成される。記憶部22には、OS、及びプレイヤーソフトウェア等が記憶されている。プレイヤーソフトウェアは、コンテンツの受信及び再生処理等をCPUに実行させるプログラムである。
[3.ユーザが指定した表示範囲に基づくデコード範囲の決定]
次に、図2乃至図5を用いて、コンテンツを視聴中のユーザが指定した表示範囲に基づくデコード範囲の決定方法について説明する。配信サーバ1が実行可能な動画のデコードの総数は、サーバ最大視点数として予め決められている。コンテンツを視聴中のユーザの総数がサーバ最大視点数以下である場合、配信サーバ1は、各ユーザが指定した表示範囲をデコードすることができる。しかしながら、コンテンツを視聴中のユーザの総数がサーバ最大視点数を超える場合、配信サーバ1は、サーバ最大視点数を超える人数のユーザが指定した表示範囲をデコードすることができない。そこで、配信サーバ1は、視聴中のユーザを、サーバ最大視点数以下のクラスタに分ける。配信サーバ1は、クラスタごとにデコード範囲を決定する。そして、配信サーバ1は、クラスタごとにデコード範囲からデコードを実行する。配信サーバ1は、デコードされた動画部分の動画データを、クラスタを構成するユーザが利用するクライアント2へ送信する。
サーバ最大視点数は、現在配信中の全コンテンツに対応する数である。従って、配信サーバ1は、現在配信中のコンテンツごとに、デコード可能なデコード範囲の数の上限を取得する。この上限を、コンテンツ最大視点数という。コンテンツ最大視点数は、本発明の動画の一部が抽出される抽出範囲の数の上限の一例である。或る注目するコンテンツのコンテンツ最大視点数pは、以下の式1で計算されてもよい。
p=a*u/all ・・・(式1)
式1において、aは、サーバ最大視点数であり、uは、注目するコンテンツを視聴中のユーザの数であり、allは、全ユーザ数である。実際のコンテンツ最大視点数は、式1で計算されるpの値よりも小さくてもよい。注目するコンテンツを視聴中のユーザの数及び全ユーザ数は常に変化し得る。そのため、配信サーバ1は、注目するコンテンツについてデコードを実行しようとするごとに、コンテンツ最大視点数を計算する。
配信サーバ1は、注目するコンテンツに対応するユーザリストから、各ユーザのユーザ視点情報を、注目するコンテンツを視聴しようとするユーザが指定した表示範囲を示す情報として取得する。配信サーバ1は、デコードを実行しようとするごとに、ユーザ視点情報を取得してもよい。
配信サーバ1は、取得した視点情報が示す表示範囲に基づいて、注目するコンテンツを視聴しようとする複数のユーザを、コンテンツ最大視点数以下の数分のクラスタに分ける。配信サーバ1は、ユーザ視点間の距離が比較的短いユーザ同士を同じクラスタに入れてもよい。このとき、配信サーバ1は、互いに同一の表示範囲を指定する2以上のユーザを同一のクラスタに入れてもよい。本実施形態において、配信サーバ1は、ユーザ視点のx〜z座標に基づいて、クラスタリングを行う。すなわち、配信サーバ1は、拡大率を考慮してクラスタリングを実行する。しかしながら、配信サーバ1は、x座標及びy座標のみに基づいてクラスタリングを行ってもよい。注目するコンテンツを視聴しようとするユーザの数がコンテンツ最大視点数以下である場合、配信サーバ1は、互いに異なる表示範囲を指定するユーザを同一のクラスタに入れない。従って、1つのクラスタは、1人のユーザのみで構成されるか、又は同一の表示範囲を構成する2以上のユーザのみで構成される。一方、注目するコンテンツを視聴しようとするユーザの数がコンテンツ最大視点数よりも多い場合、少なくとも1つのクラスタが、互いに異なる表示範囲を指定する2人以上のユーザを含む場合がある。
配信サーバ1は、互いに同一の表示範囲を指定する2以上のユーザを別々のクラスタに入れてもよい。この場合、クラスタの数は増加する。しかしながら、クラスタの総数がコンテンツ最大視点数以下となる限りにおいては、クラスタの総数は増加してもよい。
配信サーバ1は、分けられたクラスタのうち、1人のユーザのみで構成されるクラスタに対して、そのユーザにより指定された表示範囲を、デコード範囲として特定する。また、配信サーバ1は、互いに同一の表示範囲を指定する2以上のユーザのみで構成されるクラスタに対して、これらのユーザにより指定された表示範囲を、デコード範囲として特定する。一方、配信サーバ1は、互いに異なる表示範囲を指定する2人以上ユーザを含むクラスタに対して、これらのユーザにより指定された表示範囲に基づくデコード範囲を特定する。配信サーバ1は、クラスタごとに、全画面のうち、特定されたデコード範囲の動画部分のデコードを実行する。配信サーバ1は、クラスタごとに、デコードにより生成された動画データを、そのクラスタを構成するユーザが利用するクライアント2へ送信する。1人のユーザのみで構成されるクラスタ、及び互いに同一の表示範囲を指定する2以上のユーザのみで構成されるクラスタについて、これらのユーザは、ユーザが希望する表示範囲で動画を視聴することができる。互いに異なる表示範囲を指定する2人以上のユーザを少なくとも含むクラスタについて、これらのユーザが指定した表示範囲に基づいてデコード範囲が特定される。そのため、これらのユーザは、ユーザの希望に極力添ったデコード範囲で、動画を視聴することができる。そのため、ユーザ数がコンテンツ最大視点数を超えても、全てのユーザは、希望する表示範囲又は希望に極力沿ったデコード範囲で動画を視聴することができる。
図2(A)は、全画面において、クラスタリングされたユーザのユーザ視点と、決定されたデコード視点との関係の一例を示す。図2(A)は、便宜上、ユーザ視点のx座標及びy座標のみを用いてクラスタリングが実行された場合の例を示す。図2(A)において、ユーザ視点とデコード視点とを結ぶ線は、ユーザ視点に対応するユーザが、デコード視点に対応するクラスタに入れられたことを示す。また、図2(A)の例では、各ユーザは、複数のデコード視点のうちユーザ視点と最も近いデコード視点に対応するクラスタに入れられている。
図2(B)は、コンテンツ再生中のクライアント2の表示部24aに表示される画面の一例を示す。図2(B)に示すように、表示部24aには、メインスクリーン110及びサブスクリーン120が表示される。メインスクリーン110は、全画面の動画うちデコード範囲の動画部分が表示される画面である。サブスクリーン120は、全画面の動画が表示される画面である。サブスクリーン120はメインスクリーン110よりも小さい。サブスクリーン120に表示される動画の解像度は、メインスクリーン110に表示される動画の解像度より低くてもよい。サブスクリーン120には、表示範囲枠130及びデコード範囲枠140のうち少なくとも表示範囲枠130が表示される。表示範囲枠130は、全画面のうちユーザが指定した表示範囲を示す枠である。デコード範囲枠140は、全画面のうちデコード範囲を示す枠である。ユーザが指定した表示範囲とデコード範囲とが異なる場合にのみ、デコード範囲枠140が表示される。ユーザはサブスクリーン120を見ることにより、ユーザが指定した表示範囲でメインスクリーン110に動画が表示されているか否かを確認することができる。
本実施形態のクラスタリング及びデコード範囲の決定方法をより具体的に説明する。配信サーバ1は、コンテンツ最大視点数分のデコード範囲を初期設定する。例えば、配信サーバ1は、デコード視点のx座標及びy座標をランダムに決定し、デコード視点のz座標を1000に決定してもよい。或いは、配信サーバ1は、注目するコンテンツを視聴しようとするユーザの何れかのユーザ視点と同一のデコード視点を決定してもよい。
配信サーバ1は、ユーザごとに、ユーザ視点と複数のデコード視点それぞれとの距離を計算する。そして、配信サーバ1は、複数のデコード視点のうち、ユーザ視点との距離が最も近いデコード視点に対応するクラスタに、そのユーザ視点に対応するユーザを入れる。
各ユーザがどのクラスタに所属するかが決定されると、配信サーバ1は、デコード視点を移動させる。具体的には、配信サーバ1は、クラスタごとに、そのクラスタを構成するユーザのユーザ視点の重心を計算する。そして、配信サーバ1は、計算した重心の座標で、デコード視点の座標を更新する。本実施形態では、各ユーザが所属するクラスタの決定と、デコード視点の移動とを含めた処理を、クラスタリングと称する。
配信サーバ1は、このようなクラスタリングを、全てのデコード視点の位置が更新前の位置から変化しなくなるまで繰り返す。最終的な各クラスタに所属するユーザのユーザ視点の位置から、そのクラスタに対応するデコード視点までの距離が、他のクラスタに対応するデコード視点の位置までの距離よりも近くなる。また、ユーザ視点の重心が、デコード範囲に決定される。その結果、最終的に1人のユーザのみで構成されるクラスタに対して、そのユーザが指定した表示範囲がデコード範囲に決定される。また、最終的に、互いに同一の表示範囲を指定する2人以上のユーザのみで構成されるクラスタに対して、これらのユーザが指定した表示範囲がデコード範囲に決定される。また、最終的に、互いに異なる表示範囲を指定する2人以上のユーザを少なくとも含むクラスタに対して、これらのユーザの希望に極力沿ったデコード範囲が決定される。
コンテンツ最大視点数は常に変化する可能性がある。コンテンツ最大視点数が増加した場合、配信サーバ1は、これに応じてクラスタ及びデコード視点を追加することができる。このとき、配信サーバ1は、ユーザ視点とユーザが所属するクラスタに対応するデコード視点との距離が遠いユーザから順に、追加されるクラスタに入れて、1人のユーザのみで構成されるクラスタを作成してもよい。そして、配信サーバ1は、そのユーザのユーザ視点をデコード視点に決定してもよい。これにより、配信サーバ1は、ユーザが望む表示範囲とデコード範囲との隔たりが大きいユーザの数を削減することができる。或いは、配信サーバ1は、所属するユーザの数が最も多いクラスタから、何れかのユーザを外し、そのユーザを、追加されるクラスタに入れ替えてもよい。これにより、配信サーバ1は、クラスタ間におけるユーザ数のばらつきが小さくなるようにしてもよい。
コンテンツ最大視点数が減少した場合、配信サーバ1は、これに応じてクラスタ及びデコード視点を削除する必要がある。この場合、配信サーバ1は、全デコード視点のそれぞれについて、各ユーザ視点からの距離の和を計算してもよい。配信サーバ1は、全デコード視点のうち、計算した距離の和が大きいデコード視点に対応するクラスタから順に、クラスタを削除してもよい。すなわち、配信サーバ1は、全体としてユーザ視点から遠いデコード視点を削除する。これにより、配信サーバ1は、ユーザが望む表示範囲とデコード範囲との隔たりが大きくなることを極力抑止しながら、デコード視点を削除することができる。或いは、配信サーバ1は、所属するユーザの数が最も少ないクラスタから順にクラスタを削除してもよい。これにより、配信サーバ1は、クラスタ間におけるユーザ数のばらつきが小さくなるようにしてもよい。
配信サーバ1は、クラスタリングを行う際、各ユーザの会員属性をユーザリストから取得してもよい。そして、配信サーバ1は、ユーザの会員属性が示す優先度が高いほど、ユーザが、そのユーザ1人のみで最終的に構成されるクラスタに優先的に入れられるように、クラスタリングを行ってもよい。これにより、配信サーバ1は、優先度が高いユーザが希望する表示範囲をデコード範囲として決定することができる。例えば、コンテンツ最大視点数が増加した場合、配信サーバ1は、互いに異なる表示範囲を指定する2人以上のユーザを少なくとも含むクラスタに所属するユーザの中から、優先度が高いユーザを優先的に、新しいクラスタに入れて、そのユーザ1人のみで構成されるクラスタを作成してもよい。
次に、図3乃至図5に示されるユーザリスト及びデコード視点リストを参照して、クラスタリングの具体例について説明する。図3(A)は、コンテンツ配信開始時におけるユーザリストの一例を示す図である。図3(B)は、コンテンツ配信開始時におけるデコード視点リストの一例を示す図である。コンテンツ配信開始時、コンテンツ最大視点数が5であり、ユーザ数は10であるとする。コンテンツ配信開始時、例えば全ユーザのユーザ視点は同一である。そのため、配信サーバ1は、図3(A)に示すように、ユーザリストに、10人分のユーザ視点情報として同一のユーザ視点情報を格納する。また、全ユーザのユーザ視点は同一であるので、配信サーバ1は、図3(B)に示すように、デコード視点リストに、全ユーザのユーザ視点情報と同一の1つのデコード視点情報を初期的に格納する。
図3(C)は、前回のデコード時からコンテンツ最大視点数が変化しない場合のクラスタリング前のユーザリストの一例を示す図である。図3(D)は、前回のデコード時からコンテンツ最大視点数が変化しない場合のクラスタリング前のデコード視点リストの一例を示す図である。コンテンツ配信開始から、前回のデコード時までに、ユーザ識別子「2」、「4」、「6」及び「10」のユーザが表示範囲を変更している。図3(D)に示すデコード視点リストには、前回のデコード時に決定されたデコード視点情報が格納されている。図3(D)に示すように、配信サーバ1はこれまでに、表示範囲を変更している4人のユーザのユーザ視点情報と同一の4個のデコード視点情報をデコード視点リストに追加している。図3(C)に示すように、今回のデコード時、更にユーザ識別子「1」及び「3」のユーザが表示範囲を変更した。配信サーバ1は、クラスタリングを実行する。
図3(E)は、前回のデコード時からコンテンツ最大視点数が変化しない場合のクラスタリング後のユーザリストの一例を示す図である。図3(F)は、前回のデコード時からコンテンツ最大視点数が変化しない場合のクラスタリング後のデコード視点リストの一例を示す図である。図3(F)に示すように、クラスタリングの結果、デコード視点リストにおいて、デコード視点識別子「1」のユーザ識別子リストには、ユーザ識別子「1」、「3」、「5」、「7」、「8」及び「10」が格納されている。図3(C)に示すように、ユーザ識別子「5」、「7」、「8」及び「10」のユーザ視点情報は同一である。一方、ユーザ識別子「1」のユーザ視点情報及びユーザ識別子「3」のユーザ視点情報は、ユーザ識別子「5」、「7」、「8」及び「10」のユーザ視点情報と異なる。従って、図3(F)に示すように、デコード視点リストにおいて、デコード視点識別子「1」のデコード視点の座標は、ユーザ識別子「1」、「3」、「5」、「7」、「8」及び「10」のユーザ視点の座標の重心である。
図4(A)は、前回のデコード時からコンテンツ最大視点数が増加した場合のクラスタリング前のユーザリストの一例を示す図である。図4(B)は、前回のデコード時からコンテンツ最大視点数が増加した場合のクラスタリング前のデコード視点リストの一例を示す図である。今回のデコード時、コンテンツ最大視点数が5から6に増加した。また、図4(A)に示すように、ユーザ識別子「5」のユーザが表示範囲を変更した。
図4(C)は、前回のデコード時からコンテンツ最大視点数が増加した場合の1回目のクラスタリング終了後のユーザリストの一例を示す図である。図4(D)は、前回のデコード時からコンテンツ最大視点数が増加した場合の1回目のクラスタリング終了後のデコード視点リストの一例を示す図である。配信サーバ1は、デコード視点識別子「1」〜「5」のデコード視点に基づいて、ユーザ識別子「1」〜「10」のユーザを5個のクラスタに分けて、デコード視点を移動させる。その結果、図4(D)に示すように、ユーザ識別子「1」、「3」、「5」、「7」、「8」及び「10」のユーザは、デコード視点識別子「1」に対応するクラスタに分けられた。図4(C)に示すように、ユーザ識別子「1」〜「10」のユーザのうち、ユーザ視点とユーザが所属するクラスタに対応するデコード視点との距離が最も遠いユーザは、ユーザ識別子「5」のユーザである。そこで、配信サーバ1は、図4(D)に示すように、デコード視点識別子「6」に対応付けて、ユーザ識別子「5」のユーザのユーザ視点情報と同一のデコード視点情報を、デコード視点リストに追加する。なお、図4(C)に示すように、ユーザ識別子「1」〜「10」のユーザのうち、ユーザ識別子「1」のユーザの会員属性は「1」であり、他のユーザの会員属性は「0」である。そのため、配信サーバ1は、デコード視点識別子「6」に対応付けて、ユーザ識別子「1」のユーザのユーザ視点情報と同一のデコード視点情報を、デコード視点リストに追加してもよい。
図4(E)は、前回のデコード時からコンテンツ最大視点数が増加した場合の全クラスタリング終了後のユーザリストの一例を示す図である。図4(F)は、前回のデコード時からコンテンツ最大視点数が増加した場合の全クラスタリング終了後のデコード視点リストの一例を示す図である。配信サーバ1は、デコード視点識別子「1」〜「6」のデコード視点の位置が変化しなくなるまでクラスタリングを繰り返す。その結果、図4(E)及び図4(F)に示すように、デコード視点識別子「6」に対応するクラスタには、ユーザ識別子「5」のユーザのみが所属することとなった。
図5(A)は、前回のデコード時からコンテンツ最大視点数が減少した場合のクラスタリング前のユーザリストの一例を示す図である。図5(B)は、前回のデコード時からコンテンツ最大視点数が減少した場合のクラスタリング前のデコード視点リストの一例を示す図である。今回のデコード時、コンテンツ最大視点数が6から5に減少した。また、図5(A)に示すように、ユーザ識別子「4」のユーザが表示範囲を変更した。
図5(C)は、前回のデコード時からコンテンツ最大視点数が減少した場合の1回目のクラスタリング終了後のユーザリストの一例を示す図である。図5(D)は、前回のデコード時からコンテンツ最大視点数が減少した場合の1回目のクラスタリング終了後のデコード視点リストの一例を示す図である。配信サーバ1は、デコード視点識別子「1」〜「6」のデコード視点に基づいて、ユーザ識別子「1」〜「10」のユーザを6個のクラスタに分けて、デコード視点を移動させる。なお、図5(C)の例では、デコード視点識別子「3」に対応するクラスタには何れのユーザも所属していない。
図5(E)は、削除するクラスタを決定するためのユーザ視点とデコード視点との距離の和の計算結果の例を示す図である。図5(E)に示すように、配信サーバ1は、デコード視点識別子「1」〜「6」のそれぞれについて、各ユーザ視点との距離を計算する。また、配信サーバ1は、デコード視点識別子「1」〜「6」のそれぞれについて、ユーザ識別子「1」〜「10」について計算した距離の和を計算する。その結果、デコード視点識別子「1」〜「6」のうち、デコード視点識別子「3」について計算された距離の和が最も大きい。
図5(F)は、前回のデコード時からコンテンツ最大視点数が減少した場合の全クラスタリング終了後のユーザリストの一例を示す図である。図5(G)は、前回のデコード時からコンテンツ最大視点数が減少した場合の全クラスタリング終了後のデコード視点リストの一例を示す図である。図5(G)に示すように、配信サーバ1は、デコード視点リストから、デコード視点識別子「3」に対応するデコード視点情報を削除する。そして、配信サーバ1は、デコード視点識別子「1」、「2」、「4」〜「6」のデコード視点の位置が変化しなくなるまでクラスタリングを繰り返す。
[4.変形例]
上述したデコード範囲の決定において、配信サーバ1は、クラスタに所属するユーザのユーザ視点のx〜z座標の重心がデコード視点のx〜z座標に決定されていた。従って、全画面に対するデコード範囲のサイズは、クラスタに所属する複数のユーザが指定した表示範囲のサイズの平均値であった。しかしながら、配信サーバ1は、クラスタに所属する複数のユーザが指定した表示範囲を全部含むように、デコード範囲のサイズを決定してもよい。この場合、クライアント2の表示部24aには、ユーザが希望する大きさよりも小さく動画が表示されるものの、各ユーザは、少なくとも希望する表示範囲の動画を視聴することができる。図6(A)は、ユーザが指定した表示範囲とデコード範囲との関係を示す図である。図6(A)に示すように、クラスタに3人のユーザが属し、これらのユーザが表示範囲UA1〜UA3を指定した。デコード視点Dの位置はユーザ視点の重心である。表示範囲UA1〜UA3のサイズの平均値を、デコード範囲のサイズとした場合のデコード範囲は、DA1である。デコード範囲DA1は、表示範囲UA1〜UA3と重なる領域が比較的小さい。一方、デコード視点Dを中心として、表示範囲UA1〜UA3の全てを含むように決定されたデコード範囲DA2は、表示範囲UA1〜UA3のそれぞれの全体と重なる。
上述したクラスタリングにおいて、配信サーバ1は、デコード最大視点数分のデコード視点を初期設定した後、デコード視点の位置が変化しなくなるまで、デコード視点の移動を伴うクラスタリングを繰り返していた。しかしながら、配信サーバ1は、全画面内に、デコード最大視点数分のクラスタ位置を決定してもよい。クラスタ位置は、クラスタの基準となる位置である。クラスタ位置はデコード視点の位置と同一であってもよいし、デコード視点の位置と異なってもよい。例えば、配信サーバ1は、ランダムにデコード視点を決定してもよい。配信サーバ1は、クラスタ位置とユーザ視点の位置との位置関係に基づいてユーザを複数のクラスタに分ける。例えば、配信サーバ1は、複数のクラスタ位置のうち、ユーザ視点との距離が最も近いクラスタ位置に対応するクラスタに、そのユーザ視点に対応するユーザを入れる。その後、配信サーバ1は、クラスタ位置を変更しない。この方法の場合、配信サーバ1は、クラスタ位置の移動を伴わないクラスタリングを1回行えばよいので、クラスタリングの処理負荷及び処理時間を削減することができる。
或いは、配信サーバ1は、全画面内に、デコード最大視点数分のクラスタ領域を決定してもよい。クラスタ領域は、クラスタに所属するユーザのユーザ視点の範囲を示す。全てのクラスタ領域のサイズは同一であってもよいし、クラスタ領域ごとにサイズが異なってもよい。また、全てのクラスタ領域の形状は同一であってもよいし、クラスタ領域ごとに形状が異なってもよい。配信サーバ1は、クラスタ領域同士が重ならないように各クラスタ領域を決定してもよいし、少なくとも一部のクラスタ領域同士が重なってもよい。配信サーバ1は、クラスタ領域とユーザ視点の位置との位置関係に基づいてユーザを複数のクラスタに分ける。例えば、配信サーバ1は、複数のクラスタ領域のうち、ユーザ視点を含むクラスタ領域に対応するクラスタに、そのユーザ視点に対応するユーザを入れる。その後、配信サーバ1は、クラスタ領域を変更しない。この方法の場合も、クラスタリングの処理負荷及び処理時間を削減することができる。図6(B)は、デコード最大視点数が3である場合の全画面におけるクラスタ領域及びユーザ視点の例を示す。図6(B)に示すように、配信サーバ1は、例えば全画面を2等分して、クラスタ領域CA1及びCA2を決定する。また、配信サーバ1は、全画面内の所定の領域又はランダムな領域を、クラスタ領域CA3に決定する。その結果、クラスタ領域CA1とクラスタ領域CA3とが一部重複し、クラスタ領域CA2とクラスタ領域CA3とが一部重複する。全画面内には、ユーザ視点UP1〜UP5が存在する。ユーザ視点UP1は、クラスタ領域CA1のみに含まれる。そのため、配信サーバ1は、ユーザ視点UP1に対応するユーザを、クラスタ領域CA1に対応するクラスタに入れる。ユーザ視点UP2は、クラスタ領域CA1及びCA3の両方に含まれる。この場合、配信サーバ1は、例えばユーザ視点の位置から最も近い中心点を有するクラスタ領域に対応するクラスタに、そのユーザ視点に対応するユーザを入れてもよい。配信サーバ1は、ユーザ視点UP2に対応するユーザを、クラスタ領域CA1に対応するクラスタに入れる。ユーザ視点UP3〜UP5は、クラスタ領域CA2及びCA3の両方に含まれる。配信サーバ1は、ユーザ視点UP3及びUP4に対応するユーザを、クラスタ領域CA3に対応するクラスタに入れる。配信サーバ1は、ユーザ視点UP5に対応するユーザを、クラスタ領域CA2に対応するクラスタに入れる。
クラスタ領域を用いる場合、配信サーバ1は、クラスタに所属するユーザが指定した表示範囲の中心の位置の重心をデコード範囲の中心の位置に決定し、表示範囲のサイズの平均をデコード範囲のサイズに決定してもよい。或いは、配信サーバ1は、クラスタに所属するユーザが指定した表示範囲全てを含むように、デコード範囲を決定してもよい。或いは、配信サーバ1は、クラスタ領域と同一のデコード範囲を決定してもよい。或いは、配信サーバ1は、クラスタ領域を含むデコード範囲を決定してもよい。
[5.通信システムSの動作]
次に、図7乃至図10を参照して、通信システムSの動作について説明する。図7(A)は、配信サーバ1の制御部11におけるメイン処理の一例を示すフローチャートである。注目するコンテンツのライブ配信が開始すると、制御部11は、メイン処理を実行する。図7(A)に示すように、制御部11は、サーバ最大視点数a、注目するコンテンツを視聴する現在のユーザの数u、及び現在の全ユーザ数allに基づいて、コンテンツ最大視点数pを決定する(ステップS1)。具体的には、制御部11は、上述した式1を計算する。次いで、制御部11は、デコード視点挿入処理を実行する(ステップS2)。デコード視点挿入処理では、会員属性が示す優先度が高いユーザから優先的に、ユーザ視点情報と同一のデコード視点情報がデコード視点リストに挿入される。これにより、デコード視点が初期設定される。
図7(B)は、配信サーバ1の制御部11におけるデコード視点挿入処理の一例を示すフローチャートである。図7(B)に示すように、制御部11は、デコード視点リストを初期化して、会員属性を1に設定する(ステップS11)。次いで、制御部11は、ユーザ番号jを1に設定する(ステップS12)。次いで、制御部11は、ユーザリストからユーザ識別子[j]に対応する会員属性を取得する。ユーザ識別子[j]は、ユーザリストに含まれるユーザ識別子のうち、j番目に位置するユーザ識別子である。そして、制御部11は、会員属性iが、取得した会員属性と一致するか否かを判定する(ステップS13)。このとき、制御部11は、会員属性iが、取得した会員属性と一致すると判定した場合には(ステップS13:YES)、ステップS14に進む。一方、制御部11は、会員属性iが、取得した会員属性と一致しないと判定した場合には(ステップS13:NO)、ステップS20に進む。
ステップS14において、制御部11は、ユーザリストからユーザ識別子[j]に対応するユーザ視点情報を取得する。そして、制御部11は、取得したユーザ視点情報と同一のデコード視点情報がデコード視点リストに既に存在するか否かを判定する。このとき、制御部11は、ユーザ視点情報と同一のデコード視点情報が存在すると判定した場合には(ステップS14:YES)、ステップS18に進む。一方、制御部11は、ユーザ視点情報と同一のデコード視点情報が存在しないと判定した場合には(ステップS14:NO)、ステップS15に進む。
ステップS15において、制御部11は、デコード視点リストに含まれるデコード視点情報の数がコンテンツ最大視点数p未満であるか否かを判定する。このとき、制御部11は、デコード視点情報の数がコンテンツ最大視点数p未満であると判定した場合には(ステップS15:YES)、ステップS16に進む。一方、制御部11は、デコード視点情報の数がコンテンツ最大視点数p未満ではないと判定した場合には(ステップS15:NO)、ステップS19に進む。
ステップS16において、制御部11は、新しいデコード視点識別子を付与する。次いで、制御部11は、デコード視点リストに、ユーザ識別子[j]に対応するユーザ視点情報と同一のデコード視点情報と、付与したデコード視点識別子とを挿入する(ステップS17)。次いで、制御部11は、ユーザリストにおいて、ユーザ識別子[j]に対応するデコード視点識別子を、ユーザ識別子[j]に対応するユーザ視点情報と同一のデコード視点情報に対応するデコード視点識別子に設定する(ステップS18)。次いで、制御部11は、ステップS20に進む。
ステップS19において、制御部11は、ユーザリストにおいて、ユーザ識別子[j]に対応するデコード視点識別子を「該当なし」に設定して、ステップS20に進む。
ステップS20において、制御部11は、ユーザ番号jがユーザ数uと一致するか否かを判定する。このとき、制御部11は、ユーザ番号jがユーザ数uと一致しないと判定した場合には(ステップS20:NO)、ステップS21に進む。ステップS21において、制御部11は、ユーザ番号jを1増加させて、ステップS13に進む。一方、制御部11は、ユーザ番号jがユーザ数uと一致すると判定した場合には(ステップS20:YES)、ステップS22に進む。
ステップS22において、制御部11は、会員属性iが0であるか否かを判定する。このとき、制御部11は、会員属性iが0ではないと判定した場合には(ステップS22:NO)、ステップS23に進む。ステップS23において、制御部11は、会員属性iを1減少させて、ステップS12に進む。一方、制御部11は、会員属性iが0であると判定した場合には(ステップS22:YES)、デコード視点挿入処理を終了させる。
デコード視点挿入処理を終えると、制御部11は、図7(A)に示すように、クライアント2から受信したカメラワークデータに基づいて、ユーザリスト内のユーザ視点情報を更新する(ステップS3)。次いで、制御部11は、ステップS1と同様の方法で、コンテンツ最大視点数pを決定する(ステップS4)。次いで、制御部11は、クラスタリング処理を実行する(ステップS5)。
図8(A)は、配信サーバ1の制御部11におけるクラスタリング処理の一例を示すフローチャートである。図8(A)に示すように、制御部11は、コンテンツ最大視点数pが、デコード視点リストに含まれるデコード視点情報の数と一致するか否かを判定する(ステップS31)。このとき、制御部11は、コンテンツ最大視点数pがデコード視点情報の数と一致すると判定した場合には(ステップS31:YES)、ステップS36に進む。一方、制御部11は、コンテンツ最大視点数pがデコード視点情報の数と一致しないと判定した場合には(ステップS31:NO)、ステップS32に進む。ステップS32において、制御部11は、1ステップクラスタリング処理を実行する。
図8(B)は、配信サーバ1の制御部11における1ステップクラスタリング処理の一例を示すフローチャートである。図8(B)に示すように、制御部11は、所属決定処理を実行する(ステップS41)。
図9は、配信サーバ1の制御部11における所属決定処理の一例を示すフローチャートである。図9に示すように、制御部11は、ループフラグを0に設定する(ステップS61)。次いで、制御部11は、デコード視点リストにおいて、各デコード視点識別子に対応するユーザ数を0で初期化する(ステップS62)。次いで、制御部11は、距離disを0に設定する。また、制御部11は、最短距離min_disをnullに設定する。また、制御部11は、デコード視点識別子min_idを0に設定する(ステップS63)。次いで、制御部11は、ユーザ番号iを1に設定する(ステップS64)。次いで、制御部11は、デコード視点番号jを1に設定する(ステップS65)。
次いで、制御部11は、ユーザリストにおいて、ユーザ識別子[i]に対応するユーザ視点情報が示す位置と、デコード視点リストにおいて、デコード視点識別子[j]に対応するデコード視点情報が示す位置との距離disを計算する(ステップS66)。デコード視点識別子[j]は、デコード視点リストに含まれるデコード視点識別子のうち、j番目に位置するデコード視点識別子である。次いで、制御部11は、最短距離min_disがnullであるか、又は最短距離min_disが距離disよりも長いか否かを判定する(ステップS67)。このとき、制御部11は、最短距離min_disがnullであると判定した場合には(ステップS67:YES)、ステップS68に進む。また、制御部11は、最短距離min_disが距離disよりも長いと判定した場合には(ステップS67:YES)、ステップS68に進む。一方、制御部11は、最短距離min_disがnullではなく、且つ最短距離min_disが距離disよりも長くはないと判定した場合には(ステップS67:NO)、ステップS69に進む。
ステップS68において、制御部11は、最短距離min_disを距離disに設定し、デコード視点識別子min_idをデコード視点識別子[j]に設定する。次いで、制御部11は、デコード視点番号jが、デコード視点リストに含まれるデコード視点情報の数と一致するか否かを判定する(ステップS69)。このとき、制御部11は、デコード視点番号jが、デコード視点リストに含まれるデコード視点情報の数と一致しないと判定した場合には(ステップS69:NO)、ステップS70に進む。ステップS70において、制御部11は、デコード視点番号jを1増加させて、ステップS66に進む。一方、制御部11は、デコード視点番号jが、デコード視点リストに含まれるデコード視点情報の数と一致すると判定した場合には(ステップS69:YES)、ステップS71に進む。
ステップS71において、制御部11は、ユーザリストにおいて、ユーザ識別子[i]に対応するデコード視点識別子を、デコード視点識別子min_idに設定する。次いで、制御部11は、デコード視点リストにおいて、デコード視点識別子min_idに対応するユーザ数を1増加させる(ステップS72)。次いで、制御部11は、デコード視点リストにおいて、デコード視点識別子min_idに対応するユーザ識別子リストに、ユーザ識別子[i]を挿入する(ステップS73)。次いで、制御部11は、制御部11は、ユーザ番号iがユーザ数uと一致するか否かを判定する(ステップS74)。このとき、制御部11は、ユーザ番号iがユーザ数uと一致しないと判定した場合には(ステップS74:NO)、ステップS75に進む。ステップS75において、制御部11は、ユーザ番号iを1増加させて、ステップS65に進む。一方、制御部11は、ユーザ番号iがユーザ数uと一致すると判定した場合には(ステップS74:YES)、所属決定処理を終了させる。
所属決定処理を終えると、制御部11は、図8(B)に示すように、重心移動処理を実行する(ステップS42)。
図10(A)は、配信サーバ1の制御部11における重心移動処理の一例を示すフローチャートである。図10(A)に示すように、制御部11は、デコード視点番号iを1に設定する(ステップS81)。次いで、制御部11は、デコード視点リストにおいて、デコード視点識別子[i]に対応するユーザ識別子リストから、全てのユーザ識別子を取得する。制御部11は、取得したユーザ識別子ごとに、ユーザリストからユーザ識別子に対応するユーザ視点情報を取得する。そして、制御部11は、全てのユーザ識別子について取得したユーザ視点情報に基づいて、ユーザ視点情報が示すユーザ視点の重心tを計算する(ステップS82)。
次いで、制御部11は、デコード視点リストにおいて、デコード視点識別子[i]に対応するデコード視点情報と、重心の位置tのx〜z座標の組み合わせとが一致するか否かを判定する(ステップS83)。このとき、制御部11は、デコード視点情報が示す位置と重心の位置tのx〜z座標の組み合わせとが一致すると判定した場合には(ステップS83:YES)、ステップS86に進む。一方、制御部11は、デコード視点情報が示す位置と重心の位置tのx〜z座標の組み合わせとが一致しないと判定した場合には(ステップS83:NO)、ステップS84に進む。
ステップS84において、制御部11は、デコード視点リストにおいて、デコード視点識別子[i]に対応するデコード視点情報を、重心の位置tのx〜z座標に設定する。次いで、制御部11は、ループフラグを1に設定する(ステップS85)。
次いで、制御部11は、デコード視点番号iが、デコード視点リストに含まれるデコード視点情報の数と一致するか否かを判定する(ステップS86)。このとき、制御部11は、デコード視点番号iが、デコード視点リストに含まれるデコード視点情報の数と一致しないと判定した場合には(ステップS86:NO)、ステップS87に進む。ステップS87において、制御部11は、デコード視点番号iを1増加させて、ステップS82に進む。一方、制御部11は、デコード視点番号iが、デコード視点リストに含まれるデコード視点情報の数と一致すると判定した場合には(ステップS86:YES)、重心移動処理を終了させる。
重心移動処理を終えると、制御部11は、図8(B)に示すように、1ステップクラスタリング処理を終了させる。次いで、制御部11は、図8(A)に示すように、ステップS33において、コンテンツ最大視点数が、デコード視点リストに含まれるデコード視点情報の数よりも大きいか否かを判定する。このとき、制御部11は、コンテンツ最大視点数がデコード視点情報の数よりも大きいと判定した場合には(ステップS33:YES)、ステップS34に進む。一方、制御部11は、コンテンツ最大視点数がデコード視点情報の数よりも大きくはないと判定した場合には(ステップS33:NO)、ステップS35に進む。
ステップS34において、制御部11は、デコード視点追加処理を実行する。図10(B)は、配信サーバ1の制御部11におけるデコード視点追加処理の一例を示すフローチャートである。図10(B)に示すように、制御部11は、コンテンツ最大視点数pから、デコード視点リストに含まれるデコード視点情報の数を引いて、差nを計算する(ステップS91)。次いで、制御部11は、ユーザリストの要素を、会員属性が大きい順にソートする(ステップS92)。ユーザリストの要素は、ユーザ識別子、会員属性、ユーザ視点情報、デコード視点識別子及びデコード視点までの距離の組み合わせである。ここで、ユーザリスト中に、会員属性が同一である要素が複数存在する場合、その複数の要素については、デコード視点までの距離が遠い順にソートする。こうして、ユーザリストの要素が、デコード視点までの距離よりも優先して、会員属性が大きい順にソートされる。
次いで、制御部11は、順序番号iを1に設定する(ステップS93)。次いで、制御部11は、ユーザリストのi番目の要素中のデコード視点までの距離が0であるか否かを判定する(ステップS94)。このとき、制御部11は、デコード視点までの距離が0であると判定した場合には(ステップS94:YES)、ステップS97に進む。一方、制御部11は、デコード視点までの距離が0ではないと判定した場合には(ステップS94:NO)、ステップS95に進む。
ステップS95において、制御部11は、新しいデコード視点識別子を付与する。次いで、制御部11は、デコード視点リストに、ユーザリストのi番目の要素中のユーザ視点情報と同一のデコード視点情報と、付与したデコード視点識別子とを挿入する(ステップS96)。次いで、制御部11は、順序番号iがユーザ数uと一致するか否かを判定する(ステップS97)。このとき、制御部11は、順序番号iがユーザ数uと一致しないと判定した場合には(ステップS97:NO)、ステップS98に進む。ステップS98において、制御部11は、順序番号iを1増加させて、ステップS92に進む。一方、制御部11は、順序番号iがユーザ数uと一致すると判定した場合には(ステップS97:YES)、デコード視点追加処理を終了させて、図8(A)に示すように、ステップS36に進む。
ステップS35において、制御部11は、デコード視点削除処理を実行する。具体的には、制御部11は、デコード視点リストに含まれるデコード視点情報ごとに、デコード視点情報が示すデコード視点の位置と、ユーザリストに含まれる各ユーザ視点情報が示すユーザ視点の位置との距離を計算する。次いで、制御部11は、デコード視点情報ごとに、計算した距離の和を計算する。次いで、制御部11は、デコード視点情報ごとに、デコード視点識別子と距離の和とを、一時リストに挿入する。次いで、制御部11は、一時リストに含まれるデコード視点識別子を、距離の和が大きい順にソートする。次いで、制御部11は、デコード視点リストに含まれるデコード視点情報の数とコンテンツ最大視点数との差nを計算する。次いで、制御部11は、一時リストから、距離の和が大きい順に、デコード視点識別子をn個取得する。次いで、制御部11は、取得したデコード視点識別子ごとに、デコード視点識別子に対応するデコード視点情報を、デコード視点リストから削除する。次いで、制御部11は、ステップS36に進む。
ステップS36において、制御部11は、全ステップクラスタリング処理を実行する。図8(C)は、配信サーバ1の制御部11における全ステップクラスタリング処理の一例を示すフローチャートである。図8(C)に示すように、制御部11は、図9に示す所属決定処理を実行する(ステップS51)。次いで、制御部11は、図10(A)に示す重心移動処理を実行する(ステップS52)。次いで、制御部11は、ループフラグが1であるか否かを判定する(ステップS53)。このとき、制御部11は、ループフラグが1であると判定した場合には(ステップS53:YES)、ステップS51に進む。一方、制御部11は、ループフラグが1ではないと判定した場合には(ステップS53:NO)、ステップS54に進む。ステップS54において、制御部11は、デコード視点リストから、対応するユーザ数が0であるデコード視点情報を削除して、全ステップクラスタリング処理を終了させる。
全ステップクラスタリング処理を終えると、制御部11は、図8(A)に示すクラスタリング処理を終了させて、図7(A)に示すように、デコード視点リストに含まれるデコード視点情報に基づいてデコードを実行する(ステップS6)。具体的には、制御部11は、デコード視点情報ごとに、ビデオカメラから受信した動画データから、現在時刻に対応した1又は複数のフレーム画像を取得する。制御部11は、各フレーム画像のうち、デコード視点情報が示すデコード範囲の画像部分をデコードして、配信用の動画データを生成する。制御部11は、デコード視点情報ごとに、デコード視点リストに含まれるユーザ識別子リストからユーザ識別子を取得する。制御部11は、取得したユーザ識別子ごとに、ユーザ識別子に対応するクライアント2へ、生成した動画データを送信する。また、制御部11は、ビデオカメラから受信した動画データを、より低い解像度のサブ動画データに変換する。制御部11は、サブ動画データ及びデコード視点情報をクライアント2へ送信する。配信サーバ1から動画データ、サブ動画データ及びデコード視点情報を受信したクライアント2は、動画データに基づいて、デコード範囲の動画をメインスクリーン110に表示する。また、クライアント2は、サブ動画データに基づいて、全画面の動画をサブスクリーン120に表示する。また、クライアント2は、現在の表示範囲及びデコード視点情報に基づいて、表示範囲枠130及びデコード範囲枠140を、サブスクリーン120内に表示する。
次いで、制御部11は、注目するコンテンツのライブ配信が継続するか否かを判定する(ステップS7)。このとき、制御部11は、ライブ配信が継続すると判定した場合には(ステップS7:YES)、ステップS3に進む。一方、制御部11は、ライブ配信が終了すると判定した場合には(ステップS7:NO)、メイン処理を終了させる。
以上説明したように、本実施形態によれば、配信サーバ1が、ユーザリストから取得されたユーザ視点情報に基づいて、コンテンツを視聴しようとする複数のユーザを、コンテンツ最大視点数以下のクラスタに分ける。コンテンツを視聴しようとするユーザの数がコンテンツ最大視点数以下である場合、配信サーバ1が、互いに異なる表示範囲を指定するユーザを同一のクラスタに入れない。配信サーバ1は、分けられたクラスタのうち、1のユーザで構成されるクラスタに対して、1のユーザにより指定された表示範囲をデコード範囲として、コンテンツの動画のうちデコード範囲内の動画部分をデコードし、2以上のユーザで構成されるクラスタに対して、2以上のユーザにより指定された2以上の表示範囲に基づいて特定されるデコード範囲内の動画部分をデコードする。配信サーバ1は、各クラスタについて、デコードにより抽出された動画を示す動画データを、クラスタを構成するユーザが利用するクライアント2へ送信する。従って、ユーザの数が抽出範囲の数の上限を超えても、全てのユーザは、希望する表示範囲又は希望に極力沿った表示範囲で動画を視聴することができる。