以下、本発明の最良の実施形態を図面に基づいて説明する。
[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)アドレスが割り当てられている。このような製造番号およびIPアドレスは、複数のノード間で重複しないものである。
そして、本実施形態に係るコンテンツ分散保存システムSは、これらのノードNnのうち、図1の上部枠100内に示すように、何れか複数のノードNnの参加により形成されるピアツーピア方式のネットワークシステムとなっている。なお、図1の上部枠100内に示すネットワーク9は、既存のネットワーク8を用いて形成された仮想的なリンクを構成するオーバーレイネットワーク9(論理的なネットワーク)である。
このようなコンテンツ分散保存システムSは、特定のアルゴリズム、例えば、DHT(Distributed Hash Table)を利用したアルゴリズムにより実現される。そして、コンテンツ分散保存システムSに参加している各ノードNnには、固有のノード識別情報であるノードIDが割り当てられており、当該ノードIDは、例えば、各ノードNnに個別に割り当てられたIPアドレス或いは製造番号を共通のハッシュ関数(例えば、SHA−1等)によりハッシュ化した値(例えば、bit長が160bit)であり、一つのID空間に偏りなく分散して配置されることになる。
なお、コンテンツ分散保存システムSへの参加は、参加していないノードNn(例えば、ノードN8)が、参加している任意のノードNn(例えば、当該システムSに常時参加しているコンタクトノード)に対して参加要求を示す参加メッセージを送信することによって行われる。
上記のように共通のハッシュ関数により求められた(ハッシュ化された)ノードIDは、当該IPアドレス或いは製造番号が異なれば、同じ値になる確率が極めて低いものである。また、このノードIDは、ノードの最大運用台数を収容できるだけのbit数を持たせる必要がある。例えば、128bitの番号とすれば、2^128=340×10^36台のノードを運用できる。なお、ハッシュ関数については公知であるので詳しい説明を省略する。
また、各ノードNnは、夫々、DHTを保持している。このDHTは、コンテンツ分散保存システムS上における各種メッセージの転送先を規定しており、具体的には、ID空間内で適度に離れたノードNnのノードID、IPアドレス及びポート番号を含むノード情報(転送先ノード情報)が複数登録されている。
コンテンツ分散保存システムSに参加している1台のノードNnは、該システムSに参加している全てのノードNnのうち、必要最低限のノードNnのノード情報をルーティングテーブルに登録しておき、ノード情報を知らない(記憶していない)ノードNnについては、各ノードNn間で互いに各種メッセージを転送し合って届けてもらうようになっている。
[1.1 DHTを用いたルーティングテーブル]
ここで、図2及び図3を参照して、DHTを用いたルーティングテーブルについて詳しく説明する。
図2は、ノードN2が保持するDHTを用いたルーティングテーブルの一例を示す図であり、図3は、DHTのID空間の一例を示す概念図である。
なお、図2及び図3の例においては、説明の便宜上、ノードIDのbit長を2bit×3桁=6bitとし、各桁を4進数(0〜3の整数)で表している(実際には、もっと長いbit長を用い、各桁も例えば4bitに区切って0〜fの16進数で表現する)。
図2の例において、DHTを用いたルーティングテーブルは、レベル1〜レベル3のテーブルからなり(複数のレベルに区分されており)、各レベルのテーブルエントリーには、エリア毎に、ノード情報として、ノードIDとこれに対応するノードNnのIPアドレス及びポート番号が対応付けられて登録されている。各レベルのテーブルにおける各エリアは、DHTのノードID空間を分割することにより得られるエリアである。例えば、図3に示すように、レベル1では、DHTのID空間全体が4分割され、“000”〜“033”のノードIDが存在するエリアを0XXのエリア、“100”〜“133” のノードIDが存在するエリアを1XXのエリア、“200”〜“233” のノードIDが存在するエリアを2XXのエリア、“300”〜“333” のノードIDが存在するエリアを3XXのエリアとする。また、レベル2では、レベル1のエリア(つまり、0XX〜3XXのエリア)が更に4分割、例えば1XXのエリアが4分割され、“100”〜“103” のノードIDが存在するエリアを10Xのエリア、“110”〜“113” のノードIDが存在するエリアを11Xのエリア、“120”〜“123” のノードIDが存在するエリアを12Xのエリア、“130”〜“133” のノードIDが存在するエリアを13Xのエリアとする。
そして、例えば、ノードN2のノードIDが“122”とすると、図2に示すように、かかるノードN2のレベル1における1XXのエリア(自己(つまり、自ノード)が存在するエリア)のテーブルには、自己のノードID及びIPアドレス(IPアドレスは自分のものであるので、当該ルーティングテーブルに登録しなくても良い)等が登録され、自己が存在しないエリア(つまり、0XXのエリア、2XXのエリア、及び3XXのエリア)には、夫々、他の任意のノードNnのノードID及びIPアドレス等が登録されている。
また、かかるノードN1のレベル2における12Xのエリア(自己が存在するエリア)のテーブルには、図2に示すように、自己のノードID及びIPアドレス(IPアドレスは自分のものであるので、当該ルーティングテーブルに登録しなくても良い)等が登録され、自己が存在しないエリア(つまり、10Xのエリア、11Xのエリア、及び13Xのエリア)等には、夫々、他の任意のノードNnのノードID及びIPアドレス等が登録されている。
更に、かかるノードN2のレベル3には、図2に示すように、ノードIDが“120”〜“122”のノードID及びIPアドレス(IPアドレスは自分のものであるので、当該ルーティングテーブルに登録しなくても良い)等が登録されている。
なお、図2及び図3の例では、ノードIDのbit長を3桁×2bitとしたので、レベル1〜3の3レベル分のテーブルで網羅できるが、ノードIDのbit長が増せば、その分のテーブルが必要となる(例えば、ノードIDのbit長を16桁×4bitとした場合、16レベル分のテーブルが必要となる)。
このように、本実施形態におけるDHTを用いたルーティングテーブルでは、レベルが上がるほど、エリアが狭まっていくようになっている。
また、このようなDHTは、例えば、未参加のノードがコンテンツ分散保存システムSに参加する際に与えられることになる。
[1.2 コンテンツデータの保存及び発見方法]
次に、コンテンツ分散保存システムSにおいて取得可能なコンテンツデータの保存及び発見方法について説明する。
コンテンツ分散保存システムSにおいては、様々なコンテンツ(例えば、映画や音楽等)データが複数のノードNnに分散して保存(格納)されている(言い換えれば、コンテンツデータが複製されその複製情報であるレプリカが分散保存されている)。
また、本実施形態においては、複数のフレーム画像データ(映像データ)を有する一単位のコンテンツデータ(例えば、映画やテレビ番組等のデータサイズ(データ容量)の大きいコンテンツデータ)は、複数に分割(例えば、数Mbyte)され、その分割された分割コンテンツデータ(同じデータサイズずつ分割されても良いし、異なるデータサイズずつ分割されても良い)が複数のノードNn(以下、「コンテンツ保持ノード」という)に分散して保存(格納)されるようになっている。
例えば、タイトルがXXXの映画のコンテンツデータAが、分割コンテンツデータA1〜A4の4つに分割されたとすると、分割コンテンツデータA1はノードN1及びN5に保存され、分割コンテンツデータA2はノードN3に保存され、分割コンテンツデータA3はノードN7に保存され、分割コンテンツデータA4はノードN8及びN10に保存される。なお、タイトルが異なる他の映画のコンテンツデータについても同様に分割され、複数のノードNnに保存されることになる。
そして、これらの分割コンテンツデータA1〜A4には、夫々、コンテンツID(CID)(分割コンテンツデータ毎に固有の識別情報)が割り当てられている。このコンテンツIDは、例えば、コンテンツ名(コンテンツデータ毎に互いに異なる)+任意の値(或いは、分割コンテンツデータの先頭数バイトでも良い)が、上記ノードIDを得るときと共通のハッシュ関数によりハッシュ化されて生成される(ノードIDと同一のID空間に配置)。なお、上記任意の値は、分割コンテンツデータA1〜A4の間で互いに異なる値とするが、例えば、A1が“1”、A2が“2”、A3“3”、A4が“4というように規則性を有する値とする。また、システム運営者が、コンテンツ毎に一意のID値(ノードIDと同一ビット長)を付与しても良い。
また、このように分散保存されている例えば分割コンテンツデータA1の所在、つまり、分割コンテンツデータA1を保存したノードNnのノード情報(例えば、IPアドレス及びポート番号等を含む)と当該分割コンテンツデータA1に対応するコンテンツID等の組が含まれるインデックス情報が、当該分割コンテンツデータA1の所在の管理元としてのノードNn(以下、「ルートノード」、又は「コンテンツ(コンテンツID)のルートノード」という)等により記憶(インデックスキャッシュに記憶)、管理されるようになっている(分割コンテンツデータA2〜A4についても同様)。
例えば、分割コンテンツデータA1のインデックス情報は、そのコンテンツ(コンテンツID)のルートノードであるノードN4により管理され、分割コンテンツデータA2のインデックス情報は、そのコンテンツ(コンテンツID)のルートノードであるノードN6により管理される。
つまり、分割コンテンツデータ毎にルートノードが分けられるので負荷分散が図らており、しかも、同一の分割コンテンツデータA1(コンテンツIDが同一)が、夫々、複数のコンテンツ保持ノードに保存されている場合であっても、かかる分割コンテンツデータA1のインデックス情報は、一つのルートノードで管理することができる。また、このようなルートノードは、例えば、コンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードNnであるように定められる。
そして、あるノードNnのユーザが、所望するコンテンツデータを取得したい場合、当該コンテンツデータの取得を望むノードNn(以下、「ユーザノード」という)は、当該ユーザにより選択(例えば、全てのノードNnに配信されているコンテンツカタログ情報(コンテンツリストともいう)から選択)されたコンテンツデータAを構成する例えば分割コンテンツデータA1のコンテンツID及び自己のノード情報を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。つまり、ユーザノードは、コンテンツ所在問合せ(検索)メッセージを、ルートノードに向けて送出する。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着することになる。
なお、上記コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。
また、コンテンツカタログ情報は、コンテンツカタログ情報を管理するノードNn、或いはサーバにより管理(更新等)されており、当該ノードNn或いはサーバから、コンテンツ分散保存システムSに参加している各ノードNnに配信されるようになっている。
図4は、ユーザノードから送出されたコンテンツ所在問合せ(検索)メッセージの流れの一例を、DHTのID空間にて示した概念図である。
図4の例において、例えば、ユーザノードであるノードN2は、自己のDHTのレベル1のテーブル(図2に示すDHTを用いたルーティングテーブルとは無関係)を参照して、コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有する例えばノードN3のノード情報に含まれるIPアドレス及びポート番号を取得し、そのIPアドレス及びポート番号宛てに、上記コンテンツ所在問合せ(検索)メッセージを送信する。
これに対して、ノードN3は、当該コンテンツ所在問合せ(検索)メッセージを受信し、自己のDHTのレベル2のテーブルを参照して、当該コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有する例えばノードN4のノード情報に含まれるIPアドレス及びポート番号を取得し、そのIPアドレス及びポート番号宛てに、上記コンテンツ所在問合せ(検索)メッセージを転送する。
これに対して、ノードN4は、当該コンテンツ所在問合せ(検索)メッセージを受信し、自己のDHTのレベル3のテーブルを参照して、当該コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDが自分である、つまり、自分がそのコンテンツIDのルートノードであることを認識すると、当該コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDに対応するインデックス情報をインデックスキャッシュから取得して、当該インデックス情報を、該コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信する。これにより、ユーザノードは、所望のコンテンツデータAを構成する分割コンテンツデータA1を保存している上記コンテンツ保持ノードである例えばノードN5に対して、コンテンツ送信要求メッセージを送信し、そこから当該分割コンテンツデータA1の提供を受けることとなる(つまり、ユーザノードは、上記コンテンツIDに基づいて、その分割コンテンツデータA1を取得することができる)。例えば、コンテンツ保持ノードはユーザノードからの要求に応じて分割コンテンツデータA1のパケットデータをストリーミング配信し、ユーザノードは配信されてきた分割コンテンツデータA1のパケットデータを受信し再生(通常再生)することになる。
或いは、ルートノードであるノードN4は、当該インデックス情報に含まれるノード情報に示されたコンテンツ保持ノードに対してコンテンツ送信要求メッセージ(ユーザノードのノード情報を含み、当該ユーザノードに対して分割コンテンツデータA1の送信要求を示す要求情報)を送信する。これにより、ユーザノードは、上記コンテンツ保持ノードである例えばノードN5から分割コンテンツデータA1の提供を受けることとなる。なお、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、当該ルートノードと同じインデックス情報をキャッシュしている中継ノード(例えば、ノードN3のキャッシュノード)から当該インデックス情報を取得(受信)することもできる。
そして当該分割コンテンツデータA1の配信終了が近くなってきた所定のタイミングで、ユーザノードは、分割コンテンツデータA1に続く分割コンテンツデータA2のコンテンツID及び自己のノード情報を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、ユーザノードは、分割コンテンツデータA1と同様、コンテンツ保持ノードから分割コンテンツデータA2の提供を受けることとなる(分割コンテンツデータA3及びA4も同様)。
[1.3 コンテンツデータの特殊再生(トリックプレイ)方法]
次に、コンテンツ分散保存システムSにおいて取得可能なコンテンツデータの特殊再生(トリックプレイ)方法について説明する。
本実施形態においては、上述したように複数に分割され異なるノードNnに保存されたコンテンツデータについて、例えば早送り再生、巻戻し再生、又はシーク(ジャンプ)再生等の特殊再生(トリックプレイ)をスムーズに行うため、再生すべきフレーム画像データ(以下、「キーフレーム」という)がどの分割コンテンツデータに含まれるかを、ノードNnが迅速に特定できるように、各分割コンテンツデータ中の各キーフレームのオフセット位置(例えば、先頭からの位置)及びデータサイズを示すキーフレーム情報が、少なくとも一つの分割コンテンツデータ中(例えば、当該分割コンテンツデータのヘッダ内)に含まれる(記述される)ようになっている。分割コンテンツデータのヘッダ内にキーフレーム情報を含めることで、ノードNnは当該キーフレーム情報を迅速に取得し易い。
ここで、MPEGなどの画像圧縮方式では、例えば1/30秒ごとのフレーム情報を圧縮するようになっているが、1秒おきのフレーム画像は、その1枚のフレーム情報のみを使って圧縮しており、これをキーフレームという(フレーム内で圧縮が完結している)。この他の1/30秒おきのフレームは、キーフレームや前後のフレームとの差分情報のみを圧縮して記録する。特殊再生を行うには、例えば1秒おきのフレームを1/10秒間隔で表示すると、10倍速の早送り再生となるのだが、前記のような圧縮方式の場合には、ここでキーフレームを使わなければいけない。なぜならば、差分情報のフレームをデコーダに渡しても、そのフレームだけでは伸張ができないからである。そこで、早送り再生、巻き戻し再生をするためには、圧縮後のデータ中のキーフレームの位置とサイズを正確に知っておくことが重要になる。シーク再生の場合も、再生開始時から即座にフレームを表示するためには、デコーダにキーフレームからデータを渡し始めるのが良いので、キーフレームの位置を知っておくと良い。
図5(A)乃至(C)は、夫々、コンテンツデータが分割され、各分割コンテンツデータ中の各キーフレームのキーフレーム情報等が先頭の分割コンテンツデータのヘッダ内に記述される様子を示す概念図である。
図5(A)の例では、各分割コンテンツデータ中の各キーフレームに対応するキーフレーム情報(オフセット位置(Offset)及びデータサイズ(Size)を示す)が、先頭の分割コンテンツデータのヘッダに記述されるようになっている。この図5(A)の例の場合のコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例1)におけるデータ構造例を図6に示す。
図6に示すコンテンツカタログ情報(構造例1)は、コンテンツ分散保存システムSにおいて各ノードNnが取得可能(利用可能)な各コンテンツデータ(A,B、C・・・)の固有情報を有する。各コンテンツデータ(A,B、C・・・)の固有情報には、コンテンツタイトル(コンテンツ名)及び分割コンテンツ情報が含まれている。そして、分割コンテンツ情報には、コンテンツデータの分割数及び分割された1番目(先頭)〜m(mは自然数)番目までの各分割コンテンツデータのコンテンツID及びデータサイズが含まれている。
また、図6に示す分割コンテンツデータのヘッダ(構造例1)には、キーフレーム情報が含まれており、当該キーフレーム情報には、キーフレームの数(当該コンテンツデータにおけるキーフレームの数)、及び1番目(先頭)〜j(jは自然数)番目までの各キーフレーム情報が含まれ、各キーフレーム情報には、当該キーフレームのオフセット位置(コンテンツデータの先頭からのオフセット位置)及び当該キーフレームのデータサイズが含まれている。なお、分割コンテンツデータのヘッダ(構造例1)によれば、各キーフレームがどの分割コンテンツデータに含まれるかを、ノードNnが計算により判別することになる。この分割コンテンツデータのヘッダ(構造例1)によれば、キーフレームのオフセット位置及びデータサイズと、当該キーフレームが含まれる分割コンテンツデータのコンテンツIDと、の対応関係を当該分割コンテンツデータのヘッダ中に規定しなくても、計算によって求めることができる。
図5(B)の例では、各分割コンテンツデータのコンテンツIDは、各分割コンテンツデータ中の各キーフレームに対応するキーフレーム情報(オフセット位置(Offset)及びデータサイズ(Size)を示す)中に含まれ、且つ、オフセット位置等に対応付けられて分割コンテンツデータのヘッダに記述されるようになっている。この図5(B)の例の場合のコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例2)におけるデータ構造例を図7に示す。
図7に示すコンテンツカタログ情報(構造例2)は、図6に示すコンテンツカタログ情報(構造例1)と基本的な構造は同様であるが、分割コンテンツ情報には、コンテンツデータの分割数、及び分割された1番目(先頭)〜m(mは自然数)番目までの各分割コンテンツデータのコンテンツIDが含まれている(データサイズは含まれていない)。
また、図7に示す分割コンテンツデータのヘッダ(構造例2)における各キーフレーム情報には、キーフレームのオフセット位置(各分割コンテンツデータの先頭からのオフセット位置)及びデータサイズに対応付けられて、当該キーフレームが含まれる分割コンテンツデータのコンテンツIDが含まれている。この分割コンテンツデータのヘッダ(構造例2)によれば、各キーフレームがどの分割コンテンツデータに含まれるかを、ノードNnが計算により判別する必要が無く、より迅速に特定することができる。
図5(C)の例では、図5(A)の例と同様、各分割コンテンツデータ中の各キーフレームに対応するキーフレーム情報(オフセット位置(Offset)及びデータサイズ(Size)を示す)が、先頭の分割コンテンツデータのヘッダに記述されるようになっている。この図5(C)の例の場合のコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例3)におけるデータ構造例を図8に示す。
図8に示すコンテンツカタログ情報(構造例3)は、図6に示すコンテンツカタログ情報(構造例1)と基本的な構造は同様であるが、分割コンテンツ情報には、コンテンツデータの分割数、1番目(先頭)の分割コンテンツデータのコンテンツID、及び分割データサイズが含まれている。つまり、コンテンツカタログ情報(構造例3)では、全ての分割コンテンツデータのコンテンツIDが含まれるのではなく、1番目(先頭)の分割コンテンツデータのコンテンツIDのみが含まれる。1番目(先頭)の分割コンテンツデータ以外のコンテンツIDについては、1番目(先頭)の分割コンテンツデータのコンテンツIDから計算によって求められる。分割データサイズは、コンテンツデータがどのようなデータサイズで分割されたかを示す情報である(各分割コンテンツデータのデータサイズは同一となる)。これにより、全ての分割コンテンツデータのコンテンツIDが含まれなくとも良いのでデータ量を削減することができる。
また、図8に示す分割コンテンツデータのヘッダ(構造例3)における各キーフレーム情報の内容は、図6に示す分割コンテンツデータのヘッダ(構造例1)における各キーフレーム情報の内容と同様である。
なお、図5(A)乃至(C)の例では、キーフレーム情報等が先頭の分割コンテンツデータのヘッダ中にのみ含まれるようにしたが、別の例として、キーフレーム情報等が全ての分割コンテンツデータのヘッダ中に含まれるように構成しても良く、このように構成すれば、例えば、コンテンツデータの再生が途中で停止され、先頭以外の分割コンテンツデータがノードNn内に蓄積されているとき、先頭の分割コンテンツデータが無くとも、キーフレーム情報を取得することができ、よりスムーズに特殊再生を実行することができる。
ここで、コンテンツカタログ情報を用いて、早送り再生が行われる場合の概要について、図9乃至図11を用いて説明する。
図9は、上記図6に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例1)を用いて、早送り再生が行われる場合の様子を示す図であり、図10は、上記図7に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例2)を用いて、早送り再生が行われる場合の様子を示す図であり、図11は、上記図8に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例3)を用いて、早送り再生が行われる場合の様子を示す図である。
図9乃至図11の何れの例でも、ユーザノードは、キーフレーム情報を含んでいる分割コンテンツデータ(この例では、先頭の分割コンテンツデータ)から当該キーフレーム情報を取得し、ユーザからのコンテンツデータの早送り再生指示(再生に関する指示の一例)に応じて再生すべきキーフレームに対応するキーフレーム情報を上記取得したキーフレーム情報から特定し、且つ、当該再生すべきキーフレームが含まれる分割コンテンツデータのコンテンツIDを例えばコンテンツカタログ情報等から特定し、当該特定したキーフレーム情報及びコンテンツIDに対応するキーフレームを、コンテンツ保持ノード(当該コンテンツ保持ノードは、当該ユーザノードが上記特定したコンテンツIDに対応する分割コンテンツデータを保存しており、当該コンテンツIDをキーとするDHTルーティングによってルートノードに問い合わされて特定される)から取得して再生(早送り再生)するようになっている。
ここで、図9の場合、再生すべきキーフレームが含まれる分割コンテンツデータ(コンテンツID)は、当該分割コンテンツデータのデータサイズと、再生すべきキーフレームのキーフレーム情報(オフセット位置及びデータサイズを示す)とに基づいて計算により判別される。一方、図10の場合、再生すべきキーフレームが含まれる分割コンテンツデータ(コンテンツID)は、キーフレーム情報から特定される。また、図11の場合、1番目(先頭)の分割コンテンツデータ以外のコンテンツIDは、1番目(先頭)の分割コンテンツデータのコンテンツIDから計算によって求められる。
[2.ノードNnの構成及び機能等]
次に、図12を参照して、ノードNnの構成及び機能について説明する。
図12は、ノードNnの概要構成例を示す図である。
各ノードNnは、図12に示すように、演算機能を有する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はバス22を介して相互に接続されている。なお、ノードNnとしては、パーソナルコンピュータ、STB(Set Top Box)、或いは、TV受信機等を適用可能である。
このような構成において、制御部11は、CPUが記憶部12等に記憶されたプログラムを読み出して実行することにより、全体を統括制御すると共に、コンテンツ分散保存システムSへの参加により上述したユーザノード、中継ノード、ルートノード、キャッシュノード、及びコンテンツ保持ノードの少なくとも何れか一つのノードとしての処理を行うようになっている。
そして更に、コンテンツ分散保存システムSに参加しているノードNnにおける制御部11は、CPUが記憶部12等に記憶されたプログラム(本発明のノード処理プログラムを含む)を読み出して実行することにより、本発明のキーフレーム情報取得手段、指示受付手段、特定手段、及びフレーム取得手段等として機能し、後述する処理を行うようになっている。なお、上記ノード処理プログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしてもよいし、例えば、CD−ROM等の記録媒体に記録されて当該記録媒体のドライブを介して読み込まれるようにしてもよい。
[3.ノードNnにおける特殊再生時の処理]
次に、図13乃至図17等を参照して、ノードNnにおける特殊再生処理について説明する。
図13は、ノードNnの制御部11における早送り再生又は巻戻し再生処理を示すフローチャートである。図14は、ノードNnの制御部11におけるシーク(ジャンプ)再生処理を示すフローチャートである。また、図15は、上記図6に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例1)を用いた場合における、キーフレーム情報及びコンテンツID特定処理を示すフローチャートであり、図16は、上記図7に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例2)を用いた場合における、キーフレーム情報及びコンテンツID特定処理を示すフローチャートであり、図17は、上記図8に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例3)を用いた場合における、キーフレーム情報及びコンテンツID特定処理を示すフローチャートである。
先ず、コンテンツ分散保存システムSに参加しているノードNn(ユーザノード)において、制御部11は、ユーザからの入力部21を介したコンテンツリスト表示指示を受け付けた場合、上述したコンテンツカタログ情報を記憶部12からRAMに読み込み、当該コンテンツカタログ情報に含まれる複数のコンテンツ名(コンテンツタイトル)が記述されたコンテンツリストを表示部16に表示させる。そして、当該表示されたコンテンツリストにおけるコンテンツ名のうちから、ユーザにより入力部21を介して一つのコンテンツ名が選択された場合、制御部11は、当該コンテンツ名に対応するコンテンツデータAを構成する分割コンテンツデータA1のコンテンツID及び自己のノード情報を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着し、当該ユーザノードは、当該ルートノードからコンテンツ保持ノードのノード情報を取得する。そして、ユーザノードは、取得したノード情報にしたがって分割コンテンツデータA1を保存しているコンテンツ保持ノードに対して、コンテンツ送信要求をし、例えばストリーミング配信された分割コンテンツデータA1のパケットデータを受信し、当該分割コンテンツデータA1のヘッダに含まれるキーフレーム情報を取得(例えばRAMに記憶)し、且つ、デコーダ部14、映像処理部15、及び音声処理部17等を通じて再生(通常再生)する。こうして、上述したように、分割コンテンツデータA1→分割コンテンツデータA2→分割コンテンツデータA3・・・の順にストリーミング配信される対象が切り替わっていくことになる。
なお、ユーザノードは、コンテンツ保持ノードに対してコンテンツ送信要求をして分割コンテンツデータA1の配信を受ける前に、当該分割コンテンツデータA1のヘッダに含まれるキーフレーム情報の送信要求をし、当該キーフレーム情報をコンテンツ保持ノードからダウンロードして記憶するように構成しても良い。
また、図8に示すコンテンツカタログ情報及び分割コンテンツデータのヘッダ(構造例3)を用いる場合、先頭の分割コンテンツデータのコンテンツIDしか含まれていないので、他の分割コンテンツデータのコンテンツIDは、例えば、その分割コンテンツデータの先頭からの順番と、先頭の分割コンテンツデータのコンテンツIDと、を所定の関数に代入することによって算出することになる。
(早送り再生又は巻戻し再生)
このような通常再生中に、制御部11は、ユーザからの入力部21を介した早送り再生又は巻戻し再生(コンテンツデータの再生に関する指示の一例)開始指示を受け付けた場合、図13に示す処理を開始し、先ず、現在の分割コンテンツデータの再生位置に対応するキーフレームの番号(先頭からの順番)を取得し、これを“J”とする(ステップS1)。
次いで、制御部11は、早送り再生の場合Jを1増加させ、一方、巻戻し再生の場合Jを1減少させる(ステップS2)。
次いで、制御部11は、Jが所定値になったか否かを判別する(ステップS3)。具体的には、早送り再生の場合、制御部11は、上記取得したキーフレーム情報を参照して、Jがキーフレームの数になったか否かを判別し、キーフレームの数になった(J=キーフレームの数)場合には(ステップS3:Y)、当該再生位置に対応するキーフレームは最後のキーフレームであるので、当該処理を終了し、一方、キーフレームの数になっていない(J<キーフレームの数)場合には(ステップS3:N)には、ステップS4に移行する。
一方、巻戻し再生の場合、制御部11は、上記取得したキーフレーム情報を参照して、Jが“1”になったか否かを判別し、“1”になった(J=1)場合には(ステップS3:Y)、当該再生位置に対応するキーフレームは最初のキーフレームであるので、当該処理を終了し、一方、“1”になっていない(J>1)場合には(ステップS3:N)には、ステップS4に移行する。
ステップS4では、制御部11は、J番目のキーフレームに対応するキーフレーム情報と、当該J番目のキーフレームに対応する分割コンテンツデータ(つまり、当該キーフレームが含まれる分割コンテンツデータ)のコンテンツIDと、を特定する。なお、当該コンテンツID及びキーフレーム情報の特定処理は、コンテンツカタログ情報の構造例1〜3に応じて異なり、詳細については後述する。
次いで、制御部11は、当該特定したコンテンツIDに対応する分割コンテンツデータに含まれるJ番目のキーフレームを取得する(ステップS5)。より具体的には、制御部11は、上記特定したコンテンツIDに対応する分割コンテンツデータを記憶しているか否かを判別し、記憶している場合には当該分割コンテンツデータから上記特定したキーフレーム情報に対応するキーフレームを取得する。一方、上記特定したコンテンツIDに対応する分割コンテンツデータを記憶していない場合には、制御部11は、当該コンテンツID及び自己のノード情報を含むキーフレーム所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、キーフレーム所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着し、当該ユーザノードの制御部11は、当該ルートノードからコンテンツ保持ノードのノード情報を取得する。そして、当該制御部11は、取得したノード情報にしたがって当該分割コンテンツデータを保存しているコンテンツ保持ノードに対して、上記特定したキーフレーム情報を指定してキーフレーム送信要求をし、これに応じて送信されたキーフレームを取得する。
次いで、制御部11は、当該取得したキーフレームをデコーダ部14及び映像処理部15を通じて再生する(ステップS6)。
次いで、制御部11は、ユーザからの入力部21を介した早送り再生又は巻戻し再生終了指示を受け付けたか否かを判別し(ステップS7)、受け付けた場合には(ステップS7:Y)、当該処理を終了し、受け付けていない場合には(ステップS7:N)、ステップS2に戻り、上記と同様の処理を行う。こうして、Jが所定値になるか、或いは、早送り再生又は巻戻し再生終了指示が受け付けられるまで、早送り再生又は巻戻し再生が行われることになる。
(シーク(ジャンプ)再生)
一方、通常再生中に、制御部11は、ユーザからの入力部21を介したシーク(ジャンプ)再生(コンテンツデータの再生に関する指示の一例)開始指示を受け付けた場合、図14に示す処理を開始し、先ず、シーク(ジャンプ)しようとする分割コンテンツデータの再生位置に対応するキーフレームの番号(先頭からの順番)を取得し、これを“J”とする(ステップS11)。
次いで、制御部11は、J番目のキーフレームに対応するキーフレーム情報と、当該J番目のキーフレームに対応する分割コンテンツデータのコンテンツIDと、を特定する(ステップS12)。なお、当該コンテンツID及びキーフレーム情報の特定処理は、早送り再生又は巻戻し再生処理におけるステップS4と同様であり、詳細については後述する。
次いで、制御部11は、当該特定したコンテンツIDに対応する分割コンテンツデータに含まれるJ番目のキーフレームを取得し(ステップS13)、当該キーフレームから再生(ジャンプ再生)を開始し(ステップ14)、当該処理を終了する(これ以降は通常再生に戻る)。
より具体的には、制御部11は、上記特定したコンテンツIDに対応する分割コンテンツデータを記憶しているか否かを判別し、記憶している場合には当該分割コンテンツデータから上記特定したキーフレーム情報に対応するキーフレームを取得し、当該キーフレームから再生を開始する。一方、上記特定したコンテンツIDに対応する分割コンテンツデータを記憶していない場合には、制御部11は、当該コンテンツID及び自己のノード情報を含むキーフレーム所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、キーフレーム所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着し、当該ユーザノードの制御部11は、当該ルートノードからコンテンツ保持ノードのノード情報を取得する。そして、当該制御部11は、取得したノード情報にしたがって当該分割コンテンツデータを保存しているコンテンツ保持ノードに対して、上記特定したキーフレーム情報を指定してキーフレームからの送信要求をし、これに応じて送信されたキーフレームを取得し、当該キーフレームから再生を開始し、以降は、キーフレームに続くデータのストリーミング配信を受け通常再生が行われる。
次に、上記構造例1〜3の夫々のコンテンツカタログ情報及び分割コンテンツデータのヘッダを用いた場合の、上記ステップS4及びステップS12における当該コンテンツID及びキーフレーム情報の特定処理の詳細を説明する。
(構造例1のコンテンツカタログ情報及び分割コンテンツデータのヘッダを用いた場合)
この場合、図15に示すように、先ず、制御部11は、上記取得したキーフレーム情報を参照して、J番目のキーフレーム情報から、J番目のキーフレームのオフセット位置F0_OFFSET(コンテンツデータの先頭からのオフセット位置)及び当該キーフレームのデータサイズF_SIZEを取得する(ステップS51)。
次いで、制御部11は、変数“M”を“1”とし(ステップS52)、図6に示すコンテンツカタログ情報を参照して、分割コンテンツ情報から、M番目(M=1の場合、先頭)の分割コンテンツデータのデータサイズC_SIZE及びコンテンツIDを取得し、当該M番目の分割コンテンツデータのオフセット位置C_OFFSET(M=1の場合、“0”)を算出する(ステップS53)。
次いで、制御部11は、上記J番目のキーフレームが、M番目の分割コンテンツデータに含まれるか否かを判別する(ステップS54)。具体的には、F0_OFFSET<C_OFFSET+C_SIZEを満たすか(つまり、上記C_OFFSET+C_SIZEで示される位置(M番目の分割コンテンツデータの終了位置)が、J番目のキーフレームのオフセット位置F0_OFFSETより大きいか(後にあるか))否かが判別される。
上記J番目のキーフレームが、M番目の分割コンテンツデータに含まれない場合(つまり、F0_OFFSET<C_OFFSET+C_SIZEを満たさない場合)には(ステップS54:N)、制御部11は、“M”に“1”を加算し(ステップS55)、ステップS53に戻り、当該M番目の分割コンテンツデータのオフセット位置C_OFFSETを算出し、M番目の分割コンテンツデータのデータサイズC_SIZE及びコンテンツIDを取得し、上記と同様の処理を行う。このように、分割コンテンツデータのデータサイズC_SIZE、J番目のキーフレームのオフセット位置F0_OFFSET等に基づいて、J番目のキーフレームが含まれる分割コンテンツデータが判別されることになる。
そして、上記J番目のキーフレームが、M番目の分割コンテンツデータに含まれる場合(つまり、 F0_OFFSET<C_OFFSET+C_SIZEを満たす場合)には(ステップS54:Y)、制御部11は、M番目の分割コンテンツデータのコンテンツID(最後に取得したコンテンツID)を、上記J番目のキーフレームに対応する分割コンテンツデータのコンテンツIDとして特定する(ステップS56)。
次いで、制御部11は、上記J番目のキーフレームのオフセット位置F_OFFSET(当該M番目の分割コンテンツデータの先頭からのオフセット位置)を算出(つまり、F_OFFSET=F0_OFFSET−C_OFFSETとなる)し(ステップS57)、当該算出したオフセット位置F_OFFSETと、上記ステップS51で取得したJ番目のキーフレームのデータサイズF_SIZEと、を当該J番目のキーフレームに対応するキーフレーム情報として特定する(ステップS58)。
(構造例2のコンテンツカタログ情報及び分割コンテンツデータのヘッダを用いた場合)
この場合、図16に示すように、先ず、制御部11は、上記取得したキーフレーム情報を参照して、J番目のキーフレーム情報から、分割コンテンツデータのコンテンツID、J番目のキーフレームのオフセット位置F_OFFSET(分割コンテンツデータの先頭からのオフセット位置)及びデータサイズF_SIZEを取得し(ステップS61)、当該取得したコンテンツIDをJ番目のキーフレームに対応する分割コンテンツデータのコンテンツIDとして特定し、当該取得したJ番目のキーフレームのオフセット位置F_OFFSET及びデータサイズF_SIZEをJ番目のキーフレームに対応するキーフレーム情報として特定する(ステップS62)。
(構造例3のコンテンツカタログ情報及び分割コンテンツデータのヘッダを用いた場合)
この場合、図17に示すように、先ず、制御部11は、上記取得したキーフレーム情報を参照して、J番目のキーフレーム情報から、J番目のキーフレームのオフセット位置F0_OFFSET(コンテンツデータの先頭からのオフセット位置)及び当該キーフレームのデータサイズF_SIZEを取得する(ステップS71)。
次いで、制御部11は、変数“M”を“1”とした後、図8に示すコンテンツカタログ情報を参照して、分割コンテンツ情報から、分割データサイズC_SIZE及び先頭の分割コンテンツデータのコンテンツIDを取得する(ステップS72)。
次いで、制御部11は、M番目(M=1の場合、先頭)の分割コンテンツデータのオフセット位置C_OFFSET(M=1の場合、“0”)を算出する(ステップS73)。
次いで、制御部11は、上記J番目のキーフレームが、M番目の分割コンテンツデータに含まれるか否かを判別する(ステップS74)。上記ステップS54と同様、具体的には、F0_OFFSET<C_OFFSET+C_SIZEを満たすか否かが判別される。
上記J番目のキーフレームが、M番目の分割コンテンツデータに含まれない場合(つまり、 F0_OFFSET<C_OFFSET+C_SIZEを満たさない場合)には(ステップS74:N)、制御部11は、“M”に“1”を加算した後、M番目の分割コンテンツデータのコンテンツIDを、所定の規則にしたがって先頭の分割コンテンツデータのコンテンツIDから算出し、(ステップS75)、ステップS73に戻る。
ここで、一単位のコンテンツデータを構成する複数の分割コンテンツデータのコンテンツIDを互いに規則性を持つように定めておけば、先頭の分割コンテンツデータ以外のコンテンツIDは、その分割コンテンツデータの先頭からの順番Mと、先頭の分割コンテンツデータのコンテンツIDと、を所定の関数に代入することによって算出することができる(簡単な例で言えば、先頭(M=1)のコンテンツIDに、M×A(Aは任意の値)を加算した値が、M番目(M≧2)の分割コンテンツデータのコンテンツIDとなる)。
そして、上記J番目のキーフレームが、M番目の分割コンテンツデータに含まれる場合(つまり、 F0_OFFSET<C_OFFSET+C_SIZEを満たす場合)には(ステップS74:Y)、制御部11は、M番目の分割コンテンツデータのコンテンツID(最後に取得又は算出したコンテンツID)を、上記J番目のキーフレームに対応する分割コンテンツデータのコンテンツIDとして特定する(ステップS76)。
次いで、制御部11は、上記J番目のキーフレームのオフセット位置F_OFFSET(当該M番目の分割コンテンツデータの先頭からのオフセット位置)を算出(つまり、F_OFFSET=F0_OFFSET−C_OFFSETとなる)し(ステップS77)、当該算出したオフセット位置F_OFFSETと、上記ステップS71で取得したJ番目のキーフレームのデータサイズF_SIZEと、を当該J番目のキーフレームに対応するキーフレーム情報として特定する(ステップS78)。
以上説明したように、上記実施形態によれば、一単位のコンテンツデータを構成する少なくとも一つの分割コンテンツデータのヘッダ中に各分割コンテンツデータ中のキーフレームのオフセット位置を示す情報を含むキーフレーム情報を含ませておき、ユーザノードがユーザからのコンテンツデータの特殊再生指示に応じて、再生すべきキーフレームに対応するキーフレーム情報を特定し、且つ、当該再生すべきキーフレームが含まれる分割コンテンツデータのコンテンツIDを特定し、当該特定したキーフレーム情報及びコンテンツIDに基づいて当該キーフレームを、これを保存しているコンテンツ保持ノードから取得し、再生するようにしたので、一単位のコンテンツデータが、複数に分割され、その分割された分割コンテンツデータが複数のノード装置に跨って分散保存される場合であっても、例えば早送り再生、巻き戻し再生、及びシーク再生等の特殊再生をスムーズに実行することができる。また、分割コンテンツデータのヘッダからキーフレーム情報等を直ぐに取り出すことができ、分割されたコンテンツデータに対して、当該特殊再生をより効率良く実行することができる。
また、コンテンツカタログ情報にキーフレーム情報を含ませる方法も考えられ、この方法では、コンテンツ数が増えるにしたがってコンテンツカタログ情報のデータサイズが大きくなりノードNnにおいて大きな記憶容量が必要になるが、分割コンテンツデータのヘッダにキーフレーム情報を含ませておけば、ノードNnにおける記憶容量を抑えることができる。
上記実施形態において、図13乃至図17を参照して説明したノードNnにおける特殊再生処理は、先頭の分割コンテンツデータから再生される場合を前提にして説明したが、先頭の分割コンテンツデータ以外の分割コンテンツデータから途中再生が行われる場合についても当該特殊再生処理は同様に行われる。ただし、キーフレーム情報が先頭の分割コンテンツデータのヘッダに含まれる場合と、キーフレーム情報が全ての分割コンテンツデータのヘッダに含まれる場合と、で途中再生処理が若干異なるので、図18及び図19を参照して、双方の場合を比較しつつ説明する。
図18は、キーフレーム情報が先頭の分割コンテンツデータのヘッダ中にのみ含まれる場合の、ノードNnの制御部11における途中再生処理を示すフローチャートであり、図19は、キーフレーム情報が全ての分割コンテンツデータのヘッダ中に含まれる場合の、ノードNnの制御部11における途中再生処理を示すフローチャートである。
双方の場合共、ノードNn(ユーザノード)において、制御部11は、ユーザからの入力部21を介してコンテンツリスト表示指示を受け付けた場合、上述したコンテンツカタログ情報を記憶部12からRAMに読み込み、当該コンテンツカタログ情報に含まれる複数のコンテンツ名(コンテンツタイトル)が記述されたコンテンツリストを表示部16に表示させる。
キーフレーム情報が先頭の分割コンテンツデータのヘッダ中にのみ含まれる場合、図18に示すように、当該表示されたコンテンツリストにおけるコンテンツ名のうちから、ユーザにより入力部21を介して一つのコンテンツ名が選択され、且つそのコンテンツデータAの途中再生すべき位置が指定された場合、ユーザノードの制御部11は、当該コンテンツ名に対応するコンテンツデータAを構成する先頭の分割コンテンツデータA1のコンテンツIDを取得し(ステップS101)、当該取得したコンテンツID及び自己のノード情報を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着し、当該ユーザノードは、当該ルートノードからコンテンツ保持ノードのノード情報を取得する。
そして、ユーザノードの制御部11は、取得したノード情報にしたがって分割コンテンツデータA1を保存しているコンテンツ保持ノードに対して、当該分割コンテンツデータA1のヘッダに含まれるキーフレーム情報の送信要求をし、当該キーフレーム情報をコンテンツ保持ノードからダウンロードして記憶する(ステップS102)。
次いで、ユーザノードの制御部11は、上記コンテンツデータAの途中再生すべき位置に対応する分割コンテンツデータ(A1以外の例えばA3)のコンテンツIDを取得し、当該取得したコンテンツID及び自己のノード情報を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着し、当該ユーザノードは、当該ルートノードからコンテンツ保持ノードのノード情報を取得する。そして、ユーザノードの制御部11は、上記分割コンテンツデータA3を保存しているコンテンツ保持ノードに対して、コンテンツ送信要求をし、当該コンテンツ保持ノードから配信されてきた分割コンテンツデータA3を受信し、途中再生が行われる(ステップS103)。
一方、キーフレーム情報が全ての分割コンテンツデータのヘッダ中に含まれる場合、図19に示すように、当該表示されたコンテンツリストにおけるコンテンツ名のうちから、ユーザにより入力部21を介して一つのコンテンツ名が選択され、且つそのコンテンツデータAの途中再生すべき位置が指定された場合、ユーザノードの制御部11は、当該コンテンツ名に対応するコンテンツデータAの途中再生すべき位置に対応する分割コンテンツデータ(A1以外の例えばA3)のコンテンツIDを取得し(ステップS201)、当該取得したコンテンツID及び自己のノード情報を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTを用いたルーティングテーブルにしたがって他のノードNnに対して送出する。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着し、当該ユーザノードは、当該ルートノードからコンテンツ保持ノードのノード情報を取得する。
そして、ユーザノードの制御部11は、取得したノード情報にしたがって分割コンテンツデータA3を保存しているコンテンツ保持ノードに対して、当該分割コンテンツデータA3のヘッダに含まれるキーフレーム情報の送信要求をし、当該キーフレーム情報をコンテンツ保持ノードからダウンロードして記憶する(ステップS202)。
次いで、ユーザノードの制御部11は、上記分割コンテンツデータA3を保存しているコンテンツ保持ノードに対して、コンテンツ送信要求をし、当該コンテンツ保持ノードから配信されてきた分割コンテンツデータA3を受信し、途中再生が行われる(ステップS203)。
以上のように、キーフレーム情報が先頭の分割コンテンツデータのヘッダ中にのみ含まれるようにしておけばコンテンツデータ全体のデータサイズを小さくすることができる等の利点があるが、途中再生が行われる場合、キーフレーム情報が全ての分割コンテンツデータのヘッダ中に含まれている方が、わざわざ先頭の分割コンテンツデータを保存するコンテンツ保持ノードからキーフレーム情報を取得する必要がなく、迅速にキーフレーム情報を取得することができるので、当該コンテンツデータの特殊再生をスムーズに実行することができる。
なお、上記実施形態におけるコンテンツ分散保存システムSは、DHTを利用したアルゴリズムによって形成されることを前提として説明したが、本発明はこれに限定されるものではない。例えば、各ノードNnは特殊再生する際に、全ての分割コンテンツデータのコンテンツID(上述したようにハッシュ関数により求めるかどうかは問わない)及び当該コンテンツIDに対応するノード情報(つまり、当該コンテンツIDに対応するコンテンツデータを保存するコンテンツ保持ノードのIPアドレス及びポート番号)を管理する管理サーバに対して、コンテンツカタログ情報から特定したコンテンツIDを送信し、これに応じて当該管理サーバから当該コンテンツIDに対応するノード情報を取得し、そのコンテンツ保持ノードに対してキーフレームを要求するように構成しても良い。
また、上記実施形態においては、キーフレーム情報を分割コンテンツデータのヘッダに含まれる場合を例にとって説明したが、これに限定されるものではなく、ヘッダ以外の場所に含まれるようにしても構わない。