(57)【特許請求の範囲】
【請求項１】
シーケンス番号が付されたメディアパケットのストリームと、メディアパケットに基づいて生成されたＦＥＣパケットのストリームとを受信し、シーケンス番号順にメディアパケットを出力する前方誤り復元方式受信装置であって、
前記受信したメディアパケットおよびＦＥＣパケットを格納するバッファ手段と、
前記バッファ手段におけるメディアパケットの格納位置を参照するための、シーケンス番号に相対的に対応して順位付けられた複数のノードで構成されるノード列を複数設定したノード管理手段と、
前記受信したメディアパケットのシーケンス番号に対応したノードの順位を判定し、判定された順位が付されたノードに当該メディアパケットの格納位置を記憶させ、判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとする解析手段と、
前記出力対象メディアパケットが未受信のメディアパケットを含む場合に、前記格納されたＦＥＣパケットを用いて前記未受信のメディアパケットを復元し出力対象メディアパケットにするとともに、前記出力対象メディアパケットをシーケンス番号順に出力する出力手段と、
を備えたことを特徴とする前方誤り復元方式受信装置。
【請求項２】
請求項１に記載の前方誤り復元方式受信装置であって、
前記解析手段は、前記出力手段が出力対象メディアパケットをシーケンス番号順に出力すると、出力したメディアパケットの格納位置を記憶していたノードの記憶内容を無効とし、後続するノードの順位を繰り上げることを特徴とする前方誤り復元方式受信装置。
【請求項３】
請求項１に記載の前方誤り復元方式受信装置であって、
前記解析手段は、判定されたノードの順列が所定の第２順位以降の場合は、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとすることなく、後続するノードの順位を繰り上げることを特徴とする前方誤り復元方式受信装置。
【請求項４】
請求項１に記載の前方誤り復元方式受信装置であって、
前記解析手段は、判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列に加え、前記ノード列と所定の関係を有するノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとすることを特徴とする前方誤り復元方式受信装置。
【請求項５】
請求項４に記載の前方誤り復元方式受信装置であって、
前記所定の関係を有するノード列は、最も順位の早いノードを含むノード列を構成するノード以外で最も順位の早いノードを含むノード列であることを特徴とする前方誤り復元方式受信装置。
【請求項６】
請求項１に記載の前方誤り復元方式受信装置であって、
前記解析手段は、ＦＥＣパケットを未受信の場合は、あらかじめ定めたノードに最初に受信したメディアパケットの格納位置を記憶させ、ＦＥＣパケット受信後に、前記メディアパケットのシーケンス番号に対応したノード順位を判定し、前記あらかじめ定めたノードが判定されたノード順位になるように、ノードに付する順位をシフトすることを特徴とする前方誤り復元方式受信装置。
【請求項７】
シーケンス番号が付されたメディアパケットのストリームと、メディアパケットに基づいて生成されたＦＥＣパケットのストリームとを受信し、シーケンス番号順にメディアパケットを出力する前方誤り復元方式受信出力方法であって、
前記受信したメディアパケットおよびＦＥＣパケットをバッファに格納するバッファリングステップと、
前記バッファにおけるメディアパケットの格納位置を参照するための、シーケンス番号に相対的に対応して順位付けられた複数のノードで構成されるノード列を複数設定するノード設定ステップと、
前記受信したメディアパケットのシーケンス番号に対応したノードの順位を判定し、判定された順位が付されたノードに当該メディアパケットの格納位置を記憶するノード記憶ステップと、
判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとし、前記出力対象メディアパケットが未受信のメディアパケットを含む場合に、前記格納されたＦＥＣパケットを用いて前記未受信のメディアパケットを復元し出力対象メディアパケットにするとともに、前記出力対象メディアパケットをシーケンス番号順に出力する出力ステップと、
を有することを特徴とする前方誤り復元方式受信出力方法。
【請求項８】
請求項７に記載の前方誤り復元方式受信出力方法であって、
前記出力対象となったメディアパケットをシーケンス番号順に出力すると、出力したメディアパケットの格納位置を記憶していたノードの記憶内容を無効とし、後続するノードの順位を繰り上げる更新ステップをさらに有することを特徴とする前方誤り復元方式受信出力方法。
【請求項９】
請求項７に記載の前方誤り復元方式受信出力方法であって、
前記判定されたノードの順列が所定の第２順位以降の場合は、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとすることなく、後続するノードの順位を繰り上げることを特徴とする前方誤り復元方式受信出力方法。
【請求項１０】
請求項７に記載の前方誤り復元方式受信出力方法であって、
前記出力ステップにおいて、判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列に加え、前記ノード列と所定の関係を有するノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとすることを特徴とする前方誤り復元方式受信出力方法。
【請求項１１】
請求項１０に記載の前方誤り復元方式受信出力方法であって、
前記所定の関係を有するノード列は、最も順位の早いノードを含むノード列を構成するノード以外で最も順位の早いノードを含むノード列であることを特徴とする前方誤り復元方式受信出力方法。
【請求項１２】
請求項７に記載の前方誤り復元方式受信出力方法であって、
前記ノード記憶ステップにおいて、ＦＥＣパケットを未受信の場合は、あらかじめ定めたノードに最初に受信したメディアパケットの格納位置を記憶させ、ＦＥＣパケット受信後に、前記メディアパケットのシーケンス番号に対応したノード順位を判定し、前記あらかじめ定めたノードが判定されたノード順位になるように、ノードに付する順位をシフトすることを特徴とする前方誤り復元方式受信出力方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、前方誤り復元方式受信装置および前方誤り復元方式受信出力方法に係り、特に、パケットロスに対する十分な耐性と低遅延とを実現可能な前方誤り復元方式受信装置および前方誤り復元方式受信出力方法に関する。
【背景技術】
【０００２】
情報伝送網を利用して映像・音声等のストリームデータをパケット単位で伝送する際に、一部のパケットが欠損（パケットロス）する場合がある。パケットロスに対応する技術として、受信側がパケットロスを検知して送信側にパケットの再送を要求するパケット再送方式が一般的に用いられてきたが、データの確実性よりリアルタイム性が重要な用途や、マルチキャストの配信等に向かないことから、近年、伝送したい情報に冗長な情報を付加して送信し、受信側で欠損したパケットを復元する前方誤り訂正（ＦＥＣ：Forward Error Correction）方式が注目されている。
【０００３】
例えば、特許文献１には、ＦＥＣによるパケットロス耐性機能を使用する映像通信システムにおいて映像伝送遅延を削減する技術が記載され、特許文献２には、映像データの転送に、１０×１０の計１００パケットで２次元のＦＥＣを行なう技術が記載されている。
【特許文献１】特開２００７−２８２４１号公報
【特許文献２】特開２００８−１１０９６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ＦＥＣは、伝送したい情報に冗長な情報を付加することによりロスしたパケットを受信側で復元するものであるため、再送要求の手続きが不要となり遅延量を少なくできるという特徴がある。
【０００５】
冗長な情報は、一般に、複数のパケットを所定のＦＥＣ演算することによりＦＥＣパケットとして生成されるが、その生成方式として、複数のパケットを１次元でＦＥＣ演算する方式や、複数のパケットを多次元でＦＥＣ演算する方式等が提案されている。例えば、４個のパケットの排他的論理和（ＸＯＲ）を取る１次元パリティＦＥＣでは、４個のパケットにより１つのＦＥＣパケットが生成されるのに対して、４個のパケットを２×２の２次元でＸＯＲする２次元パリティＦＥＣでは４個のパケットにより５個のＦＥＣパケットが生成されることになる。
【０００６】
パケットロスに対する耐性については、例えば、パケットロス発生確率がランダムに１％であると仮定すると、４個のパケットに１次元パリティＦＥＣを適用する場合において、パケットロスが発生してなおかつパケット復元不能となる確率が０．０３９％となるのに対し、４個のパケットに２×２の２次元パリティＦＥＣを適用する場合の同確率は０．０００００４％となる。
【０００７】
このように、複数のパケットを１次元でＦＥＣ演算する方式よりも、複数のパケットを多次元でＦＥＣ演算する方式の方がパケットロスに対する耐性が圧倒的に高くなる。しかしながら、複数のパケットを多次元でＦＥＣ演算する方式は、演算量の増大だけでなく、伝送すべきパケット数が多くなってしまうために受信側のパケット管理が煩雑になり、遅延量も増加してしまうという問題がある。特に、従来のように受信したパケットを次段に出力するタイミングやパケット復元を行なうタイミングをパケット毎の生成時刻、受信時刻等で管理しようとすると、受信側の負荷は膨大なものとなる。
【０００８】
このため、パケットロスに対する耐性を維持しつつ、受信側のパケット管理を容易にする技術の開発が望まれている。そこで、本発明は、パケットロスに対する十分な耐性と低遅延とを実現可能な前方誤り復元方式受信装置および前方誤り復元方式受信出力方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、本発明の第１の態様である前方誤り復元方式受信装置は、シーケンス番号が付されたメディアパケットのストリームと、メディアパケットに基づいて生成されたＦＥＣパケットのストリームとを受信し、シーケンス番号順にメディアパケットを出力する前方誤り復元方式受信装置であって、前記受信したメディアパケットおよびＦＥＣパケットを格納するバッファ手段と、前記バッファ手段におけるメディアパケットの格納位置を参照するための、シーケンス番号に相対的に対応して順位付けられた複数のノードで構成されるノード列を複数設定したノード管理手段と、前記受信したメディアパケットのシーケンス番号に対応したノードの順位を判定し、判定された順位が付されたノードに当該メディアパケットの格納位置を記憶させ、判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとする解析手段と、出力対象メディアパケットが未受信のメディアパケットを含む場合に、前記格納されたＦＥＣパケットを用いて前記未受信のメディアパケットを復元し出力対象メディアパケットにするとともに、前記出力対象メディアパケットをシーケンス番号順に出力する出力手段と、を備えたことを特徴とする。
【００１０】
受信したメディアパケットをノードで管理し、所定の順位のノードへの記録をトリガとして、メディアパケットの出力を行なうため、パケット毎の時刻管理が不要となる。したがって、複数のパケットを多次元でＦＥＣ演算する方式を用いた場合でも受信側装置のパケット管理は容易であり、パケットロスに対する十分な耐性と低遅延とが実現可能となる。
【００１１】
ここで、前記解析手段は、前記出力手段が出力対象となったメディアパケットをシーケンス番号順に出力すると、出力したメディアパケットの格納位置を記憶していたノードの記憶内容を無効とし、後続するノードの順位を繰り上げることができる。これにより、資源を有効活用することができるようになる。
【００１２】
また、前記解析手段は、判定されたノードの順列が所定の第２順位以降の場合は、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとすることなく、後続するノードの順位を繰り上げるようにすることができる。リアルタイム性が重視される情報の伝送では、パケットが許容遅延時間を超えて受信された場合は、出力不要となるからである。
【００１３】
さらに、前記解析手段は、判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列に加え、前記ノード列と所定の関係を有するノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとしてもよい。これにより設計の自由度が高まることになる。
【００１４】
具体的には、前記所定の関係を有するノード列は、最も順位の早いノードを含むノード列を構成するノード以外で最も順位の早いノードを含むノード列とすることができる。
【００１５】
一般に、互換性を重んじて、メディアパケットとＦＥＣパケットの相関関係は、ＦＥＣパケットのみに記載されている。そこで、前記解析手段は、メディアパケットのシーケンス番号の開始値を示すＦＥＣパケットを未受信の場合は、あらかじめ定めたノードに最初に受信したメディアパケットの格納位置を記憶させ、ＦＥＣパケット受信後に、前記メディアパケットのシーケンス番号に対応したノード順位を判定し、前記あらかじめ定めたノードが判定されたノード順位になるように、ノードに付する順位をシフトすることが望ましい。これにより、ＦＥＣパケットを最初に受信した際のノードとメディアパケットとの対応付け処理が容易になる。
【００１６】
上記課題を解決するため、本発明の第２の態様である前方誤り復元方式受信出力方法は、シーケンス番号が付されたメディアパケットのストリームと、メディアパケットに基づいて生成されたＦＥＣパケットのストリームとを受信し、シーケンス番号順にメディアパケットを出力する前方誤り復元方式受信出力方法であって、前記受信したメディアパケットおよびＦＥＣパケットをバッファに格納するバッファリングステップと、前記バッファにおけるメディアパケットの格納位置を参照するための、シーケンス番号に相対的に対応して順位付けられた複数のノードで構成されるノード列を複数設定するノード設定ステップと、前記受信したメディアパケットのシーケンス番号に対応したノードの順位を判定し、判定された順位が付されたノードに当該メディアパケットの格納位置を記憶するノード記憶ステップと、判定された順位が所定の第１順位範囲である場合に、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとし、前記出力対象メディアパケットが未受信のメディアパケットを含む場合に、前記格納されたＦＥＣパケットを用いて前記未受信のメディアパケットを復元し出力対象メディアパケットにするとともに、前記出力対象メディアパケットをシーケンス番号順に出力する出力ステップと、を有することを特徴とする。
【発明の効果】
【００１７】
本発明によれば、パケットロスに対する十分な耐性と低遅延とを両立させることができる。
【発明を実施するための最良の形態】
【００１８】
本発明の実施形態について図面を参照して詳細に説明する。図１は、本発明を適用したＦＥＣ受信側装置を含むネットワークメディアストリーム送受信システムの構成を示すブロック図である。本図に示すようにネットワークメディアストリーム送受信システム１００は、メディアストリーム出力装置１０が順次出力するメディアパケットに基づいてＦＥＣ送信側装置２０が所定のＦＥＣ演算によりＦＥＣメディアパケットを生成し、メディアパケットとともにコンピュータネットワーク５０を介してＦＥＣ受信側装置３０に送信する。ＦＥＣ受信側装置３０は、受信したメディアパケットをメディアストリーム受信装置４０に出力する。この際に、ＦＥＣ受信側装置３０は、受信順ではなく、シーケンス順にメディアパケットをメディアストリーム受信装置４０に出力し、一部のメディアパケットが失われている場合には、受信したＦＥＣパケットおよび他のメディアパケットを用いて失われたメディアパケットを復元して出力する。このようなＦＥＣ方式を採用したネットワークメディアストリーム送受信システム１００は、ＶｏＩＰ（Voice over IP）、ＴＶ会議、マルチキャスト配信システム等のリアルタイム性が重視され、低遅延が要求される情報の伝送に特に効果的に適用することができる。
【００１９】
メディアストリーム出力装置１０が出力するメディアストリームは、動画、音声等種々のデータとすることができる。また、メディアストリーム出力装置１０とメディアストリーム受信装置４０とが双方向にメディアストリームを送受信する構成としてもよい。コンピュータネットワーク５０は、所定のプロトコルによりパケット単位で伝送を行なう品質非保証の情報伝送網を用いることができ、代表的にはインターネットとすることができる。
【００２０】
図２は、ＦＥＣ受信側装置３０の機能構成を示すブロック図である。ＦＥＣ受信側装置３０は、パケット受信部３１０、ノード管理部３２０、パケット解析部３３０、トリガ生成部３４０、メディアパケット出力部３５０を備えている。
【００２１】
パケット受信部３１０は、リングバッファ構造の受信パケットバッファ３１２を備えており、受信したメディアパケットとＦＥＣパケットとを、受信パケットバッファ３１２に順次格納する。また、パケット受信部３１０は、パケットを受信すると受信したことをパケット解析部３３０に通知する。なお、本実施形態では、低遅延伝送を実現するために、次段のメディアストリーム受信装置４０への出力を行なうまで、受信パケットバッファ３１２に格納したパケットをコピーせずに直接利用するものとする。
【００２２】
ノード管理部３２０は、受信パケットバッファ３１２に受信順に格納されているパケットを出力順（シーケンス順）に管理するために、パケット格納位置を指し示すノードを出力順に並べたノード配列を用いて受信パケットバッファ３１２の参照を行なう。すなわち、受信パケットバッファ３１２に格納されるパケットは、受信順であるため、出力順が入れ替わっていたり、また欠落が生じたりする場合がある。そこで、ノードを用いて格納されたパケットを出力順に参照できるようにしている。ノード管理部３２０の具体的な構成と処理については後述する。
【００２３】
パケット解析部３３０は、パケット受信部３１０がパケットを受信すると、受信したパケットのヘッダを解析して、そのパケットに対応するノードを判定し、ノード管理部３２０に通知する。
【００２４】
トリガ生成部３４０は、パケット解析部３３０の解析結果に応じて種々のトリガを生成する。トリガ生成部３４０が発生するトリガには、ノード管理部３２０に対するノード群更新／破棄トリガ、メディアパケット出力部３５０に対するメディアパケット出力トリガが含まれる。トリガ生成部３４０がこれらのトリガを生成する条件については後述する。
【００２５】
メディアパケット出力部３５０は、トリガ生成部３４０が発生する出力トリガを契機として、受信パケットバッファ３１２に格納されているメディアパケットを所定の単位で次段のメディアストリーム受信装置４０に出力する。この際にパケットロスが生じている場合には、パケット復元部３５２を用いてロスしたパケットを復元して出力する。
【００２６】
ここで、本実施形態におけるメディアパケットとＦＥＣパケットについて説明する。なお、本実施形態におけるＦＥＣパケットは、ＲＦＣ２７３３に準拠しているものとする。ただし、本発明は他の仕様のＦＥＣパケットにも適用することができる。
【００２７】
図３（ａ）は、メディアパケットの概略構造を示す図である。本図に示すように、各メディアパケットは、ヘッダとペイロードとを含み、ヘッダにはシーケンス番号が格納される。なお、シーケンス番号の開始値は一般に乱数により生成される。
【００２８】
図３（ｂ）は、ＦＥＣパケットの概略構造を示す図である。本図に示すように各ＦＥＣパケットは、ヘッダとペイロードとを含み、ヘッダには、自己のシーケンス番号と、メディアパケットとＦＥＣパケットの対応を示す情報を格納し、後者の情報はＲＦＣ２７３３の例では基底シーケンス番号とマスクである。基底シーケンス番号は、対応するメディアパケットを示す基準となるメディアパケットのシーケンス番号である。マスクは、そのＦＥＣパケットを生成するのに用いたメディアパケットの組を示す情報で、左記メディアパケット各々のシーケンス番号の基底シーケンス番号からのオフセットをビットマスクで表して、ＦＥＣパケット生成に関与した全てのメディアパケットのビットマスク表記をＯＲした整数である。このように、メディアパケットとＦＥＣパケットとの対応関係は、メディアストリームの互換性保持の目的から、ＦＥＣパケット内に記述されている。
【００２９】
図４は、メディアパケットからＦＥＣパケットを生成する処理とメディアパケットを復元する処理とを模式的に示す図であり、図４（ａ）は、１次元の２要素でＦＥＣパケットを生成する場合を示し、図４（ｂ）は、２×２の２次元の４要素でＦＥＣパケットを生成する場合を示している。
【００３０】
図４（ａ）に示すように、１次元の２要素でＦＥＣパケットを生成する場合には、例えば、シーケンス番号Ｍ１のメディアパケット（以下、シーケンス番号ｎのメディアパケットを「Ｍｎ」と示し、シーケンス番号ｋのＦＥＣパケットを「Ｆｋ」と示す）と「Ｍ２」とをＦＥＣ演算の単位として、所定の演算、例えば、ＸＯＲ値を計算することで「Ｆ１」を生成する。そして、メディアパケット「Ｍ１」「Ｍ２」に加えて、冗長なＦＥＣパケット「Ｆ１」を送出する。情報伝送網において、例えば、「Ｍ２」がロスした場合には、受信側で「Ｍ１」と「Ｆ１」のＸＯＲ値を計算することで、失われた「Ｍ２」を復元することができる。
【００３１】
図４（ｂ）に示すように、２×２の２次元の４要素でＦＥＣパケットを生成する場合には、例えば、「Ｍ１」「Ｍ２」「Ｍ３」「Ｍ４」のメディアパケットをＦＥＣ演算の単位とする。そして、「Ｍ１」と「Ｍ２」とから「Ｆ１」を計算し、「Ｍ３」と「Ｍ４」とから「Ｆ３」を計算し、「Ｍ１」と「Ｍ３」とから「Ｆ２」を計算し、「Ｍ２」と「Ｍ４」とから「Ｆ４」を計算する。さらに、「Ｆ１」と「Ｆ３」または 「Ｆ２」と「Ｆ４」とから「Ｆ５」を計算する。そして、メディアパケット「Ｍ１」「Ｍ２」「Ｍ３」「Ｍ４」に冗長なＦＥＣパケット「Ｆ１」「Ｆ２」「Ｆ３」「Ｆ４」「Ｆ５」を加えて、９個のパケットを送出する。
【００３２】
２次元の４要素でＦＥＣパケットを生成すると、情報伝送網において、例えば、「Ｍ１」「Ｍ２」「Ｍ３」「Ｆ３」「Ｆ４」の５個のパケットがロスした場合であっても、受信側で、「Ｆ１」と「Ｆ５」から「Ｆ３」を復元し、復元された「Ｆ３」と「Ｍ４」とから「Ｍ３」を復元し、復元された「Ｍ３」と「Ｆ２」とから「Ｍ１」を復元し、復元された「Ｍ１」と「Ｆ１」とから「Ｍ２」を復元することで、元のメディアストリームの「Ｍ１」「Ｍ２」「Ｍ３」「Ｍ４」を受信側で得ることができる。
【００３３】
次に、上記構成のＦＥＣ受信側装置３０における処理について、好ましい実施例を示して詳細に説明する。
【実施例１】
【００３４】
まず、第１実施例として基本的な処理について図５のフローチャートおよびノード管理部３２０の構成と処理を示す図６〜図１０を参照して説明する。
【００３５】
本処理では、まず、ノードとバッファの初期設定を行なう（Ｓ１０１）。ノードの初期設定では、ノード管理部３２０において、ＦＥＣの演算方式に応じたノードブロックの設定を行なう。本例では、２×２の２次元の４要素でＦＥＣパケットを生成する方式を用いるものとする。
【００３６】
第１実施例では、２×２の２次元の４要素でＦＥＣパケットを生成する方式の場合、図６（ａ）に示すようなノードブロック３２１をノード管理部３２０に設定する。本図では、「ｎ１」から「ｎ１２」までの１２個のノードが設定されており、各ノードの中身は無参照の初期状態にある。なお、ここでは簡単のため、メディアパケットに注目して説明する。ＦＥＣパケットについては、ＦＥＣパケットに対応した同様のノードブロックを設定してもよいし、後述する第２実施例で説明するように同一のノードブロック３２１で管理してもよい。
【００３７】
ノードは受信パケットバッファ３１２に格納されているパケットを参照するための情報、例えばアドレスを記録するポインタ的役割を担う。本実施例において、ノードはＦＥＣ演算の単位で１つのノード列を構成する。すなわち、２×２の２次元で４個のメディアパケットを用いてＦＥＣ演算を行なっているため、４つのノードで１つのノード列が構成される。この結果、ノードブロック３２１には「ｎ１」〜「ｎ４」、「ｎ５」〜「ｎ８」、「ｎ９」〜「ｎ１２」の３つのノード列が形成されている。ノード列は、次段のメディアストリーム受信装置４０への出力や、破棄等の処理を効率的に行う単位となる。
【００３８】
ノード列は１または複数個集まってノード列群を構成する。ノード列群はノードブロック３２１に３つ構成するものとし、それぞれ、第１ノード列群、第２ノード列群、第３ノード列群と称する。各ノード列群は、１または複数のノード列により構成されるが、第１実施例では、１つのノード列で１つのノード列群を構成するようにする。このため、「ｎ１」〜「ｎ４」のノード列が第１ノード列群を構成し、「ｎ５」〜「ｎ８」のノード列が第２ノード列群を構成し、「ｎ９」〜「ｎ１２」のノード列が第３ノード列群を構成することになる。
【００３９】
上述のように、本実施例においてノードは「ｎ１」〜「ｎ１２」まで設定されているが、ノード「ｎ１」は、次段のメディアストリーム受信装置４０に未出力のメディアパケットの内、最もシーケンス番号の小さなメディアパケットを参照するためのノードであり、対応するメディアパケットが受信パケットバッファ３１２に格納されると、その格納位置を特定する情報が記録される。以降、同様にメディアパケットのシーケンス番号順に「ｎ２」〜「ｎ１２」が対応する。すなわち、ノードの順に受信パケットバッファ３１２を参照すると、シーケンス順にメディアパケットを取得することができるとともに、パケットロスを検出することができる。
【００４０】
また、１または複数のノード列により第１ノード列群、第２ノード列群、第３ノード列群を構成しているが、第１ノード列群は出力待ちのノード列群、第２ノード列群は受信待ちのノード列群、第３ノード列群は予備的なノード列群としての性格を有している。
【００４１】
第１ノード列群の先頭から第２ノード列群の末尾までに対応するメディアパケットは８個であるため、例えば、ＦＥＣ送信側装置２０におけるメディアパケットの送信間隔を８ｍｓとすると、８ｍｓ×８＝６４ｍｓ相当のメディアパケットに対応するノードが第１ノード列群と第２ノード列群に記録できることになる。したがって、本実施例で許容する遅延時間は最大６４ｍｓという設計であり、この範囲内であれば、受信したメディアパケットを第１ノード列群と第２ノード列群のいずれかのノードと対応させることができる。なお、最大遅延時間の６４ｍｓのうち、３２ｍｓ（８ｍｓ×４）はＦＥＣ演算のために本来必要な遅延時間である。
【００４２】
バッファの初期設定では、パケット受信部３１０において、受信パケットバッファ３１２の領域を確保する。上述のように受信パケットバッファ３１２はリングバッファ構造とする。確保するサイズは、後述するようにノードブロック３２１の構成と許容遅延量等に基づいて定めることができる。
【００４３】
メディアパケットを受信すると、受信したメディアパケットを受信パケットバッファ３１２に格納する（Ｓ１０２）。そして、パケット受信部３１０は、パケット解析部３３０に受信通知を行ない、パケット解析部３３０が、受信したメディアパケットのヘッダに格納されているシーケンス番号を参照して対応ノードＮの判定を行なう（Ｓ１０３）。上述のように、「ｎ１」は、次段のメディアストリーム受信装置４０に未出力のメディアパケットに対応するため、「ｎ１」が参照すべきメディアパケットのシーケンス番号と、受信したメディアパケットのシーケンス番号とを参照することで、受信したメディアパケットに対応するノードＮを判定することができる。ただし、メディアパケットの到着順によっては、対応するノードが「ｎ１」〜「ｎ１２」の範囲外となる場合も起こり得る。
【００４４】
なお、ＲＦＣ２７３３準拠では、各ＦＥＣパケットに対応するメディアパケットのシーケンス番号はＦＥＣパケット記載の基底シーケンス番号と マスクから判明する。逆に、最初のＦＥＣパケットを受信するまで、メディアパケットとＦＥＣパケットの相関は不明であって、メディアパケットを格納すべきノードを特定できない。この際のノード判定処理については後述する。ここでは、既にＦＥＣパケットを受信して、当該の基底シーケンス番号が判明しているものとする。
【００４５】
受信したメディアパケットに対応するノードＮを判定すると、Ｎに応じた処理を行なう（Ｓ１０４）。まず、判定されたノードＮが「ｎ１」≦Ｎ≦「ｎ６」の場合、すなわち、第１ノード列群および第２ノード列群の３番目の「ｎ７」より前のノードの場合は、受信したメディアパケットの受信パケットバッファ３１２における格納位置をノードＮに記録する（Ｓ１０５）。これにより、ノードＮを参照することで受信したメディアパケットを間接参照することができるようになる。
【００４６】
例えば、「Ｍ１」「Ｍ２」「Ｆ１」「Ｍ３」「Ｆ２」「Ｆ３」「Ｆ４」「Ｆ５」「Ｍ６」「Ｍ５」の順でパケットを受信した場合には、メディアパケットの受信パケットバッファ３１２とノード列とは、図６（ｂ）に示すような状態となる。ここで、受信パケットバッファ３１２のアドレス「ｂ１」からパケットが受信順に「ｂ２」「ｂ３」…に格納されているものとする。本図に示すように、「ｎ１」には最もシーケンス番号の小さい「Ｍ１」を格納した「ｂ１」が記録され、「ｎ２」には「Ｍ２」を格納した「ｂ２」が記録される。パケット「Ｍ４」は未受信であるため対応する「ｎ４」は未参照の状態である。また、「Ｍ５」と「Ｍ６」とは順序が逆転して受信され、「Ｍ６」「Ｍ５」の順で受信パケットバッファ３１２に格納されているが、「ｎ５」「ｎ６」の順で参照することで、シーケンス順に管理することができる。
【００４７】
判定されたノードＮがＮ＝「ｎ７」あるいは「ｎ８」、すなわち、第２ノード列群の３番目の「ｎ７」以降のノードの場合は、まず、受信したメディアパケットの受信パケットバッファ３１２における格納位置をノードＮに記録する（Ｓ１０６）。
【００４８】
そして、この第２ノード列群の３番目の「ｎ７」以降のノードに対応するメディアパケットの受信をトリガとして、第１ノード列群の次段への、すなわち、メディアストリーム受信装置４０への出力を行なう（Ｓ１０７）。この際に、第１ノード列群に対応するメディアパケットにロスがあった場合には、別途同様に格納しているＦＥＣパケットを用いてロスしたメディアパケットを復元した上で出力する。
【００４９】
例えば、図６（ｃ）に示すように、「ｎ７」に対応するメディアパケット「Ｍ７」を受信すると、第１ノード列群の「ｎ１」〜「ｎ４」で参照されるメディアパケットをノードが示す順序で出力する。本図では、「ｎ４」に対応すべき「Ｍ４」がロスしているため、「Ｍ４」を復元した上で、「Ｍ１」〜「Ｍ４」を次段のメディアストリーム受信装置４０に出力する。
【００５０】
このように、本実施例では、所定のノード、具体的には第２ノード列群の３番目以降のノードに対応したパケットの受信を、第１ノード列群のメディアパケット出力のトリガとしている。このため、従来必須であった送信時刻、受信時刻、経過時間等のパケット毎の管理が不要となり、受信パケットの周期的な監視やタイマ起動処理を行なう必要がなくなる。したがって、受信側装置のパケット管理に関する処理負荷を軽減するとともに、低遅延を実現することができる。
【００５１】
なお、本実施例では第２ノード列群の「ｎ７」以降のノードに対応するメディアパケットの受信をトリガとしているが、これは設定の一例である。遅延量を最も少なくするメディアパケット出力のトリガは、第１ノード列群の最後のノードである「ｎ４」に対応したメディアパケットを受信したときであるが、「ｎ４」に対応したメディアパケットがロスする場合も起こり得る。「Ｍ１」〜「Ｍ４」のメディアパケットで「Ｆ１」〜「Ｆ５」のＦＥＣパケットを生成しているので第１ノード列群に対し最大の復元能力を発揮するためにはＦＥＣパケットの「Ｆ５」まで必要である。これに加え、パケットの伝送遅延揺らぎや順序逆転に対するエラー耐性を担保するためにはメディアパケット出力のタイミングは遅い方がよい。一方、メディアパケット出力のタイミングを遅くすると遅延量が大きくなる。
【００５２】
出力のトリガをｋ番目のノードに対応したメディアパケットの受信とすると、ｋ番目のメディアパケットは先頭のメディアパケット「Ｍ１」に対して符号化時刻で既に（ｋ−１）×８ｍｓの遅延があり、さらにＦＥＣ受信側装置３０での種々の処理によりその他の遅延が加わっている。したがって、メディアストリーム受信装置４０で許容できる遅延と、エラー耐性との兼ね合いでトリガとなるノードを設定するようにする。
【００５３】
第１ノード列群のノードに対応するメディアパケットを出力すると、ノード列群の更新を行なう（Ｓ１０８）。ノード列群の更新は、出力して不要となった第１ノード列群のノードを無参照状態として無効にする。これにより、受信パケットバッファ３１２の第１ノード列群のノードにより参照されていた領域が解放される。そして、第２ノード列群のノード列を第１ノード列群に、第３ノード列群のノード列を第２ノード列群に、無参照状態の第１ノード列群のノード列を第３ノード列群にそれぞれシフトする。
【００５４】
すなわち、図６（ｃ）の状態から図７（ａ）に示す状態に更新する。本図の例では、第２ノード列群の「ｎ５」「ｎ６」「ｎ７」に記録されていた「ｂ１０」「ｂ９」「ｂ１１」がそれぞれ第１ノード列群の「ｎ１」「ｎ２」「ｎ３」にシフトしている。また、第１ノード列群に参照されていた「ｂ１」「ｂ２」「ｂ４」が解放される。図示しないが、ＦＥＣパケットについても同様の処理を行なうため、「ｂ３」「ｂ５」「ｂ６」「ｂ７」「ｂ８」も解放されることになる。以降は、更新されたノード列群に対して同様の処理を、受信を継続する間（Ｓ１２０）繰り返す。
【００５５】
なお、実装上は、ノード列群の更新について図７（ｂ）に示すように、第１ノード列群、第２ノード列群、第３ノード列群を指し示すポインタ変数群３２２を用意しておき、ポインタ変数の値を交換すれば足りる。このように、本実施例では、ノード列群が参照する受信パケットバッファ３１２は、ノード列群の更新処理により、古いパケットが参照されなくなる。したがって、バッファの解放プロセスは不要となるとともに処理（Ｓ１０１）の際に設定する受信パケットバッファ３１２のサイズは、必要最小限のサイズとすることができる。
【００５６】
判定されたノードＮが、Ｎ＜ｎ１の場合、すなわち、受信したメディアパケットが「ｎ１」に対応したメディアパケットよりも古い場合には、ノードへの記録を行なうことなく破棄する（Ｓ１０９）。このようなパケットはパケットロスとして既に処理済となっている。
【００５７】
判定されたノードＮが「ｎ９」以降の場合は、第１ノード列群、第２ノード列群では記録することができない。このような状況は、本実施例で許容する６４ｍｓの遅延時間以上の遅延が生じた場合に起こる。許容遅延時間内の受信であれば、第２ノード列群のノードに対応するメディアパケットを受信している間に第１ノード列群のノードに対応するメディアパケットを出力し、ノード列群の更新が行なわれるため、第３ノード列群のノードに対応するメディアパケットは受信しないようになっている。
【００５８】
本実施例では、許容遅延時間以上の遅延に備えるために、予備の第３ノード列群を設けている。第３ノード列群は、便宜的に第２ノード列群に連続する「ｎ９」〜「ｎ１２」を割り当てているが、パケットの受信間隔が空いて、第２ノード列群に連続しないノード、具体的には「ｎ１３」以降のノードに対応するメディアパケットが受信される場合にも安全に対応できる。以下では、許容遅延時間以上の遅延が生じた場合、すなわち、判定されたノードＮが「ｎ９」以降の場合の処理について説明する。
【００５９】
判定されたノードＮがＮ＝「ｎ９」あるいは「ｎ１０」、すなわち、第３ノード列群の３番目の「ｎ１１」より前のノードの場合は、まず、受信したメディアパケットの受信パケットバッファ３１２における格納位置をノードＮに記録する（Ｓ１１０）。第３ノード列群のノードに記録することは、第１ノード列群に対応するメディアパケットを次段のメディアストリーム受信装置４０に出力すべき時刻が経過してしまっていることを意味するため、第１ノード列群のノードが参照するメディアパケットを出力することなく、第１ノード列群のノードの記録内容を破棄する（Ｓ１１１）。
【００６０】
例えば、図８（ａ）に示すように、「Ｍ５」の後に、「ｎ７」に対応するメディアパケット「Ｍ１０」を受信すると、「Ｍ１」〜「Ｍ４」を出力することなく、第１ノード列群の「ｎ１」〜「ｎ４」の内容を破棄して無参照状態とする。
【００６１】
そして、第２ノード列群のノード列を第１ノード列群に、第３ノード列群のノード列を第２ノード列群に、無参照状態の第１ノード列群のノード列を第３ノード列群にそれぞれシフトするノード列群の更新を行なう（Ｓ１１２）。このようなノード列群の更新を行なって、以降に受信するパケットに対する処理を繰り返す（Ｓ１２０）ことで、処理（Ｓ１１０）で記録した第３ノード列群のノードを第１ノード列群や第２ノード列群のノードと等価に、かつ連続的に使用することができるようになる。このために、第３ノード列群を設けて、かつ第１ノード列群および第２ノード列群と同じサイズに設定している。またこの手段は、第３ノード群列を設けずに、一時的記憶領域（ノード）にパケット解析内容を保持して、ノード列群の更新後に空いた然るべきノードに記録する場合と比べると、ノード記録過程（タイミング）及びノード参照過程（タイミング）が統一されて、競合が排除されかつ設計コンセプトが簡潔明瞭になって、システムの安全性・信頼性を確保できる。図８（ｂ）は、ノード列群を更新した後の受信パケットバッファ３１２とノードブロック３２１の状態を示している。
【００６２】
判定されたノードＮがＮ＝「ｎ１１」あるいは「ｎ１２」、すなわち、第３ノード列群の３番目の「ｎ１１」以降のノードの場合は、まず、受信したメディアパケットの受信パケットバッファ３１２における格納位置をノードＮに記録する（Ｓ１１３）。第３ノード列群のノードに記録することは、第１ノード列群に対応するメディアパケットを次段のメディアストリーム受信装置４０に出力すべき時刻が経過してしまっていることを意味するため、第１ノード列群のノードが参照するメディアパケットを出力することなく、第１ノード列群のノードの記録内容を破棄する（Ｓ１１４）。
【００６３】
しかしながら、第２ノード列群のノードが参照するメディアパケットは許容遅延時間内で有効であるため、次段のメディアストリーム受信装置４０に出力する（Ｓ１１５）。この際に、第２ノード列群に対応するメディアパケットにロスがあった場合には、別途同様に格納しているＦＥＣパケットを用いてロスしたメディアパケットを復元した上で出力する。
【００６４】
例えば、図９（ａ）に示すように、「Ｍ５」の後に、「ｎ１１」に対応するメディアパケット「Ｍ１１」を受信すると、「Ｍ１」〜「Ｍ４」を出力することなく、第１ノード列群の「ｎ１」〜「ｎ４」の内容を破棄する。また、第２ノード列群の「ｎ５」〜「ｎ８」で参照されるメディアパケットをノードが示す順序で出力する。本図では、「ｎ７」「ｎ８」に対応すべき「Ｍ７」「Ｍ８」がロスしているため、「Ｍ７」「Ｍ８」を復元した上で、「Ｍ５」〜「Ｍ８」を次段のメディアストリーム受信装置４０に出力する。
【００６５】
そして、出力して不要となった第２ノード列群のノードを無参照状態とし、第３ノード列群のノード列を第１ノード列群に、無参照状態の第２ノード列群のノード列を第３ノード列群に、無参照状態の第１ノード列群のノード列を第２ノード列群にそれぞれシフトするノード列群の更新を行なう（Ｓ１１６）。ただし、第２ノード列群のノード列を第１ノード列群に、第３ノード列群のノード列を第２ノード列群に、第１ノード列群のノード列を第３ノード列群にそれぞれシフトするノード列群の更新を２回繰り返すようにしてもよい。このようなノード列群の更新を行なって、以降に受信するパケットに対する処理を繰り返す（Ｓ１２０）ことで、処理（Ｓ１１３）で記録した第３ノード列群のノードを連続的に使用することができるようになる。図９（ｂ）は、ノード列群を更新した後の受信パケットバッファ３１２とノードブロック３２１の状態を示している。本図に示すように第３ノード列群の内容が第１ノード列群にシフトしている。
【００６６】
判定されたノードＮがＮ≧「ｎ１３」の場合、すなわち、第２ノード列群に連続しないノード列のノードの場合は、受信したメディアパケットの受信パケットバッファ３１２における格納位置を、Ｎｘ＝ｎ９＋（Ｎ−ｎ９）％４（％は剰余、４は本実施例２×２の２次元ＦＥＣでの要素数）として、第３ノード列群のノードＮｘに記録する（Ｓ１１７）。つまり、受信したメディアパケットが、ＦＥＣ演算における最初のメディアパケットである場合には「ｎ９」に記録し、２番目のメディアパケットである場合には「ｎ１０」に記録し、３番目のメディアパケットである場合には「ｎ１１」に記録し、４番目のメディアパケットである場合には「ｎ１２」に記録する。
【００６７】
判定されたノードＮがＮ≧「ｎ１３」であることは、第１ノード列群に対応するメディアパケットおよび第２ノード列群に対応するメディアパケットを次段のメディアストリーム受信装置４０に出力すべき時刻が経過してしまっていることを意味するため、第１ノード列群および第２ノード列群のノードが参照するメディアパケットを出力することなく、第１ノード列群および第２ノード列群のノードの記録内容を破棄する（Ｓ１１８）。
【００６８】
例えば、図１０（ａ）に示すように、「Ｍ５」の後に、「ｎ１４」に対応するメディアパケット「Ｍ１４」を受信すると、「Ｍ１４」は、「Ｍ１３」〜「Ｍ１６」で行なわれるＦＥＣ演算における２番目のメディアパケットであるから、「ｎ１０」に「Ｍ１４」を格納した「ｂ１５」が記録される。また、「Ｍ１」〜「Ｍ４」、「Ｍ５」〜「Ｍ８」を出力することなく、第１ノード列群の「ｎ１」〜「ｎ４」および第２ノード列群の「ｎ５」〜「ｎ８」の内容を破棄する。
【００６９】
そして、第３ノード列群のノード列を第１ノード列群に、第２ノード列群のノード列を第３ノード列群に、第１ノード列群のノード列を第２ノード列群にそれぞれシフトするノード列群の更新を行なう（Ｓ１１９）。ただし、第２ノード列群のノード列を第１ノード列群に、第３ノード列群のノード列を第２ノード列群に、第１ノード列群のノード列を第３ノード列群にそれぞれシフトするノード列群の更新を２回繰り返すようにしてもよい。このようなノード列群の更新を行なって、以降に受信するパケットに対する処理を繰り返す（Ｓ１２０）ことで、処理（Ｓ１１７）で記録した第３ノード列群のノードを連続的に使用することができるようになる。図１０（ｂ）は、ノード列群を更新した後の受信パケットバッファ３１２とノードブロック３２１の状態を示している。
【００７０】
以上説明したように、第１実施例では、ノード列の大きさをＦＥＣ演算の単位と等しくすることで、メディアパケットの出力のタイミングと受信パケットバッファ３１２の更新のタイミングとが関連付けられることになる。このため、より信頼性の高い管理機構を有するＦＥＣ受信側装置３０を実現することができる。
【実施例２】
【００７１】
次に、本発明の第２実施例について説明する。第１実施例では、簡単のためノードブロック３２１において、１つのノード列により１つのノード列群を構成していた。第２実施例では、より一般化して、１または複数のノード列により１つのノード列群を構成する場合について説明する。
【００７２】
図１１は、第１ノード列群を４個のノード列で構成し、第２ノード列群をＮ−４個のノード列で構成し、第３ノード列群を２個のノード列で構成したノードブロック３２１ａを示している。本例でも各ノード列を構成するノード数はＦＥＣ演算の単位と等しくする。
【００７３】
ここで、ノード列を出力した後のノード列群のシフト等を考慮して、第１ノード列群のノード列の個数と、第２ノード列群のノード列の個数とは、第３ノード列群のノード列の個数の整数倍とする。すなわち、本例では、第３ノード列群のノード列の個数が、一時に出力するノード列の個数と一致するように制御する。本図の場合では、第３ノード列群のノード列数は２個であるから、所定の条件を満たしたとき「ノード列１」と「ノード列２」とが同時に出力されることになる。
【００７４】
図１２は、図１１に示したようなノードブロック３２１ａを用いたときのメディアパケット出力処理を説明するフローチャートである。基本的な処理は第１実施例と同様であるため、ここでは特徴的な処理を示す。本例では、メディアパケットの出力のトリガとして所定のノードＧ、例えば、第２ノード列群の最後のノード列Ｎの３番目以降のノードに対応するメディアパケットを受信した場合とする。
【００７５】
第１実施例と同様に、メディアパケットを受信すると（Ｓ２０１）、受信パケットバッファ３１２に格納し、ヘッダのシーケンス番号を解析して対応するノードに格納位置を記録する（Ｓ２０２）。対応するノードが第２ノード列群のノードＧ以降でない場合（Ｓ２０３：Ｎｏ）には、メディアパケットは出力せずに次のパケットに対応する。
【００７６】
一方、対応するノードが第２ノード列群のノードＧ以降であった場合には、第１ノード列群の先頭から第３ノード列群のノード数分のノード列に対応するメディアパケットを、次段のメディアストリーム受信装置４０に出力する（Ｓ２０４）。この際に、パケットロスがある場合には復元した上で出力する。本例では「ノード列１」と「ノード列２」とが一時に出力されることになる。
【００７７】
そして、出力したノード列の個数に応じたノード列の前方シフトを行なう。本例では、図１３に示すように、「ノード列１」と「ノード列２」とが出力された結果、ノード列２個分の前方シフトが行なわれる。すなわち、第１ノード列群に含まれていた「ノード列３」と「ノード列４」とが第１ノード列群の先頭部分にシフトし、第２ノード列群に含まれていた「ノード列５」と「ノード列群６」とが第１ノード列群の後半にシフトする。第２ノード列群、第３ノード列群においても同様のシフトが行なわれ、第２ノード列群は「ノード列７」〜「ノード列Ｎ＋２」で構成され、第３ノード列群は「ノード列Ｎ＋３」と「ノード列Ｎ＋４」で構成されることになる。なお、許容遅延時間内にパケットが受信できなかった場合の処理は、第１実施例と同様に第３ノード列群を利用した処理を行なう。
【００７８】
第２実施例では、一般に許容遅延量は第１実施例よりも大きくなることが想定される。実際の許容遅延量はノード列群の具体的な構成や、出力トリガを発生させるノード位置の設定によって設計することができる。したがって第２実施例は第１実施例よりも実用上の設計自由度が高まることになる。より具体的には、第２ノード列群を構成するノード列数を増やすことで、パケットの伝送遅延揺らぎや順序逆転に対するエラー耐性を許容遅延量ぎりぎりまで近づけることができる。このように第２ノード列群を構成するノード列数は、メディアストリーム受信装置４０の遅延に関する設計指針によって決定すべき事項である。また、第１ノード列群のノード個数については、上記の例に限られず、設計方針に応じて、出力の際の処理単位としたり、ＦＥＣ演算の単位としたり、ノード列シフトの単位としたり、その他の処理単位としたりすることができる。さらにいえば、第１ノード列群、第２ノード列群、第３ノード列群の区別は便宜的なものであり、例えば、第２ノード列群の後半のノード列に第３ノード列群の役割を担わせたり、第２ノード列群の前半に第１ノード列群の役割を担わせたりすることで、列群を明確に区別しないようにしてもよい。
【００７９】
次に、第２実施例の別例として、１つの列群に異なる種類のノード列が含まれる場合について説明する。異なる種類のノード列は、例えば、メディアパケットノード列とＦＥＣパケットノード列とすることができ、本例では、ＦＥＣ演算の単位にしたがって、メディアパケットノード列は４個のノードから構成され、ＦＥＣパケットノード列は５個のノード列から構成されるものとする。また、同じノード列群に含まれるメディアパケットノード列が参照するメディアパケットとＦＥＣパケットノード列が参照するＦＥＣパケットとは、互いにＦＥＣ演算の関連性を備えているものとする。
【００８０】
例えば、図１４に示すノードブロック３２１ｂの第１ノード列群に含まれるメディアパケットノード列「ｎ１」「ｎ２」「ｎ３」「ｎ４」が参照する４個のメディアパケットから第１ノード列群に含まれるＦＥＣパケットノード列「ｆ１」「ｆ２」「ｆ３」「ｆ４」「ｆ５」が参照する５個のＦＥＣパケットが生成されていることになる。
【００８１】
本例では、第１ノード列群に対応するメディアパケットの出力トリガは、第２ノード列群のメディアパケットノード「ｎ７」以降に対応するメディアパケットが受信された場合、あるいは、第２ノード列群のＦＥＣパケットノード「ｆ７」以降に対応するＦＥＣパケットが受信された場合とする。ただし、出力トリガは本例に限られない。例えば、判断基準を他のノード位置としたり、メディアパケットノードの所定位置以降のノードおよびＦＥＣメディアパケットノードの所定位置以降のノードの双方を受信した場合としたりするようにしてもよい。
【００８２】
図１５は、図１４に示したようなノードブロック３２１ｂを用いたときのメディアパケット出力処理を説明するフローチャートである。基本的な処理は第１実施例と同様であるため、ここでは特徴的な処理を示す。
【００８３】
第１実施例と同様に、パケットを受信すると（Ｓ３０１）、受信パケットバッファ３１２に格納し、ヘッダのシーケンス番号を解析して対応するノードに格納位置を記録する（Ｓ３０２）。この際に、受信したパケットがメディアパケットであれば、メディアパケットノードの対応するノードに格納位置を記録し、受信したパケットがＦＥＣパケットであれば、ＦＥＣパケットノードの対応するノードに格納位置を記録する。
【００８４】
記録したノードが第２ノード列群のメディアパケットノード「ｎ７」以降である場合、あるいは、ＦＥＣパケットノード「ｆ７」以降である場合（Ｓ３０３：Ｙｅｓ）は、第１ノード列群のメディアパケットノード列に対応するメディアパケットをシーケンス番号順に次段のメディアストリーム受信装置４０に出力する（Ｓ３０４）。この際に、パケットロスがある場合にはＦＥＣパケットを用いて復元した上で出力する。
【００８５】
そして、第１実施例と同様のノード列群の更新を行なう（Ｓ３０５）。具体的には、第１ノード列群を第３ノード列群とし、第２ノード列群を第１ノード列群とし、第３ノード列群を第２ノード列群とする。なお、許容遅延時間内にパケットが受信できなかった場合の処理は、実施例１と同様に第３ノード列群を利用した処理を行なう。
【００８６】
一方、記録したノードが第２ノード列群のメディアパケットノード「ｎ７」以降でなく、ＦＥＣパケットノード「ｆ７」以降でもない場合（Ｓ３０３：Ｎｏ）には、メディアパケットの出力を行なうことなく、次パケットに対応する（Ｓ３０１）。
【００８７】
次に、第２実施例のさらに別例としてＦＥＣの演算に用いるメディアパケットのシーケンス番号が連続していない場合について説明する。一般に、インターネット等のコンピュータネットワークでは、単発のパケットロスが支配的であるものの、あるパケットが損失した場合に、その直後のパケットも損失する確率が高くなることが知られている。
【００８８】
このような連続的なパケットロス対策として、ＦＥＣでは時系列上離れたメディアパケット同士を関連付けて、いわゆるインタリーブ形式でＦＥＣ演算を行なう場合がある。本例では、「Ｍ１」「Ｍ３」「Ｍ５」「Ｍ７」を関連付け、「Ｍ２」「Ｍ４」「Ｍ６」「Ｍ８」を関連付けてインタリーブ形式でＦＥＣ演算を行なう場合を例に説明する。
【００８９】
図１６（ａ）は、このようなインタリーブ形式に対応したノードブロック３２１ｃの例を示している。すなわち、ＦＲＣ演算単位に対応させて「ｎ１」「ｎ３」「ｎ５」「ｎ７」で１つのノード列を構成し、「ｎ２」「ｎ４」「ｎ６」「ｎ８」で１つのノード列を構成し、これら２つのノード列で第１ノード列群を構成している。なお、簡単のため、ここではメディアパケットに注目して説明する。ＦＥＣパケットについては、別途ノードブロックを設けてもよいし、図１６（ｂ）に示すように同じノード列群内にＦＥＣパケットノード列を含めて、２個のメディアパケットノード列と２個のＦＥＣパケットノード列の合計４個のノード列で１つのノード列群を構成してノードブロック３２１ｄを設定するようにしてもよい。また、各ノード列群に３個以上のメディアパケットノード列を含めるようにしてもよい。
【００９０】
本例では、第１ノード列群に対応するメディアパケットの出力トリガは、第２ノード列群のノード「ｎ１３」以降に対応するメディアパケットが受信された場合とする。ただし、出力トリガは本例に限られない。例えば、判断基準を「ｎ１４」等の他のノード位置としてもよい。
【００９１】
出力トリガとなるノードに対応するメディアパケットを受信すると、第１ノード列群に含まれるノードに対応するメディアパケットを「ｎ１」〜「ｎ８」の順序で次段のメディアストリーム受信装置４０に出力する。この際に、パケットロスが生じている場合には、ＦＥＣ演算の単位でパケットの復元を行なった上で出力する。一般に、インタリーブ形式でＦＥＣを行なうと、パケット管理が一層複雑化するが、本実施例に示すように本発明では極めて簡易にパケット管理を行なうことができる。
【００９２】
最後に、最初のＦＥＣパケットが受信されるまでのメディアパケットのノード設定について説明する。前述のように、ＲＦＣ２７３３に準拠したＦＥＣでは、最初のＦＥＣパケットを受信するまで、メディアパケットのシーケンス番号とノードとの対応関係は定まらないことになる。
【００９３】
例えば、図６（ｂ）に示したように最初に「Ｍ１」を受信した場合、そのメディアパケットが最初のパケットであることが分からないと、「ｎ１」で参照すべきなのか、「ｎ２」等で参照すべきかを判定することができない。そこで、以下のような処理を行なうことにより、最初にＦＥＣパケットを受信した際にメディアパケットのシーケンス番号とノードとを容易に対応付けることができるようになる。
【００９４】
まず、ノードブロックの初期状態として、本来必要なノードの個数に、メディアストリームのノード列を構成するノードの数をｍとしてｍ−１個を加えた数のノードを用意する。本例では、ノード列は４個のノードで構成され、各ノード列群は１つのノード列から構成されるものとするため、本来必要なノードの個数は１２となり、余分に必要なノードの個数は３となる。したがって、初期状態として合計１５個のノードを用意する。
【００９５】
そして、図１７（ａ）に示すように第１ノード列群を示す第１ポインタの初期値は、ｍ番目、すなわち４番目のノードを設定し、第２ノード列群を示す第２ポインタの初期値は、２ｍ番目、すなわち８番目のノードを設定し、第３ノード列群を示す第２ポインタの初期値は、３ｍ番目、すなわち１２番目のノードを設定する。この結果、４〜７番目のノードで第１ノード列群が仮設定され、８〜１１番目のノードで第２ノード列群が仮設定され、１２〜１５番目のノードで第３ノード列群が仮設定される。
【００９６】
この初期状態で、「Ｍ７」「Ｍ８」「Ｆ９」の順序でパケットを受信したとする。メディアパケット「Ｍ７」を受信した時点では、ＦＥＣパケットが未受信であるため、「Ｍ７」がシーケンス番号の開始番号から何番目のパケットであるかを判断することができない。このため、図１７（ｂ）に示すように第２ノード列群の先頭である８番目のノードに対応させる。メディアパケット「Ｍ８」を受信した時点でもＦＥＣパケットは未受信であるが、「Ｍ８」が「Ｍ７」の次のメディアパケットであることは判断することができるため、図１７（ｂ）に示すように「Ｍ８」を９番目のノードに対応させる。
【００９７】
ＦＥＣパケットである「Ｆ９」を受信すると、ヘッダを参照して基底シーケンス番号とマスクを取得する。ここでは「Ｍ１」が２×２の２次元ＦＥＣにおける１行１列のパケット、つまり先頭だと判明したとする。すると、最初に受信した「Ｍ７」は、第２ノード列群の３番目のノードである「ｎ８」に対応すべきメディアパケットであったことが判別できる。そこで、図１７（ｃ）に示すように第１ポインタ、第２ポインタ、第３ポインタの値をマイナス２ノード分シフトして、２番目のノードが第１ノード列群の先頭ノード、すなわち「ｎ１」になるように設定する。１番目と１４番目と１５番目のノードは使用しない。以上の処理により、ノードブロック３２１ｅにおいてメディアパケットのシーケンス番号とノードとが対応付けられたことになる。
【００９８】
本実施形態では、ＦＥＣパケットが未受信で、ノードが仮設定の状態であっても、図５に示したフローチャートにしたがってメディアパケットの出力とノード列群の更新を行なうことができる。図１８を参照して「Ｍ３」「Ｍ４」「Ｍ６」「Ｍ７」「Ｍ８」「Ｆ９」の順序でパケットを受信した場合を例に説明する。
【００９９】
図１８（ａ）に示すように、メディアパケット「Ｍ３」は、第２ノード列群の先頭である８番目のノードに仮対応させ、「Ｍ４」は９番目のノードに仮対応させ、「Ｍ６」は１１番目のノードに仮対応させる。
【０１００】
１１番目のノードは仮の第２ノード列群の４番目のノードであるため、処理（Ｓ１０７）にしたがって、仮の第１ノード列群の出力を行なう。ただし、仮の第１ノード列群のノードに対応したメディアパケットは受信していないため、メディアパケットの出力は結局 行なわれない。次いで、処理（Ｓ１０８）にしたがって、ノード列群の更新が行なわれる。この結果、８〜１１番目のノード列が第１ノード列群となり、１２〜１５番目のノード列が第２ノード列群となり、４〜７番目のノード列が第３ノード列群になる。この時点でＦＥＣパケットは受信していないため、図示しないＦＥＣパケットノード列は無参照状態である。次いで、「Ｍ７」「Ｍ８」を受信して図１８（ｂ）に示すような状態となる。
【０１０１】
その後、ＦＥＣパケットの「Ｆ９」を受信すると、メディアストリームの最初のメディアパケットのシーケンス番号を取得することができる。ここでは「Ｍ１」が先頭であったとする。この時点では、８〜１１番目のノードが第１ノード列群に対応し、１２〜１５番目のノードが第２ノード列群に対応し、４〜７番目のノードが第３ノード列群に対応していると仮設定されているため調整が必要である。
【０１０２】
ＦＥＣパケットの受信により、第１ポインタ、第２ポインタ、第３ポインタの値をマイナス２ノード分シフトすればよいことが判明するため、ノードブロック３２１ｆを、図１８（ｃ）に示すような状態に設定する。つまり、６番目のノードが第１ノード列群の先頭ノード「ｎ１」になり、１０番目のノードが第２ノード列群の先頭ノード「ｎ５」になり、２番目のノードが第３ノード列群の先頭ノード「ｎ９」になるように設定する。１番目と１４番目と１５番目のノードは使用しない。
【０１０３】
この段階で、「ｎ７」に対応するメディアパケットが受信されているため、第１ノード列群の出力トリガが発生する。したがって、「ｎ３」と「ｎ４」が参照している「Ｍ３」と「Ｍ４」とを次段のメディアストリーム受信装置４０に出力し、次いでノード列群の更新を行なう。
【０１０４】
仮にＦＥＣパケットを最初に受信するまでにさらに多くのメディアパケットを受信したとしても、図５のフローチャートにしたがった通常時と同様のノード列群の更新を行なうことで、ＦＥＣによるパケット復元はできないものの、次段へのメディアパケットの出力を行なうことができる。すなわち、ＦＥＣパケットの最初の受信の際の関連付け処理を行なう以外は通常時と同様のアルゴリズムを用いることができる。このため、ＦＥＣパケット受信前のメディアパケットの扱いについて、従来のようなパケット退避用の資源、通常と別個のアルゴリズム等は必要ない。
【０１０５】
以上説明したように、本発明の実施形態は、受信したパケットをノード列で管理し、さらにノード列を３つのノード列群として管理するようにしている。これにより受信側の管理が簡単で処理が軽くなるとともに、十分なエラー訂正が行えることが可能となる。
【０１０６】
また、低遅延伝送システムにおいて高能力な前方誤り訂正（ＦＥＣ）を使用してデータの欠落を復元することで、汎用・廉価な伝送路でも低遅延の伝送が実現できる、受信・復号方法を提供することが可能となる。例えば本発明を、様々な施設で運営される業務放送に適用すれば、汎用・廉価な構内ＬＡＮを用いて低遅延かつ高品位の伝送が可能な業務放送システムを実現することができる。
【図面の簡単な説明】
【０１０７】
【図１】ＦＥＣ受信側装置を含むネットワークメディアストリーム送受信システムの構成を示すブロック図である。
【図２】ＦＥＣ受信側装置の機能構成を示すブロック図である。
【図３】メディアパケットとＦＥＣパケットの概略構造を示す図である。
【図４】メディアパケットからＦＥＣパケットを生成する処理とメディアパケットを復元する処理とを模式的に示す図である。
【図５】ＦＥＣ受信側装置における処理を説明するフローチャートである。
【図６】ノード管理部の構成と処理を示す図である。
【図７】ノード管理部の構成と処理を示す図である。
【図８】ノード管理部の構成と処理を示す図である。
【図９】ノード管理部の構成と処理を示す図である。
【図１０】ノード管理部の構成と処理を示す図である。
【図１１】１または複数のノード列により１つのノード列群を構成したノードブロックの例を示す図である。
【図１２】第２実施例におけるＦＥＣ受信側装置の処理を説明するフローチャートである。
【図１３】第２実施例におけるノード列群の更新を示す図である。
【図１４】異なる種類のノード列により１つのノード列群を構成したノードブロックの例を示す図である。
【図１５】第２実施例の別例におけるＦＥＣ受信側装置の処理を説明するフローチャートである。
【図１６】インタリーブ形式に対応したノード列群を構成したノードブロックの例を示す図である。
【図１７】ＦＥＣパケットが受信されるまでのメディアパケットのノード設定について説明する図である。
【図１８】ＦＥＣパケットが受信されるまでのメディアパケットのノード設定について説明する図である。
【符号の説明】
【０１０８】
１０…メディアストリーム出力装置、２０…ＦＥＣ送信側装置、３０…ＦＥＣ受信側装置、４０…メディアストリーム受信装置、５０…コンピュータネットワーク、１００…ネットワークメディアストリーム送受信システム、３１０…パケット受信部、３１２…受信パケットバッファ、３２０…ノード管理部、３２１…ノードブロック、３２２…ポインタ変数群、３３０…パケット解析部、３４０…トリガ生成部、３５０…メディアパケット出力部、３５２…パケット復元部
【図１】
0004930449.tif 000002
【図２】
0004930449.tif 000003
【図３】
0004930449.tif 000004
【図４】
0004930449.tif 000005
【図５】
0004930449.tif 000006
【図６】
0004930449.tif 000007
【図７】
0004930449.tif 000008
【図８】
0004930449.tif 000009
【図９】
0004930449.tif 000010
【図１０】
0004930449.tif 000011
【図１１】
0004930449.tif 000012
【図１２】
0004930449.tif 000013
【図１３】
0004930449.tif 000014
【図１４】
0004930449.tif 000015
【図１５】
0004930449.tif 000016
【図１６】
0004930449.tif 000017
【図１７】
0004930449.tif 000018
【図１８】
0004930449.tif 000019