(57)【要約】【課題】受信データの復元処理を効率良く行う。【解決手段】受信パケットをデータ記憶部に格納し、データ部分を記憶したことを示す情報をデータ記憶情報記憶部に格納し、カラムＦＥＣパケット及びロウＦＥＣパケットのＦＥＣパラメータを特定し、少なくとも第１のカラムＦＥＣパケットのＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットのＳＮＢａｓｅとを用いて、先頭ＦＥＣパケットを特定し、前記先頭ＦＥＣパケットと同一のマトリクスに対応するＦＥＣパケット群を特定し、前記ＦＥＣパケット群から１つのＦＥＣパケットを選択し、前記選択したＦＥＣパケットを用いて復元処理が行えるか否かを判定し、損失データパケットを復元した場合は、復元したデータパケットを前記データ記憶部に格納し、この復元したデータパケットが存在することを示す情報を前記データ記憶情報記憶部に格納する。【選択図】図１
2010050809.tif 000002
【特許請求の範囲】
【請求項１】
パケットを受信するパケット受信部と、
前記パケット受信部により受信されたパケットが、データパケット、カラムＦＥＣパケット、及びロウＦＥＣパケットのいずれの種別であるかを特定するパケット種別特定部と、
前記パケット受信部により受信されたパケットのシーケンス番号を特定するシーケンス番号特定部と、
前記パケット受信部により受信されたパケットを前記特定された種別及びシーケンス番号と関連付けて記憶するデータ記憶部と、
前記パケット受信部により受信されたデータパケットのデータ部分が前記データ記憶部に記憶されたことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けて記憶するデータ記憶情報記憶部と、
前記パケット受信部により受信されたカラムＦＥＣパケット及びロウＦＥＣパケットのヘッダを解析し、ＳＮＢａｓｅ（ＳＮＢａｓｅはＦＥＣパケット生成に用いられる複数のデータパケットのシーケンス番号のうち、最小のシーケンス番号を示す値）、Ｏｆｆｓｅｔ（ＯｆｆｓｅｔはＦＥＣパケット生成に用いられる複数のデータパケットをシーケンス番号順に並べた時に隣接するデータパケットのシーケンス番号の差を示す値）、及びＮＡ（ＮＡはＦＥＣパケット生成に用いられるデータパケット数を示す値）を含むＦＥＣパラメータを特定するＦＥＣパラメータ特定部と、
少なくとも第１のカラムＦＥＣパケットから特定されたＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットから特定されたＳＮＢａｓｅとを用いて、マトリクスの先頭のＦＥＣパケットとなる先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットを特定する先頭ＦＥＣパケット特定部と、
前記先頭カラムＦＥＣパケットと同一のマトリクスに対応するカラムＦＥＣパケットからなるカラムＦＥＣパケット群及び前記先頭ロウＦＥＣパケットと同一のマトリクスに対応するロウＦＥＣパケットからなるロウＦＥＣパケット群を特定するＦＥＣパケット群特定部と、
前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群から１つのＦＥＣパケットを選択するＦＥＣパケット選択部と、
前記ＦＥＣパケット選択部により選択されたＦＥＣパケットの前記ＦＥＣパラメータに基づいて、前記選択されたＦＥＣパラメータに対応する複数のデータパケットのシーケンス番号を特定し、この特定した複数のシーケンス番号のデータパケットのデータ部分が前記データ記憶部に記憶されているか否かを前記データ記憶情報記憶部に記憶されている前記データ記憶情報に基づいて検出し、データ部分が記憶されていない損失データパケットの数が１つの時は損失データパケットの復元は可能と判定して復元開始信号を出力し、１つ以外の時は損失データパケットの復元は不可と判定する復元可否判定部と、
前記復元開始信号に基づき、前記損失データパケットに対応するＦＥＣパケット及びデータパケットのデータを前記データ記憶部から読み出し、この読み出したデータを用いて前記損失データパケットを復元し、復元したデータパケットを前記データ記憶部に記憶し、この復元したデータパケットについてデータ部分が前記データ記憶部に記憶されたことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けて前記データ記憶情報記憶部に記憶するデータ復元部と、
を備えるデータ受信装置。
【請求項２】
前記ＦＥＣパケット選択部は、前記カラムＦＥＣパケット群に含まれる全てのカラムＦＥＣパケット及び前記ロウＦＥＣパケット群に含まれる全てのロウＦＥＣパケットを少なくとも１回は選択し、前記データ復元部により前記カラムＦＥＣパケットを用いて損失データパケットの復元が行われると、復元後にロウＦＥＣパケットの選択を行い、前記データ復元部により前記ロウＦＥＣパケットを用いて損失データパケットの復元が行われると、復元後にカラムＦＥＣパケットの選択を行うことを特徴とする請求項１に記載のデータ受信装置。
【請求項３】
前記先頭ＦＥＣパケット特定部は、前記第１のカラムＦＥＣパケットから特定されたＳＮＢａｓｅと前記ロウＦＥＣパケットから特定されたＳＮＢａｓｅとの差が、前記第１のカラムＦＥＣパケットから特定されたＯｆｆｓｅｔ×ｋ（ｋは整数）又は前記第２のカラムＦＥＣパケットから特定されたＮＡ×ｋと等しいか否か検出し、等しい場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項４】
前記先頭ＦＥＣパケット特定部は、前記第１のカラムＦＥＣパケットから特定されたＳＮＢａｓｅと前記ロウＦＥＣパケットから特定されたＳＮＢａｓｅとが一致するか否か検出し、一致する場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項５】
前記第２のカラムＦＥＣパケットのシーケンス番号は前記第１のカラムＦＥＣパケットのシーケンス番号から１を減じた値であり、前記先頭ＦＥＣパケット特定部は、前記第１のカラムＦＥＣパケットから特定されたＳＮＢａｓｅが前記第２のカラムＦＥＣパケットから特定されたＳＮＢａｓｅに１を加えた値と等しいか否か検出し、等しくない場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項６】
前記先頭ＦＥＣパケット特定部は、前記第１のカラムＦＥＣパケットから特定されたＳＮＢａｓｅと前記第２のカラムＦＥＣパケットから特定されたＳＮＢａｓｅとの差が、前記第１のカラムＦＥＣパケットから特定されたＯｆｆｓｅｔ×（前記第１のカラムＦＥＣパケットから特定されたＮＡ−１）＋１と一致するか否かを検出し、一致する場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項７】
前記先頭ＦＥＣパケット特定部は、先頭カラムＦＥＣパケットの特定後に、前記ロウＦＥＣパケットから特定されたＳＮＢａｓｅと、前記先頭カラムＦＥＣパケットから特定されたＳＮＢａｓｅとの差を、前記先頭カラムＦＥＣパケットから特定されたＯｆｆｓｅｔ又は前記ロウＦＥＣパケットから特定されたＮＡで除して、商ｐ（ｐは整数）を算出し、シーケンス番号が前記ロウＦＥＣパケットのシーケンス番号−ｐとなるロウＦＥＣパケットを先頭ロウＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項８】
前記先頭ＦＥＣパケット特定部は、先頭カラムＦＥＣパケットの特定後に、前記ロウＦＥＣパケットから特定されたＳＮＢａｓｅと、前記先頭カラムＦＥＣパケットから特定されたＳＮＢａｓｅとが一致するか否か検出し、一致する場合は前記ロウＦＥＣパケットを先頭ロウＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項９】
前記先頭ＦＥＣパケット特定部は、前記第１のカラムＦＥＣパケットのシーケンス番号をＳＮ１、ＳＮＢａｓｅをＳＮＢａｓｅ１、前記ロウＦＥＣパケットのシーケンス番号をＳＮ２、ＳＮＢａｓｅをＳＮＢａｓｅ２とし、（ＳＮＢａｓｅ２−ＳＮＢａｓｅ１−１）÷前記第１のカラムＦＥＣパケットのＯｆｆｓｅｔという演算を行い商ＯｆｆｓｅｔＤ、剰余ＯｆｆｓｅｔＬを算出し、シーケンス番号がＳＮ１＋ＯｆｆｓｅｔＬ＋１−前記第１のカラムＦＥＣパケットのＯｆｆｓｅｔとなるカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定し、シーケンス番号がＳＮ２−ＯｆｆｓｅｔＤ−１となるロウＦＥＣパケットを先頭ロウＦＥＣパケットと特定することを特徴とする請求項１に記載のデータ受信装置。
【請求項１０】
前記先頭ＦＥＣパケット特定部により特定された前記先頭カラムＦＥＣパケット及び前記ロウＦＥＣパケットのシーケンス番号及びＦＥＣパラメータを記憶するＦＥＣパラメータ記憶部と、
前記ＦＥＣパラメータ特定部により特定されたカラムＦＥＣパケットのＯｆｆｓｅｔ又はＳＮＢａｓｅと、前記ＦＥＣパラメータ記憶部に記憶された前記先頭カラムＦＥＣパケットのＯｆｆｓｅｔ又はＳＮＢａｓｅとが等しいか否か、
前記ＦＥＣパラメータ特定部により特定されたロウＦＥＣパケットのＯｆｆｓｅｔ又はＳＮＢａｓｅと、前記ＦＥＣパラメータ記憶部に記憶された前記先頭ロウＦＥＣパケットのＯｆｆｓｅｔ又はＳＮＢａｓｅとが等しいか否か、
前記ＦＥＣパラメータ記憶部に記憶された異なる２つの前記先頭カラムＦＥＣパケットのシーケンス番号の差とＮＡとの積がＳＮＢａｓｅの差と等しいか否か、及び
前記ＦＥＣパラメータ記憶部に記憶された異なる２つの前記先頭ロウＦＥＣパケットのシーケンス番号の差とＮＡとの積がＳＮＢａｓｅの差と等しいか否か、を判定し、少なくともいずれか１つが等しくないと判定した場合に、マトリクスの仕様が変化したことを検知するマトリクス変化検知部と、
をさらに備えることを特徴とする請求項１に記載のデータ受信装置。
【請求項１１】
前記マトリクスに復元可能なデータパケットが無くなった時に、前記カラムＦＥＣパケット群に含まれるカラムＦＥＣパケットのシーケンス番号順に後続する前記カラムＦＥＣパケットのＯｆｆｓｅｔ個のカラムＦＥＣパケットと、前記ロウＦＥＣパケット群に含まれるロウＦＥＣパケットのシーケンス番号順に後続する前記カラムＦＥＣパケットのＮＡ個のロウＦＥＣパケットを次のマトリクスに対応するカラムＦＥＣパケット群、ロウＦＥＣパケット群として特定し、マトリクスの更新を行うマトリクス更新部をさらに備えることを特徴とする請求項１に記載のデータ受信装置。
【請求項１２】
前記ＦＥＣパケット選択部は、前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群のいずれか一方に含まれる全てのＦＥＣパケットを順次選択し、その後に前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群の他方に含まれる全てのＦＥＣパケットを順次選択し、
前記他方に含まれるＦＥＣパケットの選択の際に損失データパケットの復元が行われた場合、再度前記一方に含まれる全てのＦＥＣパケットを順次選択することを特徴とする請求項１に記載のデータ受信装置。
【請求項１３】
前記ＦＥＣパケット選択部は、前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群のいずれか一方に含まれるＦＥＣパケットの選択により、このＦＥＣパケットに対応するデータパケットのうちシーケンス番号順にｍ番目（ｍは自然数）のデータパケットの損失の復元が行われた場合、前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群の他方に含まれるＦＥＣパケットのうちシーケンス番号順にｍ番目のＦＥＣパケットを優先的に選択することを特徴とする請求項１に記載のデータ受信装置。
【請求項１４】
前記データ記憶情報記憶部に記憶されている前記データ記憶情報を参照して、前記カラムＦＥＣパケット群に含まれるカラムＦＥＣパケット、前記ロウＦＥＣパケット群に含まれるロウＦＥＣパケットの各々に対応するデータパケットの損失数を特定する損失数特定部と、
前記損失数をＦＥＣパケット毎に記憶する損失数記憶部と、
前記データ復元部により復元されたデータパケットに対応するＦＥＣパケットの、前記損失数記憶部に記憶されている前記損失数を１減じる損失数減算部と、
をさらに備え、
前記復元可否判定部は、前記ＦＥＣパケット選択部により選択されたＦＥＣパケットの、前記損失数記憶部に記憶されている前記損失数が１のとき、損失データパケットの復元は可能と判定して前記復元開始信号を出力し、１以外の時は損失データパケットの復元は不可と判定することを特徴とする請求項１に記載のデータ受信装置。
【請求項１５】
パケットを受信し、
前記受信したパケットが、データパケット、カラムＦＥＣパケット、及びロウＦＥＣパケットのいずれの種別であるかを特定し、
前記受信したパケットのシーケンス番号を特定し、
前記受信したパケットを前記特定した種別及びシーケンス番号と関連付けてデータ記憶部に格納し、
前記受信したデータパケットのデータ部分を前記データ記憶部に記憶したことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けてデータ記憶情報記憶部に格納し、
前記受信したパケットのうち、カラムＦＥＣパケット及びロウＦＥＣパケットのヘッダを解析し、ＳＮＢａｓｅ（ＳＮＢａｓｅはＦＥＣパケット生成に用いられる複数のデータパケットのシーケンス番号のうち、最小のシーケンス番号を示す値）、Ｏｆｆｓｅｔ（ＯｆｆｓｅｔはＦＥＣパケット生成に用いられる複数のデータパケットをシーケンス番号順に並べた時に隣接するデータパケットのシーケンス番号の差を示す値）、及びＮＡ（ＮＡはＦＥＣパケット生成に用いられるデータパケット数を示す値）を含むＦＥＣパラメータを特定し、
少なくとも第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットから特定したＳＮＢａｓｅとを用いて、マトリクスの先頭のＦＥＣパケットとなる先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットを特定し、
前記先頭カラムＦＥＣパケットと同一のマトリクスに対応するカラムＦＥＣパケットからなるカラムＦＥＣパケット群及び前記先頭ロウＦＥＣパケットと同一のマトリクスに対応するロウＦＥＣパケットからなるロウＦＥＣパケット群を特定し、
前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群から１つのＦＥＣパケットを選択し、
前記選択したＦＥＣパケットの前記ＦＥＣパラメータに基づいて、前記選択したＦＥＣパラメータに対応する複数のデータパケットのシーケンス番号を特定し、この特定した複数のシーケンス番号のデータパケットのデータ部分が前記データ記憶部に格納されているか否かを前記データ記憶情報記憶部に格納されている前記データ記憶情報に基づいて検出し、データ部分が記憶されていない損失データパケットの数が１つの時は損失データパケットの復元は可能と判定し、１つ以外の時は損失データパケットの復元は不可と判定し、
前記損失データパケットを復元可能と判定した場合は、前記損失データパケットに対応するＦＥＣパケット及びデータパケットのデータを前記データ記憶部から読み出し、この読み出したデータを用いて前記損失データパケットを復元し、復元したデータパケットを前記データ記憶部に格納し、この復元したデータパケットのデータ部分を前記データ記憶部に格納したことを示すデータ記憶情報をシーケンス番号に関連付けて前記データ記憶情報記憶部に格納する、データ受信方法。
【請求項１６】
前記カラムＦＥＣパケット群に含まれる全てのカラムＦＥＣパケット及び前記ロウＦＥＣパケット群に含まれる全てのロウＦＥＣパケットを少なくとも１回は選択し、
前記カラムＦＥＣパケットを用いて前記損失データパケットの復元が行われると、復元後にロウＦＥＣパケットの選択を行い、
前記ロウＦＥＣパケットを用いて前記損失データパケットの復元が行われると、復元後にカラムＦＥＣパケットの選択を行うことを特徴とする請求項１５に記載のデータ受信方法。
【請求項１７】
前記第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅと前記ロウＦＥＣパケットから特定したＳＮＢａｓｅとの差が、前記第１のカラムＦＥＣパケットから特定したＯｆｆｓｅｔ×ｋ（ｋは整数）又は前記第２のカラムＦＥＣパケットから特定したＮＡ×ｋと等しいか否か検出し、等しい場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１５に記載のデータ受信方法。
【請求項１８】
前記第２のカラムＦＥＣパケットのシーケンス番号は前記第１のカラムＦＥＣパケットのシーケンス番号から１を減じた値であり、前記第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅが前記第２のカラムＦＥＣパケットから特定したＳＮＢａｓｅに１を加えた値と等しいか否か検出し、等しくない場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１５に記載のデータ受信方法。
【請求項１９】
前記第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅと前記第２のカラムＦＥＣパケットから特定したＳＮＢａｓｅとの差が、前記第１のカラムＦＥＣパケットから特定したＯｆｆｓｅｔ×（前記第１のカラムＦＥＣパケットから特定したＮＡ−１）＋１と一致するか否かを検出し、一致する場合は前記第１のカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定することを特徴とする請求項１５に記載のデータ受信方法。
【請求項２０】
前記マトリクスに復元可能なデータパケットが無くなった後に、前記カラムＦＥＣパケット群に含まれるカラムＦＥＣパケットのシーケンス番号順に後続する前記カラムＦＥＣパケットのＯｆｆｓｅｔ個のカラムＦＥＣパケットと、前記ロウＦＥＣパケット群に含まれるロウＦＥＣパケットのシーケンス番号順に後続する前記カラムＦＥＣパケットのＮＡ個のロウＦＥＣパケットを次のマトリクスに対応するカラムＦＥＣパケット群、ロウＦＥＣパケット群として特定して、マトリクスの更新を行うことを特徴とする請求項１５に記載のデータ受信方法。
【請求項２１】
パケットを受信するステップと、
前記受信したパケットが、データパケット、カラムＦＥＣパケット、及びロウＦＥＣパケットのいずれの種別であるかを特定するステップと、
前記受信したパケットのシーケンス番号を特定するステップと、
前記受信したパケットを前記特定した種別及びシーケンス番号と関連付けてデータ記憶部に格納するステップと、
前記受信したデータパケットのデータ部分を前記データ記憶部に記憶したことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けてデータ記憶情報記憶部に格納するステップと、
前記受信したパケットのうち、カラムＦＥＣパケット及びロウＦＥＣパケットのヘッダを解析し、ＳＮＢａｓｅ（ＳＮＢａｓｅはＦＥＣパケット生成に用いられる複数のデータパケットのシーケンス番号のうち、最小のシーケンス番号を示す値）、Ｏｆｆｓｅｔ（ＯｆｆｓｅｔはＦＥＣパケット生成に用いられる複数のデータパケットをシーケンス番号順に並べた時に隣接するデータパケットのシーケンス番号の差を示す値）、及びＮＡ（ＮＡはＦＥＣパケット生成に用いられるデータパケット数を示す値）を含むＦＥＣパラメータを特定するステップと、
少なくとも第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットから特定したＳＮＢａｓｅとを用いて、マトリクスの先頭のＦＥＣパケットとなる先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットを特定するステップと、
前記先頭カラムＦＥＣパケットと同一のマトリクスに対応するカラムＦＥＣパケットからなるカラムＦＥＣパケット群及び前記先頭ロウＦＥＣパケットと同一のマトリクスに対応するロウＦＥＣパケットからなるロウＦＥＣパケット群を特定するステップと、
前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群から１つのＦＥＣパケットを選択するステップと、
前記選択したＦＥＣパケットの前記ＦＥＣパラメータに基づいて、前記選択したＦＥＣパラメータに対応する複数のデータパケットのシーケンス番号を特定し、この特定した複数のシーケンス番号のデータパケットのデータ部分が前記データ記憶部に格納されているか否かを前記データ記憶情報記憶部に格納されている前記データ記憶情報に基づいて検出し、データ部分が記憶されていない損失データパケットの数が１つの時は損失データパケットの復元は可能と判定し、１つ以外の時は損失データパケットの復元は不可と判定するステップと、
前記損失データパケットを復元可能と判定した場合は、前記損失データパケットに対応するＦＥＣパケット及びデータパケットのデータを前記データ記憶部から読み出し、この読み出したデータを用いて前記損失データパケットを復元し、復元したデータパケットを前記データ記憶部に格納し、この復元したデータパケットのデータ部分を前記データ記憶部に格納したことを示すデータ記憶情報をシーケンス番号に関連付けて前記データ記憶情報記憶部に格納するステップと、をコンピュータに実行させるためのデータ受信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ受信装置、データ受信方法、及びデータ受信プログラムに関するものである。
【背景技術】
【０００２】
近年、ＴＶ信号をＩＰネットワーク上にて伝送するＩＰＴＶが普及しつつある。ＩＰＴＶの伝送プロトコルはＰｒｏ−ＭＰＥＧ（Moving Picture Experts Group）と呼ばれる仕様で定められている。Ｐｒｏ−ＭＰＥＧでは、サーバが配信する映像の受信ノードが多数存在することを想定しており、送信サーバの負荷を抑えるために、マルチキャスト伝送が用いられる。
【０００３】
マルチキャスト伝送の場合、ＴＣＰ（Transmission Control Protocol）によるデータの到達性の保証を用いることができないため、ＦＥＣ（Forward Error Correction）によりデータの損失をある程度回復させるという手法が用いられる。
【０００４】
ＦＥＣとは、送信したいデータに冗長データを付加し、送信した結果、一部のデータが損失した場合に、損失しなかった残りのデータとその冗長データを用いて、損失したデータを復元する手法である（例えば特許文献１参照）。
【０００５】
例えば、具体的には、データＡ、Ｂ、Ｃを送信する場合、Ｘ＝Ａ ｘｏｒ Ｂ ｘｏｒ Ｃとして求めたデータＸも併せて送信する。そして、送信した結果、データＢが損失した場合、受信側では、残りのＡ、Ｃ、及びＸからＢ＝Ａ ｘｏｒ Ｃ ｘｏｒ ＸとしてＢを復元することができる。ただし、ＡとＢなど２つ以上のデータを損失した場合などはデータを復元することができない。
【０００６】
ＩＰＴＶの場合もこのＦＥＣを応用してデータ（映像データ及び音声データ）の損失を補うことがＰｒｏ−ＭＰＥＧ仕様により定められている。送信されるＦＥＣパケットは、ＲＴＰ（Real time Transport Protocol）パケットで送信される複数のデータパケットをマトリクス状に並べ、縦方向と横方向とでグループ化し、グループ化したデータパケットの排他的論理和（ｘｏｒ）演算により生成される。縦方向のグループから求められたＦＥＣパケットはカラム（Ｃｏｌｕｍｎ）ＦＥＣパケット、横方向のグループから求められたＦＥＣパケットはロウ（Ｒｏｗ）ＦＥＣパケットと呼ばれる。
【０００７】
送信されるＦＥＣパケットのヘッダにはＳＮＢａｓｅ、Ｏｆｆｓｅｔ、ＮＡという３つのパラメータ（ＦＥＣパラメータ）が含まれている。ＳＮＢａｓｅはＦＥＣパケットに対応するグループ化されたデータパケットのうち先頭のデータパケットのシーケンス番号を示す。Ｏｆｆｓｅｔは同じグループ内で隣り合うデータパケットのシーケンス番号の差を示す。また、ＮＡはグループ内に含まれるデータパケット数を示す。
【０００８】
データ受信側では、これら３つのパラメータを用いて、同じマトリクスに対応するカラムＦＥＣパケット及びロウＦＥＣパケットを特定し、データ復元処理を行う。しかし、受信した複数のＦＥＣパケットから、同じマトリクスに対応するＦＥＣパケットを特定したり、各ＦＥＣパケットがマトリクスのどこに位置するか（先頭から何番目か）などを特定したりする方法は開示されておらず、これらの特定を効率良く行うことができなかった。
【０００９】
また、データ復元処理では、カラムＦＥＣパケットを用いた復元と、ロウＦＥＣパケットを用いた復元とを繰り返し行うことで、より多くの損失に対処することができる。しかし、繰り返し処理は負荷が高いため、復元漏れがなく、かつ効率良くデータの復元を行うことが求められている。
【特許文献１】特開２００８−１３１１５３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明は受信データの復元処理を効率良く行うデータ受信装置、データ受信方法、及びデータ受信プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様によるデータ受信装置は、パケットを受信するパケット受信部と、前記パケット受信部により受信されたパケットが、データパケット、カラムＦＥＣパケット、及びロウＦＥＣパケットのいずれの種別であるかを特定するパケット種別特定部と、前記パケット受信部により受信されたパケットのシーケンス番号を特定するシーケンス番号特定部と、前記パケット受信部により受信されたパケットを前記特定された種別及びシーケンス番号と関連付けて記憶するデータ記憶部と、前記パケット受信部により受信されたデータパケットのデータ部分が前記データ記憶部に記憶されたことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けて記憶するデータ記憶情報記憶部と、前記パケット受信部により受信されたカラムＦＥＣパケット及びロウＦＥＣパケットのヘッダを解析し、ＳＮＢａｓｅ（ＳＮＢａｓｅはＦＥＣパケット生成に用いられる複数のデータパケットのシーケンス番号のうち、最小のシーケンス番号を示す値）、Ｏｆｆｓｅｔ（ＯｆｆｓｅｔはＦＥＣパケット生成に用いられる複数のデータパケットをシーケンス番号順に並べた時に隣接するデータパケットのシーケンス番号の差を示す値）、及びＮＡ（ＮＡはＦＥＣパケット生成に用いられるデータパケット数を示す値）を含むＦＥＣパラメータを特定するＦＥＣパラメータ特定部と、少なくとも第１のカラムＦＥＣパケットから特定されたＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットから特定されたＳＮＢａｓｅとを用いて、マトリクスの先頭のＦＥＣパケットとなる先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットを特定する先頭ＦＥＣパケット特定部と、前記先頭カラムＦＥＣパケットと同一のマトリクスに対応するカラムＦＥＣパケットからなるカラムＦＥＣパケット群及び前記先頭ロウＦＥＣパケットと同一のマトリクスに対応するロウＦＥＣパケットからなるロウＦＥＣパケット群を特定するＦＥＣパケット群特定部と、前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群から１つのＦＥＣパケットを選択するＦＥＣパケット選択部と、前記ＦＥＣパケット選択部により選択されたＦＥＣパケットの前記ＦＥＣパラメータに基づいて、前記選択されたＦＥＣパラメータに対応する複数のデータパケットのシーケンス番号を特定し、この特定した複数のシーケンス番号のデータパケットのデータ部分が前記データ記憶部に記憶されているか否かを前記データ記憶情報記憶部に記憶されている前記データ記憶情報に基づいて検出し、データ部分が記憶されていない損失データパケットの数が１つの時は損失データパケットの復元は可能と判定して復元開始信号を出力し、１つ以外の時は損失データパケットの復元は不可と判定する復元可否判定部と、前記復元開始信号に基づき、前記損失データパケットに対応するＦＥＣパケット及びデータパケットのデータを前記データ記憶部から読み出し、この読み出したデータを用いて前記損失データパケットを復元し、復元したデータパケットを前記データ記憶部に記憶し、この復元したデータパケットについてデータ部分が前記データ記憶部に記憶されたことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けて前記データ記憶情報記憶部に記憶するデータ復元部と、を備えるものである。
【００１２】
本発明の一態様によるデータ受信方法は、パケットを受信し、前記受信したパケットが、データパケット、カラムＦＥＣパケット、及びロウＦＥＣパケットのいずれの種別であるかを特定し、前記受信したパケットのシーケンス番号を特定し、前記受信したパケットを前記特定した種別及びシーケンス番号と関連付けてデータ記憶部に格納し、前記受信したデータパケットのデータ部分を前記データ記憶部に記憶したことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けてデータ記憶情報記憶部に格納し、前記受信したパケットのうち、カラムＦＥＣパケット及びロウＦＥＣパケットのヘッダを解析し、ＳＮＢａｓｅ（ＳＮＢａｓｅはＦＥＣパケット生成に用いられる複数のデータパケットのシーケンス番号のうち、最小のシーケンス番号を示す値）、Ｏｆｆｓｅｔ（ＯｆｆｓｅｔはＦＥＣパケット生成に用いられる複数のデータパケットをシーケンス番号順に並べた時に隣接するデータパケットのシーケンス番号の差を示す値）、及びＮＡ（ＮＡはＦＥＣパケット生成に用いられるデータパケット数を示す値）を含むＦＥＣパラメータを特定し、少なくとも第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットから特定したＳＮＢａｓｅとを用いて、マトリクスの先頭のＦＥＣパケットとなる先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットを特定し、前記先頭カラムＦＥＣパケットと同一のマトリクスに対応するカラムＦＥＣパケットからなるカラムＦＥＣパケット群及び前記先頭ロウＦＥＣパケットと同一のマトリクスに対応するロウＦＥＣパケットからなるロウＦＥＣパケット群を特定し、前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群から１つのＦＥＣパケットを選択し、前記選択したＦＥＣパケットの前記ＦＥＣパラメータに基づいて、前記選択したＦＥＣパラメータに対応する複数のデータパケットのシーケンス番号を特定し、この特定した複数のシーケンス番号のデータパケットのデータ部分が前記データ記憶部に格納されているか否かを前記データ記憶情報記憶部に格納されている前記データ記憶情報に基づいて検出し、データ部分が記憶されていない損失データパケットの数が１つの時は損失データパケットの復元は可能と判定し、１つ以外の時は損失データパケットの復元は不可と判定し、前記損失データパケットを復元可能と判定した場合は、前記損失データパケットに対応するＦＥＣパケット及びデータパケットのデータを前記データ記憶部から読み出し、この読み出したデータを用いて前記損失データパケットを復元し、復元したデータパケットを前記データ記憶部に格納し、この復元したデータパケットのデータ部分を前記データ記憶部に格納したことを示すデータ記憶情報をシーケンス番号に関連付けて前記データ記憶情報記憶部に格納するものである。
【００１３】
本発明の一態様によるデータ受信プログラムは、パケットを受信するステップと、前記受信したパケットが、データパケット、カラムＦＥＣパケット、及びロウＦＥＣパケットのいずれの種別であるかを特定するステップと、前記受信したパケットのシーケンス番号を特定するステップと、前記受信したパケットを前記特定した種別及びシーケンス番号と関連付けてデータ記憶部に格納するステップと、前記受信したデータパケットのデータ部分を前記データ記憶部に記憶したことを示すデータ記憶情報をこのデータパケットのシーケンス番号と関連付けてデータ記憶情報記憶部に格納するステップと、前記受信したパケットのうち、カラムＦＥＣパケット及びロウＦＥＣパケットのヘッダを解析し、ＳＮＢａｓｅ（ＳＮＢａｓｅはＦＥＣパケット生成に用いられる複数のデータパケットのシーケンス番号のうち、最小のシーケンス番号を示す値）、Ｏｆｆｓｅｔ（ＯｆｆｓｅｔはＦＥＣパケット生成に用いられる複数のデータパケットをシーケンス番号順に並べた時に隣接するデータパケットのシーケンス番号の差を示す値）、及びＮＡ（ＮＡはＦＥＣパケット生成に用いられるデータパケット数を示す値）を含むＦＥＣパラメータを特定するステップと、少なくとも第１のカラムＦＥＣパケットから特定したＳＮＢａｓｅと、第２のカラムＦＥＣパケット又はロウＦＥＣパケットから特定したＳＮＢａｓｅとを用いて、マトリクスの先頭のＦＥＣパケットとなる先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットを特定するステップと、前記先頭カラムＦＥＣパケットと同一のマトリクスに対応するカラムＦＥＣパケットからなるカラムＦＥＣパケット群及び前記先頭ロウＦＥＣパケットと同一のマトリクスに対応するロウＦＥＣパケットからなるロウＦＥＣパケット群を特定するステップと、前記カラムＦＥＣパケット群又は前記ロウＦＥＣパケット群から１つのＦＥＣパケットを選択するステップと、前記選択したＦＥＣパケットの前記ＦＥＣパラメータに基づいて、前記選択したＦＥＣパラメータに対応する複数のデータパケットのシーケンス番号を特定し、この特定した複数のシーケンス番号のデータパケットのデータ部分が前記データ記憶部に格納されているか否かを前記データ記憶情報記憶部に格納されている前記データ記憶情報に基づいて検出し、データ部分が記憶されていない損失データパケットの数が１つの時は損失データパケットの復元は可能と判定し、１つ以外の時は損失データパケットの復元は不可と判定するステップと、前記損失データパケットを復元可能と判定した場合は、前記損失データパケットに対応するＦＥＣパケット及びデータパケットのデータを前記データ記憶部から読み出し、この読み出したデータを用いて前記損失データパケットを復元し、復元したデータパケットを前記データ記憶部に格納し、この復元したデータパケットのデータ部分を前記データ記憶部に格納したことを示すデータ記憶情報をシーケンス番号に関連付けて前記データ記憶情報記憶部に格納するステップと、をコンピュータに実行させるためのものである。
【発明の効果】
【００１４】
本発明によれば、受信データの復元処理を効率良く行うことができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面に基づいて説明する。
【００１６】
図１に本発明の実施形態に係るデータ受信装置の概略構成を示す。このデータ受信装置は、例えば映像や音声などのデータがパケット化されたものをイーサネット（登録商標）や無線ＬＡＮなどのネットワーク経由で受信する装置である。データ受信装置は、データパケットと共にその前方誤り訂正を行うための２次元ＦＥＣパケットも併せて受信し、損失したデータの復元（誤り訂正）処理を行う。２次元ＦＥＣパケットはロウＦＥＣパケット及びカラムＦＥＣパケットを含む。データパケット及びＦＥＣパケットは例えばＲＴＰ／ＵＤＰ／ＩＰパケットで伝送される。
【００１７】
データ受信装置は、パケット受信部１０１、データ記憶部１０２、データ記憶情報記憶部１０３、パケット種別特定部１０４、シーケンス番号特定部１０５、ＦＥＣパラメータ特定部１０６、先頭ＦＥＣパケット特定部１０７、ＦＥＣパケット群特定部１０８、ＦＥＣパケット選択部１０９、復元可否判定部１１０、データ復元部１１１、及びマトリクス更新部１１２を備える。
【００１８】
パケット受信部１０１は、ネットワークを介してデータパケット及びＦＥＣパケットを受信する。パケット種別特定部１０４は、ＵＤＰポート番号を参照し、パケット受信部１０１が受信したパケット（受信パケット）がデータパケットであるか、又はＦＥＣパケットであるかを特定する。受信パケットがＦＥＣパケットである場合、パケット種別特定部１０４は、ＦＥＣヘッダを解析し、ロウＦＥＣパケットか、又はカラムＦＥＣパケットであるかを特定する。
【００１９】
シーケンス番号特定部１０５は、ＲＴＰヘッダを解析し、受信パケットのシーケンス番号を特定する。受信パケットは、特定されたパケット種別及びシーケンス番号に基づいて、それらの情報と関連付けられてデータ記憶部１０２に記憶される。データ記憶部１０２はメモリ等で構成される。
【００２０】
特定されたパケット種別及びシーケンス番号の情報を関連付ける方法としては、例えばパケットが書き込まれたアドレスを示すポインタと、ポート番号情報、シーケンス番号情報を同じ構造体に格納する。
【００２１】
また、データ記憶部１０２にパケットを書き込む前に、パケット種別特定部とシーケンス番号特定部がそれぞれパケット種別とシーケンス番号を特定する場合は、パケット種別に応じたメモリ領域の、シーケンス番号に応じたオフセットを加えたアドレスに受信パケットを書き込むようにしてもよい。
【００２２】
いずれの方法でも、パケット種別とシーケンス番号の情報から、その受信パケットが書き込まれたアドレスを特定し、アクセスすることができる。これは、データパケット、ロウＦＥＣパケット、カラムＦＥＣパケットのいずれについても同様である。
【００２３】
データ記憶情報記憶部１０３はデータ記憶部１０２にデータパケットのデータ部分が記憶されたことを示すデータ記憶情報を、そのデータパケットのシーケンス番号と関連付けて記憶する。シーケンス番号の情報を関連付ける方法としては、例えばデータ記憶情報が書き込まれたアドレスを示すポインタと、シーケンス番号情報を同じ構造体に格納する。
【００２４】
また、シーケンス番号に応じたオフセットを加えたアドレスにデータ記憶情報を書き込むようにしてもよい。いずれの方法でも、シーケンス番号からそのデータ記憶情報が書き込まれたアドレスを特定し、アクセスすることができる。
【００２５】
データ記憶情報を参照することで、データ記憶部１０２にデータパケットのデータ部分が記憶されているか、または記憶されておらずネットワーク経由での伝送に伴い損失したかがわかる。データ記憶情報記憶部１０３はオンチップメモリ等で構成される。
【００２６】
ＦＥＣパラメータ特定部１０６は、受信したＦＥＣパケットからＦＥＣパラメータを特定する。ここでＦＥＣパラメータの説明にあたり、まずカラムＦＥＣパケット及びロウＦＥＣパケットについて説明する。Ｐｒｏ−ＭＰＥＧでは、送信するデータパケットを図２（ａ）に示すようにマトリクス状に並べ、縦方向にグループ化したデータパケットのｘｏｒ演算によりカラムＦＥＣパケットが生成される。
【００２７】
例えばシーケンス番号１、１１、２１、…、９１のデータパケットのｘｏｒ演算によりシーケンス番号１のカラムＦＥＣパケットが生成される。
【００２８】
また、図２（ｂ）に示すように、送信するデータパケットをマトリクス状に並べ、横方向にグループ化したデータパケットのｘｏｒ演算によりロウＦＥＣパケットが生成される。例えばシーケンス番号１１〜２０のデータパケットのｘｏｒ演算によりシーケンス番号２のロウＦＥＣパケットが生成される。
【００２９】
Ｐｒｏ−ＭＰＥＧでは、グループ化されたデータパケットのうち先頭のデータパケットのシーケンス番号であるＳＮＢａｓｅ、隣り合うデータパケットのシーケンス番号の差であるＯｆｆｓｅｔ、及びグループ化されたデータパケットの個数であるＮＡが、ＦＥＣパラメータとして各ＦＥＣパケットのヘッダ（ＦＥＣヘッダ）に含まれる。
【００３０】
ＦＥＣパラメータ特定部１０６は、ＦＥＣヘッダを解析し、このＦＥＣパラメータ（ＳＮＢａｓｅ、Ｏｆｆｓｅｔ、ＮＡ）を特定する。
【００３１】
先頭ＦＥＣパケット特定部１０７は、特定されたＦＥＣパラメータに基づいて、同一のデータパケットマトリクスに対応するカラムＦＥＣパケット、ロウＦＥＣパケットのうち先頭（シーケンス番号が最小）となる先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットを特定する。
【００３２】
例えば、図２（ａ）、（ｂ）に示す例では、シーケンス番号１のカラムＦＥＣパケット、ロウＦＥＣパケットが先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットとなる。先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットの特定方法については後述する。
【００３３】
ＦＥＣパケット群特定部１０８は、特定された先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケット及びＦＥＣパラメータに基づいて、同一のデータパケットマトリクスに対応するカラムＦＥＣパケット群、ロウＦＥＣパケット群を特定する。
【００３４】
例えば、図２（ａ）、（ｂ）に示す例では、シーケンス番号１〜１０のカラムＦＥＣパケットがカラムＦＥＣパケット群になり、シーケンス番号１〜１０のロウＦＥＣパケットがロウＦＥＣパケット群になる。
【００３５】
ＦＥＣパケット選択部１０９は、ＦＥＣパケット群特定部１０８により特定されたカラムＦＥＣパケット群、ロウＦＥＣパケット群に属するＦＥＣパケットを順次選択する。
【００３６】
復元可否判定部１１０は、データ記憶情報記憶部１０３に記憶されているデータ記憶情報を参照し、ＦＥＣパケット選択部１０９により選択されたＦＥＣパケットに関連するデータパケットの損失が復元可能か否か判定する。復元可否判定部１１０は、関連するデータパケットのデータ部分がデータ記憶部１０２に記憶されているか否かを検出する。データ部分がデータ記憶部１０２に記憶されていない損失データパケットの数が１の時に復元可能と判定し、１以外の時は復元不能と判定する。
【００３７】
ＦＥＣパケットに関連するデータパケットとは、そのＦＥＣパケットの生成に用いられたデータパケット群である。例えば図２（ａ）におけるシーケンス番号３のカラムＦＥＣパケットが選択された場合、関連するデータパケットはシーケンス番号が３、１３、２３、…、９３のデータパケットとなる。シーケンス番号３、１３、２３、…、９３のデータパケットのいずれか１つが損失している場合は復元可能と判定され、損失が無い場合又は損失が２つ以上の場合は復元不能と判定される。
【００３８】
復元可否判定部１１０は復元可能と判定すると、ＦＥＣパケットのシーケンス番号、関連するデータパケットのシーケンス番号、及び復元処理開始信号をデータ復元部１１１へ出力する。
【００３９】
データ復元部１１１は、復元処理開始信号に基づいて復元可否判定部１１０により復元可能と判定された損失データパケットの復元処理を行う。データ復元部１１１は復元可否判定部１１０から与えられるシーケンス番号に基づいて、データ記憶部１０２からＦＥＣパケットのデータ及び損失していないデータパケットのデータを取り出す。損失データパケットは、ＦＥＣパケット及び損失していないデータパケットのｘｏｒ演算を行うことで復元することができる。
【００４０】
例えば図３に示すようにシーケンス番号４０のデータパケットの損失を復元する場合は、シーケンス番号３１〜３９のデータパケット及びシーケンス番号４のロウＦＥＣパケットのｘｏｒ演算を行う。
【００４１】
データ復元部１１１は復元したデータパケットをデータ記憶部１０２に記憶する。また、データ復元部１１１は復元したデータパケットをデータ記憶部１０２に記憶したことを示すデータ記憶情報を、復元したデータパケットのシーケンス番号と関連付けてデータ記憶情報記憶部１０３に記憶する。
【００４２】
マトリクス更新部１１２は、データ復元部１１１によるデータパケットマトリクスの復元が終了したら、言い換えればデータパケットマトリクス内に復元可能なデータパケットが無くなったら、マトリクスの更新を行う。
【００４３】
マトリクスの更新とは、次のデータパケットマトリクスに対応するカラムＦＥＣパケット、ロウＦＥＣパケットの特定である。例えば、図４に示すように、シーケンス番号１〜１０のカラムＦＥＣパケットとシーケンス番号１〜１０のロウＦＥＣパケットを用いたシーケンス番号１〜１００のデータパケットからなるマトリクスの復元処理が終了すると、マトリクス更新部１１２は次のデータパケットマトリクスに対応するＦＥＣパケットであるシーケンス番号１１〜２０のカラムＦＥＣパケット、ロウＦＥＣパケットを特定する。
【００４４】
マトリクス更新部１１２に特定されたカラムＦＥＣパケット、ロウＦＥＣパケットを用いて次のマトリクスに対する復元処理が行われる。
【００４５】
このようなデータ受信装置を用いた損失データパケットの復元方法を、図５に示すフローチャートを用いて説明する。
【００４６】
（ステップＳ５０１）受信パケットがデータパケットであるか、又はＦＥＣパケットであるかがパケット種別特定部１０４により特定される。受信パケットがＦＥＣパケットである場合はさらにカラムＦＥＣパケットであるか、又はロウＦＥＣパケットであるかがパケット種別特定部１０４により特定される。
【００４７】
（ステップＳ５０２）各パケットのシーケンス番号がシーケンス番号特定部１０５により特定される。
【００４８】
（ステップＳ５０３）ＦＥＣパケットのＦＥＣヘッダから、ＦＥＣパラメータ（ＳＮＢａｓｅ、Ｏｆｆｓｅｔ、ＮＡ）がＦＥＣパラメータ特定部１０６により特定される。
【００４９】
（ステップＳ５０４）特定されたＦＥＣパラメータに基づいて、先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットが先頭ＦＥＣパケット特定部１０７により特定される。先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットの特定方法について説明する。ここではカラムＦＥＣパケットのＳＮＢａｓｅとロウＦＥＣパケットのＳＮＢａｓｅを用いる方法について説明する。
【００５０】
先頭カラムＦＥＣパケットの生成に用いられるグループ化されたデータパケットの先頭のデータパケットと、先頭ロウＦＥＣパケットの生成に用いられるグループ化されたデータパケットの先頭のデータパケットは同一のものである。つまり、同一のデータパケットマトリクスに対応する先頭カラムＦＥＣパケットのＳＮＢａｓｅと先頭ロウＦＥＣパケットのＳＮＢａｓｅは必ず一致する。
【００５１】
図６に、シーケンス番号１〜７２のデータパケットを、縦方向４パケット、横方向６パケットのマトリクスに並べた場合の各ＦＥＣパケットのシーケンス番号とＳＮＢａｓｅを示す。この図から分かるように、１つ目のマトリクスの先頭カラムＦＥＣパケットと先頭ロウＦＥＣパケットのＳＮＢａｓｅは共に１、２つ目のマトリクスでは共に２５、３つ目のマトリクスでは共に４９となっている。
【００５２】
従って、受信したカラムＦＥＣパケットのＳＮＢａｓｅと、ロウＦＥＣパケットのＳＮＢａｓｅとを比較し、比較結果が一致したカラムＦＥＣパケット、ロウＦＥＣパケットがそれぞれ先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットであると特定できる。
【００５３】
（ステップＳ５０５）特定された先頭カラムＦＥＣパケット、先頭ロウＦＥＣパケットと同一のマトリクスに対応するＦＥＣパケット群がＦＥＣパケット群特定部１０８により特定される。
【００５４】
マトリクスの縦の長さはカラムＦＥＣパケットのＮＡで表され、横の長さはカラムＦＥＣパケットのＯｆｆｓｅｔ（またはロウＦＥＣパケットのＮＡ）で表される。従って、先頭カラムＦＥＣパケットからシーケンス番号順にマトリクスの横の長さ、すなわち、カラムＦＥＣパケットのＯｆｆｓｅｔ（またはロウＦＥＣパケットのＮＡ）個のカラムＦＥＣパケットが、同一マトリクスに対応するカラムＦＥＣパケット群であると特定される。
【００５５】
同様に、先頭ロウＦＥＣパケットからシーケンス番号順にマトリクスの縦の長さ、すなわち、カラムＦＥＣパケットのＮＡ個のロウＦＥＣパケットが、同一マトリクスに対応するロウＦＥＣパケット群であると特定される。
【００５６】
（ステップＳ５０６）カラムＦＥＣパケットがすべて選択されたか否かが判定される。選択された場合はステップＳ５１０へ進み、選択されていない場合はステップＳ５０７へ進む。
【００５７】
（ステップＳ５０７）ＦＥＣパケット選択部１０９によりカラムＦＥＣパケットがシーケンス番号順に選択される。
【００５８】
（ステップＳ５０８）選択されたカラムＦＥＣパケットを用いて復元処理が行えるか否かが復元可否判定部１１０により判定される。すなわち、データ記憶情報記憶部１０３に記憶されているデータ記憶情報に基づいて、選択されたカラムＦＥＣパケットに対応するデータパケット群に含まれる損失データパケットが１個であるか否かが判定される。
【００５９】
復元処理が行える場合はステップＳ５０９へ進み、行えない場合はステップＳ５０６へ戻る。
【００６０】
（ステップＳ５０９）データ復元部１１１により損失データパケットの復元処理が行われる。
【００６１】
（ステップＳ５１０）ロウＦＥＣパケットがすべて選択されたか否かが判定される。選択された場合はステップＳ５１５へ進み、選択されていない場合はステップＳ５１１へ進む。
【００６２】
（ステップＳ５１１）ＦＥＣパケット選択部１０９によりロウＦＥＣパケットがシーケンス番号順に選択される。
【００６３】
（ステップＳ５１２）選択されたロウＦＥＣパケットを用いて復元処理が行えるか否かが復元可否判定部１１０により判定される。すなわち、データ記憶情報記憶部１０３に記憶されているデータ記憶情報に基づいて、選択されたロウＦＥＣパケットに対応するデータパケット群に含まれる損失データパケットが１個であるか否かが判定される。
【００６４】
復元処理が行える場合はステップＳ５１３へ進み、行えない場合はステップＳ５１０へ戻る。
【００６５】
（ステップＳ５１３）データ復元部１１１により損失データパケットの復元処理が行われる。
【００６６】
（ステップＳ５１４）ロウＦＥＣパケットを用いた復元処理が少なくとも１回行われたか否かが判定される。行われた場合はステップＳ５１５へ進み、行われなかった場合はステップＳ５２０へ進む。
【００６７】
（ステップＳ５１５）カラムＦＥＣパケットがすべて選択されたか否かが判定される。選択された場合はステップＳ５１９へ進み、選択されていない場合はステップＳ５１６へ進む。
【００６８】
（ステップＳ５１６）ＦＥＣパケット選択部１０９によりカラムＦＥＣパケットがシーケンス番号順に選択される。
【００６９】
（ステップＳ５１７）選択されたカラムＦＥＣパケットを用いて復元処理が行えるか否かが復元可否判定部１１０により判定される。復元処理が行える場合はステップＳ５１８へ進み、行えない場合はステップＳ５１５へ戻る。
【００７０】
（ステップＳ５１８）データ復元部１１１により損失データパケットの復元処理が行われる。
【００７１】
（ステップＳ５１９）カラムＦＥＣパケットを用いた復元処理が少なくとも１回行われたか否かが判定される。行われた場合はステップＳ５１０へ戻り、行われなかった場合はステップＳ５２０へ進む。
【００７２】
（ステップＳ５２０）マトリクス内に復元可能なデータパケットがなくなり、このマトリクスの復元処理が終了したと判定され、マトリクス更新部１１２により次のマトリクスに更新される。次のマトリクスに対応するＦＥＣパケット群は、既に特定されているＦＥＣパケット群のシーケンス番号順に後続する同数のＦＥＣパケットであるため、容易に特定できる。
【００７３】
ステップＳ５０６〜ステップＳ５１９では、全てのカラムＦＥＣパケットを順次選択し、その後に全てのロウＦＥＣパケットを順次選択する。そして、全てのロウＦＥＣパケットを選択し終わった段階で、ロウＦＥＣパケットを用いて復元が行われたか確認する。
【００７４】
ロウＦＥＣパケットを用いた復元が行われていない場合はそのマトリクスの処理を終了して次のマトリクスに移行する。ロウＦＥＣパケットを用いた復元が行われた場合は、再びカラムＦＥＣパケットによる処理に移行し、以下同様の処理を繰り返す。
【００７５】
このような繰り返し処理を行うのは、カラムＦＥＣパケット、ロウＦＥＣパケットの一方による復元が発生した場合、他方のＦＥＣパケットでは復元出来なかった部分が、復元可能になる場合があるためである。
【００７６】
例えば図７（ａ）に示すように、シーケンス番号１〜１００のデータパケットからなるマトリクスのうち、シーケンス番号３７、４６、４７、５５、５６のデータパケットが損失していたとする。
【００７７】
まず、カラムＦＥＣパケットを順次選択していく。図７（ｂ）に示すように、シーケンス番号５のカラムＦＥＣパケットを用いてシーケンス番号５５のデータパケットが復元される。シーケンス番号６、７のカラムＦＥＣパケットについては、対応するデータパケット群に損失データパケットが２つあるため、復元処理を行うことができない。
【００７８】
続いて、ロウＦＥＣパケットを順次選択していく。図７（ｃ）に示すように、シーケンス番号４のロウＦＥＣパケットを用いてシーケンス番号３７のデータパケットが復元される。また、シーケンス番号６のロウＦＥＣパケットを用いてシーケンス番号５６のデータパケットが復元される。
【００７９】
このロウＦＥＣパケットを用いた復元処理により、シーケンス番号６、７のカラムＦＥＣパケットに対応するデータパケット群に含まれる損失データパケットが１つとなる。従って、復元処理が行えるようになり、図７（ｄ）に示すように、シーケンス番号４６、４７のデータパケットが復元される。
【００８０】
本実施形態によるデータ処理装置は、ＦＥＣパラメータに基づいて同一のデータパケットマトリクスに対応するカラムＦＥＣパケット群、ロウＦＥＣパケット群を効率良く特定することができ、復元処理を効率良く行うことができる。また、カラムＦＥＣパケット群とロウＦＥＣパケット群との間で繰り返し復元処理を行うことで、復元漏れを防ぐことが出来る。
【００８１】
損失データパケットの復元方法の別の例を、図８に示すフローチャートを用いて説明する。ステップＳ８０１〜ステップＳ８０９は、上記実施形態における損失データパケット復元方法のステップＳ５０１〜ステップＳ５０９と同様であるため、説明を省略する。
【００８２】
（ステップＳ８１０）ロウＦＥＣパケットがすべて選択されたか否かが判定される。選択された場合はステップＳ８１７へ進み、選択されていない場合はステップＳ８１１へ進む。
【００８３】
（ステップＳ８１１）ＦＥＣパケット選択部１０９によりロウＦＥＣパケットがシーケンス番号順に選択される。
【００８４】
（ステップＳ８１２）選択されたロウＦＥＣパケットを用いて復元処理が行えるか否かが復元可否判定部１１０により判定される。復元処理が行える場合はステップＳ８１３へ進み、行えない場合はステップＳ８１０へ戻る。
【００８５】
（ステップＳ８１３）データ復元部１１１により損失データパケットの復元処理が行われる。
【００８６】
（ステップＳ８１４）前のステップで、ロウＦＥＣパケットを用いてデータパケット群のうちシーケンス番号順にｍ番目のデータパケットが復元されていた場合、シーケンス番号順にｍ番目のカラムＦＥＣパケットが選択される。ここでｍは、１≦ｍ≦マトリクスの横方向のパケット数を満たす整数である。
【００８７】
前のステップで、カラムＦＥＣパケットを用いてデータパケット群のうちシーケンス番号順にｎ番目のデータパケットが復元されていた場合、シーケンス番号順にｎ番目のロウＦＥＣパケットが選択される。ここでｎは、１≦ｎ≦マトリクスの縦方向のパケット数を満たす整数である。
【００８８】
（ステップＳ８１５）ステップＳ８１４で選択されたＦＥＣパケットを用いて復元処理が行えるか否かが判定される。復元処理が行える場合はステップＳ８１６へ進み、行えない場合はステップＳ８１０へ戻る。
【００８９】
（ステップＳ８１６）損失データパケットの復元処理が行われ、ステップＳ８１４へ戻る。
【００９０】
（ステップＳ８１７）マトリクス内に復元可能なデータパケットがなくなり、このマトリクスの復元処理が終了したと判定され、マトリクス更新部１１２により次のマトリクスに更新される。
【００９１】
このような方法による損失データパケットの復元の一例を図９に示す。ステップＳ８０６でカラムＦＥＣパケットがすべて選択されたと判定された状態のマトリクスを図９（ａ）に示す。まず、シーケンス番号１のロウＦＥＣパケットが選択される。このロウＦＥＣパケットに対応するデータパケット群に含まれる損失データパケットが０個のため、復元処理は行われない。
【００９２】
図９（ｂ）に示すように、シーケンス番号２のロウＦＥＣパケットが選択され、シーケンス番号１３のデータパケットが復元される。復元されたデータパケットは、データパケット群において、シーケンス番号順に３番目であるため、次にシーケンス番号３のカラムＦＥＣパケットが選択される。
【００９３】
図９（ｃ）に示すように、シーケンス番号２３のデータパケットが復元される。復元されたデータパケットは、データパケット群において、シーケンス番号順に３番目であるため、次にシーケンス番号３のロウＦＥＣパケットが選択される。
【００９４】
図９（ｄ）に示すように、シーケンス番号２４のデータパケットが復元される。復元されたデータパケットは、データパケット群において、シーケンス番号順に４番目であるため、次にシーケンス番号４のカラムＦＥＣパケットが選択される。
【００９５】
図９（ｅ）に示すように、シーケンス番号４のカラムＦＥＣパケットに対応するデータパケット群には損失データパケットが２個含まれているため、復元処理は行われない。再びロウＦＥＣパケットの選択に戻り、図９（ｆ）に示すように、シーケンス番号４のロウＦＥＣパケットが選択される。以下、同様の処理を繰り返していくことで復元漏れは防止される。
【００９６】
ロウＦＥＣパケット、カラムＦＥＣパケットの一方による復元処理が行われた時に、復元したデータパケットに対応するロウＦＥＣパケット、カラムＦＥＣパケットの他方を選択し、復元可能であれば復元処理を行っている。このようにＦＥＣパケットを選択することで、図５に示すような復元が行われる毎に他方のＦＥＣパケットを全て選択する方法よりも、ＦＥＣパケットの選択回数を低減でき、さらに効率良くデータの復元を行うことができる。
【００９７】
図８に示す方法では最初に一旦カラムＦＥＣパケットをすべて順に選択しているが（ステップＳ８０６〜Ｓ８０９）、図１０に示すように、最初にカラムＦＥＣパケットを順次選択しているときでも、復元が行われたときに繰り返し処理に移行するように動作してもよい（ステップＳ１０１０〜Ｓ１０１２）。
【００９８】
データ受信装置は、図１１に示すように、マトリクス内の各ＦＥＣパケットに対応するデータパケット群の損失数を特定する損失数特定部１１３、特定した損失数を記憶する損失数記憶部１１４、及び記憶した損失数を１減らす損失数減算部１１５をさらに備えるような構成にしてもよい。
【００９９】
このようなデータ受信装置を用いた損失データパケットの復元方法について図１２に示すフローチャートを用いて説明する。ステップＳ１２０１〜Ｓ１２０５は、上記実施形態における損失データパケット復元方法のステップＳ５０１〜Ｓ５０５と同様であるため、説明を省略する。
【０１００】
（ステップＳ１２０６）損失数特定部１１３がデータ記憶情報記憶部１０３に記憶されているデータ記憶情報を参照し、マトリクスに属する全てのＦＥＣパケットの各々について、対応するデータパケット群に含まれる損失数を特定する。特定した損失数は損失数記憶部１１４に記憶される。損失数の一例を図１３に示す。
【０１０１】
（ステップＳ１２０７）カラムＦＥＣパケットがすべて選択されたか否かが判定される。選択された場合はステップＳ１２１２へ進み、選択されていない場合はステップＳ１２０８へ進む。
【０１０２】
（ステップＳ１２０８）ＦＥＣパケット選択部１０９によりカラムＦＥＣパケットがシーケンス番号順に選択される。
【０１０３】
（ステップＳ１２０９）選択されたカラムＦＥＣパケットを用いて復元処理が行えるか否かが判定される。復元可否判定部１１０が、損失数記憶部１１４に記憶されている情報に基づき、選択されたカラムＦＥＣパケットに対応する損失数が１であるか否かを判定する。
【０１０４】
復元処理が行える場合はステップＳ１２１０へ進み、行えない場合はステップＳ１２０７に戻る。
【０１０５】
（ステップＳ１２１０）データ復元部１１１により損失データパケットの復元処理が行われる。
【０１０６】
（ステップＳ１２１１）損失数減算部１１５が、損失数記憶部１１４に記憶されているステップＳ１２１０で復元したデータパケットに対応するカラムＦＥＣパケット、ロウＦＥＣパケットの損失数を１減らす。
【０１０７】
（ステップＳ１２１２）ロウＦＥＣパケットがすべて選択されたか否かが判定される。選択された場合はステップＳ１２２１へ進み、選択されていない場合はステップＳ１２１３へ進む。
【０１０８】
（ステップＳ１２１３）ＦＥＣパケット選択部１０９によりロウＦＥＣパケットがシーケンス番号順に選択される。
【０１０９】
（ステップＳ１２１４）選択されたロウＦＥＣパケットを用いて復元処理が行えるか否かが判定される。復元可否判定部１１０が、損失数記憶部１１４に記憶されている情報に基づき、選択されたロウＦＥＣパケットに対応する損失数が１であるか否かを判定する。
【０１１０】
復元処理が行える場合はステップＳ１２１５へ進み、行えない場合はステップＳ１２１２に戻る。
【０１１１】
（ステップＳ１２１５）データ復元部１１１により損失データパケットの復元処理が行われる。
【０１１２】
（ステップＳ１２１６）損失数減算部１１５が、損失数記憶部１１４に記憶されているステップＳ１２１５で復元したデータパケットに対応するカラムＦＥＣパケット、ロウＦＥＣパケットの損失数を１減らす。
【０１１３】
（ステップＳ１２１７）前のステップで、ロウＦＥＣパケットを用いてデータパケット群のうちシーケンス番号順にｍ番目のデータパケットが復元されていた場合、シーケンス番号順にｍ番目のカラムＦＥＣパケットが選択される。ここでｍは、１≦ｍ≦マトリクスの横方向のパケット数を満たす整数である。
【０１１４】
前のステップで、カラムＦＥＣパケットを用いてデータパケット群のうちシーケンス番号順にｎ番目のデータパケットが復元されていた場合、シーケンス番号順にｎ番目のロウＦＥＣパケットが選択される。ここでｎは、１≦ｎ≦マトリクスの縦方向のパケット数を満たす整数である。
【０１１５】
（ステップＳ１２１８）ステップＳ１２１７で選択されたＦＥＣパケットに対応する損失数が１であるか否かが判定される。損失数が１で復元処理が行える場合はステップＳ１２１９へ進み、損失数が１以外で復元処理が行えない場合はステップＳ１２１２に戻る。
【０１１６】
（ステップＳ１２１９）データ復元部１１１により損失データパケットの復元処理が行われる。
【０１１７】
（ステップＳ１２２０）損失数減算部１１５が、損失数記憶部１１４に記憶されているステップＳ１２１９で復元したデータパケットに対応するカラムＦＥＣパケット、ロウＦＥＣパケットの損失数を１減らす。
【０１１８】
（ステップＳ１２２１）マトリクス内に復元可能なデータパケットがなくなり、このマトリクスの復元処理が終了したと判定され、マトリクス更新部１１２により次のマトリクスに更新される。
【０１１９】
このような方法による損失データパケットの復元の一例を図１４に示す。ステップＳ１２０７でカラムＦＥＣパケットがすべて選択されたと判定された状態のマトリクスを図１４（ａ）に示す。まず、シーケンス番号１のロウＦＥＣパケットが選択される。損失数記憶部１１４に記憶されている損失数が０のため、復元処理は行われない。
【０１２０】
続いて、図１４（ｂ）に示すように、シーケンス番号２のロウＦＥＣパケットが選択され、損失数記憶部１１４に記憶されている損失数が確認される。損失数が１のため、復元処理が行われ、シーケンス番号１３のデータパケットが復元される。
【０１２１】
そして、シーケンス番号１３のデータパケットの復元に伴い、対応するＦＥＣパケットであるシーケンス番号２のロウＦＥＣパケット及びシーケンス番号３のカラムＦＥＣパケットの損失数が１減らされる。
【０１２２】
復元されたシーケンス番号１３のデータパケットは、データパケット群において、シーケンス番号順に３番目であるため、図１４（ｃ）に示すように、シーケンス番号３のカラムＦＥＣパケットが選択される。
【０１２３】
シーケンス番号３のカラムＦＥＣパケットは損失数が１であるため、復元処理が行われ、シーケンス番号２３のデータパケットが復元される。この復元処理に伴い、シーケンス番号３のカラムＦＥＣパケット、ロウＦＥＣパケットの損失数が１減らされる。
【０１２４】
復元されたデータパケットは、データパケット群において、シーケンス番号順に３番目であるため、図１４（ｄ）に示すように、次にシーケンス番号３のロウＦＥＣパケットが選択される。
【０１２５】
シーケンス番号３のロウＦＥＣパケットの損失数は１であるため、復元処理が行われる。この復元処理により、シーケンス番号３のロウＦＥＣパケットとシーケンス番号４のカラムＦＥＣパケットの損失数が１減らされる。
【０１２６】
続いて、図１４（ｅ）に示すように、シーケンス番号４のカラムＦＥＣパケットが選択される。損失数が２であるため、復元処理は行われない。続いて、図１４（ｆ）に示すように、シーケンス番号４のロウＦＥＣパケットが選択される。以下、同様の処理を繰り返していくことで復元漏れが防止される。
【０１２７】
図１に示すデータ受信装置では復元可否判定部１１０がデータ記憶情報記憶部１０３にアクセスし、選択したＦＥＣパケットに対応する複数のデータパケットの各々についてデータ部分がデータ記憶部１０２に記憶されているかを検出し、復元可否判定していた。
【０１２８】
一方、図１１に示すデータ受信装置は復元可否判定部１１０が損失数記憶部１１４にアクセスし、選択されたＦＥＣパケットに対応する損失数が１であるか否かを検出するだけで復元可否判定できるので、さらに処理を効率化することができる。
【０１２９】
なお、ここではＦＥＣパケット群の特定又はマトリクスの更新の段階で損失数の特定を行う例を示したが、これは一例であり、このような実施態様に限定されない。
【０１３０】
例えば、最初にカラムＦＥＣパケットを順次処理する際にはデータ記憶情報記憶部１０３にアクセスし、その時に損失数特定と特定した損失数の損失数記憶部１１４への記憶を行う。そして、ロウＦＥＣパケットを順次処理する際に、損失数記憶部１１４に記憶した損失数を用いて、上記のような処理を行うようにしてもよい。
【０１３１】
復元可否判定部１１０が復元可能と判断した場合、データ復元部１１１が復元を行うときに、対応するデータパケット群のどのデータパケットが損失しているかを特定する必要があり、データ記憶情報記憶部１０３へのアクセスが行われる。
【０１３２】
このアクセスのオーバーヘッドを軽減するため、データ記憶情報記憶部１０３と、データ記憶部１０２を同一のメモリ上に配置し、データ記憶情報と、これに対応するデータ部分の情報とをメモリ上の隣接したアドレスに記憶するようにしてもよい。
【０１３３】
復元処理を行うときは、ＦＥＣの復元の演算のために、必ず全てのデータが読み出される。従って、データ記憶情報を隣接した位置、例えば図１５に示すように対応するデータの手前に配置することが好適である。これにより、データ記憶情報をデータ部分の情報と纏めてバースト読み出しすることが可能になり、データ記憶情報を読み出すのに要するクロックサイクル数を低く（通常は１に）抑えることができる。
【０１３４】
データ記憶情報を読み出した結果が０であれば、それが損失したデータであることが分かり、そのデータ記憶情報に後続して読み出されるデータ部分の情報は無効であることがわかる。従って、データ記憶情報を読み出した結果が０の時点で、後続するデータ部分の情報のバースト読み出しを中断するようにしてもよい。このようなメモリ構成とすることで、復元処理をさらに効率化することができる。
【０１３５】
なお、上述したＦＥＣパケット選択部１０９によるＦＥＣパケットの選択パターンは一例であり、これらに限定するものではない。特に、これら選択パターンにおいて、カラムＦＥＣパケットとロウＦＥＣパケットは互いに置き換えてもよく、この間の順序は問わない。
【０１３６】
上記実施形態では、受信したカラムＦＥＣパケットのＳＮＢａｓｅと、ロウＦＥＣパケットのＳＮＢａｓｅとを比較し、一致したＦＥＣパケットを先頭ＦＥＣパケットと特定していたが、他の方法により特定してもよい。
【０１３７】
例えば、受信した任意のカラムＦＥＣパケットのＳＮＢａｓｅと、受信した任意のロウＦＥＣパケットのいずれかのＳＮＢａｓｅとの差が、カラムＦＥＣパケットのＯｆｆｓｅｔ×ｋ（ｋは整数）となるかどうか確認し、なる場合はそのカラムＦＥＣパケットを先頭カラムＦＥＣパケットと特定するようにしてもよい。
【０１３８】
これは、ｋを順次変えて確認しても良いし、Ｏｆｆｓｅｔで割り切れるか（剰余が０となるか）を確認しても良い。例えば図６の場合、シーケンス番号１、７、１３のカラムＦＥＣパケットが先頭カラムＦＥＣパケットとなるが、そのＳＮＢａｓｅは１、２５、４９であり、これらはロウＦＥＣパケットのＳＮＢａｓｅの１、７、１３、１９、２５、３１、３７、４３、４９、５５、６１、６７、…のいずれとも、その差がカラムＦＥＣパケットのＯｆｆｓｅｔである６で割り切れることが分かる。
【０１３９】
また、ロウＦＥＣパケットを用いず、２つのカラムＦＥＣパケットのＳＮＢａｓｅを用いて先頭カラムＦＥＣパケットを特定するようにしてもよい。カラムＦＥＣパケットのＳＮＢａｓｅは、同一マトリクスに属するもの同士であれば値が連続する。
【０１４０】
従って、カラムＦＥＣパケットをシーケンス番号順に並べた場合、ＳＮＢａｓｅが連続する限りそれらは同じマトリクスに属し、ＳＮＢａｓｅが不連続になった（値が飛んだ）場合、そこから次のマトリクスになっていることが分かる。
【０１４１】
例えば図６において、シーケンス番号１〜６、７〜１２、１３〜１８のカラムＦＥＣパケットのＳＮＢａｓｅは連続しているが、シーケンス番号６と７、１２と１３のＳＮＢａｓｅは、それぞれ６と２５、３０と４９というように連続していないことが分かる。
【０１４２】
従って、シーケンス番号が連続するカラムＦＥＣパケット同士を比較し、ＳＮＢａｓｅが連続していない場合、シーケンス番号が大きい方のＦＥＣパケットが先頭カラムＦＥＣパケットであると特定できる。
【０１４３】
例えば連続して受信する２つのＦＥＣパケット（例えばＩＰネットワーク経由だと必ずしもシーケンス番号が連続しない）を比較する場合、まずＦＥＣパケットを受信する毎にシーケンス番号とＳＮＢａｓｅを記憶しておく。そして、同じくカラムＦＥＣパケットを受信する毎に、受信したカラムＦＥＣパケットのシーケンス番号が、記憶している１つ前に受信したカラムＦＥＣパケットのシーケンス番号＋１であり、かつ、ＳＮＢａｓｅが記憶している１つ前に受信したカラムＦＥＣパケットのＳＮＢａｓｅ＋１ではない、となるかどうか確認する。シーケンス番号が＋１であり（連続）、ＳＮＢａｓｅが＋１でない（不連続）場合は、その新たに受信したカラムＦＥＣパケットを、マトリクスの先頭カラムＦＥＣパケットと特定する。
【０１４４】
マトリクスの先頭のカラムＦＥＣパケットのＳＮＢａｓｅは先頭のデータパケットのシーケンス番号を表しているが、それは１つ前のマトリクスの末尾のデータパケットのシーケンス番号＋１である。マトリクスの末尾のデータパケットのシーケンス番号は、マトリクスの末尾のカラムＦＥＣパケットのＳＮＢａｓｅ＋Ｏｆｆｓｅｔ×（ＮＡ−１）として求められる。
【０１４５】
従って、マトリクスの末尾のカラムＦＥＣパケットのＳＮＢａｓｅと、次のマトリクスの先頭のカラムＦＥＣパケットのＳＮＢａｓｅは、その差が必ずＳＮＢａｓｅ＋Ｏｆｆｓｅｔ×（ＮＡ−１）＋１となるといえる。
【０１４６】
例えば図６の場合、１つ目のマトリクスの最後と２つ目のマトリクスの最初のカラムＦＥＣパケットのＳＮＢａｓｅはそれぞれ６と２５、２つ目のマトリクスの最後と３つ目のマトリクスの最初のカラムＦＥＣパケットのＳＮＢａｓｅは３０と４９で、共に差が１９である。これは６×（４−１）＋１であることが分かる。この確認を行えば、シーケンス番号を用いずにＳＮＢａｓｅのみの比較でマトリクスの先頭カラムＦＥＣパケットを特定できる。
【０１４７】
例えば連続して受信する２つのカラムＦＥＣパケットを比較する場合、まずカラムＦＥＣパケットを受信する毎にそのＳＮＢａｓｅを記憶しておく。そして、同じくカラムＦＥＣパケットを受信する毎に、受信したカラムＦＥＣパケットのＳＮＢａｓｅと記憶している１つ前に受信したカラムＦＥＣパケットのＳＮＢａｓｅの差がＯｆｆｓｅｔ×（ＮＡ−１）＋１となるかどうか確認する。差がＯｆｆｓｅｔ×（ＮＡ−１）＋１となる場合は、その新たに受信したカラムＦＥＣパケットをマトリクスの先頭カラムＦＥＣパケットと特定する。
【０１４８】
このようにして先頭カラムＦＥＣパケットを特定できたら、その先頭カラムＦＥＣパケットとＳＮＢａｓｅが一致するロウＦＥＣパケットを探索すれば、それが先頭ロウＦＥＣパケットと特定できる。
【０１４９】
ただし、Ｐｒｏ−ＭＰＥＧなどでは、同じマトリクスのロウＦＥＣパケットよりカラムＦＥＣパケットの方が送出されるタイミングが遅い場合がある。従って、先頭ロウＦＥＣパケットを受信した時点では、未だ対応する先頭カラムＦＥＣパケットを受信していない、すなわち、対応する先頭カラムＦＥＣパケットが特定されていない場合がある。
【０１５０】
そのような場合は、先頭カラムＦＥＣパケットを特定した後、数マトリクス先の先頭カラムＦＥＣパケットを推定し、それを新たに先頭カラムＦＥＣパケットとして特定する。そして、受信したロウＦＥＣパケットは、その新たに特定された先頭カラムＦＥＣパケットとＳＮＢａｓｅを比較すればよい。
【０１５１】
ｊ個先のマトリクスの先頭カラムＦＥＣパケットのシーケンス番号を、もとのマトリクスの先頭カラムＦＥＣパケットのシーケンス番号＋Ｏｆｆｓｅｔ×ｊと特定できる。また、ＳＮＢａｓｅは、もとのマトリクスの先頭カラムＦＥＣパケットのＳＮＢａｓｅ＋Ｏｆｆｓｅｔ×ＮＡ×ｊとなるので、このＳＮＢａｓｅを有するロウＦＥＣパケットを先頭ロウＦＥＣパケットと特定する。
【０１５２】
Ｐｒｏ−ＭＰＥＧの場合、例えば図６のシーケンス番号１のカラムＦＥＣパケットとシーケンス番号９のロウＦＥＣパケットの送出タイミングは図１６のようになる。シーケンス番号１のカラムＦＥＣパケットは、図の斜線部（シーケンス番号２５〜４３）のいずれかのデータパケットの送信時に送信され、シーケンス番号９のロウＦＥＣパケットは例えば図の縦縞部（シーケンス番号５４）のデータパケットの送信時に送信される。
【０１５３】
受信側もほぼこの順序でＦＥＣパケットを受信することになる。このような場合、シーケンス番号１のカラムＦＥＣパケットが先頭になると分かるのは、図の斜線部のデータパケットを受信するときである。従って、ｊ＝２とし、２つ先のマトリクスでは、シーケンス番号１３のカラムＦＥＣパケットが先頭カラムＦＥＣパケットとなると特定する。
【０１５４】
シーケンス番号１３のカラムＦＥＣパケットは、その後に受信されるシーケンス番号９のロウＦＥＣパケットとＳＮＢａｓｅが４９で一致することになり、先頭ロウＦＥＣパケットを特定することができる。
【０１５５】
ＳＮＢａｓｅが先頭カラムＦＥＣパケットと一致するロウＦＥＣパケットの探索をしなくてもよい。任意のロウＦＥＣパケットのＳＮＢａｓｅと、先頭カラムＦＥＣパケットのＳＮＢａｓｅとの差を、カラムＦＥＣパケットのＯｆｆｓｅｔで割った値をｐとすると、そのロウＦＥＣパケットのシーケンス番号−ｐが、先頭ロウＦＥＣパケットのシーケンス番号として特定できる。
【０１５６】
例えば図６の場合、シーケンス番号１のカラムＦＥＣパケットが先頭と特定されたとき、シーケンス番号９のロウＦＥＣパケットとＳＮＢａｓｅの差は４８となる。この差４８をＯｆｆｓｅｔ６で割るとｐ＝８となり、シーケンス番号９−８＝１のロウＦＥＣパケットが、シーケンス番号１の先頭カラムＦＥＣパケットに対応する先頭ロウＦＥＣパケットと特定できることが分かる。
【０１５７】
また、任意のカラムＦＥＣパケットとロウＦＥＣパケットを一つずつ用いて、先頭カラムＦＥＣパケットと先頭ロウＦＥＣパケットを特定するようにしてもよい。受信したあるカラムＦＥＣパケットのＳＮＢａｓｅをＳＮＢａｓｅ１、あるロウＦＥＣパケットのＳＮＢａｓｅをＳＮＢａｓｅ２とし、(ＳＮＢａｓｅ２−ＳＮＢａｓｅ１−１)÷カラムＦＥＣパケットのＯｆｆｓｅｔ（またはロウＦＥＣパケットのＮＡ）の商をＯｆｆｓｅｔＤ、剰余をＯｆｆｓｅｔＬとして求める。
【０１５８】
そして、ＳＮＢａｓｅ１をもつカラムＦＥＣパケットのシーケンス番号をＳＮ１、ＳＮＢａｓｅ２をもつロウＦＥＣパケットのシーケンス番号をＳＮ２とすると、マトリクスの先頭カラムＦＥＣパケットのシーケンス番号＝ＳＮ１＋（ＯｆｆｓｅｔＬ＋１）−カラムＦＥＣパケットのＯｆｆｓｅｔ、マトリクスの先頭ロウＦＥＣパケットのシーケンス番号＝ＳＮ２−（ＯｆｆｓｅｔＤ＋１）と特定できる。
【０１５９】
この方法を用いると、任意のカラムＦＥＣパケットとロウＦＥＣパケットが１つずつあれば、先頭カラムＦＥＣパケットと先頭ロウＦＥＣパケットを特定することができる。
【０１６０】
例えば図６において、シーケンス番号９、ＳＮＢａｓｅ２７のカラムＦＥＣパケットと、シーケンス番号１１、ＳＮＢａｓｅ６１のロウＦＥＣパケットを用いて先頭ＦＥＣパケットを特定する。ＳＮ１＝９、ＳＮ２＝１１、ＳＮＢａｓｅ１＝２７、ＳＮＢａｓｅ２＝６１、カラムＦＥＣパケットのＯｆｆｓｅｔ＝６なので、ＯｆｆｓｅｔＤ＝５、ＯｆｆｓｅｔＬ＝３となる。
【０１６１】
これらの値を上述した式に代入すると、先頭カラムＦＥＣパケットのシーケンス番号は７、先頭ロウＦＥＣパケットのシーケンス番号は５となり、２つ目のマトリクスの先頭カラムＦＥＣパケットと先頭ロウＦＥＣパケットを特定できることが分かる。
【０１６２】
上記実施形態によるデータ受信装置は、データパケット及びＦＥＣパケットを受信してデータ記憶部に記憶し、必要に応じて損失データの復元を行うものであるが、さらに、データ記憶部に記憶されたデータを読み出し、その映像データや音声データを表示・再生するなどの後段の処理を行う処理部を備えるようにしてもよい。
【０１６３】
以上、いくつかの方法で先頭ＦＥＣパケットを特定する方法を述べたが、これらの手法を用いて先頭ＦＥＣパケットを特定しても、送信側の都合によりマトリクスの仕様（すなわち、マトリクスの１列あたりのパケット数、１行あたりのパケット数、ＦＥＣパケットのシーケンス番号とＳＮＢａｓｅの関係など）が動的に変わる可能性がある。その場合、図１７に示すようなデータ受信装置を用いることでマトリクスの仕様の変化を検出できる。
【０１６４】
図１７に示すデータ受信装置は、図１に示すデータ受信装置に、ＦＥＣパラメータ記憶部１２０及びマトリクス変化検知部１２１をさらに備えるような構成になっている。
【０１６５】
ＦＥＣパラメータ記憶部１２０は、先頭ＦＥＣパケット特定部１０７が特定した先頭カラムＦＥＣパケット及び先頭ロウＦＥＣパケットのシーケンス番号やＦＥＣパラメータを記憶する。
【０１６６】
マトリクス変化検知部１２１は、ＦＥＣパラメータ特定部１０６により特定された受信ＦＥＣパケットのＦＥＣパラメータや、ＦＥＣパラメータ記憶部１２０に記憶された情報を用いて、マトリクスの仕様変化を検知する。
【０１６７】
例えば、マトリクス変化検知部１２１は、ＦＥＣパラメータ特定部１０６が特定したカラムＦＥＣパケット又はロウＦＥＣパケットのＯｆｆｓｅｔ又はＮＡと、ＦＥＣパラメータ記憶部１２０に記憶されている先頭ＦＥＣパケット特定部１０７が特定した先頭カラムＦＥＣパケット又は先頭ロウＦＥＣパケットのＯｆｆｓｅｔ又はＮＡとを比較する。比較結果が一致しなくなると、マトリクスの１列あたりのパケット数又は１行あたりのパケット数が変化したことを意味するので、マトリクス変化検知部１２１はこれをもってマトリクスの仕様変化を検知する。
【０１６８】
また、マトリクスの１列あたりのパケット数又は１行あたりのパケット数が変化しなくても、ＦＥＣパケットのシーケンス番号の増加と、ＦＥＣパケットが指すデータパケットのシーケンス番号、すなわちＳＮＢａｓｅの増加との整合性がとれなくなる場合がある。
【０１６９】
例えば、図６に示すようなマトリクスの場合、カラムＦＥＣパケットはマトリクスが１つ進む毎にシーケンス番号が６ずつ増加し、ＳＮＢａｓｅは６×４＝２４ずつ増加する。つまり、先頭カラムＦＥＣパケット同士を比較した場合、そのシーケンス番号の差×マトリクスの縦の長さ（列方向のパケット数）＝ＳＮＢａｓｅの差という関係が成り立つ。従って、この関係が成り立たなくなったとき、マトリクスの仕様が変化したことを意味する。
【０１７０】
同様に、ロウＦＥＣパケットの場合は、シーケンス番号の差×マトリクスの横の長さ（行方向のパケット数）＝ＳＮＢａｓｅの差という関係が成り立ち、この関係が成り立たなくなったとき、マトリクスの仕様が変化したことを意味する。
【０１７１】
そこで、このようなマトリクスの仕様変化を検知するため、先頭ＦＥＣパケット特定部１０７は一旦先頭ロウＦＥＣパケット及び先頭カラムＦＥＣパケットを特定しても、引き続き各マトリクスの先頭ロウＦＥＣパケット及び先頭カラムＦＥＣパケットの特定を行う。
【０１７２】
そして、各マトリクスの先頭ロウＦＥＣパケット及び先頭カラムＦＥＣパケットが特定される度に、これらのシーケンス番号及びＳＮＢａｓｅがＦＥＣパラメータ記憶部１２０に記憶される。
【０１７３】
マトリクス変化検知部１２１は、新たにＦＥＣパラメータ記憶部１２０に記憶されたシーケンス番号及びＳＮＢａｓｅと、１つ前に記憶されたシーケンス番号及びＳＮＢａｓｅを用いて、カラムＦＥＣパケット、ロウＦＥＣパケットの各々について上述の関係式が成り立つか否かを判定する。関係式が成り立たない場合は、マトリクスの仕様が変化したことが検知される。
【０１７４】
以上のような方法でマトリクス変化検知部１２１により、マトリクスの仕様が変化したことが検知されると、再び先頭マトリクスの特定が行われる。
【０１７５】
上記実施形態によるデータ受信装置は、汎用のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。データ受信装置は、プログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭ等の記憶媒体に記憶して、又はネットワークを介してプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
【０１７６】
上述した実施の形態は一例であって限定的なものではないと考えられるべきである。本発明の技術的範囲は特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１７７】
【図１】本発明の実施形態によるデータ受信装置の概略構成図である。
【図２】ＦＥＣパケット生成の一例を示す図である。
【図３】損失データパケットの復元の一例を示す図である。
【図４】マトリクスの更新の一例を示す図である。
【図５】損失データパケットの復元方法を説明するフローチャートである。
【図６】ＦＥＣパケットのＳＮＢａｓｅの一例を示す図である。
【図７】損失データパケットの復元処理の一例を示す図である。
【図８】損失データパケットの復元方法の他の例を説明するフローチャートである。
【図９】損失データパケットの復元処理の他の例を示す図である。
【図１０】損失データパケットの復元方法の他の例を説明するフローチャートである。
【図１１】変形例によるデータ受信装置の概略構成図である。
【図１２】損失データパケットの復元方法の他の例を説明するフローチャートである。
【図１３】損失数の一例を示す図である。
【図１４】損失データパケットの復元処理の他の例を示す図である。
【図１５】データ記憶情報の記憶領域の一例を示す図である。
【図１６】ＦＥＣパケットの送出タイミングの一例を示す図である。
【図１７】変形例によるデータ受信装置の概略構成図である。
【符号の説明】
【０１７８】
１０１  パケット受信部
１０２  データ記憶部
１０３  データ記憶情報記憶部
１０４  パケット種別特定部
１０５  シーケンス番号特定部
１０６  ＦＥＣパラメータ特定部
１０７  先頭ＦＥＣパケット特定部
１０８  ＦＥＣパケット群特定部
１０９  ＦＥＣパケット選択部
１１０  復元可否判定部
１１１  データ復元部
１１２  マトリクス更新部
【図１】
2010050809.tif 000003
【図２】
2010050809.tif 000004
【図３】
2010050809.tif 000005
【図４】
2010050809.tif 000006
【図５】
2010050809.tif 000007
【図６】
2010050809.tif 000008
【図７】
2010050809.tif 000009
【図８】
2010050809.tif 000010
【図９】
2010050809.tif 000011
【図１０】
2010050809.tif 000012
【図１１】
2010050809.tif 000013
【図１２】
2010050809.tif 000014
【図１３】
2010050809.tif 000015
【図１４】
2010050809.tif 000016
【図１５】
2010050809.tif 000017
【図１６】
2010050809.tif 000018
【図１７】
2010050809.tif 000019