本発明は、前方誤り復元方式受信装置および前方誤り復元方式受信出力方法に係り、特に、パケットロスに対する十分な耐性と低遅延とを実現可能な前方誤り復元方式受信装置および前方誤り復元方式受信出力方法に関する。
情報伝送網を利用して映像・音声等のストリームデータをパケット単位で伝送する際に、一部のパケットが欠損(パケットロス)する場合がある。パケットロスに対応する技術として、受信側がパケットロスを検知して送信側にパケットの再送を要求するパケット再送方式が一般的に用いられてきたが、データの確実性よりリアルタイム性が重要な用途や、マルチキャストの配信等に向かないことから、近年、伝送したい情報に冗長な情報を付加して送信し、受信側で欠損したパケットを復元する前方誤り訂正(FEC:Forward Error Correction)方式が注目されている。
例えば、特許文献1には、FECによるパケットロス耐性機能を使用する映像通信システムにおいて映像伝送遅延を削減する技術が記載され、特許文献2には、映像データの転送に、10×10の計100パケットで2次元のFECを行なう技術が記載されている。
特開2007−28241号公報
特開2008−11096号公報
FECは、伝送したい情報に冗長な情報を付加することによりロスしたパケットを受信側で復元するものであるため、再送要求の手続きが不要となり遅延量を少なくできるという特徴がある。
冗長な情報は、一般に、複数のパケットを所定のFEC演算することによりFECパケットとして生成されるが、その生成方式として、複数のパケットを1次元でFEC演算する方式や、複数のパケットを多次元でFEC演算する方式等が提案されている。例えば、4個のパケットの排他的論理和(XOR)を取る1次元パリティFECでは、4個のパケットにより1つのFECパケットが生成されるのに対して、4個のパケットを2×2の2次元でXORする2次元パリティFECでは4個のパケットにより5個のFECパケットが生成されることになる。
パケットロスに対する耐性については、例えば、パケットロス発生確率がランダムに1%であると仮定すると、4個のパケットに1次元パリティFECを適用する場合において、パケットロスが発生してなおかつパケット復元不能となる確率が0.039%となるのに対し、4個のパケットに2×2の2次元パリティFECを適用する場合の同確率は0.000004%となる。
このように、複数のパケットを1次元でFEC演算する方式よりも、複数のパケットを多次元でFEC演算する方式の方がパケットロスに対する耐性が圧倒的に高くなる。しかしながら、複数のパケットを多次元でFEC演算する方式は、演算量の増大だけでなく、伝送すべきパケット数が多くなってしまうために受信側のパケット管理が煩雑になり、遅延量も増加してしまうという問題がある。特に、従来のように受信したパケットを次段に出力するタイミングやパケット復元を行なうタイミングをパケット毎の生成時刻、受信時刻等で管理しようとすると、受信側の負荷は膨大なものとなる。
このため、パケットロスに対する耐性を維持しつつ、受信側のパケット管理を容易にする技術の開発が望まれている。そこで、本発明は、パケットロスに対する十分な耐性と低遅延とを実現可能な前方誤り復元方式受信装置および前方誤り復元方式受信出力方法を提供することを目的とする。
上記課題を解決するため、本発明の第1の態様である前方誤り復元方式受信装置は、シーケンス番号が付されたメディアパケットのストリームと、メディアパケットに基づいて生成されたFECパケットのストリームとを受信し、シーケンス番号順にメディアパケットを出力する前方誤り復元方式受信装置であって、前記受信したメディアパケットおよびFECパケットを格納するバッファ手段と、前記バッファ手段におけるメディアパケットの格納位置を参照するための、シーケンス番号に相対的に対応して順位付けられた複数のノードで構成されるノード列を複数設定したノード管理手段と、前記受信したメディアパケットのシーケンス番号に対応したノードの順位を判定し、判定された順位が付されたノードに当該メディアパケットの格納位置を記憶させ、判定された順位が所定の第1順位範囲である場合に、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとする解析手段と、出力対象メディアパケットが未受信のメディアパケットを含む場合に、前記格納されたFECパケットを用いて前記未受信のメディアパケットを復元し出力対象メディアパケットにするとともに、前記出力対象メディアパケットをシーケンス番号順に出力する出力手段と、を備えたことを特徴とする。
受信したメディアパケットをノードで管理し、所定の順位のノードへの記録をトリガとして、メディアパケットの出力を行なうため、パケット毎の時刻管理が不要となる。したがって、複数のパケットを多次元でFEC演算する方式を用いた場合でも受信側装置のパケット管理は容易であり、パケットロスに対する十分な耐性と低遅延とが実現可能となる。
ここで、前記解析手段は、前記出力手段が出力対象となったメディアパケットをシーケンス番号順に出力すると、出力したメディアパケットの格納位置を記憶していたノードの記憶内容を無効とし、後続するノードの順位を繰り上げることができる。これにより、資源を有効活用することができるようになる。
また、前記解析手段は、判定されたノードの順列が所定の第2順位以降の場合は、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとすることなく、後続するノードの順位を繰り上げるようにすることができる。リアルタイム性が重視される情報の伝送では、パケットが許容遅延時間を超えて受信された場合は、出力不要となるからである。
さらに、前記解析手段は、判定された順位が所定の第1順位範囲である場合に、最も順位の早いノードを含むノード列に加え、前記ノード列と所定の関係を有するノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとしてもよい。これにより設計の自由度が高まることになる。
具体的には、前記所定の関係を有するノード列は、最も順位の早いノードを含むノード列を構成するノード以外で最も順位の早いノードを含むノード列とすることができる。
一般に、互換性を重んじて、メディアパケットとFECパケットの相関関係は、FECパケットのみに記載されている。そこで、前記解析手段は、メディアパケットのシーケンス番号の開始値を示すFECパケットを未受信の場合は、あらかじめ定めたノードに最初に受信したメディアパケットの格納位置を記憶させ、FECパケット受信後に、前記メディアパケットのシーケンス番号に対応したノード順位を判定し、前記あらかじめ定めたノードが判定されたノード順位になるように、ノードに付する順位をシフトすることが望ましい。これにより、FECパケットを最初に受信した際のノードとメディアパケットとの対応付け処理が容易になる。
上記課題を解決するため、本発明の第2の態様である前方誤り復元方式受信出力方法は、シーケンス番号が付されたメディアパケットのストリームと、メディアパケットに基づいて生成されたFECパケットのストリームとを受信し、シーケンス番号順にメディアパケットを出力する前方誤り復元方式受信出力方法であって、前記受信したメディアパケットおよびFECパケットをバッファに格納するバッファリングステップと、前記バッファにおけるメディアパケットの格納位置を参照するための、シーケンス番号に相対的に対応して順位付けられた複数のノードで構成されるノード列を複数設定するノード設定ステップと、前記受信したメディアパケットのシーケンス番号に対応したノードの順位を判定し、判定された順位が付されたノードに当該メディアパケットの格納位置を記憶するノード記憶ステップと、判定された順位が所定の第1順位範囲である場合に、最も順位の早いノードを含むノード列を構成するノードが参照すべきメディアパケットを出力対象メディアパケットとし、前記出力対象メディアパケットが未受信のメディアパケットを含む場合に、前記格納されたFECパケットを用いて前記未受信のメディアパケットを復元し出力対象メディアパケットにするとともに、前記出力対象メディアパケットをシーケンス番号順に出力する出力ステップと、を有することを特徴とする。
本発明によれば、パケットロスに対する十分な耐性と低遅延とを両立させることができる。
本発明の実施形態について図面を参照して詳細に説明する。図1は、本発明を適用したFEC受信側装置を含むネットワークメディアストリーム送受信システムの構成を示すブロック図である。本図に示すようにネットワークメディアストリーム送受信システム100は、メディアストリーム出力装置10が順次出力するメディアパケットに基づいてFEC送信側装置20が所定のFEC演算によりFECメディアパケットを生成し、メディアパケットとともにコンピュータネットワーク50を介してFEC受信側装置30に送信する。FEC受信側装置30は、受信したメディアパケットをメディアストリーム受信装置40に出力する。この際に、FEC受信側装置30は、受信順ではなく、シーケンス順にメディアパケットをメディアストリーム受信装置40に出力し、一部のメディアパケットが失われている場合には、受信したFECパケットおよび他のメディアパケットを用いて失われたメディアパケットを復元して出力する。このようなFEC方式を採用したネットワークメディアストリーム送受信システム100は、VoIP(Voice over IP)、TV会議、マルチキャスト配信システム等のリアルタイム性が重視され、低遅延が要求される情報の伝送に特に効果的に適用することができる。
メディアストリーム出力装置10が出力するメディアストリームは、動画、音声等種々のデータとすることができる。また、メディアストリーム出力装置10とメディアストリーム受信装置40とが双方向にメディアストリームを送受信する構成としてもよい。コンピュータネットワーク50は、所定のプロトコルによりパケット単位で伝送を行なう品質非保証の情報伝送網を用いることができ、代表的にはインターネットとすることができる。
図2は、FEC受信側装置30の機能構成を示すブロック図である。FEC受信側装置30は、パケット受信部310、ノード管理部320、パケット解析部330、トリガ生成部340、メディアパケット出力部350を備えている。
パケット受信部310は、リングバッファ構造の受信パケットバッファ312を備えており、受信したメディアパケットとFECパケットとを、受信パケットバッファ312に順次格納する。また、パケット受信部310は、パケットを受信すると受信したことをパケット解析部330に通知する。なお、本実施形態では、低遅延伝送を実現するために、次段のメディアストリーム受信装置40への出力を行なうまで、受信パケットバッファ312に格納したパケットをコピーせずに直接利用するものとする。
ノード管理部320は、受信パケットバッファ312に受信順に格納されているパケットを出力順(シーケンス順)に管理するために、パケット格納位置を指し示すノードを出力順に並べたノード配列を用いて受信パケットバッファ312の参照を行なう。すなわち、受信パケットバッファ312に格納されるパケットは、受信順であるため、出力順が入れ替わっていたり、また欠落が生じたりする場合がある。そこで、ノードを用いて格納されたパケットを出力順に参照できるようにしている。ノード管理部320の具体的な構成と処理については後述する。
パケット解析部330は、パケット受信部310がパケットを受信すると、受信したパケットのヘッダを解析して、そのパケットに対応するノードを判定し、ノード管理部320に通知する。
トリガ生成部340は、パケット解析部330の解析結果に応じて種々のトリガを生成する。トリガ生成部340が発生するトリガには、ノード管理部320に対するノード群更新/破棄トリガ、メディアパケット出力部350に対するメディアパケット出力トリガが含まれる。トリガ生成部340がこれらのトリガを生成する条件については後述する。
メディアパケット出力部350は、トリガ生成部340が発生する出力トリガを契機として、受信パケットバッファ312に格納されているメディアパケットを所定の単位で次段のメディアストリーム受信装置40に出力する。この際にパケットロスが生じている場合には、パケット復元部352を用いてロスしたパケットを復元して出力する。
ここで、本実施形態におけるメディアパケットとFECパケットについて説明する。なお、本実施形態におけるFECパケットは、RFC2733に準拠しているものとする。ただし、本発明は他の仕様のFECパケットにも適用することができる。
図3(a)は、メディアパケットの概略構造を示す図である。本図に示すように、各メディアパケットは、ヘッダとペイロードとを含み、ヘッダにはシーケンス番号が格納される。なお、シーケンス番号の開始値は一般に乱数により生成される。
図3(b)は、FECパケットの概略構造を示す図である。本図に示すように各FECパケットは、ヘッダとペイロードとを含み、ヘッダには、自己のシーケンス番号と、メディアパケットとFECパケットの対応を示す情報を格納し、後者の情報はRFC2733の例では基底シーケンス番号とマスクである。基底シーケンス番号は、対応するメディアパケットを示す基準となるメディアパケットのシーケンス番号である。マスクは、そのFECパケットを生成するのに用いたメディアパケットの組を示す情報で、左記メディアパケット各々のシーケンス番号の基底シーケンス番号からのオフセットをビットマスクで表して、FECパケット生成に関与した全てのメディアパケットのビットマスク表記をORした整数である。このように、メディアパケットとFECパケットとの対応関係は、メディアストリームの互換性保持の目的から、FECパケット内に記述されている。
図4は、メディアパケットからFECパケットを生成する処理とメディアパケットを復元する処理とを模式的に示す図であり、図4(a)は、1次元の2要素でFECパケットを生成する場合を示し、図4(b)は、2×2の2次元の4要素でFECパケットを生成する場合を示している。
図4(a)に示すように、1次元の2要素でFECパケットを生成する場合には、例えば、シーケンス番号M1のメディアパケット(以下、シーケンス番号nのメディアパケットを「Mn」と示し、シーケンス番号kのFECパケットを「Fk」と示す)と「M2」とをFEC演算の単位として、所定の演算、例えば、XOR値を計算することで「F1」を生成する。そして、メディアパケット「M1」「M2」に加えて、冗長なFECパケット「F1」を送出する。情報伝送網において、例えば、「M2」がロスした場合には、受信側で「M1」と「F1」のXOR値を計算することで、失われた「M2」を復元することができる。
図4(b)に示すように、2×2の2次元の4要素でFECパケットを生成する場合には、例えば、「M1」「M2」「M3」「M4」のメディアパケットをFEC演算の単位とする。そして、「M1」と「M2」とから「F1」を計算し、「M3」と「M4」とから「F3」を計算し、「M1」と「M3」とから「F2」を計算し、「M2」と「M4」とから「F4」を計算する。さらに、「F1」と「F3」または 「F2」と「F4」とから「F5」を計算する。そして、メディアパケット「M1」「M2」「M3」「M4」に冗長なFECパケット「F1」「F2」「F3」「F4」「F5」を加えて、9個のパケットを送出する。
2次元の4要素でFECパケットを生成すると、情報伝送網において、例えば、「M1」「M2」「M3」「F3」「F4」の5個のパケットがロスした場合であっても、受信側で、「F1」と「F5」から「F3」を復元し、復元された「F3」と「M4」とから「M3」を復元し、復元された「M3」と「F2」とから「M1」を復元し、復元された「M1」と「F1」とから「M2」を復元することで、元のメディアストリームの「M1」「M2」「M3」「M4」を受信側で得ることができる。
次に、上記構成のFEC受信側装置30における処理について、好ましい実施例を示して詳細に説明する。
まず、第1実施例として基本的な処理について図5のフローチャートおよびノード管理部320の構成と処理を示す図6〜図10を参照して説明する。
本処理では、まず、ノードとバッファの初期設定を行なう(S101)。ノードの初期設定では、ノード管理部320において、FECの演算方式に応じたノードブロックの設定を行なう。本例では、2×2の2次元の4要素でFECパケットを生成する方式を用いるものとする。
第1実施例では、2×2の2次元の4要素でFECパケットを生成する方式の場合、図6(a)に示すようなノードブロック321をノード管理部320に設定する。本図では、「n1」から「n12」までの12個のノードが設定されており、各ノードの中身は無参照の初期状態にある。なお、ここでは簡単のため、メディアパケットに注目して説明する。FECパケットについては、FECパケットに対応した同様のノードブロックを設定してもよいし、後述する第2実施例で説明するように同一のノードブロック321で管理してもよい。
ノードは受信パケットバッファ312に格納されているパケットを参照するための情報、例えばアドレスを記録するポインタ的役割を担う。本実施例において、ノードはFEC演算の単位で1つのノード列を構成する。すなわち、2×2の2次元で4個のメディアパケットを用いてFEC演算を行なっているため、4つのノードで1つのノード列が構成される。この結果、ノードブロック321には「n1」〜「n4」、「n5」〜「n8」、「n9」〜「n12」の3つのノード列が形成されている。ノード列は、次段のメディアストリーム受信装置40への出力や、破棄等の処理を効率的に行う単位となる。
ノード列は1または複数個集まってノード列群を構成する。ノード列群はノードブロック321に3つ構成するものとし、それぞれ、第1ノード列群、第2ノード列群、第3ノード列群と称する。各ノード列群は、1または複数のノード列により構成されるが、第1実施例では、1つのノード列で1つのノード列群を構成するようにする。このため、「n1」〜「n4」のノード列が第1ノード列群を構成し、「n5」〜「n8」のノード列が第2ノード列群を構成し、「n9」〜「n12」のノード列が第3ノード列群を構成することになる。
上述のように、本実施例においてノードは「n1」〜「n12」まで設定されているが、ノード「n1」は、次段のメディアストリーム受信装置40に未出力のメディアパケットの内、最もシーケンス番号の小さなメディアパケットを参照するためのノードであり、対応するメディアパケットが受信パケットバッファ312に格納されると、その格納位置を特定する情報が記録される。以降、同様にメディアパケットのシーケンス番号順に「n2」〜「n12」が対応する。すなわち、ノードの順に受信パケットバッファ312を参照すると、シーケンス順にメディアパケットを取得することができるとともに、パケットロスを検出することができる。
また、1または複数のノード列により第1ノード列群、第2ノード列群、第3ノード列群を構成しているが、第1ノード列群は出力待ちのノード列群、第2ノード列群は受信待ちのノード列群、第3ノード列群は予備的なノード列群としての性格を有している。
第1ノード列群の先頭から第2ノード列群の末尾までに対応するメディアパケットは8個であるため、例えば、FEC送信側装置20におけるメディアパケットの送信間隔を8msとすると、8ms×8=64ms相当のメディアパケットに対応するノードが第1ノード列群と第2ノード列群に記録できることになる。したがって、本実施例で許容する遅延時間は最大64msという設計であり、この範囲内であれば、受信したメディアパケットを第1ノード列群と第2ノード列群のいずれかのノードと対応させることができる。なお、最大遅延時間の64msのうち、32ms(8ms×4)はFEC演算のために本来必要な遅延時間である。
バッファの初期設定では、パケット受信部310において、受信パケットバッファ312の領域を確保する。上述のように受信パケットバッファ312はリングバッファ構造とする。確保するサイズは、後述するようにノードブロック321の構成と許容遅延量等に基づいて定めることができる。
メディアパケットを受信すると、受信したメディアパケットを受信パケットバッファ312に格納する(S102)。そして、パケット受信部310は、パケット解析部330に受信通知を行ない、パケット解析部330が、受信したメディアパケットのヘッダに格納されているシーケンス番号を参照して対応ノードNの判定を行なう(S103)。上述のように、「n1」は、次段のメディアストリーム受信装置40に未出力のメディアパケットに対応するため、「n1」が参照すべきメディアパケットのシーケンス番号と、受信したメディアパケットのシーケンス番号とを参照することで、受信したメディアパケットに対応するノードNを判定することができる。ただし、メディアパケットの到着順によっては、対応するノードが「n1」〜「n12」の範囲外となる場合も起こり得る。
なお、RFC2733準拠では、各FECパケットに対応するメディアパケットのシーケンス番号はFECパケット記載の基底シーケンス番号と マスクから判明する。逆に、最初のFECパケットを受信するまで、メディアパケットとFECパケットの相関は不明であって、メディアパケットを格納すべきノードを特定できない。この際のノード判定処理については後述する。ここでは、既にFECパケットを受信して、当該の基底シーケンス番号が判明しているものとする。
受信したメディアパケットに対応するノードNを判定すると、Nに応じた処理を行なう(S104)。まず、判定されたノードNが「n1」≦N≦「n6」の場合、すなわち、第1ノード列群および第2ノード列群の3番目の「n7」より前のノードの場合は、受信したメディアパケットの受信パケットバッファ312における格納位置をノードNに記録する(S105)。これにより、ノードNを参照することで受信したメディアパケットを間接参照することができるようになる。
例えば、「M1」「M2」「F1」「M3」「F2」「F3」「F4」「F5」「M6」「M5」の順でパケットを受信した場合には、メディアパケットの受信パケットバッファ312とノード列とは、図6(b)に示すような状態となる。ここで、受信パケットバッファ312のアドレス「b1」からパケットが受信順に「b2」「b3」…に格納されているものとする。本図に示すように、「n1」には最もシーケンス番号の小さい「M1」を格納した「b1」が記録され、「n2」には「M2」を格納した「b2」が記録される。パケット「M4」は未受信であるため対応する「n4」は未参照の状態である。また、「M5」と「M6」とは順序が逆転して受信され、「M6」「M5」の順で受信パケットバッファ312に格納されているが、「n5」「n6」の順で参照することで、シーケンス順に管理することができる。
判定されたノードNがN=「n7」あるいは「n8」、すなわち、第2ノード列群の3番目の「n7」以降のノードの場合は、まず、受信したメディアパケットの受信パケットバッファ312における格納位置をノードNに記録する(S106)。
そして、この第2ノード列群の3番目の「n7」以降のノードに対応するメディアパケットの受信をトリガとして、第1ノード列群の次段への、すなわち、メディアストリーム受信装置40への出力を行なう(S107)。この際に、第1ノード列群に対応するメディアパケットにロスがあった場合には、別途同様に格納しているFECパケットを用いてロスしたメディアパケットを復元した上で出力する。
例えば、図6(c)に示すように、「n7」に対応するメディアパケット「M7」を受信すると、第1ノード列群の「n1」〜「n4」で参照されるメディアパケットをノードが示す順序で出力する。本図では、「n4」に対応すべき「M4」がロスしているため、「M4」を復元した上で、「M1」〜「M4」を次段のメディアストリーム受信装置40に出力する。
このように、本実施例では、所定のノード、具体的には第2ノード列群の3番目以降のノードに対応したパケットの受信を、第1ノード列群のメディアパケット出力のトリガとしている。このため、従来必須であった送信時刻、受信時刻、経過時間等のパケット毎の管理が不要となり、受信パケットの周期的な監視やタイマ起動処理を行なう必要がなくなる。したがって、受信側装置のパケット管理に関する処理負荷を軽減するとともに、低遅延を実現することができる。
なお、本実施例では第2ノード列群の「n7」以降のノードに対応するメディアパケットの受信をトリガとしているが、これは設定の一例である。遅延量を最も少なくするメディアパケット出力のトリガは、第1ノード列群の最後のノードである「n4」に対応したメディアパケットを受信したときであるが、「n4」に対応したメディアパケットがロスする場合も起こり得る。「M1」〜「M4」のメディアパケットで「F1」〜「F5」のFECパケットを生成しているので第1ノード列群に対し最大の復元能力を発揮するためにはFECパケットの「F5」まで必要である。これに加え、パケットの伝送遅延揺らぎや順序逆転に対するエラー耐性を担保するためにはメディアパケット出力のタイミングは遅い方がよい。一方、メディアパケット出力のタイミングを遅くすると遅延量が大きくなる。
出力のトリガをk番目のノードに対応したメディアパケットの受信とすると、k番目のメディアパケットは先頭のメディアパケット「M1」に対して符号化時刻で既に(k−1)×8msの遅延があり、さらにFEC受信側装置30での種々の処理によりその他の遅延が加わっている。したがって、メディアストリーム受信装置40で許容できる遅延と、エラー耐性との兼ね合いでトリガとなるノードを設定するようにする。
第1ノード列群のノードに対応するメディアパケットを出力すると、ノード列群の更新を行なう(S108)。ノード列群の更新は、出力して不要となった第1ノード列群のノードを無参照状態として無効にする。これにより、受信パケットバッファ312の第1ノード列群のノードにより参照されていた領域が解放される。そして、第2ノード列群のノード列を第1ノード列群に、第3ノード列群のノード列を第2ノード列群に、無参照状態の第1ノード列群のノード列を第3ノード列群にそれぞれシフトする。
すなわち、図6(c)の状態から図7(a)に示す状態に更新する。本図の例では、第2ノード列群の「n5」「n6」「n7」に記録されていた「b10」「b9」「b11」がそれぞれ第1ノード列群の「n1」「n2」「n3」にシフトしている。また、第1ノード列群に参照されていた「b1」「b2」「b4」が解放される。図示しないが、FECパケットについても同様の処理を行なうため、「b3」「b5」「b6」「b7」「b8」も解放されることになる。以降は、更新されたノード列群に対して同様の処理を、受信を継続する間(S120)繰り返す。
なお、実装上は、ノード列群の更新について図7(b)に示すように、第1ノード列群、第2ノード列群、第3ノード列群を指し示すポインタ変数群322を用意しておき、ポインタ変数の値を交換すれば足りる。このように、本実施例では、ノード列群が参照する受信パケットバッファ312は、ノード列群の更新処理により、古いパケットが参照されなくなる。したがって、バッファの解放プロセスは不要となるとともに処理(S101)の際に設定する受信パケットバッファ312のサイズは、必要最小限のサイズとすることができる。
判定されたノードNが、N<n1の場合、すなわち、受信したメディアパケットが「n1」に対応したメディアパケットよりも古い場合には、ノードへの記録を行なうことなく破棄する(S109)。このようなパケットはパケットロスとして既に処理済となっている。
判定されたノードNが「n9」以降の場合は、第1ノード列群、第2ノード列群では記録することができない。このような状況は、本実施例で許容する64msの遅延時間以上の遅延が生じた場合に起こる。許容遅延時間内の受信であれば、第2ノード列群のノードに対応するメディアパケットを受信している間に第1ノード列群のノードに対応するメディアパケットを出力し、ノード列群の更新が行なわれるため、第3ノード列群のノードに対応するメディアパケットは受信しないようになっている。
本実施例では、許容遅延時間以上の遅延に備えるために、予備の第3ノード列群を設けている。第3ノード列群は、便宜的に第2ノード列群に連続する「n9」〜「n12」を割り当てているが、パケットの受信間隔が空いて、第2ノード列群に連続しないノード、具体的には「n13」以降のノードに対応するメディアパケットが受信される場合にも安全に対応できる。以下では、許容遅延時間以上の遅延が生じた場合、すなわち、判定されたノードNが「n9」以降の場合の処理について説明する。
判定されたノードNがN=「n9」あるいは「n10」、すなわち、第3ノード列群の3番目の「n11」より前のノードの場合は、まず、受信したメディアパケットの受信パケットバッファ312における格納位置をノードNに記録する(S110)。第3ノード列群のノードに記録することは、第1ノード列群に対応するメディアパケットを次段のメディアストリーム受信装置40に出力すべき時刻が経過してしまっていることを意味するため、第1ノード列群のノードが参照するメディアパケットを出力することなく、第1ノード列群のノードの記録内容を破棄する(S111)。
例えば、図8(a)に示すように、「M5」の後に、「n7」に対応するメディアパケット「M10」を受信すると、「M1」〜「M4」を出力することなく、第1ノード列群の「n1」〜「n4」の内容を破棄して無参照状態とする。
そして、第2ノード列群のノード列を第1ノード列群に、第3ノード列群のノード列を第2ノード列群に、無参照状態の第1ノード列群のノード列を第3ノード列群にそれぞれシフトするノード列群の更新を行なう(S112)。このようなノード列群の更新を行なって、以降に受信するパケットに対する処理を繰り返す(S120)ことで、処理(S110)で記録した第3ノード列群のノードを第1ノード列群や第2ノード列群のノードと等価に、かつ連続的に使用することができるようになる。このために、第3ノード列群を設けて、かつ第1ノード列群および第2ノード列群と同じサイズに設定している。またこの手段は、第3ノード群列を設けずに、一時的記憶領域(ノード)にパケット解析内容を保持して、ノード列群の更新後に空いた然るべきノードに記録する場合と比べると、ノード記録過程(タイミング)及びノード参照過程(タイミング)が統一されて、競合が排除されかつ設計コンセプトが簡潔明瞭になって、システムの安全性・信頼性を確保できる。図8(b)は、ノード列群を更新した後の受信パケットバッファ312とノードブロック321の状態を示している。
判定されたノードNがN=「n11」あるいは「n12」、すなわち、第3ノード列群の3番目の「n11」以降のノードの場合は、まず、受信したメディアパケットの受信パケットバッファ312における格納位置をノードNに記録する(S113)。第3ノード列群のノードに記録することは、第1ノード列群に対応するメディアパケットを次段のメディアストリーム受信装置40に出力すべき時刻が経過してしまっていることを意味するため、第1ノード列群のノードが参照するメディアパケットを出力することなく、第1ノード列群のノードの記録内容を破棄する(S114)。
しかしながら、第2ノード列群のノードが参照するメディアパケットは許容遅延時間内で有効であるため、次段のメディアストリーム受信装置40に出力する(S115)。この際に、第2ノード列群に対応するメディアパケットにロスがあった場合には、別途同様に格納しているFECパケットを用いてロスしたメディアパケットを復元した上で出力する。
例えば、図9(a)に示すように、「M5」の後に、「n11」に対応するメディアパケット「M11」を受信すると、「M1」〜「M4」を出力することなく、第1ノード列群の「n1」〜「n4」の内容を破棄する。また、第2ノード列群の「n5」〜「n8」で参照されるメディアパケットをノードが示す順序で出力する。本図では、「n7」「n8」に対応すべき「M7」「M8」がロスしているため、「M7」「M8」を復元した上で、「M5」〜「M8」を次段のメディアストリーム受信装置40に出力する。
そして、出力して不要となった第2ノード列群のノードを無参照状態とし、第3ノード列群のノード列を第1ノード列群に、無参照状態の第2ノード列群のノード列を第3ノード列群に、無参照状態の第1ノード列群のノード列を第2ノード列群にそれぞれシフトするノード列群の更新を行なう(S116)。ただし、第2ノード列群のノード列を第1ノード列群に、第3ノード列群のノード列を第2ノード列群に、第1ノード列群のノード列を第3ノード列群にそれぞれシフトするノード列群の更新を2回繰り返すようにしてもよい。このようなノード列群の更新を行なって、以降に受信するパケットに対する処理を繰り返す(S120)ことで、処理(S113)で記録した第3ノード列群のノードを連続的に使用することができるようになる。図9(b)は、ノード列群を更新した後の受信パケットバッファ312とノードブロック321の状態を示している。本図に示すように第3ノード列群の内容が第1ノード列群にシフトしている。
判定されたノードNがN≧「n13」の場合、すなわち、第2ノード列群に連続しないノード列のノードの場合は、受信したメディアパケットの受信パケットバッファ312における格納位置を、Nx=n9+(N−n9)%4(%は剰余、4は本実施例2×2の2次元FECでの要素数)として、第3ノード列群のノードNxに記録する(S117)。つまり、受信したメディアパケットが、FEC演算における最初のメディアパケットである場合には「n9」に記録し、2番目のメディアパケットである場合には「n10」に記録し、3番目のメディアパケットである場合には「n11」に記録し、4番目のメディアパケットである場合には「n12」に記録する。
判定されたノードNがN≧「n13」であることは、第1ノード列群に対応するメディアパケットおよび第2ノード列群に対応するメディアパケットを次段のメディアストリーム受信装置40に出力すべき時刻が経過してしまっていることを意味するため、第1ノード列群および第2ノード列群のノードが参照するメディアパケットを出力することなく、第1ノード列群および第2ノード列群のノードの記録内容を破棄する(S118)。
例えば、図10(a)に示すように、「M5」の後に、「n14」に対応するメディアパケット「M14」を受信すると、「M14」は、「M13」〜「M16」で行なわれるFEC演算における2番目のメディアパケットであるから、「n10」に「M14」を格納した「b15」が記録される。また、「M1」〜「M4」、「M5」〜「M8」を出力することなく、第1ノード列群の「n1」〜「n4」および第2ノード列群の「n5」〜「n8」の内容を破棄する。
そして、第3ノード列群のノード列を第1ノード列群に、第2ノード列群のノード列を第3ノード列群に、第1ノード列群のノード列を第2ノード列群にそれぞれシフトするノード列群の更新を行なう(S119)。ただし、第2ノード列群のノード列を第1ノード列群に、第3ノード列群のノード列を第2ノード列群に、第1ノード列群のノード列を第3ノード列群にそれぞれシフトするノード列群の更新を2回繰り返すようにしてもよい。このようなノード列群の更新を行なって、以降に受信するパケットに対する処理を繰り返す(S120)ことで、処理(S117)で記録した第3ノード列群のノードを連続的に使用することができるようになる。図10(b)は、ノード列群を更新した後の受信パケットバッファ312とノードブロック321の状態を示している。
以上説明したように、第1実施例では、ノード列の大きさをFEC演算の単位と等しくすることで、メディアパケットの出力のタイミングと受信パケットバッファ312の更新のタイミングとが関連付けられることになる。このため、より信頼性の高い管理機構を有するFEC受信側装置30を実現することができる。
次に、本発明の第2実施例について説明する。第1実施例では、簡単のためノードブロック321において、1つのノード列により1つのノード列群を構成していた。第2実施例では、より一般化して、1または複数のノード列により1つのノード列群を構成する場合について説明する。
図11は、第1ノード列群を4個のノード列で構成し、第2ノード列群をN−4個のノード列で構成し、第3ノード列群を2個のノード列で構成したノードブロック321aを示している。本例でも各ノード列を構成するノード数はFEC演算の単位と等しくする。
ここで、ノード列を出力した後のノード列群のシフト等を考慮して、第1ノード列群のノード列の個数と、第2ノード列群のノード列の個数とは、第3ノード列群のノード列の個数の整数倍とする。すなわち、本例では、第3ノード列群のノード列の個数が、一時に出力するノード列の個数と一致するように制御する。本図の場合では、第3ノード列群のノード列数は2個であるから、所定の条件を満たしたとき「ノード列1」と「ノード列2」とが同時に出力されることになる。
図12は、図11に示したようなノードブロック321aを用いたときのメディアパケット出力処理を説明するフローチャートである。基本的な処理は第1実施例と同様であるため、ここでは特徴的な処理を示す。本例では、メディアパケットの出力のトリガとして所定のノードG、例えば、第2ノード列群の最後のノード列Nの3番目以降のノードに対応するメディアパケットを受信した場合とする。
第1実施例と同様に、メディアパケットを受信すると(S201)、受信パケットバッファ312に格納し、ヘッダのシーケンス番号を解析して対応するノードに格納位置を記録する(S202)。対応するノードが第2ノード列群のノードG以降でない場合(S203:No)には、メディアパケットは出力せずに次のパケットに対応する。
一方、対応するノードが第2ノード列群のノードG以降であった場合には、第1ノード列群の先頭から第3ノード列群のノード数分のノード列に対応するメディアパケットを、次段のメディアストリーム受信装置40に出力する(S204)。この際に、パケットロスがある場合には復元した上で出力する。本例では「ノード列1」と「ノード列2」とが一時に出力されることになる。
そして、出力したノード列の個数に応じたノード列の前方シフトを行なう。本例では、図13に示すように、「ノード列1」と「ノード列2」とが出力された結果、ノード列2個分の前方シフトが行なわれる。すなわち、第1ノード列群に含まれていた「ノード列3」と「ノード列4」とが第1ノード列群の先頭部分にシフトし、第2ノード列群に含まれていた「ノード列5」と「ノード列群6」とが第1ノード列群の後半にシフトする。第2ノード列群、第3ノード列群においても同様のシフトが行なわれ、第2ノード列群は「ノード列7」〜「ノード列N+2」で構成され、第3ノード列群は「ノード列N+3」と「ノード列N+4」で構成されることになる。なお、許容遅延時間内にパケットが受信できなかった場合の処理は、第1実施例と同様に第3ノード列群を利用した処理を行なう。
第2実施例では、一般に許容遅延量は第1実施例よりも大きくなることが想定される。実際の許容遅延量はノード列群の具体的な構成や、出力トリガを発生させるノード位置の設定によって設計することができる。したがって第2実施例は第1実施例よりも実用上の設計自由度が高まることになる。より具体的には、第2ノード列群を構成するノード列数を増やすことで、パケットの伝送遅延揺らぎや順序逆転に対するエラー耐性を許容遅延量ぎりぎりまで近づけることができる。このように第2ノード列群を構成するノード列数は、メディアストリーム受信装置40の遅延に関する設計指針によって決定すべき事項である。また、第1ノード列群のノード個数については、上記の例に限られず、設計方針に応じて、出力の際の処理単位としたり、FEC演算の単位としたり、ノード列シフトの単位としたり、その他の処理単位としたりすることができる。さらにいえば、第1ノード列群、第2ノード列群、第3ノード列群の区別は便宜的なものであり、例えば、第2ノード列群の後半のノード列に第3ノード列群の役割を担わせたり、第2ノード列群の前半に第1ノード列群の役割を担わせたりすることで、列群を明確に区別しないようにしてもよい。
次に、第2実施例の別例として、1つの列群に異なる種類のノード列が含まれる場合について説明する。異なる種類のノード列は、例えば、メディアパケットノード列とFECパケットノード列とすることができ、本例では、FEC演算の単位にしたがって、メディアパケットノード列は4個のノードから構成され、FECパケットノード列は5個のノード列から構成されるものとする。また、同じノード列群に含まれるメディアパケットノード列が参照するメディアパケットとFECパケットノード列が参照するFECパケットとは、互いにFEC演算の関連性を備えているものとする。
例えば、図14に示すノードブロック321bの第1ノード列群に含まれるメディアパケットノード列「n1」「n2」「n3」「n4」が参照する4個のメディアパケットから第1ノード列群に含まれるFECパケットノード列「f1」「f2」「f3」「f4」「f5」が参照する5個のFECパケットが生成されていることになる。
本例では、第1ノード列群に対応するメディアパケットの出力トリガは、第2ノード列群のメディアパケットノード「n7」以降に対応するメディアパケットが受信された場合、あるいは、第2ノード列群のFECパケットノード「f7」以降に対応するFECパケットが受信された場合とする。ただし、出力トリガは本例に限られない。例えば、判断基準を他のノード位置としたり、メディアパケットノードの所定位置以降のノードおよびFECメディアパケットノードの所定位置以降のノードの双方を受信した場合としたりするようにしてもよい。
図15は、図14に示したようなノードブロック321bを用いたときのメディアパケット出力処理を説明するフローチャートである。基本的な処理は第1実施例と同様であるため、ここでは特徴的な処理を示す。
第1実施例と同様に、パケットを受信すると(S301)、受信パケットバッファ312に格納し、ヘッダのシーケンス番号を解析して対応するノードに格納位置を記録する(S302)。この際に、受信したパケットがメディアパケットであれば、メディアパケットノードの対応するノードに格納位置を記録し、受信したパケットがFECパケットであれば、FECパケットノードの対応するノードに格納位置を記録する。
記録したノードが第2ノード列群のメディアパケットノード「n7」以降である場合、あるいは、FECパケットノード「f7」以降である場合(S303:Yes)は、第1ノード列群のメディアパケットノード列に対応するメディアパケットをシーケンス番号順に次段のメディアストリーム受信装置40に出力する(S304)。この際に、パケットロスがある場合にはFECパケットを用いて復元した上で出力する。
そして、第1実施例と同様のノード列群の更新を行なう(S305)。具体的には、第1ノード列群を第3ノード列群とし、第2ノード列群を第1ノード列群とし、第3ノード列群を第2ノード列群とする。なお、許容遅延時間内にパケットが受信できなかった場合の処理は、実施例1と同様に第3ノード列群を利用した処理を行なう。
一方、記録したノードが第2ノード列群のメディアパケットノード「n7」以降でなく、FECパケットノード「f7」以降でもない場合(S303:No)には、メディアパケットの出力を行なうことなく、次パケットに対応する(S301)。
次に、第2実施例のさらに別例としてFECの演算に用いるメディアパケットのシーケンス番号が連続していない場合について説明する。一般に、インターネット等のコンピュータネットワークでは、単発のパケットロスが支配的であるものの、あるパケットが損失した場合に、その直後のパケットも損失する確率が高くなることが知られている。
このような連続的なパケットロス対策として、FECでは時系列上離れたメディアパケット同士を関連付けて、いわゆるインタリーブ形式でFEC演算を行なう場合がある。本例では、「M1」「M3」「M5」「M7」を関連付け、「M2」「M4」「M6」「M8」を関連付けてインタリーブ形式でFEC演算を行なう場合を例に説明する。
図16(a)は、このようなインタリーブ形式に対応したノードブロック321cの例を示している。すなわち、FRC演算単位に対応させて「n1」「n3」「n5」「n7」で1つのノード列を構成し、「n2」「n4」「n6」「n8」で1つのノード列を構成し、これら2つのノード列で第1ノード列群を構成している。なお、簡単のため、ここではメディアパケットに注目して説明する。FECパケットについては、別途ノードブロックを設けてもよいし、図16(b)に示すように同じノード列群内にFECパケットノード列を含めて、2個のメディアパケットノード列と2個のFECパケットノード列の合計4個のノード列で1つのノード列群を構成してノードブロック321dを設定するようにしてもよい。また、各ノード列群に3個以上のメディアパケットノード列を含めるようにしてもよい。
本例では、第1ノード列群に対応するメディアパケットの出力トリガは、第2ノード列群のノード「n13」以降に対応するメディアパケットが受信された場合とする。ただし、出力トリガは本例に限られない。例えば、判断基準を「n14」等の他のノード位置としてもよい。
出力トリガとなるノードに対応するメディアパケットを受信すると、第1ノード列群に含まれるノードに対応するメディアパケットを「n1」〜「n8」の順序で次段のメディアストリーム受信装置40に出力する。この際に、パケットロスが生じている場合には、FEC演算の単位でパケットの復元を行なった上で出力する。一般に、インタリーブ形式でFECを行なうと、パケット管理が一層複雑化するが、本実施例に示すように本発明では極めて簡易にパケット管理を行なうことができる。
最後に、最初のFECパケットが受信されるまでのメディアパケットのノード設定について説明する。前述のように、RFC2733に準拠したFECでは、最初のFECパケットを受信するまで、メディアパケットのシーケンス番号とノードとの対応関係は定まらないことになる。
例えば、図6(b)に示したように最初に「M1」を受信した場合、そのメディアパケットが最初のパケットであることが分からないと、「n1」で参照すべきなのか、「n2」等で参照すべきかを判定することができない。そこで、以下のような処理を行なうことにより、最初にFECパケットを受信した際にメディアパケットのシーケンス番号とノードとを容易に対応付けることができるようになる。
まず、ノードブロックの初期状態として、本来必要なノードの個数に、メディアストリームのノード列を構成するノードの数をmとしてm−1個を加えた数のノードを用意する。本例では、ノード列は4個のノードで構成され、各ノード列群は1つのノード列から構成されるものとするため、本来必要なノードの個数は12となり、余分に必要なノードの個数は3となる。したがって、初期状態として合計15個のノードを用意する。
そして、図17(a)に示すように第1ノード列群を示す第1ポインタの初期値は、m番目、すなわち4番目のノードを設定し、第2ノード列群を示す第2ポインタの初期値は、2m番目、すなわち8番目のノードを設定し、第3ノード列群を示す第2ポインタの初期値は、3m番目、すなわち12番目のノードを設定する。この結果、4〜7番目のノードで第1ノード列群が仮設定され、8〜11番目のノードで第2ノード列群が仮設定され、12〜15番目のノードで第3ノード列群が仮設定される。
この初期状態で、「M7」「M8」「F9」の順序でパケットを受信したとする。メディアパケット「M7」を受信した時点では、FECパケットが未受信であるため、「M7」がシーケンス番号の開始番号から何番目のパケットであるかを判断することができない。このため、図17(b)に示すように第2ノード列群の先頭である8番目のノードに対応させる。メディアパケット「M8」を受信した時点でもFECパケットは未受信であるが、「M8」が「M7」の次のメディアパケットであることは判断することができるため、図17(b)に示すように「M8」を9番目のノードに対応させる。
FECパケットである「F9」を受信すると、ヘッダを参照して基底シーケンス番号とマスクを取得する。ここでは「M1」が2×2の2次元FECにおける1行1列のパケット、つまり先頭だと判明したとする。すると、最初に受信した「M7」は、第2ノード列群の3番目のノードである「n8」に対応すべきメディアパケットであったことが判別できる。そこで、図17(c)に示すように第1ポインタ、第2ポインタ、第3ポインタの値をマイナス2ノード分シフトして、2番目のノードが第1ノード列群の先頭ノード、すなわち「n1」になるように設定する。1番目と14番目と15番目のノードは使用しない。以上の処理により、ノードブロック321eにおいてメディアパケットのシーケンス番号とノードとが対応付けられたことになる。
本実施形態では、FECパケットが未受信で、ノードが仮設定の状態であっても、図5に示したフローチャートにしたがってメディアパケットの出力とノード列群の更新を行なうことができる。図18を参照して「M3」「M4」「M6」「M7」「M8」「F9」の順序でパケットを受信した場合を例に説明する。
図18(a)に示すように、メディアパケット「M3」は、第2ノード列群の先頭である8番目のノードに仮対応させ、「M4」は9番目のノードに仮対応させ、「M6」は11番目のノードに仮対応させる。
11番目のノードは仮の第2ノード列群の4番目のノードであるため、処理(S107)にしたがって、仮の第1ノード列群の出力を行なう。ただし、仮の第1ノード列群のノードに対応したメディアパケットは受信していないため、メディアパケットの出力は結局 行なわれない。次いで、処理(S108)にしたがって、ノード列群の更新が行なわれる。この結果、8〜11番目のノード列が第1ノード列群となり、12〜15番目のノード列が第2ノード列群となり、4〜7番目のノード列が第3ノード列群になる。この時点でFECパケットは受信していないため、図示しないFECパケットノード列は無参照状態である。次いで、「M7」「M8」を受信して図18(b)に示すような状態となる。
その後、FECパケットの「F9」を受信すると、メディアストリームの最初のメディアパケットのシーケンス番号を取得することができる。ここでは「M1」が先頭であったとする。この時点では、8〜11番目のノードが第1ノード列群に対応し、12〜15番目のノードが第2ノード列群に対応し、4〜7番目のノードが第3ノード列群に対応していると仮設定されているため調整が必要である。
FECパケットの受信により、第1ポインタ、第2ポインタ、第3ポインタの値をマイナス2ノード分シフトすればよいことが判明するため、ノードブロック321fを、図18(c)に示すような状態に設定する。つまり、6番目のノードが第1ノード列群の先頭ノード「n1」になり、10番目のノードが第2ノード列群の先頭ノード「n5」になり、2番目のノードが第3ノード列群の先頭ノード「n9」になるように設定する。1番目と14番目と15番目のノードは使用しない。
この段階で、「n7」に対応するメディアパケットが受信されているため、第1ノード列群の出力トリガが発生する。したがって、「n3」と「n4」が参照している「M3」と「M4」とを次段のメディアストリーム受信装置40に出力し、次いでノード列群の更新を行なう。
仮にFECパケットを最初に受信するまでにさらに多くのメディアパケットを受信したとしても、図5のフローチャートにしたがった通常時と同様のノード列群の更新を行なうことで、FECによるパケット復元はできないものの、次段へのメディアパケットの出力を行なうことができる。すなわち、FECパケットの最初の受信の際の関連付け処理を行なう以外は通常時と同様のアルゴリズムを用いることができる。このため、FECパケット受信前のメディアパケットの扱いについて、従来のようなパケット退避用の資源、通常と別個のアルゴリズム等は必要ない。
以上説明したように、本発明の実施形態は、受信したパケットをノード列で管理し、さらにノード列を3つのノード列群として管理するようにしている。これにより受信側の管理が簡単で処理が軽くなるとともに、十分なエラー訂正が行えることが可能となる。
また、低遅延伝送システムにおいて高能力な前方誤り訂正(FEC)を使用してデータの欠落を復元することで、汎用・廉価な伝送路でも低遅延の伝送が実現できる、受信・復号方法を提供することが可能となる。例えば本発明を、様々な施設で運営される業務放送に適用すれば、汎用・廉価な構内LANを用いて低遅延かつ高品位の伝送が可能な業務放送システムを実現することができる。
FEC受信側装置を含むネットワークメディアストリーム送受信システムの構成を示すブロック図である。
FEC受信側装置の機能構成を示すブロック図である。
メディアパケットとFECパケットの概略構造を示す図である。
メディアパケットからFECパケットを生成する処理とメディアパケットを復元する処理とを模式的に示す図である。
FEC受信側装置における処理を説明するフローチャートである。
ノード管理部の構成と処理を示す図である。
ノード管理部の構成と処理を示す図である。
ノード管理部の構成と処理を示す図である。
ノード管理部の構成と処理を示す図である。
ノード管理部の構成と処理を示す図である。
1または複数のノード列により1つのノード列群を構成したノードブロックの例を示す図である。
第2実施例におけるFEC受信側装置の処理を説明するフローチャートである。
第2実施例におけるノード列群の更新を示す図である。
異なる種類のノード列により1つのノード列群を構成したノードブロックの例を示す図である。
第2実施例の別例におけるFEC受信側装置の処理を説明するフローチャートである。
インタリーブ形式に対応したノード列群を構成したノードブロックの例を示す図である。
FECパケットが受信されるまでのメディアパケットのノード設定について説明する図である。
FECパケットが受信されるまでのメディアパケットのノード設定について説明する図である。
符号の説明
10…メディアストリーム出力装置、20…FEC送信側装置、30…FEC受信側装置、40…メディアストリーム受信装置、50…コンピュータネットワーク、100…ネットワークメディアストリーム送受信システム、310…パケット受信部、312…受信パケットバッファ、320…ノード管理部、321…ノードブロック、322…ポインタ変数群、330…パケット解析部、340…トリガ生成部、350…メディアパケット出力部、352…パケット復元部