以下、本発明の最良の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
[1.コンテンツ分散保存システムの構成等]
始めに、図1等を参照して、本実施形態に係るコンテンツ分散保存システムの概要構成等について説明する。
図1は、本実施形態に係るコンテンツ分散保存システムにおける各ノード装置の接続態様の一例を示す図である。
図1の下部枠101内に示すように、IX(Internet eXchange)3、ISP(Internet Service Provider)4a,4b、DSL(Digital Subscriber Line)回線事業者(の装置)5a,5b、FTTH(Fiber To The Home)回線事業者(の装置)6、及び通信回線(例えば、電話回線や光ケーブル等)7等によって、インターネット等のネットワーク(現実世界の通信ネットワーク)8が構築されている。なお、図1の例におけるネットワーク8には、データ(パケット)を転送するためのルータが、適宜挿入されているが図示を省略している。
このようなネットワーク8には、複数のノード装置(以下、「ノード」という)Nn(n=1,2,3・・・の何れか)がルータを介して接続されている。また、各ノードNnには、固有の製造番号およびIP(Internet Protocol)アドレスが割り当てられている。そして、本実施形態に係るコンテンツ分散保存システムSは、これらのノードNnのうち、図1の上部枠100内に示すように、何れか複数のノードNnの参加により形成されるピアツーピア方式のネットワークシステムとなっている。
なお、図1の上部枠100内に示すネットワーク9は、既存のネットワーク8を用いて形成された仮想的なリンクを構成するオーバーレイネットワーク9(論理的なネットワーク)である。かかるオーバーレイネットワーク9は、特定のアルゴリズム、例えば、DHTを利用したアルゴリズムにより実現される。
そして、コンテンツ分散保存システムS(言い換えれば、オーバーレイネットワーク9)に参加している各ノードNnには、所定桁数からなる固有の識別情報であるノードIDが割り当てられている。また、当該ノードIDは、例えば、各ノードNnに個別に割り当てられたIPアドレス或いは製造番号を共通のハッシュ関数(例えば、SHA−1等)によりハッシュ化した値(例えば、bit長が160bit)であり、一つのID空間に偏りなく分散して配置されることになる。
なお、コンテンツ分散保存システムSへの参加は、参加していないノードNn(例えば、ノードN8)が、参加している任意のノードNn(例えば、当該システムSに常時参加しているコンタクトノード)に対して参加要求を示す参加メッセージを送信することによって行われる。
また、各ノードNnは、夫々、DHTを用いたルーティングテーブルを保持している。このルーティングテーブルは、コンテンツ分散保存システムS上における各種メッセージの転送先を規定しており、具体的には、ID空間内で適度に離れたノードNnのノードID、IPアドレス及びポート番号を含むノード情報が複数登録されている。なお、IPアドレス及びポート番号は、ネットワークアドレス情報の一例である。
コンテンツ分散保存システムSに参加している1台のノードNnは、該システムSに参加している全てのノードNnのうち、必要最低限のノードNnのノード情報をルーティングテーブルに登録しておき、ノード情報を知らない(記憶していない)ノードNnについては、各ノードNn間で互いに各種メッセージを転送し合って届けてもらうようになっている。
このようなDHTを用いたルーティングテーブルについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
ところで、コンテンツ分散保存システムSにおいては、内容の異なる様々なコンテンツ(例えば、映画や音楽等)データ(実際には、コンテンツデータの複製であるレプリカ)所定のファイル形式で複数のノードNnに分散して保存(格納)されている。
例えば、ノードN5、ノードN8、及びノードN12には、タイトルがXXXの映画のコンテンツデータ(ファイル)が保存されており、一方、ノードN3及びノードN6には、タイトルがYYYの映画のコンテンツデータが保存されるというように、複数のノードNn(以下、「コンテンツ保持ノード」という)に分散されて保存される。
また、これらのコンテンツデータには、夫々、コンテンツ名(タイトル)及びコンテンツID(コンテンツ毎に固有の識別情報)等の情報が付加されている。このコンテンツIDは、例えば、コンテンツ名+任意の数値(或いは、当該コンテンツデータの先頭数バイトでも良い)が、上記ノードIDを得るときと共通のハッシュ関数によりハッシュ化されて生成される(ノードIDと同一のID空間に配置)。或いは、システム管理者が、コンテンツ毎に一意のID値(ノードIDと同一ビット長)を付与しても良い。この場合は、コンテンツ名とそのコンテンツIDの対応が書かれたコンテンツカタログ情報が、全ノードNnに配布される。
また、このように分散保存されているコンテンツデータの所在、つまり、当該コンテンツデータを保存したノードNnのノード情報と当該コンテンツデータに対応するコンテンツID等の組が含まれるインデックス情報が、当該コンテンツデータの所在を管理しているノードNn(以下、「ルートノード」、又は「コンテンツデータ(コンテンツID)のルートノード」という、管理装置の一例)等により記憶(インデックスキャッシュに記憶)、管理されるようになっている。つまり、コンテンツデータを保存しているコンテンツ保持ノードのノード情報は、他のノードNnからの問い合わせに応じて提供可能なようにルートノードにより管理されている。
例えば、タイトルがXXXの映画のコンテンツデータについてのインデックス情報は、そのコンテンツ(コンテンツID)のルートノードであるノードN4により管理され、タイトルがYYYの映画のコンテンツデータについてのインデックス情報は、そのコンテンツ(コンテンツID)のルートノードであるノードN7により管理される。また、このようなルートノードは、例えば、コンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードNnであるように定められる。
そして、あるノードNnのユーザが、所望するコンテンツデータを取得したい場合、当該コンテンツデータの取得を望むノードNn(以下、「ユーザノード」という)は、当該ユーザにより選択されたコンテンツデータのコンテンツID及び自己のIPアドレス等を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。つまり、ユーザノードは、コンテンツ所在問合せ(検索)メッセージを、ルートノードに向けて(ルートノード宛に)送出する(つまり、ルートノードにコンテンツデータの所在を問い合わせる)。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着することになる。
なお、各ノードNnにおいてユーザにより選択されるべきコンテンツデータのコンテンツ名及びコンテンツID等の属性情報は、例えばコンテンツ提供サーバSAから全てのノードNnに配信されるコンテンツカタログ情報に記述されている。また、上記コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。なお、DHTルーティングについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
上記コンテンツ所在問合せ(検索)メッセージを受信したルートノードは、これに含まれるコンテンツIDに対応するインデックス情報をインデックスキャッシュから取得して、当該インデックス情報を、該コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信する。こうしてインデックス情報を取得したユーザノードは、当該インデックス情報に含まれるあるコンテンツ保持ノードのIPアドレス等に基づいて当該コンテンツ保持ノードに接続して、コンテンツ送信要求メッセージを送信(コンテンツデータの要求)し、そこから当該コンテンツデータを取得することが可能になる。なお、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、当該ルートノードと同じインデックス情報をキャッシュしているキャッシュノードから当該インデックス情報を取得することもできる。
ここで、本実施形態では、上記インデックス情報には、ユーザノードにおいて決定された数(複数)分のコンテンツ保持ノードのIPアドレス等を含むノード情報が含まれるようになっている。そして、ユーザノードは、各IPアドレス等に基づいて各コンテンツ保持ノードに接続し、上記コンテンツデータを構成する複数の部分データの夫々を、上記コンテンツ送信要求メッセージの送信(部分データの要求)により、当該各コンテンツ保持ノードから分散して(重複しないように)取得し、当該部分データをバッファメモリに蓄積しつつ再生順序(部分データの再生順序)にしたがって再生(ストリーミング再生)するようになっている。
図2は、コンテンツデータを構成する複数の部分データの夫々が、当該各コンテンツ保持ノードから分散して取得される様子を示す図である。図2の例では、コンテンツデータC1は、例えば所定時間毎に区切られ、全12個の部分データD1〜D12から構成されるようになっている。そして、図2(A)に示すように、例えば部分データD1がノードN5から、部分データD2がノードN8から、部分データD3がノードN12から、夫々取得され、その後、図2(B)に示すように、例えば部分データD4がノードN8から、部分データD5がノードN5から、部分データD6がノードN12から、夫々取得されている。このようにして、ユーザノードであるノードN1は、各部分データを、複数のノードNnから順次取得していくことになる。
なお、ユーザノードが、コンテンツ保持ノードから取得したコンテンツデータを例えば他のノードNnに提供可能にハードディスクに記憶保存した場合、当該ユーザノードは、当該コンテンツデータを保存したことをそのルートノードに知らせるために(言い換えれば、該システムSに参加している他のノードNnに対して公開するために)、そのコンテンツデータのコンテンツID及び自己のノード情報が含まれるパブリッシュ(登録通知)メッセージを生成し、該パブリッシュメッセージを、そのルートノードに向けて(ルートノード宛に)送出する。
これにより、パブリッシュメッセージは、コンテンツ所在問合せ(検索)メッセージと同じように、コンテンツIDをキーとするDHTルーティングによってルートノードに到着することになる。そして、該ルートノードは、受信したパブリッシュメッセージに含まれるノード情報及びコンテンツIDの組を含むインデックス情報を登録(インデックスキャッシュ領域に記憶)することになる。こうして、上記ユーザノードは、新たに、上記コンテンツデータを保持するコンテンツ保持ノードとなる。
なお、上記パブリッシュメッセージに含まれるノード情報及びコンテンツIDの組を含むインデックス情報は、ルートノードに至るまでの転送経路におけるキャッシュノードにおいても登録(キャッシュ)される。
[2.ノードNnの構成及び機能等]
次に、図3を参照して、ノードNnの構成及び機能について説明する。
図3は、ノードNnの概要構成例を示す図である。
各ノードNnは、図3に示すように、演算機能を有するCPU,作業用RAM,各種データおよびプログラムを記憶するROM等から構成されたコンピュータとしての制御部11と、各種データ(例えば、コンテンツデータ、インデックス情報、DHT等)及び各種プログラム等を記憶保存(格納)するためのHD等から構成された記憶部12と、受信されたコンテンツデータを一時蓄積するバッファメモリ13と、コンテンツデータに含まれるエンコードされたビデオデータ(映像情報)およびオーディオデータ(音声情報)等をデコード(データ伸張や復号化等)するデコーダ部14と、当該デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部15と、当該映像処理部15から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部16と、上記デコードされたオーディオデータをアナログオーディオ信号にD (Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部17と、当該音声処理部17から出力されたオーディオ信号を音波として出力するスピーカ18と、ネットワーク8を通じて他のノードNnや各種サーバとの間の情報の通信制御を行うための通信部20と、ユーザからの指示を受け付け当該指示に応じた指示信号を制御部11に対して与える入力部(例えば、キーボード、マウス、或いは、操作パネル等)21と、を備えて構成され、制御部11、記憶部12、バッファメモリ13、デコーダ部14、通信部20、及び入力部21はバス22を介して相互に接続されている。なお、ノードNnとしては、パーソナルコンピュータ、STB(Set Top Box)、或いは、TV受信機等を適用可能である。また、記憶部12には、コンテンツ分散保存システムSに参加する際のアクセス先となるコンタクトノードのIPアドレス及びポート番号、及び全てのコンテンツデータを保存しているコンテンツ提供サーバのIPアドレス及びポート番号等が記憶されている。
このような構成において、制御部11は、CPUが記憶部12等に記憶されたプログラム(本発明のノード処理プログラムを含む)を読み出して実行することにより、全体を統括制御し、コンテンツ分散保存システムSへの参加により上述したユーザノード、中継ノード、ルートノード、キャッシュノード、及びコンテンツ保持ノードの少なくとも何れか一つのノードとしての処理を行うようになっており、ユーザノードとしての処理を実行する場合には、本発明におけるアドレス情報取得手段、コンテンツデータ取得手段、再生制御手段、基準値算出手段、基準値判別手段及び補充条件判別手段等として機能するようになっている。なお、上記ノード処理プログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしてもよいし、例えば、CD−ROM等の記録媒体に記録されて当該記録媒体のドライブを介して読み込まれるようにしても良い。
具体的には、ユーザノードの制御部11は、上述したように、所定(例えばユーザにより選択された)のコンテンツデータを取得するために接続対象となる他のノードNn、つまり、コンテンツ保持ノードの数を決定する。このコンテンツ保持ノードの数は、取得すべきコンテンツデータのビットレート(例えば単位時間当たりに処理(デコード等の再生処理)されるデータ量(bps))、再生時間、及びデータ容量(コンテンツサイズ)の少なくとも何れか一つに基づいて決定される。例えば、ビットレートが高いコンテンツデータ、再生時間が長いコンテンツデータ、及びデータ容量が大きいコンテンツデータは、より多くのコンテンツ保持ノードが確保されるように、当該コンテンツ保持ノードの数が多く決定される。
そして、ユーザノードの制御部11は、上記コンテンツデータのルートノードに問い合わせることにより、当該コンテンツデータを保存しているコンテンツ保持ノードに接続するためのIPアドレス等を含むノード情報を、上記決定された数分取得する。続いて、ユーザノードの制御部11は、取得した各IPアドレス等に基づいて各コンテンツ保持ノードに接続し、上記コンテンツデータを構成する複数の部分データの夫々を、図2に示すように、部分データの要求により、当該各コンテンツ保持ノードから分散して取得し、当該部分データをバッファメモリ13に蓄積させつつ再生順序にしたがって再生(ストリーミング再生)させる制御を行う。かかる再生は、当該コンテンツデータを構成する部分データの受信(取得)開始から、再生に必要なバッファ量(バッファリング量)がバッファメモリ13に蓄積されたときに開始される。このバッファ量は、コンテンツデータの再生が途切れることがないよう十分な量に設定される。こうして、コンテンツデータは、デコーダ部14、映像処理部15、表示部16、音声処理部17、及びスピーカ18を通じて再生出力される。
なお、各部分データには、コンテンツデータにおける位置や順番を示す情報が付加されるようになっており、これにより、制御部11は、各部分データの再生順序を判断することができる。
更に、ユーザノードの制御部11は、上記コンテンツデータの再生中(部分データの再生中)に、接続対象となるコンテンツ保持ノードを補充すべき条件を満たすか否かを判別するようになっている。当該条件が満たされる場合、ユーザノードの制御部11は、上記ルートノードに再度問い合わせることにより、上記再生中のコンテンツデータを保存しているコンテンツ保持ノードに接続するためのIPアドレス等を含むノード情報を所定数分取得するようになっている。ここで、「所定数」は、固定的な数であっても良いが、例えば、再生中のコンテンツデータのビットレート、再生時間、及びデータ容量の少なくとも何れか一つに基づいて再度決定されるようにすることが望ましい。このとき、例えば、当該再生中のコンテンツデータの残りの取得データ量又は残りの再生時間に基づいて、コンテンツ保持ノードの数を再度決定するように構成すれば、無駄無くコンテンツ保持ノードを確保することができる。
また、上記「コンテンツ保持ノードを補充すべき条件」としては、一例として、下記(1)〜(6)が挙げられる。
(1)取得されたノード情報に対応するコンテンツ保持ノードのうち接続(セッション確立)中にある又は接続可能なコンテンツ保持ノードの数が所定数以下になったこと。図4は、コンテンツ保持ノードの数(ノード情報の数)と、ルートノードへの問い合せのタイミングとの関係の一例を示す図である。図4の例では、ルートノードへの再生前の最初の問い合せ後、確保しているコンテンツ保持ノードの数が減少(例えばコンテンツ分散保存システムSからの脱退による)していき、当該数が予め定められていた最低確保数(所定数)以下になった(例えば、下回った)場合に、上記条件が満たされたと判断され、ルートノードへの再問い合わせが行われている。
ここで、ユーザノードは、例えば取得されたノード情報に対応するコンテンツ保持ノードの全てに対してセッションを確立し、当該セッションが切断されたら(または一定時間応答がなかったら)、コンテンツ保持ノードが1つ減ったと認識することができる。この場合、セッションの切断に対して直ちに対応することができる。
或いは、ユーザノードは、例えば取得されたノード情報に対応するコンテンツ保持ノードの全てではなく、それより少ない所定数のコンテンツ保持ノードとセッションを確立し、当該セッションが切断されたら(または一定時間応答がなかったら)、コンテンツ保持ノードが1つ減ったと認識するようにしても良い。当該ユーザノードは、当該セッションを確立しているコンテンツ保持ノードが減った場合、別の(予備の)コンテンツ保持ノード(未だセッションを確立していないもの)とセッションを確立し、当該セッションが切断されたら順々に別の(予備の)コンテンツ保持ノードとセッション確立し、残りのコンテンツ保持ノードの数が所定数を下回ったときに再問い合わせを行うようにする。この場合、実際は、予備のコンテンツ保持ノードが既に脱退している可能性があるが、メモリを節約できる。
(2)コンテンツ保持ノードから取得している部分データの受信速度(伝送速度)が所定速度以下になったこと。例えば、ルートノードへの再生前の最初の問い合せ後、コンテンツ保持ノードから取得(受信)している部分データの合計受信速度(合計伝送速度)が減少(例えば、当該コンテンツ保持ノードの負荷やネットワーク負荷の増加による)していき、当該速度が予め定められていた最低速度(所定速度)以下になった(例えば、下回った)場合に、上記条件が満たされたと判断され、ルートノードへの再問い合わせが行われる。
(3)バッファメモリ13における全部分データのバッファ量が所定量以下になったこと。図5は、バッファメモリ13におけるバッファ量と、ルートノードへの問い合せのタイミングとの関係の一例を示す図である。図5の例では、ルートノードへの再生前の最初の問い合せ後、バッファ量が減少(例えば、上記(2)の受信速度の低下による)していき、当該バッファ量が予め定められていた最低バッファ量(所定量)以下になった(例えば、下回った)場合に、上記条件が満たされたと判断され、ルートノードへの再問い合わせが行われている。
(4)接続されたコンテンツ保持ノードに対する部分データの要求から所定時間が経過しても応答が無いこと。図6は、部分データの要求から所定時間が経過しても応答が無い様子を示す図である。図6の例では、ノードN5及びノードN8からは応答があったものの、ノードN12からは、要求後所定時間経過しても応答が無く、かかる場合、タイムアウトとなり、上記条件が満たされたと判断され、ルートノードへの再問い合わせが行われる。ただし、この条件が満たされた場合において、例えば他のコンテンツ保持ノード(ノードN5及びノードN8)の何れかが空き状態、つまり、部分ノードの送信中でない場合には、当該空き状態にあるコンテンツ保持ノードに対して部分データの要求をできるので、ルートノードへの再問い合わせが行われないように構成しても良い。
(5)取得された全てのノード情報に対応する全てのコンテンツ保持ノードから夫々の部分データの取得中になったこと。例えば、図2(A)に示すように、部分データD1がノードN5から、部分データD2がノードN8から、部分データD3がノードN12から、夫々取得中にあり、しかもそれらの部分データの伝送速度が遅いと、次の部分データD4の要求待ち状態になる。このような要求待ち状態を無くすために、全てのコンテンツ保持ノードから部分データの取得中(言い換えれば、全てのコンテンツ保持ノードが部分データの送信中)になった場合に、上記条件が満たされたと判断され、ルートノードへの再問い合わせが行われる。
(6)取得されたノード情報に対応するコンテンツ保持ノードのうち、予め定められた予備のコンテンツ保持ノードの数が所定数以下になったこと。例えば、6つのコンテンツ保持ノードが確保され、そのうち3つのコンテンツ保持ノードに対して、図2に示すように、部分データの要求が行われる(つまり、予備のコンテンツ保持ノードが3つ確保される)場合において、例えば当該コンテンツ保持ノードが既に脱退しており応答がない場合(或いは応答が遅い場合)に、予備のコンテンツ保持ノードが使用されこれに部分データの要求が行われることになる。その使用により予備のコンテンツ保持ノードの数が最低確保数(所定数)以下になった(例えば、下回った)場合に、上記条件が満たされたと判断され、ルートノードへの再問い合わせが行われる。最低確保数の設定により、例えば予備のコンテンツ保持ノードが一つでも使用された場合、或いは全ての予備のコンテンツ保持ノードが使用された場合に、ルートノードへの再問い合わせを行うことができる。
ここで、上記条件が満たされることによりルートノードへの再度問い合わせが頻繁に行われても、同じ結果となる場合があるので、同じ結果となる、つまり、前回取得したノード情報が再度取得される可能性が高い。
そこで、本実施形態においては、ユーザノードの制御部11は、少なくとも前回のルートノードへの問い合わせ時刻及び現在時刻をパラメータとして基準値を算出し、当該算出された基準値が所定の条件を満たすか否かを判別する。
例えば、前回のルートノードへの問い合わせ時刻から現在時刻までの経過時間が基準値として算出される。又は、前回のルートノードへの問い合わせ時刻から現在時刻までに上記コンテンツデータを提供可能になった(例えば、コンテンツ分散保存システムSに新たに参加、又は当該コンテンツデータを新たに保存することによる)コンテンツ保持ノードの数が基準値として算出される。
そして、当該制御部11は、算出した基準値が所定の条件を満たす場合(例えば、当該基準値が閾値以上のとき)にはじめて、ルートノードに再度問い合わせることにより、上記再生中のコンテンツデータを保存しているコンテンツ保持ノードに接続するためのIPアドレス等を含むノード情報を所定数分取得するようになっている。
[3.コンテンツ分散保存システムSの動作]
次に、図7乃至図11を参照して、コンテンツ分散保存システムSの動作について説明する。
図7は、ノードNnの制御部11におけるメイン処理を示すフローチャートである。また、図8は、図7における検索コンテンツ保持ノード数決定処理の一例を示すフローチャートである。図9は、検索コンテンツ保持ノード数決定処理において参照されるテーブルの一例を示す図である。図10は、図7における再問い合せ処理の一例を示すフローチャートである。図11は、図7におけるメッセージ受信処理の一例を示すフローチャートである。
図7に示す処理は、任意のノードNnにおいて例えば電源ONになった場合に開始され、コンテンツ分散保存システムSへの参加処理が実行される(ステップS1)。この参加処理においては、当該ノードNnの制御部11は、記憶部12からコンタクトノードのIPアドレス及びポート番号を取得し、これに基づきコンタクトノードにネットワーク8を介して接続し、参加要求を示す参加メッセージ(自己のノードID及びノード情報等を含む)を送信する。これにより、当該ノードNnには、当該システムSに参加している他のノードNnからルーティングテーブルが送信されることになり、受信したルーティングテーブルに基づき自己のルーティングテーブルを生成し、コンテンツ分散保存システムSに参加が完了することになる。
こうしてコンテンツ分散保存システムSへの参加処理が完了すると、制御部11は、電源OFFの指示(例えば、ユーザから入力部21を介した電源OFF操作指示)があった場合には(ステップS2:YES)、当該処理を終了する。一方、電源OFFの指示がない場合には(ステップS2:NO)、制御部11は、コンテンツデータが再生中であるか否かを判別する(ステップS3)。コンテンツデータが再生中である場合、つまり、受信されバッファリングされている部分データが再生中である場合には(ステップS3:YES)、ステップS10に進み、コンテンツデータが再生中でない場合には(ステップS3:NO)、ステップS4に進む。
ステップS4では、制御部11は、コンテンツ再生指示があったか否かを判別する。かかるコンテンツ再生指示は、例えば、ユーザが入力部21を操作して、コンテンツカタログ情報の中から所望のコンテンツデータのコンテンツ名を選択し再生指示をすることよりなされる。コンテンツ再生指示があった場合には(ステップS4:YES)、ステップS5に進み、コンテンツ再生指示がない場合には(ステップS4:NO)、ステップS17に進む。
ステップS5では、制御部11は、前回の再問い合せ時刻Tqを“0”にセット(リセット)し、新しく発見(検索)されたコンテンツ保持ノードの追加数Nnewを“0”にセット(リセット)する。
ステップS6では、制御部11は、検索コンテンツ保持ノード数決定処理を行い、再生指示された取得すべきコンテンツデータのビットレート、再生時間、及びデータ容量の少なくとも何れか一つに基づいてコンテンツ保持ノードの数を決定する。
例えば、図8に示すように、制御部11は、ビットレート、再生時間、及びデータ容量のうちの何れかを判別パラメータとし(どれを判別パラメータとするかは予め設定)、その値を取得する(ステップS51)。そして、制御部11は、当該判別パラメータの値が、例えば図9(A)に示すテーブルにおける判別パターンAに該当するか(例えば、判別パラメータがビットレートである場合、当該コンテンツデータのビットレートが2Mbps以上であるか)否かを判別する(ステップS52)。そして、判別パターンAに該当する場合には(ステップS52:YES)、制御部11は、コンテンツ保持ノードの数をK1(例えば10個)に決定し(ステップS53)、図7の処理に戻る。
一方、判別パターンAに該当しない場合には(ステップS52:NO)、制御部11は、上記判別パラメータの値が、例えば図9(A)に示すテーブルにおける判別パターンBに該当するか(例えば、判別パラメータがビットレートである場合、当該コンテンツデータのビットレートが500K以上2Mbps未満であるか)否かを判別する(ステップS54)。そして、判別パターンBに該当する場合には(ステップS54:YES)、制御部11は、コンテンツ保持ノードの数をK2(例えば5個)に決定し(ステップS55)、図7の処理に戻る。一方、判別パターンBに該当しない場合(例えば図9(A)に示すテーブルにおける判別パターンCに該当)には(ステップS54:NO)、制御部11は、コンテンツ保持ノードの数をK3(例えば3個)に決定し(ステップS56)、図7の処理に戻る。
次に、図7に示すステップS7では、制御部11は、上記再生指示された取得すべきコンテンツデータのコンテンツID、及び上記決定されたコンテンツ保持ノードの数の指定等を含むコンテンツ所在問合せメッセージ(クエリ)を、当該コンテンツデータのルートノードに向けて送出することにより(つまり、当該コンテンツデータのルートノードに問い合わせることにより)、上記決定された数分のコンテンツ保持ノードのノード情報を含むインデックス情報を取得する。
そして、制御部11は、取得されたインデックス情報に含まれるコンテンツ保持ノードのノード情報を、RAM等に記憶されたコンテンツ保持ノードリストに登録し、上記コンテンツ保持ノードの総数Nh(コンテンツ保持ノードリストに登録されている数)に加算する(ステップS8)。
続いて、制御部11は、取得したインデックス情報(コンテンツ保持ノードリスト)に含まれるノード情報に基づきコンテンツ保持ノードに接続しコンテンツ送信要求メッセージを送信し(コンテンツ要求し)、一定時間待機する(ステップS9)。当該コンテンツ送信要求メッセージにより、複数のコンテンツ保持ノードから、コンテンツデータの各部分データがストリーム配信され、通信部20を介してバッファメモリ13にバッファリングされることになる。
なお、問い合わせたルートノードに、コンテンツ保持ノードのノード情報が登録されていない場合、ステップS8及びS9の処理は行われず、ステップS10に進むことになる。
ステップS10では、コンテンツ保持ノードのノード情報を含むインデックス情報を取得しているか否かを判別し、取得していない場合には(ステップS10:NO)、ステップS11に進み、取得している場合には(ステップS10:YES)、ステップS12に進む。
ステップS11では、制御部11は、上記問い合わせたルートノードからコンテンツ保持ノードのノード情報を得られなかったので、コンテンツ提供サーバに接続し、コンテンツ送信要求メッセージを送信し(コンテンツ要求し)、ステップS15に進む。これにより、コンテンツ提供サーバからコンテンツデータがストリーム配信され、通信部20を介してバッファメモリ13にバッファリングされることになる。
一方、ステップS12では、制御部11は、再問い合せ処理を行う。当該再問い合せ処理の詳細は後述する。
ステップS13では、制御部11は、再問い合せ処理により取得されたインデックス情報に含まれるコンテンツ保持ノードのノード情報のうち、新たに取得された(つまり、未だコンテンツ保持ノードリストに登録されていない)ノード情報を、上記コンテンツ保持ノードリストに登録し、上記コンテンツ保持ノードの総数Nh及び追加数Nnewに、新たに登録されたノード情報の数を夫々加算し、ステップS14に進む。
ステップS14では、制御部11は、再問い合せ処理により取得されたインデックス情報(コンテンツ保持ノードリスト)に含まれるノード情報に対応するコンテンツ保持ノードのうち、未だコンテンツ送信要求メッセージを送信していない(コンテンツ要求をしていない)コンテンツ保持ノードに接続しコンテンツ送信要求メッセージを送信し、ステップS15に進む。これにより、そのコンテンツ保持ノードから、コンテンツデータの各部分データがストリーム配信され、通信部20を介してバッファメモリ13にバッファリングされることになる。ただし、当該コンテンツ保持ノードに対して接続(セッション確立)を試みたが応答がなく接続に失敗した場合には、制御部11は、当該コンテンツ保持ノードのノード情報をコンテンツ保持ノードリストから削除する。
ここで、上記ステップS12における再問い合せ処理の詳細について説明する。
当該再問い合せ処理においては、例えば、図10に示すように、制御部11は、上記(1)〜(6)で挙げられた何れかのコンテンツ保持ノードを補充すべき条件(どれを条件とするかは予め設定)を満たすか否かを判別する(ステップS101)。そして、当該条件が満たされる場合(ステップS101:YES)、制御部11は、ステップS102に進み、当該条件が満たされない場合(ステップS101:NO)、図7に示す処理に戻る。
なお、この再問い合せ処理において、ステップS101の処理が行われることなく、ステップS109から開始されるように構成しても良い。
ステップS102では、制御部11は、後述する、単位時間当たりの参加率Pを含む統計情報の記録があるか(つまり、統計情報が記憶されているか)否かを判別し、統計情報の記録がない場合には(ステップS102:NO)、ステップS103に進み、統計情報の記録がある場合には(ステップS102:YES)、ステップS104に進む。
ステップS103では、制御部11は、前回の再問い合せ時刻Tqから現在時刻までの経過時間(「現在時刻」−Tq)が所定時間以上であるか否かを判別し、所定時間以上である場合には(ステップS103:YES)、ステップS106に進み、所定時間以上でない場合には(ステップS103:NO)、図7に示す処理に戻る。ここで、かかるステップS103の処理は、統計情報の記録がない間だけ行われるものである。また、「所定時間」には、例えば30秒、又は1分など適当な時間が設定される。これにより、前回のルートノードへの再問い合わせから間もない頃は、同じ結果となる可能性が高いため、再問い合わせしないようにされる。
ステップS104では、制御部11は、単位時間当たりの参加率Pの平均値Pavrを算出する。なお、統計情報に、一つの参加率Pのみが含まれている場合、当該参加率Pが平均値Pavrとなる。
次いで、制御部11は、前回の再問い合わせから現在時刻までのコンテンツ保持ノードの推定参加数(Pavr×Nh×(「現在時刻」−Tq))が所定数以上であるか否かを判別し(ステップS105)、所定数以上である場合には(ステップS105:YES)、ステップS106に進み、所定時間以上でない場合には(ステップS105:NO)、図7に示す処理に戻る。ここで、「Pavr×Nh」は、単位時間当たりのコンテンツ保持ノードの推定参加数を意味する。また、前回の再問い合わせから現在時刻までのコンテンツ保持ノードの推定参加数は、前回の再問い合わせから現在時刻までに、例えば当該コンテンツデータを保存、又は当該コンテンツデータを保存している状態で当該システムSに参加することにより、新たなコンテンツ保持ノードがルートノードに登録された数に相当する。そして、「所定数」には、再問い合わせする価値がある数(例えば1〜3)が設定される。
ステップS106では、制御部11は、前回の再問い合せ時刻Tq=0であるか否かを判別し、0でない場合には(ステップS106:NO)、ステップS107に進み、0である場合には(ステップS106:YES)、ステップS108に進む。
ステップS107では、制御部11は、単位時間当たりの参加率Pを算出(P=(Nnew÷Nh)÷(「現在時刻」−Tq))し、これを統計情報として記憶し、ステップS108に進む。ここで、「Nnew÷Nh」は、前回の再問い合わせから増加(コンテンツ保持ノードとして新たに参加)したコンテンツ保持ノードの割合(参加率)を意味する。このように算出される参加率Pは、当該ステップS107が行われる度に統計情報中に登録されることになる。
ステップS108では、制御部11は、前回の再問い合せ時刻Tqを「現在時刻」にセットし、コンテンツ保持ノードの追加数Nnewを“0”にセット(リセット)する。
次いで、制御部11は、ステップS6と同じように、図8に示すような検索コンテンツ保持ノード数決定処理を行い、コンテンツ保持ノードの数を決定する(ステップS109)。
ただし、この場合、上述したように、再生中のコンテンツデータの残りの取得データ量又は残りの再生時間に基づいて、コンテンツ保持ノードの数を再度決定することが望ましい。例えば、図8に示すステップS52において、制御部11は、残りの再生時間、及び残りのデータ容量のうちの何れかを判別パラメータとし(どれを判別パラメータとするかは予め設定)、その値を取得する。そして、上記ステップS52において、制御部11は、当該判別パラメータの値が、例えば図9(B)に示すテーブルにおける判別パターンAに該当するか(例えば、判別パラメータが残りの再生時間である場合、当該コンテンツデータの残りの再生時間が2時間以上であるか)否かを判別する。そして、判別パターンAに該当しない場合には、上記ステップS54において、上記判別パラメータの値が、例えば図9(B)に示すテーブルにおける判別パターンBに該当するか(例えば、判別パラメータが残りの再生時間である場合、当該コンテンツデータの残りの再生時間が30分以上2時間未満であるか)否かを判別する。このようにして、コンテンツ保持ノードの数が決定される。
次いで、制御部11は、上記再生中のコンテンツデータのコンテンツID、及び上記ステップS109で決定されたコンテンツ保持ノードの数の指定等を含むコンテンツ所在問合せメッセージ(クエリ)を、当該コンテンツデータのルートノードに向けて送出することにより(つまり、当該コンテンツデータのルートノードに問い合わせることにより)(ステップS110)、上記ステップS109で決定された数分のコンテンツ保持ノードのノード情報を含むインデックス情報を取得し、図7に示す処理に戻り、上述したようにステップS13及びS14の処理が行われる。
図7に示すステップS15では、制御部11は、再生に必要なバッファ量がバッファメモリ13に蓄積された否かを判別し、蓄積された場合には(ステップS15:YES)、ステップS16に進み、蓄積されていない場合には(ステップS15:NO)、ステップS17に進む。
ステップS16では、制御部11は、バッファメモリ13に蓄積されたコンテンツデータの再生処理を行う(データをバッファメモリ13からデコーダ部14に転送するなどの制御を行う)。
ステップS17では、制御部11は、コンテンツデータの受信中であるか否かを判別し、受信中である場合には(ステップS17:YES)、ステップS18に進み、受信中でない場合には(ステップS17:NO)、ステップS21に進む。
ステップS18では、制御部11は、受信され、バッファメモリ13にバッファリングされているコンテンツデータ(部分データ)を所定のファイル形式で記憶部12に書き込む(保存)ように制御する。
次いで、制御部11は、当該コンテンツデータの全部が書き込まれたか否かを判別し(ステップS19)、書き込まれていない場合には(ステップS19:NO)、ステップS21に進み、書き込まれた場合には(ステップS19:YES)、当該コンテンツデータのルートノードに向けて上述したパブリッシュメッセージを送出し(ステップS20)、ステップS21に進む。
ステップS21では、制御部11は、メッセージを受信したか否かを判別し、受信していない場合には(ステップS21:NO)、ステップS2に戻り、受信した場合には(ステップS21:YES)、メッセージ受信処理を行う(ステップS22)。
このメッセージ受信処理においては、図11に示すように、制御部11は、受信したメッセージがパブリッシュメッセージであるか否かを判別し(ステップS191)、パブリッシュメッセージである場合には(ステップS191:YES)、ステップS192に進み、パブリッシュメッセージでない場合には(ステップS191:NO)、ステップS195に進む。
ステップS192では、制御部11は、受信したパブリッシュメッセージに含まれるノード情報及びコンテンツIDの組をインデックス情報としてインデックスキャッシュに記憶する。
次いで、制御部11は、自己(自ノード)がルートノードであるか否かを判別(つまり、自己のルーティングテーブルを参照して、当該パブリッシュメッセージに含まれるコンテンツIDと最も近いノードIDが自分であるか否かを判別)し(ステップS193)、自己がルートノードでない(つまり、中継ノードである)場合には(ステップS193:NO)、ステップS194に進み、自己がルートノードである場合には(ステップS193:YES)、図7に示す処理に戻る。
ステップS194では、制御部11は、メッセージを、自己のルーティングテーブルにしたがって他のノードNn(つまり、当該コンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードNn)に対して転送し、図7に示す処理に戻る。なお、ステップS191のYES経由の場合には、ステップS194にて上記パブリッシュメッセージが転送される。一方、ステップS195のYES経由の場合には、ステップS194にて、後述するコンテンツ所在問合せメッセージが転送される。
ステップS195では、制御部11は、受信したメッセージがコンテンツ所在問合せメッセージ(クエリ)であるか否かを判別し、コンテンツ所在問合せメッセージである場合には(ステップS195:YES)、ステップS196に進み、コンテンツ所在問合せメッセージない場合には(ステップS195:NO)、ステップS198に進む。
ステップS196では、制御部11は、コンテンツ所在問合せメッセージに含まれるコンテンツIDに対応するコンテンツデータを保存するコンテンツ保持ノードのノード情報がインデックスキャッシュに登録されているか否かを判別する。そして、当該ノード情報がインデックスキャッシュに登録されている場合には(ステップS196:YES)、制御部11は、ステップS197に進み、当該ノード情報がインデックスキャッシュに登録されていない場合には(ステップS196:NO)、ステップS193に移行する。
ステップS197では、制御部11は、コンテンツ所在問合せメッセージにおいて指定された数(指定された数に満たない場合は、当該数に最も近い数)分の上記ノード情報をインデックスキャッシュから取得して、当該ノード情報を含むインデックス情報を、当該コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信し、ステップS193に移行する。
ステップS198では、制御部11は、受信したメッセージがコンテンツ送信要求メッセージであるか否かを判別し、コンテンツ送信要求メッセージでない場合には(ステップS198:NO)、ステップS200に進む。一方、コンテンツ送信要求メッセージである場合には(ステップS198:YES)、当該コンテンツ送信要求メッセージを送信したユーザノードに対して、当該要求に係るコンテンツデータの部分データをストリーム配信し(ステップS199)、図7に示す処理に戻る。
なお、ステップS200におけるその他のメッセージ処理では、上記メッセージ以外のメッセージ(例えば参加メッセージ等)が受信された場合の処理が行われる。
以上説明したように、上記実施形態によれば、ユーザノードは、コンテンツ保持ノードから取得された、コンテンツデータを構成する部分データの再生中に、少なくとも前回のルートノードへの問い合わせ時刻及び現在時刻をパラメータとして基準値を算出し、当該基準値が所定の条件を満たすか否かを判別し、当該条件を満たす場合に、当該ルートノードに再度問い合わせることにより、コンテンツ保持ノードのノード情報を、所定数分取得するように構成したので、再問合せの結果が前回と結果となることを極力回避し、無駄な検索処理、及び無駄なトラフィックを極力減らすことができる。
また、前回の再問い合わせから現在時刻までのコンテンツ保持ノードの推定参加数を上記基準値として算出し、その推定参加数が所定数以上である場合に、当該ルートノードに再度問い合わせるようにすれば、再問合せの結果が前回と結果となることを、より一層回避でき、無駄な検索処理、及び無駄なトラフィックを、より一層減らすことができる。
また、ユーザノードは、コンテンツ保持ノードから取得された、コンテンツデータを構成する部分データの再生中に、接続対象となるコンテンツ保持ノードを補充すべき条件を満たすか否かを判別し、当該条件が満たされる場合に、当該コンテンツデータのルートノードに再度問い合わせることにより、当該コンテンツデータを保存しているコンテンツ保持ノードのノード情報を取得するように構成したので、上記コンテンツデータを構成する部分データを提供するコンテンツ保持ノードの数を十分に確保でき、したがって、コンテンツ提供サーバに負担をかけずに(言い換えれば、当該サーバへ頼る確率を下げ)、当該コンテンツデータをより効率良く取得しスムーズに再生することができる。
また、上記コンテンツ保持ノードを補充すべき条件として、取得されたノード情報に対応するコンテンツ保持ノードのうち接続中にある又は接続可能なコンテンツ保持ノードの数が所定数以下になったこととすれば、当該コンテンツ保持ノードが例えばコンテンツ分散保存システムSからの脱退によりその数が減少しても当該コンテンツ保持ノードを迅速に補充できる。
また、上記コンテンツ保持ノードを補充すべき条件として、コンテンツ保持ノードから取得している部分データの受信速度(伝送速度)が所定速度以下になったこととすれば、ネットワーク負荷或いは部分データの送信元のコンテンツ保持ノードの負荷の増大等により部分データの伝送速度が低下してもコンテンツ保持ノードを補充して伝送速度を向上させることができる。
また、上記コンテンツ保持ノードを補充すべき条件として、バッファメモリ13における全部分データのバッファ量が所定量以下になったこととすれば、ネットワーク負荷或いは部分データの送信元のコンテンツ保持ノードの負荷の増大等により上記バッファ量が低下してもコンテンツ保持ノードを補充してバッファ量を向上させることができる。
また、上記コンテンツ保持ノードを補充すべき条件として、接続されたコンテンツ保持ノードに対する部分データの要求から所定時間が経過しても応答が無いこととすれば、接続されたコンテンツ保持ノードから応答が無い場合であってもコンテンツ保持ノードを迅速に補充できる。
また、上記コンテンツ保持ノードを補充すべき条件として、取得された全てのノード情報に対応する全てのコンテンツ保持ノードから夫々の部分データの取得中になったこととすれば、コンテンツ保持ノードを迅速に補充して次の部分データの要求待ち状態をなくすことができる。
更に、取得すべきコンテンツデータのビットレート、再生時間、及びデータ容量の少なくとも何れか一つに基づいて接続対象となるコンテンツ保持ノードの数を決定するように構成したので、当該コンテンツ保持ノードの数を無駄のない適切な数に設定することができる。例えば、メッセージの転送回数が無駄に増すことを回避することができる。
なお、上記実施形態におけるコンテンツ分散保存システムSは、DHTを利用したアルゴリズムによって形成されることを前提として説明したが、本発明はこれに限定されるものではない。