(57)【要約】【課題】Ｐ２Ｐでストリーム配信を行う映像配信システムにおいて、新規参加ノード装置がストリームデータを受信できるようになるまでの時間を短くする。【解決手段】ノード装置に対してストリーム配信サービスを提供する映像配信システムにおいて、ストリーム配信サービスに新たに参加する新規参加ノード装置は、所定の範囲内のノード装置に対して参加要求を送信する。参加要求を受信したノード装置は、ストリーム配信サービスを提供できるときは、参加要求に対応する参加応答を新規参加ノード装置へ返送する。新規参加ノード装置は、参加要求に対応する参加応答を最初に返送してきたノード装置に対してストリーム配信要求を送信する。【選択図】図１０
2015133529.tif 000002
【特許請求の範囲】
【請求項１】
ノード装置に対してストリーム配信サービスを提供する映像配信システムであって、
前記ストリーム配信サービスに新たに参加する新規参加ノード装置は、所定の範囲内のノード装置に対して参加要求を送信し、
前記参加要求を受信したノード装置は、前記ストリーム配信サービスを提供できるときは、前記参加要求に対応する参加応答を前記新規参加ノード装置へ返送し、
前記新規参加ノード装置は、前記参加要求に対応する参加応答を最初に返送してきたノード装置に対してストリーム配信要求を送信する
ことを特徴とする映像配信システム。
【請求項２】
前記新規参加ノード装置は、ＴＴＬ（Time To Live）が１である範囲内のノード装置に対して前記参加要求を送信する
ことを特徴とする請求項１に記載の映像配信システム。
【請求項３】
前記新規参加ノード装置は、前記参加要求を送信したときから所定時間内に前記参加応答を受信しないときは、前記ストリーム配信サービスの配信状態を管理する根ノード装置に対して参加要求を送信し、
前記根ノード装置は、前記ストリーム配信サービスを提供するノード装置を表す候補ノード情報を前記新規参加ノード装置へ返送し、
前記新規参加ノード装置は、前記候補ノード情報に基づいて親ノード装置を決定し、決定した親ノード装置に対してストリーム配信要求を送信する
ことを特徴とする請求項１または２に記載の映像配信システム。
【請求項４】
前記所定時間は、前記新規参加ノード装置と前記新規参加ノード装置を収容するルータまたはゲートウェイとの間の往復遅延時間である
ことを特徴とする請求項３に記載の映像配信システム。
【請求項５】
前記ストリーム配信サービスのストリームデータを受信するノード装置は、自ノード装置の動作状態に基づいて、前記参加要求を受け付けるか否かを判定する
ことを特徴とする請求項１〜４のいずれか１つに記載の映像配信システム。
【請求項６】
前記ストリーム配信サービスのストリームデータを受信するノード装置は、前記ストリームデータが流れる経路を表す配信ツリーの状態に基づいて、前記参加要求を受け付けるか否かを判定する
ことを特徴とする請求項１〜４のいずれか１つに記載の映像配信システム。
【請求項７】
ノード装置に対してストリーム配信サービスを提供する映像配信システムにおいて使用されるノード装置であって、
所定の範囲内のノード装置に対して参加要求を送信する参加要求生成部と、
前記ストリーム配信サービスを提供可能なノード装置から前記参加要求に対応する参加応答を受信する参加応答受信部と、
前記参加要求に対応する参加応答を最初に返送してきたノード装置に対してストリーム配信要求を送信する配信要求生成部と、
を有するノード装置。
【請求項８】
ノード装置に対してストリーム配信サービスを提供する配信方法であって、
前記ストリーム配信サービスに新たに参加する新規参加ノード装置から所定の範囲内のノード装置に対して参加要求を送信し、
前記参加要求を受信したノード装置が前記ストリーム配信サービスを提供できるときには、前記参加要求を受信したノード装置から前記新規参加ノード装置へ前記参加要求に対応する参加応答を返送し、
前記新規参加ノード装置から前記参加要求に対応する参加応答を最初に返送してきたノード装置に対してストリーム配信要求を送信する
ことを特徴とする配信方法。
【請求項９】
ノード装置に対してストリーム配信サービスを提供する映像配信システムにおいて使用されるノード装置のプロセッサに、
所定の範囲内のノード装置に対して参加要求を送信し、
前記ストリーム配信サービスを提供可能なノード装置から前記参加要求に対応する参加応答を受信し、
前記参加要求に対応する参加応答を最初に返送してきたノード装置に対してストリーム配信要求を送信する、
処理を実行させる配信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、映像配信システムおよび映像配信システムにおいて使用されるノード装置に係わる。
【背景技術】
【０００２】
映像データを配信する方法の１つとして、ストリーム配信（または、ストリーミング）が普及してきている。ストリーム配信においては、端末装置は、映像データファイルをダウンロードしながらその映像を再生することができる。このため、ストリーム配信は、ライブ配信を実現することができる。また、映像データファイルのサイズが大きい場合であっても、端末装置は、大容量のストレージを用意することなくその映像を再生できる。
【０００３】
ストリーム配信を提供する通信方式の１つとして、Ｐ２Ｐ（peer to peer）通信が実用化されている。Ｐ２Ｐ通信においては、通信を行う複数の端末装置は対等である。すなわち、各端末装置は、データを受信する受信装置として動作することができ、また、データを他の端末装置へ送信（または、転送）する送信装置として動作することもできる。したがって、Ｐ２Ｐ通信は、柔軟なネットワークを提供することができる。
【０００４】
Ｐ２Ｐを利用するストリーム配信を提供する配信システムにおいては、根ノード装置が設けられる。根ノード装置は、配信サービスにより提供されるストリームデータを受信する参加ノード装置を管理する。ここで、新たなノード装置（以下、新規参加ノード装置）が配信サービスを受けようとするときは、その新規参加ノード装置は、根ノード装置に参加要求を送信する。そうすると、根ノード装置は、新規参加ノード装置に対して、親候補ノード情報を提供する。そして、新規参加ノード装置は、その親候補ノード情報を利用して親ノード装置を決定し、その親ノード装置からストリームデータを受信する。
【０００５】
なお、関連技術として、Ｐ２Ｐのリレー方式において安定した通信を可能にするサーバシステムおよびクライアント装置が提案されている。また、大規模なストリーミング配信をＰ２Ｐ方式で確実に行うための方法が提案されている。（例えば、特許文献１、２）
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１５１７０１号公報
【特許文献２】ＷＯ２０１０／０６７４５７号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述のように、新規参加ノード装置は、配信サービスを受けるときは、根ノード装置に参加要求を送信する。このため、例えば、新規参加ノード装置が多いときは、根ノード装置のレスポンスが悪くなることがある。そうすると、新規参加ノード装置が配信サービスを受けられるようになるまでの時間が長くなってしまう。すなわち、ユーザの利便性が低下することがある。
【０００８】
１つの側面では、本発明は、Ｐ２Ｐでストリーム配信を行う映像配信システムにおいて、新規参加ノード装置がストリームデータを受信できるようになるまでの時間を短くすることを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、ノード装置に対してストリーム配信サービスを提供する映像配信システムにおいて、前記ストリーム配信サービスに新たに参加する新規参加ノード装置は、所定の範囲内のノード装置に対して参加要求を送信し、前記参加要求を受信したノード装置は、前記ストリーム配信サービスを提供できるときは、前記参加要求に対応する参加応答を前記新規参加ノード装置へ返送し、前記新規参加ノード装置は、前記参加要求に対応する参加応答を最初に返送してきたノード装置に対してストリーム配信要求を送信する。
【発明の効果】
【００１０】
１つの側面として、Ｐ２Ｐでストリーム配信を行う映像配信システムにおいて、新規参加ノード装置がストリームデータを受信できるようになるまでの時間を短くすることができるという効果を有する。
【図面の簡単な説明】
【００１１】
【図１】映像配信システムの動作の概要を説明する図（その１）である。
【図２】映像配信システムの動作の概要を説明する図（その２）である。
【図３】映像配信システムの動作の概要を説明する図（その３）である。
【図４】映像配信システムの動作の概要を説明する図（その４）である。
【図５】映像配信システムの動作の概要を説明する図（その５）である。
【図６】根ノード装置の機能を示すブロック図である。
【図７】ノード装置の機能を示すブロック図である。
【図８】新規参加ノード装置の動作を示すフローチャートである。
【図９】参加ノード装置の動作を示すフローチャートである。
【図１０】新規参加ノード装置の近くに配信可能な参加ノード装置が存在するときのシーケンスを示す図である。
【図１１】新規参加ノード装置の近くに配信可能な参加ノード装置が存在しないときのシーケンスを示す図である。
【図１２】ノード装置の動作状態に基づいて参加要求に応答するか否かを判定する方法を説明する図である。
【図１３】配信ツリーに基づいて参加要求に応答するか否かを判定する方法を説明する図である。
【図１４】本発明の実施形態に係わるノード装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
図１〜図５は、本発明の１つの実施形態に係る映像配信システム２００の動作の概要を説明する図である。映像配信システム２００は、ユーザからの要求に応じてストリーム配信サービスを提供することができる。
【００１３】
映像配信システム２００は、複数のノード装置を含む。各ノード装置は、映像配信システム２００が提供するストリーム配信サービスに参加することができる。この例では、図１に示すように、ノード装置１Ａ、１Ｂ、１Ｃ、１Ｄがストリーム配信サービスに参加している。すなわち、ノード装置１Ａ、１Ｂ、１Ｃ、１Ｄは、ストリームデータを受信している。なお、以下の説明では、ストリーム配信サービスに参加しているノード装置を「参加ノード装置（または、参加ノード）」と呼ぶことがある。
【００１４】
映像配信システム２００は、根ノード装置２を有する。根ノード装置２は、ストリーム配信の状態を管理する。例えば、根ノード装置２は、参加ノード装置の接続状態を表す配信ツリーを管理する。すなわち、根ノード装置２は、各参加ノード装置へストリームデータが配信される経路を管理している。また、根ノード装置２は、この実施例では、ストリーム配信の最上流に位置する。そして、根ノード装置２は、コンテンツサーバから映像データを取得して参加ノード装置へストリーム配信する。或いは、コンテンツサーバが根ノード装置として動作してもよい。
【００１５】
各ノード装置は、Ｐ２Ｐ通信を実現するための機能を実装している。そして、根ノード装置２から送信されるストリームデータは、１または複数の参加ノード装置を介して各参加ノードに配信される。図１に示す例では、根ノード装置２は、参加ノード装置１Ａへストリームデータを送信する。参加ノード装置１Ａは、受信したストリームデータを参加ノード装置１Ｂへ転送する。同様に、参加ノード装置１Ｂは、受信したストリームデータを参加ノード装置１Ｃへ転送し、参加ノード装置１Ｃは、受信したストリームデータを参加ノード装置１Ｄへ転送する。このストリーミングにより、参加ノード装置１Ａ〜１Ｄは、根ノード装置２から配信される映像データをほぼ同時に受信することができる。
【００１６】
各ノード装置は、ルータに収容されている。この実施例では、各ルータに収容されている複数のノード装置がそれぞれネットワークを構成する。たとえば、図１に示すように、参加ノード装置１Ａ、１Ｂ、根ノード装置２は、ネットワークＸに属している。また、参加ノード装置１Ｃ、１Ｄは、ネットワークＹに属している。各ネットワークＸ、Ｙの中では、ノード装置間の距離は１ホップである。なお、ネットワークＸおよびネットワークＹは、ゲートウェイ４により互いに接続されている。
【００１７】
上記構成の映像配信システム２００において、ネットワークＹに属するノード装置３が、新たにストリーム配信サービスに参加するものとする。なお、以下の説明では、新たにストリーム配信サービスに参加するノード装置を「新規参加ノード装置（または、新規参加ノード）」と呼ぶことがある。
【００１８】
新規参加ノード装置３は、まず、新規参加ノード装置３を収容しているルータとの間の往復遅延時間（ＲＴＴ：Round Trip Time）を測定する。すなわち、新規参加ノード装置３は、図１に示すように、ゲートウェイ４との間のＲＴＴを測定する。ＲＴＴは、例えば、新規参加ノード装置３からゲートウェイ４へＰｉｎｇを送信することにより測定される。ただし、ＲＴＴは、他の方法で測定してもよい。
【００１９】
続いて、新規参加ノード装置３は、図２に示すように、ネットワークＹに属するすべてのノード装置に対してマルチキャスト参加要求を送信する。このマルチキャスト参加要求は、例えば、送信先アドレスとしてネットワークＹ内で一意なマルチキャストアドレスが付与されたパケットに格納されて送信される。また、このマルチキャスト参加要求には、「生存時間（ＴＴＬ：Time To Live）＝１」が付与される。ＴＴＬは、データ転送過程において、そのデータを受信したゲートウェイ（ルータ）により１だけデクリメントされる。そして、データに付与されているＴＴＬがゼロになると、そのデータは、それ以上は転送されない。したがって、ＴＴＬ＝１が設定されたマルチキャスト参加要求は、新規参加ノード装置３から１ホップの範囲内のノード装置により受信される。すなわち、新規参加ノード装置３から送信されるマルチキャスト参加要求は、ネットワークＹの中の各ノード装置（図２では、参加ノード装置１Ｃ、１Ｄ）により受信される。
【００２０】
なお、このマルチキャスト参加要求は、ゲートウェイ４によっても受信される。但し、マルチキャスト参加要求のＴＴＬは、ゲートウェイ４において１からゼロに更新される。したがって、マルチキャスト参加要求は、ネットワークＸへ転送されることはない。
【００２１】
新規参加ノード装置３は、上述のマルチキャスト参加要求を送信するときに、タイマを起動する。このタイマは、新規参加ノード装置３とゲートウェイ４との間のＲＴＴを計時する。そして、新規参加ノード装置３は、このタイマがタイムアウトするまで、マルチキャスト参加要求に対応する参加応答を待ち受ける。
【００２２】
マルチキャスト参加要求を受信した参加ノード装置は、それぞれ、その参加要求に対して応答するか否かを判定する。ここで、参加ノード装置は、新規参加ノード装置に対してストリームデータを配信できるときは、受信した参加要求に対して応答する。この場合、参加要求を受信した参加ノード装置は、新規参加ノード装置３へ参加応答を返送する。図３に示す例では、マルチキャスト参加要求を受信した参加ノード装置１Ｃ、１Ｄのうち、参加ノード装置１Ｄが新規参加ノード装置３へ参加応答を返送している。なお、参加ノード装置は、新規参加ノード装置に対してストリームデータを配信できないときは、受信した参加要求を廃棄する。また、ストリーム配信サービスに参加していないノード装置も、受信した参加要求を廃棄する。
【００２３】
新規参加ノード装置３は、上述のタイマがタイムアウトする前に、参加ノード装置１Ｄから参加応答を受信するものとする。ここで、このタイマは、上述したように、新規参加ノード装置３とゲートウェイ４との間のＲＴＴを計時する。したがって、タイマがタイムアウトする前に新規参加ノード装置３が参加応答を受信したときは、新規参加ノード装置３は、ストリームデータを配信可能な参加ノード装置がゲートウェイ４よりも近くに存在すると判定する。この場合、新規参加ノード装置３は、参加応答を返送してきた参加ノード装置を特定し、その特定した参加ノード装置に対してストリーム配信要求を送信する。図３に示す例では、新規参加ノード装置３は、参加ノード装置１Ｄに対してストリーム配信要求を送信している。そして、参加ノード装置１Ｄは、ストリーム配信要求に応じて新規参加ノード装置３へのストリーム配信を開始する。
【００２４】
なお、新規参加ノード装置３は、タイマがタイムアウトする前に複数の参加応答を受信したときには、参加応答を最初に返送してきた参加ノード装置に対してストリーム配信要求を送信する。この場合、新規参加ノード装置３は、最も近くに存在する参加ノード装置からストリームデータを受信することができる。
【００２５】
このように、新規参加ノード装置３は、根ノード装置２にアクセスすることなく、新規参加ノード装置３の近くに位置する参加ノード装置からストリームデータを受信することができる。したがって、この方法によれば、多数のノード装置が同時にストリーム配信サービスへの参加を要求する場合であっても、根ノード装置の輻輳に起因するレスポンスの劣化は回避または抑制される。
【００２６】
この後、新規参加ノード装置３は、根ノード装置２へ接続情報を送信する。この接続情報は、ストリームデータの送信元ノードを識別する情報を含む。この実施例では、接続情報は、ノード装置１Ｄを識別する情報を含む。なお、ストリームデータの送信元のノード装置を「親ノード装置（または、親ノード）」と呼ぶことがある。例えば、新規参加ノード装置３の親ノード装置は参加ノード装置１Ｄであり、参加ノード装置１Ｄの親ノード装置は参加ノード装置１Ｃである。
【００２７】
図２〜図３に示す例では、新規参加ノード装置３は、タイマがタイムアウトする前に参加ノード装置から参加応答を受信する。これに対して、図４は、タイマがタイムアウトする前に新規参加ノード装置３が参加応答を受信できなかったときの動作を示している。
【００２８】
タイマがタイムアウトする前に新規参加ノード装置３が参加応答を受信できなかったときは、新規参加ノード装置３は、ストリームデータを配信可能な参加ノード装置が近くに存在していないと判定する。この場合、新規参加ノード装置３は、図４に示すように、根ノード装置２へユニキャスト参加要求を送信する。
【００２９】
根ノード装置２は、参加要求を受信すると、親候補ノード情報を生成して新規参加ノード装置３へ送信する。親候補ノード情報は、新規参加ノード装置３に対して親ノード装置として動作することが可能な参加ノード装置のリストを含む。すなわち、親候補ノード情報は、新規参加ノード装置３に対してストリームデータを配信可能な参加ノード装置のリストを含む。そうすると、新規参加ノード装置３は、親候補ノード情報においてリストアップされている参加ノード装置の中から１つの参加ノード装置を選択し、その選択した参加ノード装置に対してストリーム配信要求を送信する。これにより、新規参加ノード装置３は、その参加ノード装置からストリームデータを受信することができる。
【００３０】
このように、新規参加ノード装置３は、根ノード装置２に参加要求を送信して親候補ノード情報を取得する。ただし、新規参加ノード装置３は、所定時間内に参加応答を受信できなかったときに限って根ノード装置２へ参加要求を送信する。したがって、新規参加ノード装置からの参加要求に起因する根ノード装置２の輻輳は抑制される。
【００３１】
ところで、各参加ノード装置は、上述したように、新規参加ノード装置から受信する参加要求に対して応答するか否かを予め判定しておく。この判定は、新規参加ノード装置に対してストリームデータを配信できるか否かに基づく。
【００３２】
例えば、ノード装置のハードウェア資源（ＣＰＵ、メモリなど）の能力が十分に高いときは、参加要求に対して応答すると判定される。ただし、ノード装置のハードウェア資源の使用率が高いときは、参加要求に対して応答しないと判定される。
【００３３】
参加ノード装置は、配信ツリーの構成に基づいて判定を行ってもよい。例えば、根ノード装置２から自ノードまでの間に存在する参加ノード装置の数が多いときは、参加要求に対して応答しないと判定される。配信ツリーの構成を表す配信ツリー情報は、図５に示すように、根ノード装置２から各参加ノード装置に通知される。根ノード装置２は、たとえば、配信ツリーの構成が変化したときに、更新された配信ツリー情報を各参加ノード装置に通知する。或いは、根ノード装置２は、定期的に配信ツリー情報を各参加ノード装置に通知してもよい。
【００３４】
また、根ノード装置２から配信されるストリームデータのヘッダには、中継ノード数をカウントするための中継数データが格納されている。ストリームデータが根ノード装置２から送信されるときは、中継数データはゼロである。この中継数データは、ストリームデータが参加ノード装置によって中継されるときに１ずつインクリメントされる。即ち、ストリームデータのヘッダに格納されている中継数データは、参加ノード装置１Ａ、１Ｂ、１Ｃ、１Ｄにおいてそれぞれ、１、２、３、４にカウントアップされる。そして、各参加ノード装置は、この中継数データを利用して参加要求に対して応答するか否かを判定してもよい。例えば、参加ノード装置は、中継数が所定の閾値よりも大きいときは、参加要求に対して応答しないと判定する。
【００３５】
このように、各参加ノード装置は、参加要求に対して応答するか否かを予め決定しておく。また、各参加ノード装置は、自装置の動作状態、及び配信ツリーの構成の変化等に応じて、参加要求に対して応答するか否かを表す判定結果を更新する。図５に示す例では、参加ノード装置１Ａ、１Ｂ、１Ｄは、参加要求に対して応答する状態（図５では「ＯＫ」と表記）にある。これに対して参加ノード装置１Ｃは、参加要求に対して応答しない状態（図５では、「ＮＧ」と表記）にある。
【００３６】
この場合、参加ノード装置１Ａ、１Ｂ、１Ｄは、新規参加ノード装置から参加要求を受信すると、対応する参加応答を返送する。一方、参加ノード装置１Ｃは、新規参加ノード装置から参加要求を受信しても参加応答を返送しない。ただし、図２に示す例では、新規参加ノード装置３から送信されるマルチキャスト参加要求は、参加ノード装置１Ａ、１Ｂには到達しない。よって、この例では、参加ノード装置１Ｄのみが新規参加ノード装置３に対して参加応答を返送する。
【００３７】
図６は、根ノード装置２の機能を示すブロック図である。根ノード装置２は、図６に示すように、ストリーム受信部１１、ストリームバッファ１２、ストリーム送信部１３、管理パケット受信部１４、参加ノード情報管理部１５、配信ツリー情報生成部１６、管理パケット送信部１７を有する。なお、根ノード装置２は、図６に示していない他の機能を有していてもよい。
【００３８】
ストリーム受信部１１は、ユーザから要求されたコンテンツに対応するストリームデータをコンテンツサーバから受信または取得する。そして、ストリーム受信部１１は、受信または取得したストリームデータをストリームバッファ１２に格納する。また、ストリーム送信部１３は、ストリームバッファ１２からストリームデータを読み出して参加ノード装置へ送信する。ストリーム送信部１３は、中継数通知部１３ａを有する。中継数通知部１３ａは、ストリームデータのヘッダに格納されている中継数データに初期値（即ち、ゼロ）を設定する。
【００３９】
管理パケット受信部１４は、参加ノード装置および新規参加ノード装置から管理パケットを受信する。例えば、図３に示す例では、管理パケット受信部１４は、新規参加ノード装置３から接続情報を含む管理パケットを受信する。図４に示す例では、管理パケット受信部１４は、新規参加ノード装置３からユニキャスト参加要求を含む管理パケットを受信する。さらに、管理パケット受信部１４は、ストリーム配信要求を受信することもある。
【００４０】
参加ノード情報管理部１５は、参加ノード装置を管理するために、ストリーム送信先管理部１５ａ、参加ノード管理部１５ｂ、親候補情報生成部１５ｃを有する。ストリーム送信先管理部１５ａは、ストリームデータの送信先ノードを識別する情報を格納する。ストリーム送信先管理部１５ａは、例えば、新規参加ノード装置から受信する接続情報またはユニキャスト参加要求に従って登録情報を更新する。参加ノード管理部１５ｂは、ストリーム配信サービスに参加している各ノード装置に係わる情報を格納する。ノード装置に係わる情報は、例えば、ノード装置のハードウェア資源の能力を表す情報を含むようにしてもよい。親候補情報生成部１５ｃは、新規参加ノード装置から受信する参加要求に応じて親候補ノード情報を生成する。このとき、親候補情報生成部１５ｃは、ストリーム送信先管理部１５ａおよび参加ノード管理部１５ｂと連携して親候補ノード情報を生成する。例えば、親候補情報生成部１５ｃは、参加ノード装置の中からハードウェア資源の能力の高いノード装置を選択し、選択したノード装置を親候補ノード情報に登録してもよい。
【００４１】
配信ツリー情報生成部１６は、配信ツリー情報を生成する。配信ツリー情報は、ストリーム配信サービスに参加しているノード装置の接続関係を表す。すなわち、配信ツリー情報は、根ノード装置２から各参加ノード装置へのストリームデータの配信経路を表す。ここで、配信ツリー情報生成部１６は、参加ノード情報管理部１５によって管理されている情報を利用して配信ツリー情報を生成する。なお、配信ツリー情報生成部１６は、配信ツリーの構成が変化したときに配信ツリー情報を更新する。
【００４２】
管理パケット送信部１７は、参加ノード装置および新規参加ノード装置へ管理パケットを送信する。例えば、図４に示す例では、管理パケット送信部１７は、親候補ノード情報を含む管理パケットを新規参加ノード装置３へ送信する。この管理パケットは、親候補ノード通知部１７ａにより生成される。親候補ノード通知部１７ａは、親候補情報生成部１５ｃにより生成される親候補ノード情報を含む管理パケットを生成する。また、図５に示す例では、管理パケット送信部１７は、配信ツリー情報を含む管理パケットを各参加ノード装置へ送信する。この管理パケットは、配信ツリー通知部１７ｂにより生成される。配信ツリー通知部１７ｂは、配信ツリー情報生成部１６により生成される配信ツリー情報を含む管理パケットを生成する。なお、管理パケット送信部１７は、他の管理パケットを送信することもできる。
【００４３】
図７は、ノード装置の機能を示すブロック図である。ノード装置２０は、図７に示すように、ストリーム受信部２１、ストリームバッファ２２、ストリーム送信部２３、ＲＴＴ測定部２４、管理パケット受信部２５、ノードスペック生成部２６、応答判定部２７、タイマ２８、管理パケット送信部２９、コントローラ３０を有する。なお、ノード装置２０は、図７に示していない他の機能を有していてもよい。また、ノード装置２０は、参加ノード装置（または、新規参加ノード装置）として動作することができる。
【００４４】
ストリーム受信部２１は、根ノード装置２または上流側の参加ノード装置からストリームデータを受信する。ストリーム受信部２１は、中継数カウント部２１ａを有する。中継数カウント部２１ａは、受信したストリームデータのヘッダに格納されている中継数データを１だけインクリメントする。そして、ストリーム受信部２１は、そのストリームデータをストリームバッファ２２に格納する。ストリーム送信部２３は、ストリームバッファ２２からストリームデータを読み出して下流側の参加ノード装置へ送信する。ストリーム送信部２３は、中継数通知部２３ａを有する。中継数通知部２３ａは、中継数カウント部２１ａにより更新された中継数データをストリームデータのヘッダに格納する。
【００４５】
なお、ノード装置２０には、不図示の表示装置および／またはスピーカが接続されていてもよい。この場合、ストリームバッファ２２に書き込まれたストリームデータに基づいて、動画像が表示装置に表示され、音声がスピーカを介して出力される。
【００４６】
ＲＴＴ測定部２４は、ノード装置２０を収容するルータまたはゲートウェイとの間のＲＴＴを測定する。図１に示す例では、ＲＴＴ測定部２４は、ゲートウェイ４との間のＲＴＴを測定している。なお、ＲＴＴ測定部２４は、例えば、Ｐｉｎｇを用いてＲＴＴを測定してもよい。
【００４７】
管理パケット受信部２５は、根ノード装置２または他のノード装置から管理パケットを受信する。管理パケット受信部２５は、参加要求受信部２５ａ、参加応答受信部２５ｂ、配信ツリー受信部２５ｃを有する。参加要求受信部２５ａは、新規参加ノード装置から送信されるマルチキャスト参加要求を含む管理パケットを受信する。ただし、参加要求受信部２５ａは、後述する応答判定部２７による判定結果に従って、受信した参加要求を受け入れるか否かを決定する。参加応答受信部２５ｂは、マルチキャスト参加要求に対応する参加応答を含む管理パケットを受信する。ただし、後述するタイマ２８がタイムアウトした後は、参加応答受信部２５ｂは、参加応答を含む管理パケットを廃棄する。また、参加応答を含む複数の管理パケットを受信したときは、参加応答受信部２５ｂは、最初の管理パケットを受け入れ、後続の管理パケットを廃棄する。配信ツリー受信部２５ｃは、根ノード装置２から送信される配信ツリー情報を含む管理パケットを受信する。さらに、管理パケット受信部２５は、親候補ノード情報を含む管理パケット、ストリーム配信要求を含む管理パケット等を受信する。
【００４８】
ノードスペック生成部２６は、ノード装置２０（すなわち、自装置）がストリームデータを配信できるか否かを判定するためのノードスペック情報を管理する。ここで、ノードスペック生成部２６は、配信ツリー状態判定部２６ａおよびハードウェア状態判定部２６ｂを含む。配信ツリー状態判定部２６ａは、根ノード装置２から受信する配信ツリー情報に基づいて、配信ツリーの状態を判定する。ハードウェア状態判定部２６ｂは、ノード装置２０のハードウェア資源の動作状態（ＣＰＵの負荷、メモリの空き領域など）を判定する。そして、配信ツリー状態判定部２６ａおよびハードウェア状態判定部２６ｂによる判定結果は、ノードスペック情報として出力される。
【００４９】
応答判定部２７は、ノードスペック生成部２６により生成されるノードスペック情報に基づいて、新規参加ノード装置から送信されるマルチキャスト参加要求に対して応答するか否かを判定する。そして、応答判定部２７の判定結果は、参加要求受信部２５ａに通知される。なお、応答判定部２７による判定の実施例については、後述する。
【００５０】
タイマ２８には、ＲＴＴ測定部２４により測定されたＲＴＴが設定される。タイマ２８は、管理パケット送信部２９がマルチキャスト参加要求を含む管理パケットを送信したときに起動される。そして、タイマ２８がタイムアウトすると、参加応答受信部２５ｂおよび参加要求生成部２９ａにタイムアウト通知が与えられる。
【００５１】
管理パケット送信部２９は、根ノード装置２および他のノード装置へ管理パケットを送信する。管理パケット送信部２９は、参加要求生成部２９ａ、参加応答生成部２９ｂ、ストリーム配信要求生成部２９ｃを含む。参加要求生成部２９ａは、図２に示すマルチキャスト参加要求を含む管理パケットを所定の範囲内のノード装置へ送信する。すなわち、この管理パケットには、送信先アドレスとして所定の範囲を指定するマルチキャストアドレスが設定される。また、参加要求生成部２９ａは、この管理パケットに「ＴＴＬ＝１」を付与する。ただし、タイマ２８からタイムアウト通知を受信したときは、参加要求生成部２９ａは、ユニキャスト参加要求を含む管理パケットを根ノード装置２へ送信する。参加応答生成部２９ｂは、参加要求受信部２５ａが新規参加ノード装置から参加要求を受信して受け入れたときに、その参加要求に対応する参加応答を含む管理パケットを新規参加ノード装置へ送信する。
【００５２】
ストリーム配信要求生成部２９ｃは、ストリーム配信要求を含む管理パケットを生成して親ノード装置へ送信する。たとえば、図２〜図３に示す例では、ストリーム配信要求生成部２９ｃは、最初に参加応答を返送してきた参加ノード装置１Ｄへストリーム配信要求を含む管理パケットを送信している。また、図４に示す例では、ストリーム配信要求生成部２９ｃは、親候補ノード情報に基づいて決定された親ノード装置に、ストリーム配信要求を含む管理パケットを送信する。なお、管理パケット送信部２９は、他の管理パケットを送信してもよい。例えば、管理パケット送信部２９は、図３に示す接続情報を含む管理パケットを根ノード装置２へ送信することができる。
【００５３】
コントローラ３０は、ノード装置２０の動作を制御する。また、コントローラ３０は、ストリーム配信に係わる他の機能を提供する。例えば、コントローラ３０は、根ノード装置２から受信する親候補ノード情報に基づいて親ノード装置を選択することができる。
【００５４】
図８は、新規参加ノード装置の動作を示すフローチャートである。このフローチャートの処理は、例えば、ユーザによりストリーム配信サービスへの参加が指示されたときに実行される。
【００５５】
Ｓ１において、ＲＴＴ測定部２４は、デフォルトゲートウェイのＲＴＴを測定する。デフォルトゲートウェイは、当該ノード装置を収容するルータまたゲートウェイである。Ｓ２において、参加要求生成部２９ａは、所定範囲内のノード装置へマルチキャスト参加要求を送信する。マルチキャスト参加要求を含む管理パケットには「ＴＴＬ＝１」が設定される。よって、このマルチキャスト参加要求は、新規参加ノード装置から１ホップの範囲内のノード装置によって受信される。また、参加要求生成部２９ａは、マルチキャスト参加要求の送信時に、Ｓ３において、タイマ２８を起動する。タイマ２８は、Ｓ１で測定されたＲＴＴが経過したときにタイムアウトする。
【００５６】
Ｓ４において、参加応答受信部２５ｂは、Ｓ２で送信されたマルチキャスト参加要求に対応する参加応答を待ち受ける。そして、タイマ２８がタイムアウトする前に参加応答受信部２５ｂが参加応答を受信したときには、ノード装置の処理はＳ５に進む。Ｓ５において、コントローラ３０は、親ノード装置を特定する。この場合、最初の参加応答の送信元ノード装置が親ノード装置として特定される。さらに、Ｓ６において、ストリーム配信要求生成部２９ｃは、Ｓ５で特定された親ノード装置に対してストリーム配信要求を送信する。なお、参加応答受信部２５ｂが２番目以降の参加応答を受信したときは、Ｓ９において、受信した参加応答は破棄される。
【００５７】
Ｓ７において、ストリーム受信部２１は、ストリーム配信要求に対応するストリームデータを受信しているか否かを判定する。そして、ストリーム受信部２１がストリームデータを受信しているときは、Ｓ８において、管理パケット送信部２９は、接続情報を含む管理パケットを根ノード装置２へ送信する。この場合、接続情報は、ストリームデータの送信元ノード装置（すなわち、親ノード装置）を識別する情報を含む。一方、ストリーム受信部２１がストリーム配信要求に対応するストリームデータを受信していないときは、ノード装置の処理はＳ２に戻る。
【００５８】
参加応答受信部２５ｂが参加応答を受信する前にタイマ２８がタイムアウトしたときには、Ｓ１１〜Ｓ１３の処理が実行される。Ｓ１１において、参加要求生成部２９ａは、根ノード装置２へユニキャスト参加要求を送信する。この場合、根ノード装置２は、このユニキャスト参加要求に応じて親候補ノード情報を返送する。Ｓ１２において、管理パケット受信部２９は、根ノード装置２から送信される親候補ノード情報を受信する。そして、コントローラ３０は、受信した親候補ノード情報に基づいて親ノード装置を選択する。この後、ノード装置の処理はＳ６へ進む。この場合、ストリーム配信要求生成部２９ｃは、Ｓ１３で選択された親ノード装置に対してストリーム配信要求を送信する。
【００５９】
図９は、参加ノード装置の動作を示すフローチャートである。このフローチャートの処理は、ノード装置がストリームデータを受信しているときに実行される。
【００６０】
Ｓ２１において、ストリーム受信部２１は、ストリームデータを受信する。Ｓ２２において、中継数カウント部２２は、受信したストリームデータのヘッダに格納されている中継数データを１だけインクリメントする。なお、受信したストリームデータは、ストリームバッファ２２に書き込まれる。
【００６１】
Ｓ２３において、配信ツリー受信部２５ｃは、根ノード装置２から送信される配信ツリー情報を受信する。そして、配信ツリー状態判定部２６ａは、この配信ツリー情報に基づいて配信ツリーの状態を判定する。Ｓ２４において、ハードウェア状態判定部２６ｂは、当該ノード装置のハードウェア資源の動作状態（ＣＰＵの負荷、メモリの空き領域など）を判定する。そして、Ｓ２５において、ノードスペック生成部２６は、Ｓ２４およびＳ２５の判定結果をノードスペック情報として出力する。
【００６２】
Ｓ２６において、応答判定部２７は、ノードスペック生成部２６により生成されるノードスペック情報に基づいて、新規参加ノード装置から送信されるマルチキャスト参加要求に対して応答するか否かを判定する。参加要求に対して応答すると判定したときは、Ｓ２７において、応答判定部２７は、応答フラグをＯＮに設定する。応答フラグがＯＮである状態は、当該ノード装置がストリームデータを配信できる状態を表す。すなわち、応答フラグがＯＮである状態は、当該ノード装置が他のノード装置に対して親ノード装置となることをできる状態を表す。一方、参加要求に対して応答しないと判定したときは、Ｓ２８において、応答判定部２７は、応答フラグをＯＦＦに設定する。なお、応答フラグがＯＮに設定されているときには、参加要求受信部２５ａは、新規参加ノード装置から受信するマルチキャスト参加要求を待ち受ける。そして、参加要求受信部２５ａは、マルチキャスト参加要求を受信したときは、その参加要求を受け入れる。一方、応答フラグがＯＦＦに設定されているときは、参加要求受信部２５ａは、新規参加ノード装置から受信する参加要求を破棄する。
【００６３】
Ｓ３１において参加要求受信部２５ａが新規参加ノード装置からマルチキャスト参加要求を受信すると、Ｓ３２において、参加応答生成部２９ｂは、そのマルチキャスト参加要求に対応する参加応答を生成する。この参加応答は、マルチキャスト参加要求の送信元ノード装置（すなわち、新規参加ノード装置）に返送される。なお、この参加応答は、図８に示すフローチャートのＳ４において新規参加ノード装置によって受信される。そうすると、新規ノード装置は、Ｓ６においてストリーム配信要求を生成する。
【００６４】
Ｓ３３において、管理パケット受信部２５は、新規参加ノード装置により生成されるストリーム配信要求を受信する。そうすると、Ｓ３４において、ストリーム送信部２３は、ストリームバッファ２２に格納されているストリームデータを新規参加ノード装置へ送信する。
【００６５】
図１０は、新規参加ノード装置の近くにストリームデータを配信可能な参加ノード装置が存在するときの映像配信システムのシーケンスを示す。このシーケンスは、図１〜図３に示す実施例に対応する。
【００６６】
新規参加ノード装置３は、ゲートウェイ４との間のＲＴＴを測定する。続いて、新規参加ノード装置３は、ネットワークＹに属するノード装置に対してマルチキャスト参加要求を送信する。このとき、タイマ２８が起動される。そして、このマルチキャスト参加要求は、参加ノード装置１Ｃ、１Ｄにより受信される。ここで、この実施例では、参加ノード装置１Ｃ、１Ｄは、参加要求に対して応答する状態に設定されているものとする。そうすると、参加ノード装置１Ｃ、１Ｄは、それぞれ、新規参加ノード装置３に参加応答を返送する。
【００６７】
新規参加ノード装置３は、タイマ２８がタイムアウトする前に、参加ノード装置１Ｃ、１Ｄからそれぞれ返送されてくる参加応答を受信する。この例では、新規参加ノード装置３は、参加ノード装置１Ｄから送信された参加応答を最初に受信し、その後、参加ノード装置１Ｃから送信された参加応答を受信する。この場合、新規参加ノード装置３は、ストリームデータを配信可能なノード装置のうちで、参加ノード装置１Ｄが最も新規参加ノード装置３の近くに位置していると判定する。そうすると、新規参加ノード装置３は、参加ノード装置１Ｄへストリーム配信要求を送信する。そして、参加ノード装置１Ｄは、新規参加ノード装置３へのストリームデータの配信を開始する。更に、新規参加ノード装置３は、参加ノード装置１Ｄが親ノード装置であることを表す接続情報を根ノード装置２へ送信する。根ノード装置２は、この接続情報に応じて配信ツリー情報を更新する。
【００６８】
この後、根ノード装置２は、各参加ノード装置（新規参加ノード装置３を含む）へ配信ツリー情報を送信する。そうすると、新規参加ノード装置３は、その配信ツリー情報および新規参加ノード装置３のハードウェア資源の動作状態に基づいて、参加要求に対して応答するか否かを判定する。そして、参加要求に対して応答するときは、新規参加ノード装置３は、他のノード装置から送信されてくるマルチキャスト参加要求を待ち受ける。
【００６９】
図１１は、新規参加ノード装置の近くにストリームデータを配信可能な参加ノード装置が存在しないときの映像配信システムのシーケンスを示す。このシーケンスは、図１、図２、図４に示す実施例に対応する。
【００７０】
ＲＴＴを測定する動作およびマルチキャスト参加要求を送信する動作は、図１０および図１１において同じである。ただし、図１１に示す例では、新規参加ノード装置３は、タイマ２８がタイムアウトするまでに参加応答を受信できていない。この場合、新規参加ノード装置３は、根ノード装置２へユニキャスト参加要求を送信する。そうすると、根ノード装置２は、親候補ノード情報を生成して新規参加ノード装置３へ返送する。
【００７１】
新規参加ノード装置３は、根ノード装置２から受信する親候補ノード情報に基づいて親ノード装置を選択する。この例では、参加ノード装置１Ｂが親ノード装置として選択されている。そうすると、新規参加ノード装置３は、参加ノード装置１Ｂへストリーム配信要求を送信する。そして、参加ノード装置１Ｂは、新規参加ノード装置３へのストリームデータの配信を開始する。この後の動作は、図１０および図１１において実質的に同じなので、説明を省略する。
【００７２】
次に、参加ノード装置がマルチキャスト参加要求に対して応答するか否かを判定する方法を説明する。この判定は、上述したように、応答判定部２７により行われる。
【００７３】
図１２に示す例では、ノード装置のスペックに基づいて判定が行われる。ノード装置のスペックは、ノード装置のハードウェアの能力および動作状態などを表す。この例では、下記の６つの項目が考慮される。この場合、項目（２）（３）（４）（６）は、例えば、定期的に検出されるものとする。
（１）ＣＰＵの能力
（２）メモリの空き領域
（３）ＨＤＤの空き領域
（４）ＣＰＵの負荷（使用率）
（５）ＬＡＮインタフェースの通信速度
（６）パケットロス率
【００７４】
上記６項目のうちの１以上の項目において「低」と判定されるときは、応答判定部２７は、応答フラグをＯＦＦに設定する。「低」と判定される項目がないときは、応答判定部２７は、応答フラグをＯＮに設定する。この方法によれば、新規参加ノード装置は、ハードウェア資源の余力が大きいノード装置に接続されやすくなる。
【００７５】
また、応答判定部２７は、自装置の配信状態に応じて上述の判定を行ってもよい。たとえば、子ノードの数（すなわち、配信先ノードの数）が閾値（例えば、３）に達していれば、応答判定部２７は、応答フラグをＯＦＦに設定する。この方法によれば、新規参加ノード装置は、子ノードの数が少ないノード装置に接続されやすくなる。
【００７６】
さらに、応答判定部２７は、根ノード装置から受信する配信ツリー情報に基づいて上述の判定を行ってもよい。例えば、図１３（ａ）に示す配信ツリーを表す配信ツリー情報が根ノード装置から各参加ノード装置に送信されるものとする。そして、各ノード装置の応答判定部２７は、根ノード装置から自ノードまでの経路の中継数と配信ツリー内の最小中継数との差分が閾値（例えば、５）に達していれば、応答フラグをＯＦＦに設定する。最小中継数は、根ノード装置から各配信経路の最下流ノードまでの間の中継数のうちの最小値を表すものとする。図１３（ａ）に示す例では、最小中継数は、中継ノードＡにおいて検出される「１」である。ここで、ノードＩにおいて検出される中継数は「６」である。この場合、ノードＩの応答判定部２７は、応答フラグをＯＦＦに設定する。この方法によれば、新規参加ノード装置は、短い配信経路上のノード装置に接続されやすくなる。
【００７７】
応答判定部２７は、配信ツリー情報に基づいて、ルータの配下のネットワーク毎に上述の判定を行ってもよい。例えば、図１３（ｂ）に示す配信ツリーを表す配信ツリー情報が根ノード装置から各参加ノード装置に送信されるものとする。そして、各ノード装置の応答判定部２７は、自ノードが属するネットワーク内での上流側のノード数が閾値（たとえば、３）に達しており、かつ、自ノードが属するネットワーク内の上流側のノードが子ノードの受け入れが可であれば、応答フラグをＯＦＦに設定する。図１３（ｂ）に示す配信ツリーにおいては、ノードＥ、Ｆ、Ｇ、Ｈが同じネットワークに属している。ここで、ノードＨの上流側には３個の中継ノードが存在する。さらに、親候補ノード情報にノードＥ、Ｆ、Ｇのいずれかが登録されている場合、ノードＨの応答判定部２７は、応答フラグをＯＦＦに設定する。この方法によれば、上流側のノード装置に新規参加ノード装置が接続されやすくなり、配信動作が安定する。
【００７８】
＜他の実施例＞
上述の実施例では、タイマを用いて新規参加ノード装置３とゲートウェイ４との間のＲＴＴを計時することにより、親ノード装置として、ゲートウェイ４よりも近くに位置する参加ノード装置がサーチされる。しかしながら、本発明は、この方法に限定されるものではない。すなわち、タイマ２８は、予め指定された所定時間を計時してもよい。この方法であっても、所定時間を適切に決定すれば、新規参加ノード装置３は、近接する参加ノード装置からストリームデータを受信することができる。
【００７９】
また、新規参加ノード装置は、親ノード装置をサーチする際に、タイマを使用しなくてもよい。例えば、新規参加ノード装置は、マルチキャスト参加要求を送信した後、最初に参加応答を返送してきた参加ノード装置を親ノード装置と決定してもよい。
【００８０】
更に、上述の実施例では、マルチキャスト参加要求に「ＴＴＬ＝１」が付与されるが、本発明は、この方法に限定されるものではない。すなわち、マルチキャスト参加要求にＴＴＬが設定されていなくてもよい。なお、マルチキャスト参加要求にＴＴＬが設定されていない場合、新規参加ノード装置は、新規参加ノード装置から２ホップ以上離れた位置にある参加ノード装置から参加応答を受信し得る。しかしながら、新規参加ノード装置は、複数の参加応答を受信したときは、最初に受信した参加応答に基づいて親ノード装置を決定する。よって、新規参加ノード装置から２ホップ以上離れた位置にある参加ノード装置は、親ノード装置として選択される可能性は低い。
【００８１】
＜ノード装置のハードウェア構成＞
図１４は、本発明の実施形態に係わるノード装置（根ノード装置、参加ノード装置、新規参加ノード装置）のハードウェア構成の一例を示す。ノード装置は、図１４に示すコンピュータシステム１００を含む。コンピュータシステム１００は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、読み取り装置１０４、通信インタフェース１０６、および入出力装置１０７を備える。ＣＰＵ１０１、メモリ１０２、記憶装置１０３、読み取り装置１０４、通信インタフェース１０６、入出力装置１０７は、例えば、バス１０８を介して互いに接続されている。
【００８２】
ＣＰＵ１０１は、メモリ１０２を利用して、図８または図９に示すフローチャートの処理を記述した配信制御プログラムを実行する。これにより、上述した映像配信方法が実現される。メモリ１０２は、例えば半導体メモリであり、ＲＡＭ領域およびＲＯＭ領域を含んで構成される。記憶装置１０３は、例えばハードディスク装置であり、上述の配信制御プログラムを格納する。また、記憶装置１０３は、ストリームデータを格納してもよい。なお、記憶装置１０３は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置１０３は、外部記録装置であってもよい。
【００８３】
読み取り装置１０４は、ＣＰＵ１０１の指示に従って着脱可能記録媒体１０５にアクセスする。着脱可能記録媒体１０５は、例えば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。通信インタフェース１０６は、ＣＰＵ１０１の指示に従ってネットワークを介してデータを送信および受信することができる。入出力装置１０７は、ユーザからの指示を受け付けるデバイス、ストリームデータを出力するデバイスなどを含む。
【００８４】
実施形態の配信制御プログラムは、例えば、下記の形態でコンピュータシステム１００に提供される。
（１）記憶装置１０３に予めインストールされている。
（２）着脱可能記録媒体１０５により提供される。
（３）プログラムサーバ１１０から提供される。
【符号の説明】
【００８５】
１Ａ〜１Ｄ  参加ノード装置
２  根ノード装置
３  新規参加ノード装置
４  ゲートウェイ
２４  ＲＴＴ測定部
２７  応答判定部
２８  タイマ
２９ａ  参加要求生成部
２９ｂ  参加応答生成部
２９ｃ  ストリーム配信要求生成部
２００  映像配信システム
【図１】
2015133529.tif 000003
【図２】
2015133529.tif 000004
【図３】
2015133529.tif 000005
【図４】
2015133529.tif 000006
【図５】
2015133529.tif 000007
【図６】
2015133529.tif 000008
【図７】
2015133529.tif 000009
【図８】
2015133529.tif 000010
【図９】
2015133529.tif 000011
【図１０】
2015133529.tif 000012
【図１１】
2015133529.tif 000013
【図１２】
2015133529.tif 000014
【図１３】
2015133529.tif 000015
【図１４】
2015133529.tif 000016