以下、本発明を実施するための形態について図面を用いて詳細に説明する。
〔配信ネットワーク〕
まず、本発明の実施形態による視聴端末を含む配信ネットワークについて説明する。図1は、配信ネットワークの全体構成例を示す概略図である。
この配信ネットワーク1は、配信サーバ2、視聴端末3-1,3-2,・・・及びシグナリングサーバ4を備えて構成される。配信ネットワーク1は、例えば1つのコンテンツを複数の異なる動画ストリームとして、配信サーバ2から視聴端末3-1,3-2,・・・へ配信するネットワークである。視聴端末3-1,3-2,・・・のそれぞれは、動画ストリームを受信し、視聴端末3-1,3-2,・・・間で同期するように、動画を再生する。
配信サーバ2、視聴端末3-1,3-2,・・・及びシグナリングサーバ4は、インターネット、並びに広域IPネットワーク及びプライベートネットワーク等のネットワーク5を介して接続される。以下、視聴端末3-1,3-2,・・・を総称して視聴端末3とする。
配信サーバ2は、ユーザが所望するコンテンツを構成する複数の動画ストリームのそれぞれを、複数の視聴端末3のそれぞれへ配信する。具体的には、配信サーバ2は、ユーザが操作する視聴端末3から、ユーザが所望するコンテンツのリクエストを受信し、当該コンテンツを構成する複数の動画ストリームのうち当該リクエストに対応する動画ストリームを視聴端末3へ配信する。
視聴端末3は、他の視聴端末3との間で同期した内部時計を備えている。また、視聴端末3は、他の視聴端末3との間で、Web標準技術であるピアツーピアプロトコルのWebRTCを用いて、動画再生の先頭時刻T0を送受信する。例えば1つのコンテンツが複数の異なる動画からなる場合、動画再生の先頭時刻T0は、複数の異なる動画のうち最初に再生した動画の再生開始時刻を示す。
これにより、全ての視聴端末3において、共通の先頭時刻T0を保持することができ、この共通の先頭時刻T0に基づいて、動画の同期再生が実現される。
尚、先頭時刻T0は、全ての視聴端末3間で同期した内部時計の現在時刻Tnを基準にして、動画の先頭が再生されたときの現在時刻Tnである。動画のシーク操作が行われた場合には、先頭時刻T0は、シーク操作完了時の現在時刻Tnからシーク操作完了時の再生位置Ctを減算して得られた時刻に変更される。この場合の先頭時刻T0は、T0=Tn-Ctで算出される。
再生位置Ctは動画再生位置であり、動画の先頭からの経過時間で表され、取り得る範囲はCt≧0、動画の先頭はCt=0である。つまり、再生位置Ctは、Ct=Tn-T0で算出される。
視聴端末3は、ユーザが所望するコンテンツの動画を視聴するために、動画プレーヤーを起動し、配信ネットワーク1に参加する。視聴端末3は、シグナリングサーバ4から、配信ネットワーク1に参加している(同一のコンテンツの動画を再生している)他の視聴端末3のIPアドレス等の情報を受信すると共に、先頭時刻T0を受信して保持する。
視聴端末3は、動画ストリームのリクエストを配信サーバ2へ送信し、配信サーバ2から配信された動画ストリームを受信し、動画ストリームの動画を再生する。この場合、視聴端末3は、内部時計の現在時刻Tnから保持している先頭時刻T0を減算して再生位置Ctを算出し、再生位置Ctから動画を再生する。
シグナリングサーバ4は、配信ネットワーク1に参加している視聴端末3の台数、視聴端末3のIPアドレス等を管理するサーバである。シグナリングサーバ4は、視聴端末3からリクエストを受信すると、配信ネットワーク1に参加している視聴端末3の台数、視聴端末3のIPアドレス等の情報を他の端末情報として、リクエストを送信してきた視聴端末3へ送信する。
図2は、1つのコンテンツの画面を4分割した場合の分割ストリームの配信例を説明する図であり、広視野動画のコンテンツが小サイズの画面に4分割され、複数の視聴端末3-1~3-4を並べて同時に視聴される場合の例を示している。
配信サーバ2は、視聴端末3-1~3-4を操作するユーザの所望するコンテンツの動画ストリームを視聴端末3-1~3-4へ配信する際に、当該コンテンツの動画Iを4つに分割することで、分割ストリームa~dを生成する。
配信サーバ2は、分割ストリームaを視聴端末3-1へ配信し、分割ストリームbを視聴端末3-2へ配信し、分割ストリームcを視聴端末3-3へ配信し、分割ストリームdを視聴端末3-4へ配信する。
視聴端末3-1は、配信サーバ2から分割ストリームaを受信し、分割ストリームaの分割動画Iaを再生し、視聴端末3-2は、配信サーバ2から分割ストリームbを受信し、分割ストリームbの分割動画Ibを再生する。また、視聴端末3-3は、配信サーバ2から分割ストリームcを受信し、分割ストリームcの分割動画Icを再生し、視聴端末3-4は、配信サーバ2から分割ストリームdを受信し、分割ストリームdの分割動画Idを再生する。
視聴端末3-1~3-4は、同期した内部時計を保持しており、WebRTCを用いて、分割動画Ia~Idのうちの最先に再生を開始した動画の先頭時刻T0を送受信することで、共通の先頭時刻T0を保持する。
例えば、視聴端末3-1~3-3が配信ネットワーク1に参加しており、分割動画Ia~Icの同期再生を実現しているものとする。この状態で、視聴端末3-4が配信ネットワーク1に参加する場合を想定する。
そうすると、視聴端末3-4は、シグナリングサーバ4から視聴端末3-1~3-3のIPアドレス等の情報を取得し、WebRTCを用いて、視聴端末3-1~3-3から先頭時刻T0を取得する。視聴端末3-4は、内部時計から現在時刻Tnを取得し、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求め、分割動画Idを再生位置Ctから再生する。このとき、視聴端末3-1~3-3は、同じ再生位置Ctにて分割動画Ia~Icをそれぞれ再生している。
これにより、視聴端末3-1~3-4間で分割動画Ia~Idの同期再生を実現することができる。
また、視聴端末3-1~3-4間で分割動画Ia~Idの同期再生を実現しており、視聴端末3-1にてユーザによる分割動画Iaのシーク操作(再生位置Ctの変更操作)が行われた場合を想定する。
そうすると、視聴端末3-1は、シーク操作完了時の再生位置Ctを取得し、内部時計から現在時刻Tnを取得し、現在時刻Tnから再生位置Ctを減算して新たな先頭時刻T0を求め、新たな先頭時刻T0を視聴端末3-2~3-4へ送信する。
視聴端末3-2~3-4は、視聴端末3-1から先頭時刻T0を受信し、内部時計から現在時刻Tnを取得し、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求め、分割動画Ib~Idを再生位置Ctからそれぞれ再生する。視聴端末3-2~3-4により算出された再生位置Ctは、視聴端末3-1におけるシーク操作完了時の再生位置Ctと同じである。
これにより、視聴端末3-1~3-4は、シーク操作前の先頭時刻T0に代えて、シーク操作にて移動した再生位置Ctに対応する新たな先頭時刻T0を保持することとなる。そして、視聴端末3-1~3-4は、シーク操作完了後の分割動画Ia~Idの同期再生を実現することができる。
尚、図2では、広視野動画のコンテンツが小サイズの画面に4分割され、複数の視聴端末3-1~3-4を並べて同時に視聴される場合の例を示した。この他に、異なる4台のカメラを用いて撮影されたマルチビュー動画のコンテンツが、4台の視聴端末3-1~3-4を並べて同時に視聴される場合についても、同様の同期再生を実現することができる。
〔視聴端末3〕
次に、図1に示した配信ネットワーク1における本発明の実施形態による視聴端末3について説明する。図3は、本発明の実施形態による視聴端末3の構成例を示すブロック図である。
この視聴端末3は、動画再生部(HTMLMediaElement)10、同期処理部11及び内部時計12を備えている。同期処理部11は、動画の数フレーム程度の精度にて同期再生を実現すると共に、1フレーム以内の高精度の同期再生を実現する処理部である。
動画再生部10は、同期処理部11から再生位置Ctを入力し、動画再生位置を再生位置Ctに設定し、動画を再生位置Ctから再生する。これにより、動画再生部10の動画再生位置は、同期処理部11から入力した再生位置Ctに変更される。
また、動画再生部10は、同期処理部11から再生レートPrを入力し、動画再生レートを再生レートPrに設定し、動画を再生レートPrにて再生する。これにより、動画再生部10の動画再生レートは、同期処理部11から入力した再生レートPrに変更される。
動画再生部10は、所定時間間隔のHTMLMediaElementのtimeupdate(タイムアップデート)イベントが発火すると、timeupdateイベントの発火を同期処理部11に出力する。
動画再生部10は、同期処理部11からの再生位置取得リクエストに従い、再生中の動画の再生位置Ctを同期処理部11に出力する。
同期処理部11は、シグナリングサーバ4から他の端末情報を受信し、問い合わせを他の視聴端末3へ送信し、他の視聴端末3から先頭時刻T0を受信する等して、後述する動画プレーヤー起動処理及び先頭時刻受信処理を行う。そして、同期処理部11は、再生位置Ctを算出して動画再生部10に出力する。
また、同期処理部11は、シーク操作完了を入力すると、再生位置取得リクエストを動画再生部10に出力する等して、後述するシーク操作完了処理を行い、動画再生部10からシーク操作完了時の再生位置Ctを取得する。そして、同期処理部11は、先頭時刻T0を算出し、先頭時刻T0を他の視聴端末3へ送信する。
また、同期処理部11は、他の視聴端末3から問い合わせを受信すると、後述する問い合わせ受信処理を行い、先頭時刻T0を他の視聴端末3へ送信する。
また、同期処理部11は、動画再生部10からHTMLMediaElementのtimeupdateイベントの発火を入力すると、内部時計12から現在時刻Tnを、動画再生部10から再生位置Ctをそれぞれ取得する。
同期処理部11は、現在時刻Tnから先頭時刻T0を減算した時刻が再生位置Ctと一致するように、再生位置Ct及び再生レートPrを算出し、これらを動画再生部10に出力する。同期処理部11の詳細については後述する。
内部時計12は、視聴端末3及び他の視聴端末3間で同期した現在時刻Tnを有する時計であり、例えばUTC(協定世界時)に同期した現在時刻Tnを刻んでいる。内部時計12は、NTPサーバ等へ定期的にアクセスすることで、現在時刻Tnの精度を保っている。
図1に示した配信ネットワーク1に参加している全ての視聴端末3間における問い合わせ及び先頭時刻T0の送受信は、WebRTCを用いて行われ、全ての視聴端末3において先頭時刻T0が共有される。
(同期処理部11)
次に、同期処理部11について詳細に説明する。図4は、同期処理部11の処理例を示すフローチャートである。
視聴端末3を操作するユーザが所望するコンテンツの動画を視聴する場合、動画再生部10が配信サーバ2から受信する動画を再生する処理に先立って、同期処理部11は、ユーザ操作に従い、動画プレーヤー起動処理を行う(ステップS401)。
具体的には、同期処理部11は、動画プレーヤーの起動に伴い、先頭時刻T0を取得して記録し、動画再生を開始する再生位置Ctを算出し、再生位置Ctを動画再生部10に出力する。動画プレーヤー起動処理(ステップS401)の詳細については後述する。
同期処理部11は、動画再生部10からHTMLMediaElementのtimeupdateイベントの発火を入力したときのイベント処理に先立って、切替しきい値Da,Db、再生レート調整幅最大値Ra、再生レート調整幅最小値Rb及び目標調整時間Atの初期設定を行う(ステップS402)。この初期設定は、自らの視聴端末3が起動したときに1回のみ行われる。切替しきい値Da,Db、再生レート調整幅最大値Ra、再生レート調整幅最小値Rb及び目標調整時間Atの詳細については後述する。
同期処理部11は、動画再生部10からHTMLMediaElementのtimeupdateイベントの発火を入力したか否かを判定する(ステップS403)。動画再生部10において、HTMLMediaElementのtimeupdateイベントが発火する頻度は、システムの負荷に依存するが、およそ4Hzから66Hzまでの間の頻度であり、スローされる。この場合、同期処理部11は、timeupdateイベントの発火を、1/66秒から1/4秒までの間隔で入力することとなる。
つまり、timeupdateイベントは、少なくとも250ms毎に発火する。詳細については、以下の文献を参照されたい。
“HTMLMediaElement:timeupdateイベント”、[online]、インターネット<URL:https://html.spec.whatwg.org/multipage/media.html#time-marches-on>
同期処理部11は、ステップS403において、timeupdateイベントの発火を入力したと判定した場合(ステップS403:Y)、イベント処理を行い(ステップS404)、ステップS405へ移行する。イベント処理(ステップS404)の詳細については後述する。
一方、同期処理部11は、ステップS403において、timeupdateイベントの発火を入力していないと判定した場合(ステップS403:N)、ステップS405へ移行する。
同期処理部11は、ステップS404またはステップS403(N)から移行して、ユーザが再生中の動画にシーク操作を行った場合、シーク操作完了を入力したか否かを判定する(ステップS405)。
同期処理部11は、ステップS405において、シーク操作完了を入力したと判定した場合(ステップS405:Y)、シーク操作完了処理を行い(ステップS406)、ステップS407へ移行する。
具体的には、同期処理部11は、シーク操作完了を入力すると、動画再生部10からシーク操作完了時の再生位置Ct(シーク操作により移動した再生位置Ct)を取得する。そして、同期処理部11は、この再生位置Ctに対応する新たな先頭時刻T0を算出して記録し、先頭時刻T0を他の視聴端末3へ送信する。シーク操作完了処理(ステップS406)の詳細については後述する。
一方、同期処理部11は、ステップS405において、シーク操作完了を入力していないと判定した場合(ステップS405:N)、ステップS407へ移行する。
同期処理部11は、ステップS406またはステップS405(N)から移行して、他の視聴端末3から先頭時刻T0を受信したか否かを判定する(ステップS407)。
同期処理部11は、ステップS407において、先頭時刻T0を受信したと判定した場合(ステップS407:Y)、先頭時刻受信処理を行い(ステップS408)、ステップS409へ移行する。
具体的には、同期処理部11は、他の視聴端末3にてシーク操作が完了し、当該他の視聴端末3から、シーク操作完了に伴う先頭時刻T0を受信すると、先頭時刻T0を記録して再生位置Ctを算出する。そして、同期処理部11は、再生位置Ctを動画再生部10に出力する。先頭時刻受信処理(ステップS408)の詳細については後述する。
一方、同期処理部11は、ステップS407において、先頭時刻T0を受信していないと判定した場合(ステップS407:N)、ステップS409へ移行する。
同期処理部11は、ステップS408またはステップS407(N)から移行して、他の視聴端末3から問い合わせを受信したか否かを判定する(ステップS409)。
同期処理部11は、ステップS409において、問い合わせを受信したと判定した場合(ステップS409:Y)、問い合わせ受信処理を行い(ステップS410)、ステップS411へ移行する。
具体的には、同期処理部11は、他の視聴端末3にて動画プレーヤーが起動し、当該他の視聴端末3から問い合わせを受信すると、先頭時刻T0を読み出し、先頭時刻T0を当該他の視聴端末3へ送信する。問い合わせ受信処理(ステップS410)の詳細については後述する。
一方、同期処理部11は、ステップS409において、問い合わせを受信していないと判定した場合(ステップS409:N)、ステップS411へ移行する。
同期処理部11は、ステップS410またはステップS409(N)から移行して、動画プレーヤーの処理が終了したか否かを判定する(ステップS411)。
同期処理部11は、ステップS411において、動画プレーヤーの処理が終了していないと判定した場合(ステップS411:N)、ステップS403へ移行する。同期処理部11は、動画プレーヤーの処理が終了しない限り、ステップS403へ移行し、ステップS403~S410の処理を繰り返す。
同期処理部11は、ステップS411において、動画プレーヤーの処理が終了したと判定した場合(ステップS411:Y)、動画プレーヤー終了処理を行う(ステップS412)。具体的には、同期処理部11は、シグナリングサーバ4へアクセスし、自らの視聴端末3に関する情報を抹消させる。シグナリングサーバ4は、当該視聴端末3のアクセスを受けると、配信ネットワーク1に参加している視聴端末3の台数を更新し、当該視聴端末3のIPアドレス等を削除する。
図3に戻って、同期処理部11は、起動処理部20、送受信処理部21、再生位置算出部22、先頭時刻算出部23、メモリ24及びイベント処理部25を備えている。以下、同期処理部11に備えたこれらの構成部による動画プレーヤー起動処理(ステップS401)、シーク操作完了処理(ステップS406)、先頭時刻受信処理(ステップS408)、問い合わせ受信処理(ステップS410)及びイベント処理(ステップS404)について詳細に説明する。
<動画プレーヤー起動処理>
まず、図4のステップS401に示した動画プレーヤー起動処理について詳細に説明する。図5は、動画プレーヤー起動処理(ステップS401)の例を示すフローチャートである。
起動処理部20は、ユーザが所望するコンテンツの動画を視聴するために、動画プレーヤーが起動すると、シグナリングサーバ4にアクセスして接続し、自らの視聴端末3の情報をシグナリングサーバ4に登録させる。また、起動処理部20は、他の端末情報を取得するためのリクエストをシグナリングサーバ4へ送信し、シグナリングサーバ4から他の端末情報を取得する(ステップS501)。他の端末情報には、配信ネットワーク1に参加している(同一のコンテンツの動画を再生している)視聴端末3の台数、視聴端末3のIPアドレス等の情報が含まれる。
これにより、視聴端末3は、自らの視聴端末3のIPアドレス等の情報を他の視聴端末3へ知らせると共に、他の視聴端末3の台数及び他の視聴端末3のIPアドレス等の情報を取得することができ、各視聴端末3間の通信が可能となる。
起動処理部20は、内部時計12から現在時刻Tnを取得する(ステップS502)。そして、起動処理部20は、ステップS501にて取得した他の端末情報に基づいて、他の視聴端末3が存在するか否かを判定する(ステップS503)。
起動処理部20は、ステップS503において、他の視聴端末3が存在すると判定した場合(ステップS503:Y)、先頭時刻T0を取得するための問い合わせを送受信処理部21に出力する。
送受信処理部21は、起動処理部20から問い合わせを入力し、WebRTCにより、問い合わせを他の視聴端末3へ送信し、他の視聴端末3から先頭時刻T0を取得する(ステップS504)。そして、送受信処理部21は、先頭時刻T0を再生位置算出部22に出力する。つまり、配信ネットワーク1に他の視聴端末3が参加している場合、先頭時刻T0は、他の視聴端末3から取得される。
尚、送受信処理部21は、他の視聴端末3のそれぞれに対して問い合わせを送信し、他の視聴端末3のそれぞれから先頭時刻T0を取得するようにしてもよい。また、送受信処理部21は、他の視聴端末3のうち1台の視聴端末3を予め設定しており、当該1台の視聴端末3に対して問い合わせを送信し、当該1台の視聴端末3のみから先頭時刻T0を取得するようにしてもよい。
この場合、全ての他の視聴端末3には同一の先頭時刻T0が記録されているため、送受信処理部21は、他の視聴端末3のいずれへ問い合わせを送信したとしても、同一の先頭時刻T0を取得することができる。
一方、起動処理部20は、ステップS503において、他の視聴端末3が存在しないと判定した場合(ステップS503:N)、ステップS502にて取得した現在時刻Tnを先頭時刻T0に設定する(ステップS505、T0=Tn)。そして、起動処理部20は、先頭時刻T0を再生位置算出部22に出力する。つまり、配信ネットワーク1に他の視聴端末3が参加していない場合、すなわち配信ネットワーク1に自らの視聴端末3が最初に参加する場合、先頭時刻T0には、自らの内部時計12から取得した現在時刻Tnが設定される。
再生位置算出部22は、起動処理部20または送受信処理部21から先頭時刻T0を入力し、先頭時刻T0をメモリ24に記録する(ステップS506)。
再生位置算出部22は、内部時計12から現在時刻Tnを取得し、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求める(ステップS507、Ct=Tn-T0)。そして、再生位置算出部22は、再生位置Ctを動画再生部10に出力し、動画再生位置を再生位置Ctに設定させる(ステップS508)。
これにより、動画再生部10にて動画再生位置が再生位置Ctに設定され、動画は、再生位置Ctから再生することとなる。ここで、配信ネットワーク1に他の視聴端末3が参加していない場合、すなわち再生位置算出部22が起動処理部20から先頭時刻T0を入力した場合(T0=Tn)、動画は、先頭である再生位置Ct=0から再生することとなる。
一方、配信ネットワーク1に他の視聴端末3が参加している場合、すなわち再生位置算出部22が送受信処理部21から先頭時刻T0を入力した場合、現在時刻Tnが先頭時刻T0よりも進んでいるため、再生位置Ct=Tn-T0>0が得られる。そして、動画は、この再生位置Ctから再生することとなる。
このように、他の視聴端末3が参加している配信ネットワーク1に、新たに視聴端末3が参加した場合、当該視聴端末3の動画を再生位置Ct=Tn-T0から再生させることができる。このときの他の視聴端末3の動画は、再生位置Ct=Tn-T0にて再生している。したがって、配信ネットワーク1に参加している全ての視聴端末3において、動画の同期再生を実現することができる。
尚、配信ネットワーク1から視聴端末3が離脱する場合、配信ネットワーク1に参加している他の視聴端末3が記録している先頭時刻T0は変化することがなく、他の視聴端末3における再生は継続する。
したがって、配信ネットワーク1から視聴端末3が離脱したとしても、他の視聴端末3において、動画の同期再生を継続して実現することができる。
<シーク操作完了処理>
次に、図4のステップS406に示したシーク操作完了処理について詳細に説明する。図6は、シーク操作完了処理(ステップS406)の例を示すフローチャートである。
先頭時刻算出部23は、ユーザが再生中の動画にシーク操作を行い、そのシーク操作が完了すると、シーク操作完了を入力し、再生位置取得リクエストを動画再生部10に出力する。そして、先頭時刻算出部23は、動画再生部10から、再生位置取得リクエストに対応するシーク操作により移動した再生位置Ctであるシーク操作完了時の再生位置Ctを取得する(ステップS601)。
先頭時刻算出部23は、内部時計12から、ステップS601にて再生位置Ctを取得したときの現在時刻Tnを取得する(ステップS602)。そして、先頭時刻算出部23は、現在時刻Tnから再生位置Ctを減算して先頭時刻T0を求める(ステップS603、T0=Tn-Ct)。
これにより、早送りのシーク操作完了時に算出された先頭時刻T0は、当該シーク操作前の先頭時刻T0に比べ、これよりも後の(進んだ)時刻に移動する。また、巻き戻しのシーク操作完了時に算出された先頭時刻T0は、当該シーク操作前の先頭時刻T0に比べ、これよりも前の時刻に移動する。
先頭時刻算出部23は、ステップS603にて算出した先頭時刻T0をメモリ24に記録すると共に(ステップS604)、送受信処理部21に出力する。送受信処理部21は、先頭時刻算出部23から先頭時刻T0を入力し、WebRTCにより、先頭時刻T0を他の視聴端末3へ送信する(ステップS605)。
これにより、他の視聴端末3には、自らの視聴端末3と同じ先頭時刻T0が記録される。そして、他の視聴端末3は、後述する図7に示す先頭時刻受信処理にて、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求め、再生位置Ctから動画の再生を行う。
このように、自らの視聴端末3にてシーク操作が完了した場合、シーク操作により移動した再生位置Ctに対応する新たな先頭時刻T0が、配信ネットワーク1に参加している全ての視聴端末3にて記録される。
この場合、自らの視聴端末3の動画は、シーク操作完了時の再生位置Ctから1倍速で再生し、他の視聴端末3の動画も、自らの視聴端末3と同じ再生位置Ct(=Tn-T0)へ移動し、当該再生位置Ctから再生することとなる。したがって、配信ネットワーク1に参加している全ての視聴端末3において、動画の同期再生を実現することができる。
<先頭時刻受信処理>
次に、図4のステップS408に示した先頭時刻受信処理について詳細に説明する。図7は、先頭時刻受信処理(ステップS408)の例を示すフローチャートであり、他の視聴端末3においてシーク操作が完了し、当該他の視聴端末3からシーク操作完了に伴う先頭時刻T0を受信したときの処理を示している。
送受信処理部21は、WebRTCにより、他の視聴端末3から先頭時刻T0を受信し(ステップS701)、先頭時刻T0を再生位置算出部22に出力する。
再生位置算出部22は、送受信処理部21から先頭時刻T0を入力し、先頭時刻T0をメモリ24に記録する(ステップS702)。
再生位置算出部22は、内部時計12から現在時刻Tnを取得し(ステップS703)、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求める(ステップS704、Ct=Tn-T0)。そして、再生位置算出部22は、再生位置Ctを動画再生部10に出力し、動画再生位置を再生位置Ctに設定させる(ステップS705)。
これにより、動画再生部10にて動画再生位置が再生位置Ctに設定され、動画は、再生位置Ctから再生することとなる。
ここで、他の視聴端末3にてシーク操作が完了した場合、他の視聴端末3は、シーク操作完了時の現在時刻Tnからシーク操作完了時の再生位置Ctを減算することで、シーク操作完了に伴う先頭時刻T0を求める(T0=Tn-Ct)。この場合、他の視聴端末3では、シーク操作完了時以降の動画は、シーク操作完了時の再生位置Ctから1倍速で再生することとなる。
一方、自らの視聴端末3は、シーク操作が完了した他の視聴端末3から先頭時刻T0を受信し、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求め、当該再生位置Ctから動画を再生する(Ct=Tn-T0)。この再生位置Ctは、他の視聴端末3におけるシーク操作完了時の再生位置Ctと同じである。
このように、他の視聴端末3においてシーク操作が完了した場合、自らの視聴端末3は、他の視聴端末3における再生位置Ctと同じ位置にて動画を再生することができる。したがって、配信ネットワーク1に参加している全ての視聴端末3のうちいずれかの視聴端末3にてシーク操作が行われた場合であっても、全ての視聴端末3において、動画の同期再生を実現することができる。
<問い合わせ受信処理>
次に、図4のステップS410に示した問い合わせ受信処理について詳細に説明する。図8は、問い合わせ受信処理(ステップS410)の例を示すフローチャートであり、他の視聴端末3にて動画プレーヤーが起動し、当該他の視聴端末3から問い合わせを受信したときの処理を示している。
送受信処理部21は、WebRTCにより、他の視聴端末3から問い合わせを受信し(ステップS801)、メモリ24から先頭時刻T0を読み出す(ステップS802)。
送受信処理部21は、WebRTCにより、先頭時刻T0を、問い合わせを送信してきた他の視聴端末3へ送信する(ステップS803)。
これにより、他の視聴端末3には、自らの視聴端末3と同じ先頭時刻T0が記録される。そして、他の視聴端末3は、図5に示したステップS504~S508の処理にて、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求め、再生位置Ctから動画の再生を行う。
このように、自らの視聴端末3に記録されている先頭時刻T0は、他の視聴端末3からの問い合わせに従い、他の視聴端末3へ送信されて記録され、他の視聴端末3において、先頭時刻T0を基準とした再生位置Ctから動画再生が行われる。
つまり、配信ネットワーク1に参加している全ての視聴端末3において、同一の先頭時刻T0が記録され、同一の先頭時刻T0を基準とした動画再生が行われる。したがって、配信ネットワーク1に参加している全ての視聴端末3において、動画の同期再生を実現することができる。
<イベント処理>
次に、図4のステップS404に示したイベント処理について詳細に説明する。図9は、イベント処理(ステップS404)の例を示すフローチャートである。この処理は、視聴端末3の処理負荷等により再生中の動画にフリーズが一瞬発生する等して、異なる視聴端末3間または異なる動画再生部10間(後述する図10を参照)で同期ズレが発生した場合に、当該同期ズレを検出して同期合わせを行うものである。動画再生部10によるHTMLMediaElementのtimeupdateイベントが発火する毎に、図9に示す処理が呼び出されて実行される。
イベント処理部25は、切替しきい値Da等のイベント初期設定を行い、動画再生部10からHTMLMediaElementのtimeupdateイベントの発火を入力する毎に、現在時刻Tn、先頭時刻T0及び再生位置Ctをそれぞれ取得する。そして、イベント処理部25は、現在時刻Tnから先頭時刻T0を減算した時刻が再生位置Ctと一致するように、再生位置Ct及び再生レートPrを算出し、これらを動画再生部10に出力する。
図4のステップS402に示したイベント初期設定において、切替しきい値Daは、例えばDa=5.000(秒)に設定され、再生位置Ct及び再生レートPrを調整するために用いられる。切替しきい値Dbは、例えばDb=1/600(秒)に設定され、再生レートPrを調整する/しないを判断するために用いられる。
再生レート調整幅最大値Raは、例えばRa=6.000(秒)に設定され、再生レートPrを調整する際の最大値として用いられる。再生レート調整幅最小値Rbは、例えばRb=1/300(秒)に設定され、再生レートPrを調整する際の最小値として用いられる。
目標調整時間Atは、例えばAt=1.000(秒)に設定され、再生レートPr=1+rにて動画再生したときに、後述する再生位置ズレ|Tn-T0-Ct|=0となる(同期ズレがなくなる)までの時間の目標値として用いられる。
イベント処理部25は、動画再生部10からHTMLMediaElementのtimeupdateイベントの発火を入力すると、メモリ24から先頭時刻T0を読み出す。また、イベント処理部25は、内部時計12から現在時刻Tnを、動画再生部10から再生位置Ctをそれぞれ取得する(ステップS901)。
イベント処理部25は、現在時刻Tnから先頭時刻T0を減算し、さらに再生位置Ctを減算し、減算結果の絶対値を求め、これを再生位置のズレ(再生位置ズレ)|Tn-T0-Ct|とする。
イベント処理部25は、再生位置ズレ|Tn-T0-Ct|が切替しきい値Da以上であるか否かを判定する(ステップS902)。
イベント処理部25は、ステップS902において、再生位置ズレ|Tn-T0-Ct|が切替しきい値Da以上であると判定した場合(ステップS902:Y)、再生位置ズレ|Tn-T0-Ct|が大きいものと判断する。
イベント処理部25は、再生位置ズレ|Tn-T0-Ct|が大きい場合、現在時刻Tnから先頭時刻T0を減算することで再生位置Ctを求める(ステップS903、Ct=Tn-T0)。そして、イベント処理部25は、再生位置Ctを動画再生部10に出力し、動画再生位置を再生位置Ctに設定させる(ステップS904)。
これにより、再生位置ズレ|Tn-T0-Ct|が大きい場合、動画再生部10にて動画再生位置が再生位置Ctに設定され、動画は、再生位置Ctから再生することとなる。
一方、イベント処理部25は、ステップS902において、再生位置ズレ|Tn-T0-Ct|が切替しきい値Da以上でないと判定した場合(ステップS902:N)、再生位置ズレ|Tn-T0-Ct|が大きくないものと判断する。
イベント処理部25は、再生位置ズレ|Tn-T0-Ct|が大きくない場合、再生位置ズレ|Tn-T0-Ct|が切替しきい値Db以上であるか否かを判定する(ステップS905)。
イベント処理部25は、ステップS905において、再生位置ズレ|Tn-T0-Ct|が切替しきい値Db以上であると判定した場合(ステップS905:Y)、再生位置ズレ|Tn-T0-Ct|が小さいものと判断する。
イベント処理部25は、再生位置ズレ|Tn-T0-Ct|が小さい場合、現在時刻Tnから先頭時刻T0を減算し、さらに再生位置Ctを減算した減算結果を目標調整時間Atで除算することで、レートrを求める(r=(Tn-T0-Ct)/At)。そして、イベント処理部25は、再生レート調整幅最大値Ra及び再生レート調整幅最小値Rbを用いてレートrを制限し、1にレートrを加えることで再生レートPrを求め(ステップS906、Pr=1+r)、ステップS908へ移行する。
具体的には、イベント処理部25は、レートrが、再生レート調整幅最大値Raにマイナスを乗算した結果(-Ra)から再生レート調整幅最小値Rbにマイナスを乗算した結果(-Rb)までの間の値となるように、レートrを制限する(-Ra≦r≦-Rb)。すなわち、イベント処理部25は、レートrが-Raよりも小さい場合、レートr=-Raに設定し、レートrが-Rbよりも大きい場合、レートr=-Rbに設定する。
また、イベント処理部25は、レートrが、再生レート調整幅最小値Rbから再生レート調整幅最大値Raまでの間の値となるように、レートrを制限する(Rb≦r≦Ra)。すなわち、イベント処理部25は、レートrが再生レート調整幅最小値Rbよりも小さい場合、レートr=Rbに設定し、レートrが再生レート調整幅最大値Raよりも大きい場合、レートr=Raに設定する。
一方、イベント処理部25は、ステップS905において、再生位置ズレ|Tn-T0-Ct|が切替しきい値Db以上でないと判定した場合(ステップS905:N)、再生位置ズレ|Tn-T0-Ct|がないものと判断する。
イベント処理部25は、再生位置ズレ|Tn-T0-Ct|がないと判断した場合、再生レートPrに1を設定し(ステップS907、Pr=1)、ステップS908へ移行する。
イベント処理部25は、ステップS906またはステップS907から移行して、再生レートPrを動画再生部10に出力し、動画再生レートを再生レートPrに設定させる(ステップS908)。
これにより、再生位置ズレ|Tn-T0-Ct|が小さい場合、動画再生部10にて動画再生レートが再生レートPrに設定され、動画は、再生レートPrにて再生することとなる。つまり、動画再生レートが再生レートPrに変更され、再生速度が微調整(早送りまたはスロー再生)される。
また、再生位置ズレ|Tn-T0-Ct|がない場合、動画再生部10にて動画再生レートが再生レートPr=1に設定され、動画は、再生レートPr=1(1倍速)にて再生することとなる。
このように、自らの視聴端末3において、処理負荷等が原因で他の視聴端末3との間で動画再生の同期ズレが発生した場合(自らの視聴端末3の再生位置Ctが他の視聴端末3の再生位置Ctと異なる場合)、現在時刻Tnから先頭時刻T0を減算した時刻が再生位置Ctと一致するように、再生位置Ct及び再生レートPrが算出される。これにより、自らの視聴端末3の再生位置Ctを、他の視聴端末3の再生位置Ctに一致させることができる。
以上のように、本発明の実施形態の視聴端末3によれば、同期処理部11は、ユーザが所望するコンテンツの動画を視聴する際に、動画プレーヤー起動処理を行う。
具体的には、同期処理部11は、シグナリングサーバ4から他の端末情報を取得し、配信ネットワーク1に参加している他の視聴端末3が存在する場合、他の視聴端末3へ問い合わせを行い、先頭時刻T0を取得してメモリ24に記録する。一方、同期処理部11は、他の視聴端末3が存在しない場合、内部時計12から取得した現在時刻Tnを先頭時刻T0(=Tn)に設定してメモリ24に記録する。
同期処理部11は、現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求め、動画再生部10は、再生位置Ctから動画の再生を行う。
これにより、配信ネットワーク1に新たな視聴端末3が参加した場合、他の視聴端末3の動画が再生位置Ct=Tn-T0にて再生しているところ、新たな視聴端末3の動画を再生位置Ct=Tn-T0から再生させることができる。つまり、全ての視聴端末3において、共通する先頭時刻T0を基準とした再生位置Ctにて、動画の同期再生を実現することができる。
また、同期処理部11は、再生中の動画のシーク操作が完了すると、動画再生部10からシーク操作完了時の再生位置Ctを取得し、現在時刻Tnから再生位置Ctを減算してシーク操作完了に伴う先頭時刻T0を求める。そして、同期処理部11は、先頭時刻T0をメモリ24に記録して他の視聴端末3へ送信する。
これにより、他の視聴端末3は、シーク操作完了に伴う先頭時刻T0を受信すると、先頭時刻T0を記録し、再生位置Ct=Tn-T0から動画の再生を行う。視聴端末3にてシーク操作が完了した場合、当該視聴端末3の動画は、シーク操作完了に伴い再生位置Ctから1倍速で再生しているところ、他の視聴端末3の動画を、シーク操作完了に伴う先頭時刻T0を用いて算出された再生位置Ct=Tn-T0から再生させることができる。つまり、全ての視聴端末3において、シーク操作完了に伴う共通する先頭時刻T0を基準とした再生位置Ctにて、動画の同期再生を実現することができる。
このように、配信ネットワーク1に対して視聴端末3が参加し、または離脱した場合であっても、また、シーク操作が完了した場合であっても、配信ネットワーク1に参加している全ての視聴端末3の再生位置Ctを合わせることができ、視聴端末3の動画を他の視聴端末3の動画に追従させることができる。
したがって、全ての視聴端末3において、共通する先頭時刻T0を保持することができ、先頭時刻T0を基準とした動画の再生が行われるため、動画の同期再生を実現することができる
〔視聴端末の他の例〕
次に、本発明の他の実施形態による視聴端末について説明する。図10は、本発明の他の実施形態による視聴端末の構成例を示すブロック図であり、当該視聴端末において、4つの動画再生部であるHTMLMediaElementにより動画再生が行われる場合の例を示している。1台の視聴端末において、同じWebブラウザー内の異なる4つのHTMLMediaElementを用いて、同期した動画再生が行われる。
この視聴端末3’は、動画再生部10’、同期処理部11’及び内部時計12を備えている。動画再生部10’は、4つのHTMLMediaElementである動画再生部10-1~10-4を備えている。
同期処理部11’は、起動処理部20、送受信処理部21、再生位置算出部22、先頭時刻算出部23’、メモリ24及びイベント処理部25’を備えている。先頭時刻算出部23’は、動画再生部10-1~10-4に対応する先頭時刻算出部23-1~23-4を備え、イベント処理部25’は、動画再生部10-1~10-4に対応するイベント処理部25-1~25-4を備えている。
図3に示した視聴端末3と図10に示す視聴端末3’とを比較すると、両視聴端末3,3’は、内部時計12を備え、同期処理部11,11’の起動処理部20、送受信処理部21、再生位置算出部22及びメモリ24を備えている点で共通する。
一方、視聴端末3’は、動画再生部10’が4つの動画再生部10-1~10-4を備え、同期処理部11’の先頭時刻算出部23’が4つの先頭時刻算出部23-1~23-4を備え、イベント処理部25’が4つのイベント処理部25-1~25-4を備えている点で、それぞれ1つの動画再生部10、同期処理部11の先頭時刻算出部23及びイベント処理部25を備えた視聴端末3と相違する。
図10において、図3と共通する部分には図3と同一の符号を付し、その詳しい説明は省略する。
動画再生部10’に備えた動画再生部10-1~10-4のそれぞれは、図3に示した動画再生部10と同様の処理を行う。
具体的には、動画再生部10-1~10-4のそれぞれは、同期処理部11’の再生位置算出部22から共通の再生位置Ctを入力し、動画再生位置を再生位置Ctに設定し、動画を再生位置Ctから再生する。これにより、動画再生部10-1~10-4間で、動画の同期再生を実現することができる。
動画再生部10-1~10-4のそれぞれは、同期処理部11’のイベント処理部25’に備えた対応するイベント処理部25-1~25-4から再生位置Ctを入力し、動画再生位置を再生位置Ctに設定し、動画を再生位置Ctから再生する。また、動画再生部10-1~10-4のそれぞれは、対応するイベント処理部25-1~25-4から再生レートPrを入力し、動画再生レートを再生レートPrに設定し、動画を再生レートPrにて再生する。
動画再生部10-1~10-4のそれぞれは、所定時間間隔のtimeupdateイベントが発火すると、timeupdateイベントの発火を、対応するイベント処理部25-1~25-4に出力する。
動画再生部10-1~10-4のそれぞれは、対応する先頭時刻算出部23-1~23-4及び対応するイベント処理部25-1~25-4からの再生位置取得リクエストに従い、再生中の動画の再生位置Ctを、対応する先頭時刻算出部23-1~23-4及び対応するイベント処理部25-1~25-4に出力する。
イベント処理部25’に備えたイベント処理部25-1~25-4のそれぞれは、図3に示したイベント処理部25と同様の処理を行う。
具体的には、イベント処理部25-1~25-4のそれぞれは、図9に示した処理を行う。すなわち、イベント処理部25-1~25-4のそれぞれは、対応する動画再生部10-1~10-4からtimeupdateイベントの発火を入力すると、内部時計12から現在時刻Tnを、同期処理部11’から先頭時刻T0を、対応する動画再生部10-1~10-4から再生位置Ctをそれぞれ取得する。
イベント処理部25-1~25-4のそれぞれは、現在時刻Tnから先頭時刻T0を減算した時刻が再生位置Ctと一致するように、再生位置Ct及び再生レートPrを算出し、これらを、対応する動画再生部10-1~10-4に出力する。
尚、図4のステップS402において、切替しきい値Da,Db、再生レート調整幅最大値Ra、再生レート調整幅最小値Rb及び目標調整時間Atのそれぞれは、イベント処理部25-1~25-4間で共通の値として初期設定される。
また、図9のステップS901において、先頭時刻T0及び現在時刻Tnは、それぞれ同期処理部11’及び内部時計12からイベント処理部25-1~25-4間で共通の値として取得される。再生位置Ctは、イベント処理部25-1~25-4のそれぞれに対応する動画再生部10-1~10-4から取得される。
先頭時刻算出部23’に備えた先頭時刻算出部23-1~23-4のそれぞれは、図3に示した先頭時刻算出部23と同様の処理を行う。
具体的には、先頭時刻算出部23-1~23-4のそれぞれは、シーク操作完了を入力すると、再生位置取得リクエストを対応する動画再生部10-1~10-4に出力し、対応する動画再生部10-1~10-4からシーク操作完了時の再生位置Ctを取得する。
先頭時刻算出部23-1~23-4のそれぞれは、内部時計12から取得した現在時刻Tnから再生位置Ctを減算して先頭時刻T0を求め、メモリ24に記録すると共に、送受信処理部21に出力し、さらに再生位置算出部22に出力する。
再生位置算出部22は、先頭時刻算出部23-1~23-4のいずれかから、シーク操作完了に伴う先頭時刻T0を入力すると、送受信処理部21から先頭時刻T0を入力したときと同様に、内部時計12から取得した現在時刻Tnから先頭時刻T0を減算して再生位置Ctを求める。そして、再生位置算出部22は、再生位置Ctを動画再生部10’(全ての動画再生部10-1~10-4)に出力し、動画再生位置を再生位置Ctに設定させる。
これにより、シーク操作が行われた動画再生部10-1~10-4のいずれかにおいて、動画は、再生位置Ctから1倍速にて再生しており、他の動画再生部10-1~10-4において、動画は、同じ再生位置Ctへ移動して再生することとなる。
以上のように、本発明の他の実施形態の視聴端末3’によれば、全ての動画再生部10-1~10-4において、共通する先頭時刻T0を基準とした動画の再生が行われるため、動画の同期再生を実現することができる。
また、配信ネットワーク1に複数の視聴端末3’が参加している場合、全ての視聴端末3’に備えた全ての動画再生部10-1~10-4においても、共通する先頭時刻T0を基準とした動画の再生が行われる。
つまり、配信ネットワーク1に参加している全ての視聴端末3’に備えた全ての動画再生部10-1~10-4において、動画の同期再生を実現することができる。
以上、実施形態を挙げて本発明を説明したが、本発明は前記実施形態に限定されるものではなく、その技術思想を逸脱しない範囲で種々変形可能である。
尚、本発明の実施形態による視聴端末3及び本発明の他の実施形態による視聴端末3’のハードウェア構成としては、通常のコンピュータを使用することができる。視聴端末3,3’は、CPU、RAM等の揮発性の記憶媒体、ROM等の不揮発性の記憶媒体、及びインターフェース等を備えたコンピュータによって構成される。
視聴端末3に備えた動画再生部10及び同期処理部11(起動処理部20、送受信処理部21、再生位置算出部22、先頭時刻算出部23、メモリ24及びイベント処理部25)に備えた各機能は、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。
また、視聴端末3’に備えた動画再生部10’(動画再生部10-1~10-4)及び同期処理部11’(起動処理部20、送受信処理部21、再生位置算出部22、先頭時刻算出部23’(先頭時刻算出部23-1~23-4)、メモリ24及びイベント処理部25’(イベント処理部25-1~25-4))に備えた各機能も、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。
これらのプログラムは、前記記憶媒体に格納されており、CPUに読み出されて実行される。また、これらのプログラムは、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスク等)、光ディスク(CD-ROM、DVD等)、半導体メモリ等の記憶媒体に格納して頒布することもでき、ネットワークを介して送受信することもできる。