以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
<実施形態1>
図1は、本実施形態のシステム構成を図示したものである。本実施形態の動画配信システムは、動画再生クライアント101と動画配信サーバ102から構成される。動画再生クライアント101と動画配信サーバ102はネットワーク103を介して相互に通信が可能である。動画再生クライアント101は動画を再生する動画再生装置である。動画配信サーバ102は動画を配信する動画配信装置である。
動画配信サーバ102には、オリジナル動画に対応する動画のバリエーションを記述したプレイリスト及びオリジナル動画やバリエーション動画の動画ファイルが格納されている。動画再生クライアント101は動画再生のために、プレイリスト及び動画ファイルを動画配信サーバ102から取得する。動画再生クライアント101と動画配信サーバ102は、HTTP(Hyper Text Transfer Protocol)などのプロトコルを用いて通信を行うものとする。なお、図1では、動画再生クライアント101と動画配信サーバ102の台数はともに1台としているが、この台数に限るものではない。
図2は、本実施形態の動画再生クライアント101と動画配信サーバ102の代表的なハードウェア構成を示したものである。動画再生クライアント101のハードウェアは、CPU(Central Processing Unit)201、ROM(Read Only Memory)202、RAM(Random Access Memory)203を備える。さらに、NETIF(Netowork Interface)204、表示装置205、入力装置206、バス207を備える。
動画配信サーバ102のハードウェアは、CPU208、ROM209、RAM210を備える。さらに、NETIF211、表示装置212、入力装置213、バス214を備える。
CPU201は、バス207に接続された各装置の制御を行う。また、CPU201は、動画再生クライアント101の後述の各種処理を実行する。CPU208は、バス214に接続された各装置の制御を行う。また、CPU208は、動画配信サーバ102の後述の各種処理を実行する。
ROM202には、コンピュータの基本制御を行うオペレーティングシステムや動画再生クライアント101の動作プログラムなどが格納される。ROM209には、コンピュータの基本制御を行うオペレーティングシステムや動画配信サーバ102の動作プログラムなどが格納される。
RAM203及びRAM210は、CPU201のワークメモリとして、動作プログラム自身や動作プログラムに必要なデータを格納する。
NETIF204及びNETIF211は、ネットワークを介して接続される外部装置との情報のやり取りを制御する。NETIF204とNETIF211を通して動画再生クライアント101と動画配信サーバ102がデータの送受信を行う。
表示装置205及び表示装置212は、CPU201またはCPU208の処理結果を表示するためのものであり、液晶ディスプレイなどにより構成される。
入力装置206及び入力装置213は、ユーザからの入力を物理的に受け付けるためのものであり、キーボードやマウスまたはタッチパネルにより構成される。
なお、動画再生クライアント101が外部の表示装置または入力装置を使用する場合は、動画再生クライアント101は表示装置205及び入力装置206を持たない構成となる。同様に、動画配信サーバ102が外部の表示装置または入力装置を使用する場合は、動画配信サーバ102は表示装置212及び入力装置213を持たない構成となる。
図3は、本実施形態のプレイリストの例を示したものである。プレイリストはXML(Extensible Markup Language)形式で記述され、一つの動画に対する表示形態の異なる複数の動画の情報をVariationタグとして含む。表示形態に関する情報は、例えば、動画表示領域の一部を切り出して拡大表示するための情報、又は動画の色やコントラストの補正、白黒変換またはセピア変換、表示領域の回転又は反転させるための情報である。
本実施形態では、オリジナル動画に対応する表示形態の異なる動画のバリエーションをバリエーション動画と呼ぶ。プレイリストは、少なくとも一つのバリエーション動画の情報またはオリジナル動画の情報から構成される。Variationタグは動画のMovie IDと属性情報及びVariationを一意に識別するためのidを属性として含む。Movie IDは動画ファイルを一意に識別するためのものである。
動画の属性情報として、動画の画面解像度を表すwidth及びheightを含む。また、各バリエーション動画を途切れずに再生するために最低限必要な通信帯域をbandwidthとして含む。さらに、ユーザが指定した表示形態に対応した情報として、バリエーション動画が動画全画面のどの領域を表示する又は拡大して表示するのかを表すregionを含む。
regionは、全領域を表すALLや右上領域を表すUPPER_RIGHTのように予め定義された値を用いても良いし、表示領域の対角線の端点として始点と終点を表す2点の座標情報を用いても良い。
動画再生クライアント101はプレイリストに含まれる動画の属性情報または表示形態に基づいて、再生に適したバリエーション動画を自動的に選択することができる。例えば、図3のプレイリストにおいて、ユーザが右上領域の拡大を指定した場合には、UPPER_RIGHTのregionに対応したidが3または4のバリエーション動画を再生候補の動画とすることができる。
そして、再生候補の動画の中から、動画再生クライアント101の画面解像度や動的に変わる通信帯域に応じて再生する動画を自動的に選択することができる。
なお、プレイリストは図3に示した以外の要素を含んでも良い。例えば、プレイリストのフォーマットを規定する情報や各バリエーション動画に共通の属性を含んで良い。また、プレイリストに有効期限が設定されている場合は、動画再生クライアント101は有効期限を過ぎるとプレイリストを再取得しなければならない。また、プレイリストは、動画のバリエーションが記述され、動画再生クライアント101で解釈が可能であればその形式は問わない。
プレイリストは図2のようなXMLまたはJSON(JavaScript(登録商標) Object Notation)などの構造化形式のフォーマットを用いることができる。また、構造化されていないテキストファイルとして記述しても良い。
図4は、本実施形態の動画配信サーバ102(動画配信装置)の構成を示すブロック図である。動画配信サーバ102は、動画管理部401、動画生成部402、動画ストレージ403、プレイリスト管理部404、プレイリスト生成部405、プレイリストストレージ406を備える。プレイリストストレージ406はプレイリストを格納するプレイリスト格納部である。
さらに、動画配信サーバ102は通信部407と表示形態取得部411を備える。動画管理部401は動画管理テーブル500を用いて動画ファイルごとの属性情報を保管する。動画ストレージ403は動画を格納する動画格納部である。通信部407は動画再生クライアント101からプレイリスト取得要求等のリクエストを受信する受信部及び、動画配信サーバ102から配信する動画を動画再生クライアント101に送信する送信部の両方の機能を備える。
図5に動画管理テーブル500のスキーマ及び格納値の例を示す。動画管理テーブル500が持つ情報は、動画ファイルを一意に識別するmovie ID、動画ファイルの名前を表すName、動画ファイルのサイズ情報を表すWidth及びHeightを少なくとも含む。
さらに、バリエーション動画については、オリジナル動画を表すOriginal MovieIDや、オリジナル動画のどの領域を表示するかを表すRegionを含む。なお、動画管理テーブル500は、図4に示した以外の属性情報をさらに含んでも良い。例えば、動画のフレームレートやアスペクト比などをさらに含んでも良い。
また、動画管理部401は動画ファイル登録指示を受け取り、動画ファイルの登録を行う。動画ファイル登録指示は、動画ファイルと動画ファイルの属性情報を含む。動画を登録する際には、動画ファイル登録指示の中の動画ファイルを動画ストレージ403に格納し、動画の属性情報を動画管理テーブル500に追加する。なお、動画登録指示は、動画ストレージ403上の動画ファイルのファイルパスと動画ファイルの属性情報としても良い。その場合は、動画を登録する前に動画ストレージ403に動画を格納しておく。
また、動画管理部401は、動画検索クエリを受け取り動画の検索を行う。動画検索クエリは、動画管理テーブル500が格納する項目に対応するものである。そして、動画検索クエリに合致する動画ファイルを返却する。
また、動画管理部401は、動画管理テーブル500に対して登録済み動画の削除や修正を行い、動画ストレージ403に格納された動画ファイルの削除を行う。削除や修正の際には、対象の動画を識別するためのMovie IDを受信する。修正の際には、動画の修正内容を表す情報をさらに受信する。
動画生成部402は、動画変換指示を受け取り、動画管理部401から取得した変換元の動画ファイルに対して動画変換指示に応じた動画ファイルを新規に生成し、生成した動画ファイルを動画管理部401に登録する。動画生成部402が受け取る動画変換指示は、変換元となるオリジナル動画のMovie ID及び変換内容を含む。
図6は、Movie IDが0000−0000−0000−0001のオリジナル動画ファイルに対して右上領域の切り出しを行う場合の動画変換指示の一例である。図6の動画変換指示により、図5のMovie IDが0000−0000−0000−0004のバリエーション動画ファイルが生成される。図6の動画変換指示は、変換元となるオリジナル動画を表すOriginal Movie ID、拡大対象の領域を表すRegionを含む。さらに、変換後の動画のサイズを表すTarget widthとTarget height、変換後の動画の名前を表すNameを含む。なお、拡大対象の領域を指定するためにRegionではなく座標などを用いて動画内の矩形を指示しても良い。
動画ストレージ403は、動画ファイルを格納するためのストレージである。
プレイリスト管理部404は、プレイリスト管理テーブル700を用いて動画のバリエーションを記述したプレイリストを管理する。図7に、プレイリスト管理テーブル700のスキーマ及び格納値の例を示す。プレイリストは、オリジナル動画と関連付けて保管される。プレイリスト管理テーブル700は、プレイリストを一意に識別するためのPlaylist ID、プレイリストに対応するオリジナル動画のMovie IDを含む。
そして、プレイリストが特定の領域を表示するバリエーション動画を含む場合には、Regionの項目に領域を表す値が格納される。なお、一つのプレイリストが特定の領域を表示するバリエーション動画を複数含む場合は、複数のRegionの値を格納して良い。
また、プレイリスト管理部404はプレイリスト登録指示を受け取り、プレイリストの登録を行う。プレイリスト登録指示は、プレイリストとオリジナル動画のMovie IDを含む。プレイリストを登録する際には、プレイリスト登録指示の中のプレイリストをプレイリストストレージ406に格納し、プレイリストの属性情報をプレイリスト管理テーブル700に追加する。なお、プレイリスト登録指示は、プレイリストストレージ406上のプレイリストのファイルパスとオリジナル動画のMovie IDとしても良い。その場合は、プレイリストを登録する前にプレイリストストレージ407にプレイリストを格納しておく。
また、プレイリスト管理部404はプレイリストの検索を行う。受信したプレイリスト検索クエリにMovie IDが含まれ、Movie IDに該当するプレイリストをプレイリスト管理テーブル700から検索する。プレイリスト検索クエリにRegionが含まれている場合はMovie IDとRegionの両方に該当するプレイリストを検索する。そして、プレイリスト検索クエリに合致するプレイリストを返却する。
また、プレイリスト管理部404は、登録済みプレイリストの削除や修正を行う。削除や修正の際には、対象のプレイリストを識別するためのPlaylist IDを受信する。修正の際には、プレイリストの修正内容を表す情報をさらに受信する。
プレイリスト生成部405は、プレイリスト生成指示を受け取りプレイリストの生成を行う。プレイリスト生成指示は2種類のMovie IDを含む。2種類のMovie IDとは、オリジナル動画とバリエーション動画のMovie IDである。バリエーション動画のMovie IDは複数指定することができる。
プレイリスト生成部405は、バリエーション動画の属性情報を動画管理部401から取得し、取得したバリエーション動画の属性情報を含むプレイリストを生成する。プレイリストの生成時に、バリエーション動画を途切れずに再生するために最低限必要な通信帯域をバリエーション動画のファイルサイズを基に算出し、Bandwidthとしてプレイリストに含める。なお、プレイリスト生成部405は、プレイリストストレージ406に格納されているプレイリストを更新して新しいプレイリストを生成してもいい。
プレイリストストレージ406は、プレイリストを格納するためのストレージである。
なお、動画ストレージ403及びプレイリストストレージ406は同一のストレージを用いても良いし、動画配信サーバ102とは異なる外部のマシンが提供するストレージの機能を用いても良い。
通信部407は、動画再生クライアント101からネットワーク103を介して送信されたリクエストを処理する機能を有する。例えば、動画配信サーバ102の動画管理部401やプレイリスト管理部404の機能を動画再生クライアント101に提供するための機能を有し、そのための動画配信サーバ102のエンドポイントを公開する。
本実施形態では、サーバのURLをhttp://example.comとする。この場合、例えば、プレイリスト管理部404の機能を利用するためのエンドポイントは、http://example.com/playlistsとなる。そして、プレイリスト管理部404に送信するプレイリスト検索クエリを生成するために必要な情報はURLのクエリパラメータとして、プレイリスト管理部404の機能を利用するためのエンドポイントに付与する。
通信部407は表示形態取得部411を用いて、通信部407が受信したクエリパラメータから表示形態を特定する情報を取得する。そして、取得した表示形態を特定する情報を含むプレイリスト検索クエリを生成する。動画再生クライアント101からのリクエストに応じて、動画配信サーバ102の通信部407は動画管理部401またはプレイリスト管理部404へ処理を送信し、処理結果を動画再生クライアント101に返却する。なお、動画再生クライアント101が動画配信サーバ102に送信する処理の内容を表すクエリは、動画再生クライアント101の動画配信サーバ102に対するリクエストを示す情報を含んでいれば良く、URL以外の形式で表現しても良い。
図8は、本実施形態の動画再生クライアント101(動画再生装置)の構成を示すブロック図である。動画再生クライアント101は、ユーザ操作受付部801、プレイリスト取得部802、動画再生部807、通信部806を備える。動画再生部807はさらに動画選択部803、動画取得部804、動画表示部805、表示形態設定部811を備える。
ユーザ操作受付部801は、ユーザからの操作を受け付けるための手段である。ユーザからの操作として、再生する動画の選択、動画の再生開始、動画の再生停止を受け付ける。さらに、再生中の動画に対する特定領域の拡大などの表示形態の指定を受け付ける。
ユーザが特定領域の拡大表示を指示する場合には、図10の動画表示部901に重畳して表示される拡大候補領域の中から拡大を希望する領域をユーザが選択する。ユーザ操作受付部801はユーザの拡大候補領域の選択結果を表示形態設定部811に送信する。ユーザが拡大候補領域を選択する方法として、動画拡大指示ボタン904をクリックして、表示された拡大候補領域から任意の拡大候補領域をクリックして選択することができる。
表示形態設定部811は受信した拡大領域の選択結果に基づいて拡大する領域を決定する。例えば、右上領域1007が選択されると、表示形態設定部811は動画の拡大を示すregionの値として右上領域1007に対応したUPPER_RIGHTをユーザが指定した拡大表示の拡大領域を属性情報としてプレイリスト取得部802設定する。ここでは、右上領域1007に対応した属性情報の例としてUPPER_RIGHTを挙げたが、右上領域1007の大きさや相対的な座標情報を取得又は特定できる方法であれば、これに限定する必要はない。
なお、ユーザが指定する拡大領域は予め設定された動画の拡大候補領域の中から選択しても良いし、任意の領域を指定しても良い。ユーザが任意の領域を拡大領域として指定した場合は、ユーザ操作受付部801はユーザによって指定された領域の座標を取得する。ユーザが拡大候補領域を指定した場合は、動画内の座標と表示領域の対応関係を表す拡大候補領域の定義は、動画再生クライアント101と動画配信サーバ102間で予め共有されているものとする。例えば、右上領域を表すUPPER_RIGHTなどの定数で拡大する領域が表現されるものとする。
また、ユーザによって指定された拡大領域を拡大した後の表示領域の大きさは、本実施形態では全画面とするが、全画面としなくてもよい。例えば、拡大倍率を可変とした場合は、拡大後の表示領域は拡大倍率によって変わる。その場合は、拡大後の表示領域の大きさや座標を取得又は特定する必要がある。
なお、表示形態設定部811は、拡大表示以外に、ユーザの指定した他の表示形態の属性情報をプレイリスト取得部802に設定することもできる。
プレイリスト取得部802は非図示のプレイリスト取得要求を生成する生成部を備える。ユーザ操作受付部801によって再生する動画が指定された場合や表示形態設定部811によって表示形態が指定された場合に、動画や指定された表示形態の属性情報に応じたプレイリスト取得要求を生成する。生成したプレイリスト取得要求を動画配信サーバ102に送信し、動画配信サーバ102から取得したいプレイリストを取得する。なお、プレイリスト取得要求を生成する生成部はプレイリスト取得部802に含まれず、独立した構成にしてもよい。
プレイリスト取得要求は動画配信サーバ102のインタフェースに則した形式で表現され、本実施形態ではURLで表現するものとする。なお、取得したプレイリストに有効期限が設定されている場合は、有効期限を超過した際にプレイリスト取得部802が再びプレイリストを取得する。
プレイリスト取得要求に表示形態に関する属性情報のほかに、動画再生クライアント101の通信帯域情報を含むこともできる。
動画選択部803は、プレイリストに含まれる動画のバリエーションの中から再生に適した動画を選択する。動画の選択は、通信帯域やディスプレイ解像度等のクライアントの状態や表示形態設定部811によって設定される動画に対する表示形態の指定に基づいて行われる。
動画取得部804は、動画選択部803によって決定されたバリエーション動画ファイルを動画配信サーバ102から取得し、動画表示部805を用いて動画を表示する。
動画表示部805は、動画のフォーマットに応じた再生処理を行い、動画を表示装置205に動画を出力する。
図9および図10は本実施形態の動画配信システムがユーザに提供するユーザインタフェースの例を示したものである。ユーザインタフェースは図8の動画表示部805に対応する部分である。動画表示部805はさらに、動画表示部分901、動画コントロール部分902、動画情報表示部分903から構成される。また、動画コントロール部分902は動画拡大指示ボタン904をさらに含む。
動画表示部分901は、動画再生クライアント101の動画表示部805によって再生される動画を表示するためのインタフェースである。
動画コントロール部分902は、ユーザが動画に対する操作を行う部分であり、動画の再生や停止、早送りや巻き戻し、音量の調整、拡大等の表示形態の指示などの操作が可能である。動画再生クライアント101のユーザ操作受付部801が動画コントロール部分902で行われたユーザの操作を受付ける。なお、図10には、拡大表示に対応する拡大指示ボタン904しか表示していないが、他の表示形態を指示するメニュー又はボタンを含んでもいい。他の表示形態として、例えば、色やコントラストの補正、白黒変換またはセピア変換、表示領域の回転又は反転等がある。
動画情報表示部分903は、動画の属性情報を表示するためのインタフェースであり、プレイリストに含まれる動画の属性情報の一部又は全部を表示する。拡大動画の属性情報が表示されていれば、その拡大動画を取得できることが分かる。
また、動画コントロール部分902内の動画拡大指示ボタン904が押下されると、図10のように拡大候補領域が動画表示部分901に重畳して表示される。図10では、左上領域1005、左下領域1006、右上領域1007、右下領域1008、の4つの拡大候補領域が表示されている。なお、拡大候補領域のサイズ、形状や個数は任意に設定できるものとする。
ユーザは、動画表示部分901に表示された拡大候補領域の中から、拡大表示を希望する領域を選択する。例えば、動画拡大指示ボタン904を押下した状態で、拡大候補領域の右上領域1007を選択すると、ユーザが動画の右上領域1007の拡大を指示したことになる。拡大候補領域の選択は、例えば、マウスポインタを何れの拡大候補領域に移動させて、クリックして選択できる。また、拡大候補領域に対応する選択ボタンを設けて選択することもできる。
ユーザが拡大表示を希望する領域を選択すると、拡大動画をサーバから取得して、選択した領域を拡大した動画の再生が開始される。拡大した動画の再生中は、拡大前の動画のどの領域を拡大しているかを示すナビゲータを表示しても良い。なお、拡大した動画の再生中に、動画拡大指示ボタン904を押下すると、拡大表示が解除され、拡大する前の動画を再生する。
なお、ユーザインタフェースは図9および図10で示した以外の要素を含んで良い。また、ユーザインタフェースの各部を表示するための情報は、動画再生クライアント101と動画配信サーバ102のどちらが保持しても良い。
図11のフローチャートを用いて、動画再生クライアント101が動画再生中のユーザの操作に対応した動画を取得し再生する処理の流れについて説明する。以下、フローチャートは、CPUが制御プログラムを実行することにより実現されるものとする。なお、この処理に先立ってユーザ操作受付部801などによって再生する動画がすでに選択されているものとする。そして、ここでは再生する動画として選択された動画のMovie IDを001とする。
ステップS1101において、動画配信サーバ102からプレイリストを取得する。動画再生クライアント101はプレイリストを取得するために動画配信サーバ102に対してプレイリスト取得要求としてのクエリパラメータ、オリジナル動画を示すMovie ID=001をクエリパラメータとして含めたリクエストを送信する。このクエリパラメータを含んだリクエストURLは、http://example.com/playlists?movieId=001となる。このリクエストURLは、プレイリストを取得するためのリクエストであるので、movieIdはオリジナル動画を特定するための情報である。
このリクエストURLを送信することによって、動画再生クライアント101はMovie ID=001のオリジナル動画に関するバリエーション動画の情報を記載したプレイリストを動画配信サーバ102から取得する。また、ステップS1101で取得したプレイリストの例を図12に示す。図12の例はMovie ID=001のオリジナル動画について、解像度の異なる2種類のバリエーション動画を含んでいる。2種類のバリエーション動画をそれぞれmovieID=0000−0000−0000−0002とmovieID=0000−0000−0000−0003とを用いて特定できる。
次に、ステップS1102において、取得したプレイリストに含まれる動画のバリエーションの中から、再生に適した動画のバリエーションを選択する。例えば、動画再生クライアント101は自身の通信帯域などから再生すべき動画のバリエーションを選択する。ここでは、動画再生クライアント101の現在の通信帯域が300KB/Sであるとし、図12のプレイリストの中からMovie IDが0000−0000−0000−0003のバリエーション動画を選択するものとする。
次に、ステップS1103において、ステップS1102で選択した動画のバリエーションのMovie IDをステップS1104で動画ファイルを取得するために記憶する。
次に、ステップS1104において、セットされたMovie IDの動画ファイルを取得して動画を再生する。この動画ファイルを取得するためのリクエストURLはhttp://example.com/movies/0000−0000−0000−0003となる。このリクエストURLは、バリエーション動画を取得するためのリクエストであるので、セットされたMovie IDはオリジナル動画を特定するための情報である。
そして、動画の再生は、ステップS1110において動画再生が終了したと判断されるまで繰り替えし行われる。なお、ユーザによる動画の再生停止操作または動画の終端までの再生が完了すると、動画再生が終了したと判断される。
また、ステップS1105において、動画再生中にユーザ操作受付部801よって拡大または拡大解除指示が入力されると、ステップS1106において拡大または拡大解除指示に対応したregionの値をプレイリスト取得部802に設定する。ここでは、ユーザが動画の右上領域1007の拡大を指示したものとし、regionの値はUPPER_RIGHTとする。この際に、動画再生クライアント101はプレイリストを取得するために動画配信サーバ102に対してプレイリスト取得要求としてクエリパラメータ、Movie ID=001とRegion=UPPER_RIGHTを送信する。
このクエリパラメータを含んだリクエストURLは、http://example.com/playlists?movieId=001&region=UPPER_RIGHTとなる。また、プレイリスト取得要求は、クエリパラメータを含んだここで挙げたリクエストに限らず、プレイリストを更新するための情報を全て含んでもいい。また、動画再生クライアント101において生成したプレイリストの情報を全て含んでもいい。
ステップS1107とステップS1108において、動画配信サーバ102からプレイリストを取得できるまで、プレイリストの取得を繰り返し実行する。ステップS1107によって取得されたプレイリストの例を図13に示す。なお、ここで説明した処理は一例であり、プレイリストの取得を繰り返し実行しなくてもよい。
図13のプレイリストは、図12のプレイリストが持つバリエーション動画に加え、ステップS1106でセットしたregionを表示するバリエーション動画をさらに含んでいる。プレイリストの取得が完了すると、ステップS1109において、RegionがUPPER_RIGHTに該当する動画のバリエーションを選択し、Movie IDをセットする。
また、Movie IDをセットする際には、動画の先頭から何秒の位置を再生中かを一時的にRAM202に記憶する。そして、ステップS1104において新しくセットされたMovie IDの動画ファイルを取得し、ステップS1009において記憶した再生位置から再生する。
図14のフローチャートを用いて、動画配信サーバ102が動画再生クライアント101からのリクエストに応じてプレイリストを返却する処理の流れについて説明する。図14の処理は、図11の動画再生クライアント101の処理におけるステップS1101やステップS1107に対応した処理である。
ステップS1401において、プレイリスト管理部404に対して、送信されたプレイリスト検索クエリに合致するプレイリストがすでに作成されているかどうかを確認する。プレイリストがすでに作成されていた場合は、ステップS1402において、プレイリストストレージ406から対象のプレイリストを取得する。そして、ステップS1403において、プレイリスト検索クエリを送信した動画再生クライアント101に対してプレイリストを送信する。
また、プレイリストが作成されておらず、ステップS1404においてプレイリスト検索クエリが拡大する領域を示す属性情報regionを含まない場合は、ステップS1405において動画再生クライアント101に対してエラーメッセージを送信する。ステップS1405で送信するエラーメッセージは、プレイリスト検索クエリに該当するプレイリストが動画配信サーバ102上に存在しないことを示すものである。エラーメッセージは、HTTPで規定された404 NOT FOUNDのようなステータスコードをレスポンスのヘッダに付加しても良いし、プレイリストが動画配信サーバ102上に存在しないことを表すメッセージをレスポンスのボディに記述しても良い。
また、プレイリストがすでに作成されておらず、ステップS1404においてプレイリスト検索クエリがregionを含む場合は、ステップS1406においてプレイリスト検索クエリに合致するプレイリストを新たに作成する。ステップS1406の処理については後述する。なお、ステップS1404は、プレイリスト検索クエリがregionを含むかどうかではなく、プレイリストを作成するかどうかを示すパラメータがプレイリスト検索クエリに含まれているかに基づいて判断しても良い。
図15を用いて動画配信サーバ102のステップS1406におけるプレイリスト作成処理について説明する。ここでは、動画再生クライアント101からプレイリスト検索クエリとして、Movie ID=0000−0000−0000−0001とRegion=UPPER_RIGHTが送信されたものとする。
ステップS1501において、動画管理部401に対してプレイリスト検索クエリに合致するバリエーション動画が作成済みかどうかを確認する。バリエーション動画がすでに作成されている場合は、ステップS1504においてプレイリストを生成する。バリエーション動画が作成されていない場合は、受信したプレイリスト検索クエリを用いてステップS1502において動画変換指示を生成する。
次にステップS1503において、動画生成部402を用いて、ステップS1502で生成した動画変換指示に従ってバリエーション動画を生成する。そして、生成したバリエーション動画を動画管理部401に登録する。
ステップS1504において、作成されたバリエーション動画の属性情報を使用して、プレイリストを新たに生成する。ステップS1504では、Movie IDが0000−0000−0000−0001に対応付けられたプレイリストに対して、作成されたバリエーション動画を追加したプレイリストを新規に生成し、プレイリスト管理部404に登録指示を送信する。
プレイリスト管理部404に送信するプレイリスト登録指示は、動画再生クライアント101からプレイリスト検索クエリとして送信されたMovie IDおよび動画の拡大表示の対象領域を表すRegionの値を含む。なお、バリエーション動画の生成においては、動画配信サーバ102にあらかじめ設定された解像度ごとにバリエーション動画を生成しても良い。例えば、低解像度と高解像度のバリエーション動画の両方を生成しても良い。また、ステップS1101を実行した動画再生クライアント101の通信帯域や画面解像度に応じて作成するバリエーション動画を選択しても良い。
図16のフローチャートを用いて、動画配信サーバ102が動画再生クライアント101からの動画ファイル取得リクエストに応じて動画ファイルを返却する処理の流れについて説明する。動画再生クライアント101が送信する動画ファイル取得リクエストはMovie IDを含む。図16の処理は、図11の動画再生クライアント101の処理におけるステップS1104に対応した処理である。
ステップS1601において、動画管理部401に対して、送信されたMovie IDに合致する動画ファイルが存在するかどうかを確認する。動画ファイルが存在する場合は、ステップS1602において、動画ストレージ403から対象の動画ファイルを取得する。そして、ステップS1603において、動画ファイル取得リクエストを送信した動画再生クライアント101に対して動画ファイルを送信する。また、送信されたMovie IDに合致する動画ファイルが存在しない場合は、S1405において動画再生クライアント101に対してエラーメッセージを送信する。
以上のように、本実施形態の動画配信システムによれば、ユーザが動画再生中に行った拡大指示に応じた動画を動画配信サーバ102が作成する。そして、拡大指示に応じた動画を含んだプレイリストを作成し、動画再生クライアント101に作成したプレイリストを返却する。そのため、プレイリストを用いた動画配信方式において、ユーザが動画の視聴中に行った拡大指示に対応した動画をリアルタイムに作成し、作成した拡大動画に再生を切り替えることができる。したがって、ユーザは目的の動画をすぐに視聴することができる。
<実施形態2>
実施形態1では、動画再生クライアント101から動画の拡大指示が送信された場合に、動画配信サーバ102で拡大対象の動画の全ての区間の拡大動画を作成する例を示した。本実施形態では、動画配信サーバ102が動画再生クライアント101の拡大動画の視聴に合わせて拡大動画を区間ごとに逐次作成する例を示す。本実施形態は、基本的には実施形態1を前提としているため、以下では、実施形態1との差分について説明する。
本実施形態では、一つの動画ファイルを単位時間ごとの区間に分割して複数の分割動画として管理する。そのため、動画管理テーブル500に各分割動画に対応する区間を表す項目が追加される。なお、本実施形態では単位時間を30秒とするが、単位時間は任意に設定して良く、さらに区間ごとに可変にしても良いものとする。
図17は、本実施形態におけるプレイリストに含まれる要素を説明したものである。図17は、90秒の動画に対するバリエーション動画が3種類含まれる場合のプレイリストの例を示している。各バリエーション動画は単位時間である30秒ごとに分割され、計9個の動画ファイルがプレイリストに含まれている。図17のプレイリストでは各分割動画ファイルがどの区間を表示するかを、StartおよびEndとして表している。なお、Start及びEndは分割元の動画の先頭からの経過秒数を表すものである。
図18を用いて、動画再生クライアント101が動画再生中のユーザの操作に応じて動画を取得し再生する処理の流れについて説明する。ステップS1801において、動画の再生位置をセットする。再生位置は再生対象の動画の先頭からの経過秒数で表される。
ステップS1801では、動画の先頭からの再生がユーザから指示され、再生位置として0がセットされたものとする。なお、ユーザが動画の途中からの再生を指定した場合は0以外の値がセットされることとなる。
次に、ステップS1802において、取得したプレイリストに含まれる動画のバリエーションの中から、再生に適した動画のバリエーションを選択する。ステップS1802では、ステップS1801でセットした再生位置に従って動画のバリエーションを選択する。
次に、ステップS1803において、現在の再生位置を取得し、セットする。ステップS1803では、現在の再生位置として動画表示部805が現在表示している動画の位置を取得する。そして、ステップS1110において、動画再生が終了していないと判断された場合は、ステップS1802において動画のバリエーションを再び選択し、動画の再生を繰り返し実行する。
図24は本実施形態のサーバの構成である。実施形態1のサーバの構成に加えて、区間動画生成制御部2401と区間動画生成時間予測部2402をさらに備える。区間動画生成制御部2401は各区間の動画生成を行うべきかを判定する。区間動画生成時間予測部は、各区間の動画を生成するために必要な時間を予測する。
図19を用いて、動画配信サーバ102が動画再生中のユーザの操作に応じて拡大動画及びプレイリストを逐次作成する処理の流れについて説明する。図19の処理は図14のステップS1406のプレイリスト作成として実行される。
ステップS1901において、拡大対象の動画の区間数Nを求める。区間数Nは、拡大対象の動画の長さを区間の単位時間で除算することで求める。例えば、180秒の長さの動画に対して、単位時間が30秒の場合は、区間数Nは6となる。ステップS1902、ステップS1910、ステップS1911において、拡大対象の動画の各区間に対して繰り返し処理を行う。
ステップS1903において、i番目の区間の動画が作成済みかどうか動画管理部401に対して確認する。i番目の区間の動画がすでに作成されている場合は、ステップS1909においてプレイリストを生成する。i番目の区間の動画がすでに作成されていない場合は、ステップS1904に進む。
ステップS1904において、動画再生クライアント101での現在の動画の再生位置情報を取得する。動画再生クライアント101での現在の動画の再生位置情報は、動画再生クライアント101がどの区間の動画ファイルを取得済みか動画管理部401に問い合わせて判断する。または、動画再生クライアント101が図11のステップS1105において送信するプレイリスト取得リクエストに現在の動画の再生位置を含めても良い。現在の動画の再生位置情報として、例えば動画再生クライアント101で既に再生した区間Pとすることができる。区間PがP番目の分割動画に対応するとすれば、P番目の分割動画が現在再生中であることを示す。なお、区間の替わりに時間を用いて示すこともできる。
ステップS1905において、現在の再生位置Pと区間iの開始位置を比較する。なお、再生位置Pと区間iの開始位置は、どちらも同一の動画の先頭から経過秒数で表されているため、大小の比較が可能である。現在の再生位置Pよりも区間iの開始位置が小さい場合は、区間iの動画ファイルはすでに動画再生クライアント101で再生が完了しているため、区間iの動画は生成せず、ステップS1910に進む。現在の再生位置Pよりも区間iの開始位置が大きい場合はステップS1906に進む。
ステップS1906において、区間動画生成時間予測部2402が区間iの動画の生成に必要な時間を算出する。動画の生成に必要な時間は、区間iの動画の秒数、解像度、フレームレートなどに基づいて算出する。ステップS1907において、現在の再生位置Pと区間iの動画の生成に必要な時間Qの合計と、区間iの開始位置を比較する。現在の再生位置Pと区間iの動画の生成に必要な時間Qの合計よりも区間iの開始位置が小さい場合は、動画の生成中に動画再生クライアント101での区間iの動画の再生が完了してしまうため、区間iの動画は生成せずステップS1910に進む。現在の再生位置Pと区間iの動画の生成に必要な時間Qの合計よりも区間iの開始位置が大きい場合は、ステップS1908に進む。
ステップS1908において、区間iの動画を生成する。以上のような区間iの動画を生成すべきかの判断を区間動画生成制御部2401が実行する。ステップS1909において、ステップS1908で生成した動画を追加したプレイリストを生成する。ステップS1909が完了した時点で、動画再生クライアント101にプレイリストを返却しても良いし、全ての区間のプレイリストの生成が完了した時点でプレイリストを返却してもよい。ステップS1909が完了した時点で動画再生クライアント101にプレイリストを返却する場合は、プレイリストの有効期限を設定することで動画再生クライアント101のプレイリストの再取得を促すことができる。ここで設定するプレイリストの有効期限は、例えば、区間i+1の動画の生成が完了する予定の時間とすることができる。
以上のように、本実施形態の動画配信システムによれば、動画配信サーバ102がユーザの拡大指示に応じた拡大動画を生成する際に動画再生クライアント101で既に再生された区間(再生済み)の拡大動画を生成しない。まだ再生されていない可能性の高い区間の拡大動画のみを作成する。そのため、動画再生クライアント101が動画のどの位置を視聴しているかの情報(再生中の分割動画の情報)を動画配信サーバ102に送信し、動画配信サーバ102が拡大指示に応じた動画の各区間の生成にどのくらいの時間が必要かを計算する。その結果、動画配信サーバ102が動画再生クライアント101で再生済みの区間及び再生済みの可能性の高い区間の動画を生成せず、動画配信サーバ102の動画生成にかかる負荷や、動画の保管コストの軽減が実現できる。
<実施形態3>
実施形態1では、本実施形態の動画配信システムが提供するユーザインタフェースに関して、ユーザが拡大指示を入力する際の操作の例を示した。本実施形態では、本実施形態の動画配信システムが提供するユーザインタフェースに関して、ユーザに対する通知の表示についての例を示す。本実施形態は、基本的には実施形態1を前提としているため、以下では、実施形態1との差分について説明する。
図20は、動画再生クライアント101がステップS1107において、動画の拡大表示のためのプレイリストを取得している間に表示されるユーザインタフェースの例である。図20では、プレイリストが取得されるまでの残り時間表示領域2001が拡大を指示した左上領域1005内に表示され、ユーザに通知される。
図21は、動画再生クライアント101からステップS1107のリクエストを受信した動画配信サーバ102の処理の流れを示したものである。図21の処理は図14のステップS1406のプレイリスト作成として実行される。ステップS2101において、ステップS1103のバリエーション動画の生成に必要な時間を算出し、動画再生クライアント101に返却する。動画再生クライアント101は動画配信サーバ102から取得した残り時間に応じて残り時間表示領域2001の残り時間の表示を行う。
また、動画再生クライアント101がステップS1101において取得したプレイリストが、図13のように、すでに特定の領域を拡大したバリエーション動画を含んでいた場合は、図22のように、拡大可能領域を表示する。図22は、左上領域1005の拡大が可能であり、左上領域1005内に拡大可能であることを示す拡大済み動画表示ボタン2201が表示される。ユーザが拡大済み動画表示ボタン2201を押下すると、左上領域1005を拡大した動画が再生される。また、動画再生クライアント101がステップS1001において取得したプレイリストが特定の領域を拡大したバリエーション動画を含んでいた場合は、動画拡大指示ボタン904が押下された際に拡大済み動画表示ボタン2201を表示しても良い。
以上のように、本実施形態の動画配信システムによれば、ユーザが入力した拡大指示に応じた拡大動画が再生されるまでの待ち時間が表示される。そのため、ユーザの動画配信システム操作時のストレスを軽減することができる。また、本実施形態の動画配信システムによれば、取得したプレイリストに含まれる拡大済み動画が存在することがユーザに通知される。そのため、ユーザがバリエーション動画を閲覧する機会が増加し、ユーザにとって動画閲覧の使い勝手を向上することができる。
<実施形態4>
実施形態1では、ユーザが動画に対して領域の拡大を指示する場合の処理の例を示した。本実施形態では、ユーザが動画に対して動画の編集や加工を指示する際の処理についての例を示す。本実施形態は、基本的には実施形態1を前提としているため、以下では、実施形態1との差分について説明する。
本実施形態では、ユーザが動画に対して、色やコントラストの補正、白黒またはセピア変換、回転や反転、モザイク付与などの画像の編集や加工を指示するものとする。ユーザ操作受付部801は、ユーザによる指示を非図示の指示メニューを介して受付けることができる。
図23は本実施形態におけるプレイリストの例を示したものである。本実施形態のプレイリストは、画像の編集や加工によって生成されたバリエーション動画を含んでおり、各バリーション動画の編集や可能の情報をEdit Typeとして含んでいる。
例えば、Movie IDが0000−0000−0000−0002のバリエーション動画は、白黒変換を施した動画であり、Movie IDが0000−0000−0000−0003のバリエーション動画は、時計回りに90°回転した動画である。本実施形態では、ユーザの動画の編集や加工に応じたプレイリスト取得要求を動画再生クライアント101が生成し、動画配信サーバ102に送信する。表示形態設定部811が、ユーザ操作受付部801が受け付けたユーザの操作に応じた表示形態の属性情報を設定する。
例えば、ユーザが動画に対して時計回りに90°回転することを指示した場合は、動画の編集や加工を表すeditTypeに時計回り90°回転を示すRotate90CWを設定する。設定した表示形態の属性情報をプレイリスト取得部802に送信する。
プレイリスト取得要求を受信した動画配信サーバ102は、プレイリスト取得要求に含まれる動画の編集や加工に応じたバリエーション動画を生成する。そして、生成したバリエーション動画を含むプレイリストを動画再生クライアント101に返却する。なお、動画配信サーバ102が持つ動画の編集や加工機能をあらかじめ動画再生クライアント101に通知し、動画配信サーバ102が持つ加工機能の中からユーザに動画の編集や加工の内容を選択させても良い。つまり、動画再生クライアント101は、editTypeとして設定可能な値の候補を動画配信サーバ102から前もって取得しても良い。
以上のように、本実施形態の動画配信システムによれば、ユーザが入力した動画の編集や加工指示に応じたバリエーション動画をユーザに提供することができる。
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。