(57)【要約】【課題】  エラーの発生パターンによっては、冗長データによるエラーの訂正ができない場合があった。【解決手段】  ＦＥＣ生成部は、エラーしたデータパケット１を訂正するために用いる冗長パケットＦａ１を、データパケット１と、当該データパケット１の次のデータパケット（データパケット２）よりも後のデータパケット６を用いて生成すると共に、エラーしたデータパケット１を訂正するために用いる冗長パケットＦｂ１を、データパケット６を用いずに、データパケット１と、データパケット６よりも後のデータパケット８を用いて生成する（ステップＳ４０６）。【選択図】  図３
2010283606.tif 000002
【特許請求の範囲】
【請求項１】
エラーした保護対象データを訂正するために用いる訂正用データの生成装置であって、
保護対象データを入力する入力手段と、
前記エラーした第１の保護対象データを訂正するために用いる第１の訂正用データを、前記第１の保護対象データと、当該第１の保護対象データの次の保護対象データよりも後の第２の保護対象データとを用いて生成すると共に、
前記エラーした前記第１の保護対象データを訂正するために用いる第２の訂正用データを、前記第２の保護対象データを用いずに、前記第１の保護対象データと、前記第２の保護対象データよりも後の第３の保護対象データとを用いて生成する生成手段と
を有することを特徴とする訂正用データの生成装置。
【請求項２】
前記入力された保護対象データと前記生成された訂正用データを受信装置に対して送信する送信手段
を有することを特徴とする請求項１記載の訂正用データの生成装置。
【請求項３】
前記入力された保護対象データと前記生成された訂正用データを記録部に記録させる記録制御手段
を有することを特徴とする請求項１記載の訂正用データの生成装置。
【請求項４】
前記生成手段は、
前記入力された保護対象データの個数に基づいて、前記第１の訂正用データを生成するために用いる保護対象データの組み合わせを決定する
ことを特徴とする請求項１記載の訂正用データの生成装置。
【請求項５】
前記生成手段は、第１の個数の保護対象データが入力されたことに応じて、前記第１の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データのＮ個後の前記第２の保護対象データを用いて生成し、前記第２の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データのＭ個後の前記第３の保護対象データとを用いて生成する場合の前記ＮとＭの最小公倍数が前記第１の個数以上となるように、前記ＭとＮを決定する
ことを特徴とする請求項１記載の訂正用データの生成装置。
【請求項６】
前記入力された保護対象データと前記生成された訂正用データを受信装置に対して送信する送信手段と、
前記受信装置から通信状況を示す通信状況情報を受信する受信手段とを有し、
前記生成手段は、前記通信状況情報によって示される通信状況に応じて、前記第１の訂正用データを生成するために前記第１の保護対象データと共に用いる保護対象データを決定する
ことを特徴とする請求項１記載の訂正用データの生成装置。
【請求項７】
前記生成手段は、
前記受信装置が、第１の個数の連続する保護対象データの受信に失敗した場合、前記第１の訂正用データを生成するために用いる前記第２の保護対象データを、前記第１の保護対象データのＮ個後の保護対象データとし、
前記受信装置が、前記第１の個数よりも多い第２の個数の連続する保護対象データの受信に失敗した場合、前記第１の訂正用データを生成するために用いる前記第２の保護対象データを、前記第１の保護対象データのＮ個後の保護対象データよりも後の保護対象データとする
ことを特徴とする請求項６記載の訂正用データの生成装置。
【請求項８】
前記生成手段は、
前記第１及び第２の保護対象データを含む複数の保護対象データを用いて前記第１の訂正用データを生成するとともに、前記第１及び第３の保護対象データを含む複数の保護対象データを用いて前記第２の訂正用データを生成し、
前記入力手段により入力された順番がＮ個間隔の保護対象データを、前記第１及び第２の保護対象データを含む複数の保護対象データとして用いて、前記第１の訂正用データを生成するとともに、前記入力手段により入力された順番がＭ個間隔の保護対象データを、前記第１及び第３の保護対象データを含む複数の保護対象データとして用いて、前記第２の訂正用データを生成する
ことを特徴とする請求項１記載の訂正用データの生成装置。
【請求項９】
前記生成手段は、前記入力された保護対象データの個数を素因数分解することによって得られた値に基づいて、前記第１の訂正用データを生成するために用いる保護対象データの組み合わせを決定する
ことを特徴とする請求項１記載の訂正用データの生成装置。
【請求項１０】
エラーした保護対象データを訂正するために用いる訂正用データの生成装置であって、
保護対象データを入力する入力手段と、
前記エラーした第１の保護対象データを訂正するために用いる第１の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データに連続するＮ個の保護対象データを用いて生成すると共に、
前記エラーした前記第１の保護対象データを訂正するために用いる第２の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データに連続するＭ個の保護対象データを用いて生成する生成手段と
を有することを特徴とする訂正用データの生成装置。
【請求項１１】
エラーした保護対象データを訂正するために用いる訂正用データの生成装置が行う生成方法であって、
保護対象データを入力する入力工程と、
前記エラーした第１の保護対象データを訂正するために用いる第１の訂正用データを、前記第１の保護対象データと、当該第１の保護対象データの次の保護対象データよりも後の第２の保護対象データとを用いて生成すると共に、
前記エラーした前記第１の保護対象データを訂正するために用いる第２の訂正用データを、前記第２の保護対象データを用いずに、前記第１の保護対象データと、前記第２の保護対象データよりも後の第３の保護対象データとを用いて生成する生成工程と
を有することを特徴とする訂正用データの生成方法。
【請求項１２】
エラーした保護対象データを訂正するために用いる訂正用データを生成するコンピュータに、
保護対象データを入力する入力手順と、
前記エラーした第１の保護対象データを訂正するために用いる第１の訂正用データを、前記第１の保護対象データと、当該第１の保護対象データの次の保護対象データよりも後の第２の保護対象データとを用いて生成すると共に、
前記エラーした前記第１の保護対象データを訂正するために用いる第２の訂正用データを、前記第２の保護対象データを用いずに、前記第１の保護対象データと、前記第２の保護対象データよりも後の第３の保護対象データとを用いて生成する生成手順と
を実行させることを特徴とするプログラム。
【請求項１３】
エラーした保護対象データを訂正するために用いる訂正用データの生成装置が行う生成方法であって、
保護対象データを入力する入力工程と、
前記エラーした第１の保護対象データを訂正するために用いる第１の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データに連続するＮ個の保護対象データを用いて生成すると共に、
前記エラーした前記第１の保護対象データを訂正するために用いる第２の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データに連続するＭ個の保護対象データを用いて生成する生成工程と
を有することを特徴とする訂正用データの生成方法。
【請求項１４】
エラーした保護対象データを訂正するために用いる訂正用データを生成するコンピュータに、
保護対象データを入力する入力手順と、
前記エラーした第１の保護対象データを訂正するために用いる第１の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データに連続するＮ個の保護対象データを用いて生成すると共に、
前記エラーした前記第１の保護対象データを訂正するために用いる第２の訂正用データを、前記第１の保護対象データと、前記第１の保護対象データに連続するＭ個の保護対象データを用いて生成する生成手順と
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エラーした保護対象データのエラー訂正をするためのエラー訂正用データの生成方法に関する。
【背景技術】
【０００２】
インターネットなどの通信網を用いた映像伝送の普及にともない、ＲＴＰ（Ａ  Ｔｒａｎｓｐｏｒｔ  Ｐｒｏｔｏｃｏｌ  ｆｏｒ  Ｒｅａｌ−Ｔｉｍｅ  Ａｐｐｌｉｃａｔｉｏｎｓ）といったリアルタイム性を持った通信プロトコルが本格的に利用されてきている。ＲＴＰは、高速かつ軽量な伝送特性を持つＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）上に実装されることを想定しており、動画や音声などの大容量データを連続的に伝送する目的で設計されたものである。
【０００３】
このような通信プロトコルで送信される通信データのエラーに対する耐性を強化する方法として、たとえば再送制御やＦＥＣ（Ｆｏｒｗａｒｄ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ、前方誤り訂正）が知られている。特にＦＥＣは、送信側で、通信データと共に、通信データのエラーを訂正するために用いる冗長データを送信し、エラーした通信データの訂正を受信側で行うことができる。
【０００４】
ＦＥＣには様々な方法があるが、比較的処理負荷が小さく広く知られたものに、一般にクロスＦＥＣ（または２Ｄ−ＦＥＣ）と呼ばれる排他的論理和を用いた方法がある（例えば、［非特許文献１］）。
【０００５】
クロスＦＥＣでは、伝送するパケットをたとえばＬ列Ｄ行の行列に整列し、列方向および行方向にそれぞれ排他的論理和を計算し、結果として得られたデータを冗長データとする。この冗長データをパケット化して伝送することにより、冗長データを含む列方向または行方向のパケット群からひとつのパケットロスが発生しても、排他的論理和の計算を適用することにより、回復することが可能となる。
【０００６】
図１０は、典型的なクロスＦＥＣ適用の従来例である。この例では、伝送するパケットを５列７行の行列に整列して１２個の冗長パケットを生成している。それぞれの矩形は伝送パケットである。そして、例えばデータパケット１〜５を用いて行方向のＦＥＣパケットｆ１が生成され、データパケット１、６、１１、１６、２１、２６、３１を用いて列方向のＦＥＣパケットＦ１が生成される。すなわち、ＦＥＣパケットＦ１〜Ｆ５は、列方向のＦＥＣパケット（冗長パケット）であり、ＦＥＣパケットｆ１〜ｆ７は、行方向のＦＥＣパケット（冗長パケット）である。
【０００７】
クロスＦＥＣ方式は、データパケットと共に、行方向のＦＥＣパケットと列方向のＦＥＣパケットを送信する。そして、例えば、ある行のデータパケットのうちの１つにエラーが発生しても、当該行のエラーが発生していないデータパケットと、当該行で生成された行方向のＦＥＣパケットを用いてエラーを訂正することができる。列についても同様である。たとえば、データパケット７が損失した場合、ＦＥＣパケットＦ２と第２列のデータパケット群、あるいは、ＦＥＣパケットｆ２と第２行のデータパケット群よりこれを回復することが出来る。
【０００８】
また、列方向の冗長パケットのみ、あるいは、行方向の冗長パケットのみを適用してＦＥＣを構成することもできる。これを２Ｄ−ＦＥＣに対して１Ｄ−ＦＥＣと呼ぶ場合もある。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Ｐｒｏ−ＭＰＥＧ  Ｃｏｄｅ  ｏｆ  Ｐｒａｃｔｉｃｅ  ＃３  ｒｅｌｅａｓｅ  ２、Ｐｒｏ−ＭＰＥＧ  Ｆｏｒｕｍ、２００４年７月
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、エラーの発生パターンによっては、冗長データによるエラーの訂正ができない場合があった。
【００１１】
例えば、図１０のデータパケット７、９、１２、１４がエラーした場合について説明する。このとき、エラーしたデータパケット７、９は、冗長パケットｆ２を用いて排他的論理和演算をしてもエラー訂正できない。また、エラーしたデータパケット７と１２は、冗長パケットＦ２を用いて排他的論理和演算をしてもエラー訂正できない。同様に、データパケット１４もエラー訂正できない。
【００１２】
また、例えば、図１０のデータパケット１〜８がエラーした場合、データパケット４と５は、それぞれ冗長パケットＦ４とＦ５を用いてエラー訂正することができるが、データパケット１〜３とデータパケット６〜８は、冗長パケットによるエラー訂正できない。
【００１３】
例えば、通信経路上において、上記のような周期的なエラーや連続的なエラーが発生すると、冗長データによるエラー訂正ができない場合があった。尚、ここでは、排他的論理和を用いた方法で冗長パケットを生成した場合について説明しているが、たとえばリードソロモン符号のようなより冗長性に優れた方式を用いたとしても、回復可能な上限数を超えてパケットロスが発生すればエラー訂正不可能である。
【００１４】
本発明は、上述した問題を解決するためになされたものであり、その目的は、データ損失の発生パターンにより対応したエラー訂正用データの生成方法を提供することである。
【課題を解決するための手段】
【００１５】
上記課題を解決するために、本発明のエラー訂正用データの生成装置は、例えば、以下の構成を有する。即ち、エラーした保護対象データを復元するために用いるエラー訂正用データの生成装置であって、保護対象データを入力する入力手段と、前記エラーした第１の保護対象データを復元するために用いる第１のエラー訂正用データを、前記第１の保護対象データと、当該第１の保護対象データの次の保護対象データよりも後の第２の保護対象データとを用いて生成すると共に、前記エラーした前記第１の保護対象データを復元するために用いる第２のエラー訂正用データを、前記第２の保護対象データを用いずに、前記第１の保護対象データと、前記第２の保護対象データよりも後の第３の保護対象データとを用いて生成する生成手段とを有する。
【発明の効果】
【００１６】
本発明によれば、データ損失の発生パターンにより対応したエラー訂正用データを生成することができる。
【図面の簡単な説明】
【００１７】
【図１】システム機能ブロック図
【図２】サーバー１０１の構成ブロック図
【図３】冗長パケットの生成パターンの例
【図４】サーバー１０１における処理の１例を示すフローチャート
【図５】冗長パケットの生成パターン変更処理の１例を示すフローチャート
【図６】行列情報参照テーブルの例
【図７】実施形態におけるＦＥＣパケットの構造の例
【図８】冗長パケットの生成パターンの別の例
【図９】記録媒体への適用例の模式図
【図１０】クロスＦＥＣ適用の従来例
【発明を実施するための形態】
【００１８】
以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１９】
＜実施形態１＞
本実施形態の映像伝送システムの構成について、図１のシステム機能ブロック図を参照して説明する。
【００２０】
図１において、サーバー１０１は、映像データを伝送する通信機能を備えたサーバーであり、単一もしくは複数のコンピュータ装置で実現してもよいし、例えば、通信機能を備えたカメラ（撮像装置）であってもよい。サーバー１０１は、クライアント１０２に送信するデータパケットを用いてエラー訂正用の冗長パケットを生成し、クライアント１０２に送信する。即ち、サーバー１０１は、エラーしたデータパケット（保護対象データ）を訂正するために用いる冗長パケット（訂正用データ）を生成する生成装置である。尚、本形態では、映像データのデータパケットをクライアント１０２に送信する場合について説明するが、音声データやメタデータなどに本発明を適用することも可能である。
【００２１】
クライアント１０２は、サーバー１０１より伝送された映像データを受信する通信機能を備えたクライアントであり、単一もしくは複数のコンピュータ装置で実現してもよいし、例えば、通信機能を備えたストレージ装置やテレビであってもよい。これらサーバー１０１とクライアント１０２は、互いに通信可能なようにネットワーク１０３で接続されている。
【００２２】
サーバー１０１は、映像取得部１０４、データパケット生成部１０５、ＦＥＣ生成部１０６、送受信部１０７を含んで構成されている。また、クライアント１０２は、送受信部１０８、再構成部１０９、映像処理部１１０を含んで構成されている。
【００２３】
サーバー１０１の映像取得部１０４は、クライアント１０２に対して送信する映像データを取得する。映像取得部１０４は、例えば、映像センサと符号化モジュールなどから構成されるカメラ機能を含み、クライアント１０２に送信する映像データを取得する。また、例えば、符号化された映像データを記録する記録装置から読み出しを行うことによって映像データを取得する。
【００２４】
データパケット生成部１０５は、映像取得部１０４により取得された映像データを通信に適したサイズに分割し、データパケット（保護対象データ）を生成する。より具体的には、例えば、ネットワーク１０３がＩＰネットワークであり、通信プロトコルとしてＲＴＰを用いる場合、データパケットは、一般に１５００バイト程度のＲＴＰパケットとして生成される。そして、データパケット生成部１０５は、生成したデータパケットを入力する。即ち、データパケット生成部１０５は、データパケット（保護対象データ）を入力する。ただし、本形態では、データパケットに含まれる、例えばクライアント１０２の宛先に関する情報などは、冗長パケットによってエラーを訂正するための保護対象データに含まない。
【００２５】
ＦＥＣ生成部１０６は、データパケット生成部１０５により入力された１つ以上のデータパケットを用いて冗長パケット（ＦＥＣパケット）を生成する。ここで、冗長パケット（ＦＥＣパケット）は、クライアント１０２が正常に受信しなかったデータパケットのエラーを訂正するために用いるエラー訂正用パケットである。本形態では、排他的論理和による冗長パケットを生成する場合について説明するが、リードソロモン符号化などの方法を用いることも可能である。
【００２６】
送受信部１０７は、データパケット生成部１０５により生成されたデータパケット、及び、ＦＥＣ生成部１０６により生成された冗長パケットを送信する。即ち、送受信部１０７は、入力されたデータパケット（保護対象データ）と生成された訂正用データをクライアント１０２（受信装置）に対して送信する。また、送受信部１０７は、クライアント１０２が送信した通信情報パケットを受信する。
【００２７】
クライアント１０２の送受信部１０８は、ネットワーク１０３を介してサーバー１０１からのデータパケットと冗長パケットを受信する。また、送受信部１０８は、サーバー１０１に対して、パケットの受信状況を示す通信状況パケットを送信する。
【００２８】
再構成部１０９は、送受信部１０８によって受信されたパケットを、データパケットと冗長パケットに分けて映像データを再構成する。また、再構成部１０９は、必要に応じて、通信途中などにおけるデータパケットのエラーを、冗長データと正常に受信されたデータパケットを用いて訂正する。
【００２９】
映像処理部１１０は、再構成部１０９によって再構成された映像データを処理する。例えば、映像処理部１１０は、記録装置に映像データを記録したり、映像データを復号化して表示デバイスに表示させる。
【００３０】
図２は、サーバー１０１を、通信機能を有する撮像装置に適用した場合における装置構成の例を示した図である。尚、図２を用いて説明する以下の処理は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１４が、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２１３に格納された制御プログラム（ファームウェア）に基づいて各部を制御することにより実行される。ただし、この形態に限らず、例えば、以下の処理の少なくとも一部を、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）回路を利用した高速なメモリ２１０のアクセスにより実行するようにしても良い。
【００３１】
まず、撮影しようとする被写体の画像は、光学系からなる撮影レンズユニット２０１を通って光学センサ２０５に結像する。撮影レンズユニット２０１の制御は、撮影レンズユニット駆動回路２０２によって行われる。この時、絞りを含む絞りユニット２０３が絞りユニット駆動回路２０４によって操作され、結像する光は適切に光量調整される。光学センサ２０５は、固体撮像素子（ＣＣＤやＣＭＯＳセンサなど）によって構成され、入射した光を光量に応じて電荷に変換、蓄積する。この電荷を読み出し、Ａ／Ｄコンバータ２０７でデジタル化することにより、圧縮されていないデジタル画像データが生成される。生成されたデジタル画像データは、画像信号処理回路２０８でホワイトバランス補正やガンマ補正といった補正が行われ、符号圧縮回路２０９に受け渡される。
【００３２】
符号圧縮回路２０９は、補正処理後のデジタル画像データを動画像の符号化のアルゴリズムにより圧縮処理する。動画像の符号化アルゴリズムとして、たとえば、連続したＪＰＥＧ（ＩＳＯ／ＩＥＣ  １０９１８）符号化による、いわゆるモーションＪＰＥＧを用いることが可能である。また、動画像の符号化アルゴリズムとして、ＭＰＥＧ−２（ＩＳＯ／ＩＥＣ  １３８１８）やＭＰＥＧ−４（ＩＳＯ／ＩＥＣ  １４４９６）などのフレーム間予測を行う形式を用いても良い。圧縮処理されて得られた映像データは、メモリ２１０に一時保存される。
【００３３】
ここまでの一連の処理が、図１における映像取得部１０４が行う処理に対応する。
ＣＰＵ２１４は、メモリ２１０に一時保存された映像データを通信に適した形式に整形してクライアント１０２に送信されるデータパケットを生成する。そして、生成したデータパケットをメモリ２１０に一時保存する。すなわち、ＣＰＵ２１４は、クライアント１０２に送信する映像データのデータパケットを生成する。この処理は、データパケット生成部１０５の処理に対応する。ＣＰＵ２１４は、メモリ２１０に格納されたデータパケットに対し、冗長パケットを生成し、メモリ２１０に保存を行う。この処理は、ＦＥＣ生成部１０６の処理に対応する。ＣＰＵ２１４は、生成されたデータパケットおよび冗長パケットを、ネットワークコントローラ２１１を介してクライアント１０２へ送信する。
【００３４】
尚、本形態では、図２を用いて説明した処理のうち、冗長パケットの生成を、ＣＰＵ２１４ではなく、冗長化回路２１５によって行う。これは、以下の理由による。すなわち、ＣＰＵ２１４によって冗長パケットを生成すると、冗長パケットの生成パターンや、冗長度によっては、処理コストが大きくなり、他の処理に影響を与えることがある。従って、本形態のサーバー１０１では、冗長パケットの生成をＣＰＵ２１４とは別の冗長化回路２１５によって行う。ただし、冗長パケットの生成処理をＣＰＵ２１４によって行うようにしても良い。また、冗長パケットの生成パターンや冗長度に基づいてコストを予測し、冗長パケットを冗長化回路２１５を用いて生成するか、ＣＰＵ２１４で生成するかを切り替えるようにしても良い。
【００３５】
また、通信パケットに関する処理を通信回路２１２上で行ってもよい。近年、主たるＣＰＵの処理負荷を軽減するため、通信回路上にサブＣＰＵを配置し、このサブＣＰＵ上で通信に関する処理を行うといったオフローディングと呼ばれる機構が実際に実装されている。本構成はこのような通信のオフローディングにより実現されてもよい。
【００３６】
次に、冗長パケット（ＦＥＣパケット）によるエラー訂正の原理について説明する。尚、冗長パケットによるエラー訂正の方式には、リードソロモン符号化など様々な方法が知られているが、ここでは、排他的論理和による方法について説明する。
【００３７】
たとえば、２バイト（１６ビット）からなる２つのデータＡとＢが存在するものと仮定する。このＡとＢの２つのデータの排他的論理和を演算し、その結果をデータＣとする。これらＡ、Ｂ、Ｃの３つのデータのうち、ＡまたはＢが失われた場合、残された２つのデータであるＢとＣ、またはＡとＣの排他的論理和を演算した結果は、この失われたＡまたはＢとなる。
【００３８】
今、２つのデータＡとＢを仮定して説明したが、もし、Ｎ個のデータであっても同様に演算を行うことが出来る。排他的論理和の結果となる冗長データを含むＮ＋１個のデータのうちのひとつが失われたとしても、同様に演算により失われたデータを回復することが出来る。
【００３９】
リードソロモン符号を応用した方式では、ひとつではなく、複数のデータが失われた場合でも回復が可能である。このような方式では、回復は更に容易となるが、基本的な回復の仕組みは排他的論理和の場合と同様に理解することができる。
【００４０】
次に図３を用いて、本実施形態における冗長パケットの生成パターンと、冗長パケットによるエラー訂正処理について説明する。
【００４１】
本形態においては、データパケットのグループ（データパケット１〜３５）を、複数の異なるカラム数（列数）の論理的な行列形式に整列する。図３では、データパケット１〜３５を５列７行の行列３０１と７列５行の行列３０３の２つの行列として整列している。尚、データパケット１〜３５は、図１０におけるデータパケット１〜３５に対応する。また、この番号に基づいて、データパケットの送信順序が決定される。つまり、データパケット２は、データパケット１よりも後に送信される。また、データパケット３５は、データパケット１〜３５の中で、最後に送信される。
【００４２】
ＦＥＣ生成部１０６は、これら５列７行の行列３０１と７列５行の行列３０３に整列されたデータパケットのそれぞれについて、列方向、すなわち縦方向に冗長パケット（ＦＥＣパケット）を生成する。すなわち、ＦＥＣ生成部１０６は、行列３０１の１列目のデータパケット１、６、１１、１６、２１、２６、３１を用いて、冗長パケットＦａ１を生成する。上記したように、冗長パケットＦａ１は、データパケット１、６、１１、１６、２１、２６、３１のうちのいずれか１つがエラーしても、それ以外のデータパケットと、冗長パケットＦａ１で排他的論理和の演算を実行することにより、エラーを訂正することができる。即ち、ＦＥＣ生成部１０６は、エラーしたデータパケット１（第１の保護対象データ）を訂正するために用いる冗長パケットＦａ１（第１の訂正用データ）を、データパケット１と、データパケット６（第２の保護対象データ）を用いて生成する。尚、データパケット６は、データパケット１（第１の保護対象データ）の次の保護対象データ（データパケット２）よりも後の保護対象データである。
【００４３】
また、ＦＥＣ生成部１０６は、冗長パケットＦａ１と同様にして、冗長パケットＦａ２〜Ｆａ５を生成する。
【００４４】
さらに、ＦＥＣ生成部１０６は、行列３０３の１列目のデータパケット１、８、１５、２２、２９を用いて、冗長パケットＦｂ１を生成する。即ち、ＦＥＣ生成部１０６は、エラーしたデータパケット１を訂正するために用いる冗長パケットＦｂ１（第２の訂正用データ）を、以下のように生成する。つまり、ＦＥＣ生成部１０６は、冗長パケットＦｂ１を、データパケット６（第２の保護対象データ）を用いずに、データパケット１と、データパケット８（第３の保護対象データ）を用いて生成する。尚、データパケット８（第３の保護対象データ）は、データパケット６（第２の保護対象データ）よりも後の保護対象データである。
【００４５】
また、ＦＥＣ生成部１０６は、冗長パケットＦｂ１と同様にして、冗長パケットＦｂ２〜Ｆｂ７を生成する。
【００４６】
尚、データパケット１〜３５、及び、冗長パケットＦａ１〜Ｆａ５、冗長パケットＦｂ１〜Ｆｂ７の送信順序を、図３の通信パケット群３０５として示す。同図に示すように、送受信部１０７は、データパケット１〜２９を順次送信し、その次に冗長パケットＦｂ１を送信する。つまり、送受信部１０７は、冗長パケットＦｂ１を送信するために用いるデータパケットを送信した後に、冗長パケットＦｂ１を送信する。
【００４７】
また、通信パケット群３０５で示すように、送受信部１０７は、３５個のデータパケットに対して生成された１２個の冗長パケットを送信する。つまり、送信されるパケットの数は、４７個である。これは、図１０で送信されるパケットの数と同じである。
【００４８】
ここで、仮に、ネットワーク１０３に相当する通信経路やネットワーク１０３に送り出す通信回路上などで、データパケット１１、２３、２４、２５、２６、２９、３０が欠落したとする。図３において、これらは、太枠の矩形として記載している。
【００４９】
この場合、クライアント１０２の再構成部１０９は、５列７行の行列３０１については、冗長パケットＦａ３を用いてデータパケット２３のエラーを訂正（回復）する。一方、７列５行の行列３０３については、冗長パケットＦｂ１、Ｆｂ３、Ｆｂ５を用いてそれぞれ、データパケット２９、２４、２６のエラーが訂正される。
【００５０】
さらに、エラー訂正されたデータパケット２６を用いて、行列３０１により、データパケット１１のエラーが訂正される。同様に、行列３０３により、データパケット３０、２５のエラーが訂正される。
【００５１】
以上の手順により、すべてのデータパケットのエラーを訂正（回復）することができる。
【００５２】
なお、図１０で示した従来手法によれば、同様のデータパケットが欠落した場合、データパケット２４、２５、２９、３０のエラーを訂正することができない。
【００５３】
同様に、データパケット７、９、１２、１４がエラーした場合、図１０の構成で生成された冗長パケットでは、エラー訂正することができないが、本形態の図３の構成で生成された冗長パケットを用いれば、エラー訂正することができる。また、データパケット１〜８がエラーした場合、図１０の構成で生成された冗長パケットでは、データパケット１〜３と６〜８をエラー訂正することができないが、図３の構成で生成された冗長パケットを用いれば、すべてエラー訂正することができる。
【００５４】
このように、本形態のエラー訂正用データの生成方法によれば、図１０に示した従来の方法と冗長度（データパケット数と冗長パケット数の比）が同じであるにも関わらず、より多くのデータパケットのエラーを訂正することができる。
【００５５】
尚、図３に示した例では、行列における列数（カラム数）は、５と７であり、共約数（互いに割り切れる数）が１以外に存在していない。このため、一方の行列で同じ列にある番号の組が、もう一方の行列で同じ列に存在する周期性は、５と７の乗数である３５まで発生しない。
【００５６】
例えば、図３の行列３０１において、データパケット１と同じ列に配置されているデータパケット６、１１、１６、２１、２６、３１は、行列３０３において、データパケット１と同じ列には配置されない。ただし、もし、データパケット３６が存在する場合、行列３０１と行列３０３において、同じ列（１列目）に、データパケット１とデータパケット３６が配置されることになる。別な表現を用いれば、５と７の最小公倍数である３５個までは、同じデータパケットの組が同じ行列に配置されないことになる。
【００５７】
これに対し、例えば、カラム数を４と８にした場合、最小公倍数である８個までは、同じデータパケットの組が同じ行列に配置されないが、データパケット９〜１２が、データパケット１〜４とそれぞれ同じ列に配置されることになってしまう。従って、例えば、データパケット１と９がエラーした場合、カラム数を５と７にしていればエラー訂正できるが、カラム数が４と８の場合はエラー訂正できない。
【００５８】
このように、列数を５と７にした場合と、列数を４と８にした場合では、データパケット数に対する冗長パケット数は同じであるが、列数を５と７にした場合のほうが、より高い確率でエラーを訂正することができるようになる。
【００５９】
従って、本形態のＦＥＣ生成部１０６は、冗長度（データパケット数に対する冗長パケットの数）に応じて取り得る列数（カラム数）の値の範囲から、最小公倍数ができるだけ大きくなるように、複数の行列の列数を決定する。
【００６０】
図４は、本発明におけるサーバー１０１における処理の１例を示すフローチャートである。
【００６１】
ステップＳ４０１において、ＦＥＣ生成部１０６は、初期パラメータ４１０を読み出して、それを行列情報とする。初期パラメータ４１０は、行列の行数と列数のデフォルト値であり、たとえば、図３において例示した、５列７行の行列３０１と７列５行の行列３０３を生成するための、（５，７）および（７，５）といった情報である。
【００６２】
ステップＳ４０２において、データパケット生成部１０５は、映像取得部１０４によって取得された映像データ４１１を読み出す。映像データ４１１が全体としてたとえばＭＰＥＧ−４形式で圧縮された圧縮動画像であれば、その１フレームや１ビデオパケット（再同期マーカーで区切られた映像データの１つ）が読み出される。本形態では、１フレームごとに処理を行う場合について説明する。
【００６３】
ステップＳ４０３において、データパケット生成部１０５は、ステップＳ４０２で読み出された映像データに基づいて、データパケット４１２を生成する。ここでは、１フレーム分のデータパケットが生成される。尚、フローチャート上では、データパケット４１２は、映像データ４１１が格納されている記憶領域とは異なる記憶領域に出力するように記載されているが、これに限らない。すなわち、映像データ４１１を通信パケットとして取り扱うための区切り位置を、映像データ４１１を格納しているメモリ２１０上のアドレスとして記録するといった方法であってもよい。
【００６４】
ステップＳ４０４において、ＦＥＣ生成部１０６は、クライアント１０２から送信された通信情報パケットの内容（通信情報４１３）に応じて、初期パラメータに基づいて生成された行列情報を修正する。つまり、ステップＳ４０４において、ＦＥＣ生成部１０６は、通信情報４１３に応じて、初期パラメータに基づく行数と列数を修正する。ただし、例えば、通信情報４１３があらかじめ取得済みであれば、ステップＳ４０１で、通信情報４１３に応じた行数と列数を求められるため、ステップＳ４０４の処理を省略できる。ステップＳ４０４の詳細は後述する。
【００６５】
ステップＳ４０５（入力手順）において、データパケット生成部１０５は、ステップＳ４０３で生成したデータパケットをＦＥＣ生成部１０６に入力する。即ち、ステップＳ４０５において、データパケット生成部１０５は、データパケット（保護対象データ）を入力する。そして、ＦＥＣ生成部１０６は、入力されたデータパケットの行列を生成する。
【００６６】
ステップＳ４０６（生成手順）において、ＦＥＣ生成部１０６は、ステップＳ４０５で生成された行列に基づいて、冗長パケット４１４を生成する。冗長パケットの生成方法については、図３を用いて説明した通りである。
【００６７】
即ち、ステップＳ４０６で、ＦＥＣ生成部１０６は、エラーしたデータパケット１（第１の保護対象データ）を訂正するために用いる冗長パケットＦａ１（第１の訂正用データ）を、データパケット１と、データパケット６を用いて生成する。ここで、データパケット６（第２の保護対象データ）は、データパケット１の次のデータパケット２よりも後のデータパケットである。
【００６８】
また、ステップＳ４０６で、ＦＥＣ生成部１０６は、エラーしたデータパケット１を訂正するために用いる冗長パケットＦｂ１（第２の訂正用データ）を、データパケット６（第２の保護対象データ）を用いずに、データパケット１と８を用いて生成する。ここで、データパケット８（第３の保護対象データ）は、データパケット６（第２の保護対象データ）よりも後のデータパケットである。
【００６９】
より詳細には、ＦＥＣ生成部１０６は、データパケット生成部１０５から入力された順番が５個間隔（Ｎ個間隔）のデータパケット１、６、１１、１６、・・・３１を、複数の保護対象データとして用いて冗長パケットＦａ１（第１の訂正用データ）を生成する。また、ＦＥＣ生成部１０６は、データパケット生成部１０５から入力された順番が７個間隔（Ｍ個間隔）のデータパケット１、８、１５、・・・２９を、複数の保護対象データとして用いて冗長パケットＦｂ１（第２の保護対象データ）を生成する。
【００７０】
尚、この処理は、行列の個数分だけ行われることになる。図３で示した例では、２つの行列（行列３０１と行列３０３）があるため、２個分、行われる。
【００７１】
ステップＳ４０７において、送受信部１０７は、複数の行列のすべてにおいて冗長パケットの生成が完了したか否かを判定する。
【００７２】
そして、ステップＳ４０７において冗長パケットの生成が完了したと判定されると、ステップＳ４０８において、送受信部１０７は、データパケットと冗長パケットを送信する。つまり、ステップＳ４０７において、１フレーム分の冗長パケットの生成が２個の行列分、完了したと判定されると、送受信部１０７は、そのフレームのデータパケットと冗長パケットをクライアント１０２に対して送信する。
【００７３】
ステップＳ４０９において、送受信部１０７は、データパケットの送信処理を完了するか否かを判定する。例えば、送受信部１０７が、クライアント１０２から映像の配信を終了することを示す終了パケットを受信すると、データパケットの送信処理を完了すると判定し、図４の処理を終了する。一方、図４の処理を継続する場合は、ステップＳ４０２に戻り、次のフレームの映像データの取得が行われる。
【００７４】
本フローチャートは、処理の１例であって、実装上は一部処理が前後したり並列化して処理されたりしてもよい。たとえば冗長パケット４１４は実際には、カラム（列）数分だけ存在するため、それらのひとつひとつが生成される度にパケット送信が行われてもよい。あるいは、データパケットをあらかじめ送信した後、メモリ２１０に残されたデータパケットを用いて冗長パケットを生成してもよい。あるいはまた、複数の行列が存在する時、そのそれぞれの行列に対する冗長パケット生成Ｓ４０６を並列処理で行ってもよい。
【００７５】
次に、ステップＳ４０４における行列情報の修正処理の詳細について説明する。尚、ステップＳ４０４は、初期パラメータに基づく行列情報（行数と列数）を、クライアント１０２（受信装置）からの通信情報４１３に基づいて修正する処理である。
【００７６】
図５は、ステップＳ４０４の処理内容の１例を示すフローチャートである。
【００７７】
以下の説明では、説明をより具体的にするため、通信情報４１３として、バーストエラー長を用いて説明する。ここに、バーストエラー長とは、連続して損失した通信パケットの数である。
【００７８】
通信情報４１３のほかの例としては、通信エラー率や有効帯域、あるいは、帯域と関連した冗長化率（データパケット全体に対する冗長パケットの割合）など様々な例がある。
【００７９】
本形態のＦＥＣ生成部１０６は、次に示す３つの条件を満たすように、行数と列数（行列情報）を修正する。すなわち、１つ目の条件として、ＦＥＣ生成部１０６は、複数の行列の列数の最小公倍数が、ステップＳ４０３で生成されるデータパケット数の最大値（最大パケット数）以上となるように、行数と列数を修正する。本形態では、ステップＳ４０３において、１フレームごとにデータパケットを生成しているので、複数の行列の列数の最小公倍数が１フレーム当たりのデータパケット数の最大値以上となるように、行数と列数が修正される。
【００８０】
尚、１フレーム当たりのデータパケットの最大値は、過去のフレームに対して生成されたデータパケット数の最大値（最大パケット数）である。つまり、フレームごとに、生成されるデータパケット数は異なるが、過去に最も多くのデータパケットが生成されたフレームのデータパケット数が最大パケット数５１１として、メモリ２１０に記憶されている。尚、例えば、最近、処理した所定数のフレーム（例えば１００フレーム）のうち、生成されるデータパケット数が最も多かったフレームのデータパケット数を最大パケット数５１１としても良い。
【００８１】
即ち、ＦＥＣ生成部１０６は、第１の個数（最大パケット数）の保護対象データ（データパケット）が入力された場合、以下のように、冗長パケットを生成する。すなわち、データパケット１（第１の保護対象データ）と、その５個後（Ｎ個後）のデータパケット６を用いて冗長パケットＦａ１（第１の訂正用データ）を生成する。また、ＦＥＣ生成部１０６は、データパケット１と、その６個後（Ｍ個後）のデータパケット８を用いて冗長パケットＦｂ１（第２の訂正用データ）を生成する。このとき、ＦＥＣ生成部１０６は、ＮとＭの最小公倍数が、最大パケット数以上となるように、ＮとＭを決定する。
【００８２】
上述したように、列数の最小公倍数までは、同じデータパケットの組み合わせが複数の行列の同じ列に配置されない。従って、列数の最小公倍数をステップＳ４０３で生成されるデータパケット数の最大値以上とすることにより、同じデータパケットの組み合わせが、複数の行列の同じ列に配置されなくなるようにすることができる。
【００８３】
このように、ＦＥＣ生成部１０６は、入力された保護対象データの個数（最大パケット数）に基づいて、冗長パケットＦａ１を生成するために用いるデータパケットの組み合わせを決定する。
【００８４】
また、２つ目の条件として、ＦＥＣ生成部１０６は、複数の行列の列数の最小値がバーストエラー長以上となるように、行数と列数を修正する。ここで、バーストエラー長は、クライアント１０２によって送信された通信情報４１３に基づいて決定される。即ち、ＦＥＣ生成部１０６は、通信状況情報（通信情報４１３）によって示される通信状況（バーストエラー長）に応じて、冗長パケットＦａ１（第１の訂正用データ）を生成するためにデータパケット１と共に用いるデータパケットを決定する。
【００８５】
具体的には、ＦＥＣ生成部１０６は、例えば、バーストエラー長が６であった場合（受信装置が、連続する６個のデータパケットの受信に失敗した場合）、最小の列数を７にし、バーストエラー長が８であった場合、最小の列数を９にする。即ち、ＦＥＣ生成部１０６は、受信装置が、連続する６個のデータパケットの受信に失敗した場合、冗長パケットＦａ１を生成するために用いるデータパケットを、データパケット１の６個後（Ｎ個後）のデータパケット７とする。また、ＦＥＣ生成部１０６は、受信装置が、連続する８個のデータパケットの受信に失敗した場合、冗長パケットＦａ１を生成するために用いるデータパケットを、データパケット１の８個後（Ｍ個後）のデータパケット９とする。このように、複数の行列のすべての列数をバーストエラー長よりも大きくすることで、バーストエラーに対するエラー耐性をより向上させることができる。
【００８６】
また、３つ目の条件として、ＦＥＣ生成部１０６は、列数の最大値が、ステップＳ４０３で生成されるデータパケット数の最小値を２で除算した商以下となるように、行数と列数を決定する。これは、冗長パケットが２つ以上のデータパケットを用いて生成されるようにするためである。本形態のＦＥＣ生成部１０６は、過去のフレームに対して生成されたデータパケット数の最小値（最小パケット数）を、最大パケット数と同様に、記憶している。
【００８７】
本形態のＦＥＣ生成部１０６は、ステップＳ４０４において、初期パラメータにより決定された行列情報（行数と列数）が、上記の３つの条件を満たしている場合は、行列情報を修正せず、行列情報が３つの条件を満たしていない場合は、行列情報を修正する。ただし、行列情報を３つ条件を満たすようにすることは、必須ではない。
【００８８】
図５のステップＳ５０１において、ＦＥＣ生成部１０６は、初期パラメータ４１０に基づいてステップＳ４０１で決定された行列情報を読み出し、それを初期の行列情報として設定する。
【００８９】
ステップＳ５０２において、ＦＥＣ生成部１０６は、送受信部１０７によって受信された通信情報４１３に基づいて、バーストエラー長を取得する。ここで、通信情報４１３に、バーストエラー長の情報が含まれていれば、その値を用いる。また、バーストエラー長の情報は含まれていないが、エラーが発生した通信パケット（データパケット、冗長パケット）の識別情報（シーケンスナンバーなど）が含まれている場合は、その情報に基づいて、バーストエラー長を取得する。尚、複数のバーストエラーが発生している場合は、各バーストエラー長の平均値を採用しても良いし、最も長いバーストエラー長を採用しても良いし、統計的に最も頻度の高いバーストエラー長を採用するなどが可能である。
【００９０】
ステップＳ５０３において、ＦＥＣ生成部１０６は、１つの行列を構成するデータパケット数の最大値（最大パケット数）を決定する。上述のように、最大パケット数は、過去に処理したフレームにおける、１フレーム当たりに生成されたデータパケット数の最大値である。また、最大パケット数は、メモリ２１０に記憶されている。ＦＥＣ生成部１０６は最大パケット数５１１を読み出し、その値を最大パケット数とする。
【００９１】
ただし、最大パケット数を決定するための他の方法として、例えば、ステップＳ４０２で読み出された映像データ長を、データパケット長で除算して得られた数を採用する方法がある。
【００９２】
また、例えばメモリ上の制約により、冗長パケットを生成するために利用するデータパケット数に上限値が設定される場合がある。そのような場合は、メモリ２１０から読み出された最大パケット数と、設定されているデータパケット数の上限値のうち、小さいほうを最大パケット数となるようにしても良い。例えば最大パケット数５１１から読み出された最大パケット数と、設定されている上限値のうち、小さい値となるように決定しても良い。
【００９３】
そして、ステップＳ５０４において、ＦＥＣ生成部１０６は、初期の行列情報の列数の最小公倍数（ＬＣＭ）を算出する。
【００９４】
ステップＳ５０５において、ＦＥＣ生成部１０６は、ステップＳ５０３で決定された最大パケット数が、ステップＳ５０４で算出された最小公倍数（ＬＣＭ）以下であるかどうかを判定する。すなわち、ＦＥＣ生成部１０６は、ステップＳ５０５において、初期の行列情報が、上記の１つ目の条件を満たしているか否かを判定する。尚、初期の行列情報は、ステップＳ５０１で設定された、初期パラメータに基づく行列情報（行数と列数）である。初期の行列情報が１つ目の条件を満たしていると判定された場合はステップＳ５０６に進み、満たしていないと判定された場合はステップＳ５０７に進む。ステップＳ５０６において、ＦＥＣ生成部１０６は、ステップＳ５０２で取得されたバーストエラー長が、列数の最小値ｍｉｎ（Ｎｃ）より小さいかどうかを判定する。
【００９５】
すなわち、ステップＳ５０６において、ＦＥＣ生成部１０６は、初期の行列情報が、上記の２つ目の条件を満たしているか否かを判定する。初期の行列情報が２つ目の条件を満たしていると判定された場合はステップＳ５１０に進み、満たしていないと判定された場合はステップＳ５０７に進む。
【００９６】
尚、図５では、３つ目の条件が満たされているかを判定していないが、ステップＳ５０６とステップＳ５１０の間で判定するようにしても良い。つまり、ＦＥＣ生成部１０６は、２つ目の条件を満たしていると判定したあとに、初期の行列情報に基づく複数の行列の列数の最大値が、最小データパケット数を２で除算した商以下となるか否かを判定するようにしても良い。そして、ＦＥＣ生成部１０６は、３つ目の条件を満たしていると判定した場合はステップＳ５１０へ進み、満たしていないと判定した場合はステップＳ５０７に進んで行列情報の修正に関する処理を行う。
【００９７】
ステップＳ５０７において、ＦＥＣ生成部１０６は、ステップＳ５０２で取得されたバーストエラー長と、ステップＳ５０３で決定された最大パケット数に基づいて、上記の条件１、２、３を満たすような列数の範囲を算出する。たとえば、複数の行列における列数の最小値は、バーストエラー長が設定される（条件２）。また、列数の最大値は、パケット数を２で除算した商が設定される（条件３）。尚、列数の範囲を算出することは、必須ではない。
ステップＳ５０８において、ＦＥＣ生成部１０６は、列数の範囲に適合する行列情報を算出する。
【００９８】
ステップＳ５０８におけるＦＥＣ生成部１０６の具体的な処理例を説明する。尚、本形態では、２つの行列を生成する場合について説明する。
まず、ＦＥＣ生成部１０６は、最大パケット数の平方根を計算する。そして、平方根以下で、かつバーストエラー長より大きい素数のうち、最も大きな素数を第１のカラム数候補（第１の列数候補）とする。
【００９９】
次に、ＦＥＣ生成部１０６は、最大パケット数を第１のカラム数候補で除算し、第１のカラム数候補が割り切れた場合には、その商を第２のカラム数候補とする。このようにして得られた第１のカラム数候補と第２のカラム数候補は、そのまま、行列情報における列数として採用される。もし、最大パケット数が割り切れなかった場合は、列数の最小値（バーストエラー長）より大きく、商以下の条件にあてはまる最も大きな素数を第２のカラム数候補とする。この第２のカラム数候補を用いて最大パケット数を除算し、第１のカラム数候補をその商に１加えた値に変更する。
【０１００】
各処理において、素数が存在しなかった場合には、素数の代わりに各条件にあった最大の整数を採用する。このようにすることで、行列の条件を満たす列数が計算される。行数は、互いの列数を採用すればよい。ただし、冗長パケットをより多く生成する必要がある場合は、行数を小さく設定することも可能である。
【０１０１】
尚、上記の算出方法によれば、得られる列数がなるべく近い値になるように、２つの列数が決定される。このようにすることにより、データパケット数に対して生成される冗長パケット数を少なくすることができる。ただし、冗長パケットをより多く生成できる環境にある場合は、２つの列数が大きく異なるようにしても良い。
【０１０２】
また、上記の算出方法において、最大パケット数の平方根がバーストエラー長よりも小さい値であった場合は、第１のカラム数候補をバーストエラー長に設定し、それよりも大きい列数が第２のカラム数候補となるように２つの列数を決定することができる。
【０１０３】
上記例は、列数の算出方法の一例であり、この方法に限らない。すなわち、ポラード・ロー素因数分解法等を用いて、パケット数を素因数分解し、共役数が存在しない行列数分の因数としてまとめなおすことによって列数を計算してもよい。
【０１０４】
また、本フローチャートでは、最小公倍数が最大パケット数以上であるように設定しているが、最小公倍数ではなく、単に公倍数であってもよい。その場合には、公倍数を最小公倍数で除算した商に相当する周期性についてエラー耐性が低下することになる。
【０１０５】
ところで、ステップＳ４０４の処理は、行列情報のテーブルを用いることで簡略化することが出来る。図６は、行列情報のテーブルの例である。
【０１０６】
尚、図６では、最小公倍数ＬＣＭが３５から１３２までの値について、例示している。また、各最小公倍数の値に対して別の列数の組み合わせも存在する。
【０１０７】
図６に示した行列情報テーブルには、最小公倍数（ＬＣＭ）６０１、カラム（１）６０２、カラム（２）６０３、カラム（３）６０４、最小冗長率６０５のデータが格納されている。カラム（１）６０２、カラム（２）６０３、カラム（３）６０４はそれぞれ、行列の列数であり、ＬＣＭ６０１が３５のエントリを参照すると、列数が７と列数が５の行列が記載されている。
【０１０８】
ＦＥＣ生成部１０６は、ステップＳ５０３で取得した最大パケット長が、行列情報テーブルのＬＣＭ６０１以下となるように、エントリを選択することにより、各行列の列数（カラム数）を決定することができる。たとえば、最大パケット数が３８であった場合、ＦＥＣ生成部１０６は、ＬＣＭ６０１が３８以上のエントリを選択する。ここでは、例えば、ＬＣＭ６０１が４０のエントリが選択される。
【０１０９】
最小冗長率６０５は、各エントリにおける列数で行列を構成した場合に生成される冗長パケット４１４の総数を、データパケット数で除算した結果である。ただし、前に記載したように、冗長率を高めるために行数を変更することができるため、冗長率はより大きなものとなる可能性がある。
【０１１０】
ここで、ステップＳ５０３で取得される最大パケット数が３６の場合を例にとって、修正に用いる行列情報を決定する処理を具体的に説明する。
まず、平方根の計算によって求める方法について説明する。まず、ＦＥＣ生成部１０６は、最大パケット数３６の平方根を計算する。結果は、正確に６である。ＦＥＣ生成部１０６は、６より小さい素数として５を採用する。これにより、第１のカラム数候補は、５となる。次に、ＦＥＣ生成部１０６は、最大パケット数３６を第１のカラム数候補５で除算し、７．２を得る。７．２より小さな素数として７が得られることから、７が第２のカラム数候補となる。ＦＥＣ生成部１０６は、最大パケット数３６を第２のカラム数候補７で除算することにより５あまり１となることから、５に１を加えた６を第１のカラム数候補にする。結果として、取得されたカラム数は、７と６である。
【０１１１】
次に、素因数分解法を用いる場合の列数の算出手順について説明する。ＦＥＣ生成部１０６は、最大パケット数３６を素因数分解することにより、２ｘ２ｘ３ｘ３を得る。これにより得られる列数の組み合わせを（Ａ，Ｂ）の形式であらわすと、（２，１８）、（３，１２）、（４，９）、（６，６）の４つが得られる。しかし、（６，６）は２つの行列が同一となるため排除される。（２，１８）と（３，１２）は、最小公倍数が３６とならないため、これも対象外である。結果として得られたカラム数は、４と９である。
【０１１２】
即ち、本形態のＦＥＣ生成部１０６は、入力された保護対象データの個数（最大パケット数）を素因数分解することによって得られた値に基づいて、冗長パケットＦａ１（第１の訂正用データ）を生成するために用いるデータパケットの組み合わせを決定する。
【０１１３】
ここで注目すべき点は、４と９の組合せに含まれる４がバーストエラー長よりも大きいかどうかである。バーストエラー長が４よりも大きい場合は、バーストエラー長以上となる素数を第１のカラム数候補とし、最大パケット数と第１のカラム数候補の値から第２のカラム数を決定するようにすることが可能である。
【０１１４】
また、行列が正方形に近くなるような組合せとすることで、生成される冗長パケットの数を少なくすることができる。そこで、例えば、算出された複数の列数の組み合わせのうち、最も２つの行列が正方形に近くなる列数を採用するようにしても良い。
【０１１５】
一方、２つの行列の形が大きく異なるようにすると、冗長パケットの数は多くなるが、１つの行列でエラーを訂正できる可能性が高くなる。１つの行列でエラー訂正すれば、２つの行列を組み合わせてエラー訂正するよりも、よりエラー訂正にかかる時間を短くすることができる。そこで、冗長データを多く生成できる環境にある場合は、例えば、算出された複数の列数の組み合わせのうち、２つの行列の形が大きく異なる列数を採用するようにしてもよい。
【０１１６】
また、生成する複数の行列の形を、近い形にするか、大きく異なる形にするかを、許容する遅延時間に基づいて決定するようにしても良い。すなわち、サーバー１０１がデータパケットを送信してから、クライアント１０２がそのデータパケットを再生するまでの時間が短い場合は、より短い時間でエラー訂正ができるように、複数の行列のうち一部の列数を大きくすることが可能である。一方、サーバー１０１がデータパケットを送信してから、クライアント１０２がそのデータパケットを再生するまでの時間が十分に長い場合や、クライアント１０２はデータパケットを記録するだけの場合は、複数の行列の形が近くなるようにすることが可能である。このようにすることで、送信されるパケット数を少なくすることができる。
【０１１７】
次に、最大パケット数が３６の場合において、図６の行列情報テーブルを参照して列数を決定する手順について説明する。ＦＥＣ生成部１０６は、最大パケット数３６以上のエントリを参照することで、列数を決定する。例えば、ＬＣＭ６０１が３６のエントリにある９と４を列数として採用することができる。また、２つの列数をなるべく近い組合せを採用する場合、ＬＣＭ６０１が４２となるエントリにある７と６を列数として採用してもよい。
【０１１８】
以上説明してきたように、本発明の訂正用データの生成方法によれば、２Ｄ−ＦＥＣと同水準の冗長データ量で、より高いエラーの訂正率を実現することが可能となる。
【０１１９】
次に、ＲＴＰに本発明を適用する場合について説明する。
ＩＥＴＦ（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）が提案するＲＴＰによる映像伝送においては、ＦＥＣを適用する場合、通常のＲＴＰパケットとは異なるセッションで、ＦＥＣパケットを伝送するように標準化されている。ここに、ＲＴＰパケットは、本説明におけるデータパケット４１２であり、ＦＥＣパケットは本説明における冗長パケット４１４に相当する。
【０１２０】
ＩＥＴＦによるＦＥＣパケットには、当該ＦＥＣパケットを生成するために用いられるＲＴＰパケットのうち、最も小さな順序番号（シーケンスナンバー）と共に、列数に基づく情報が記録される。尚、列数に基づく情報は、ビットマスクとして記録される。そして、その後にＦＥＣ演算された結果が格納される。
【０１２１】
たとえば、あるＦＥＣパケットを生成するために用いられる複数のＲＴＰパケットの順序番号のうち、最も小さい順序番号が１２３であり、列数が５である場合、当該ＦＥＣパケットのヘッダには、１２３と、（００００１）ｂの繰り返しからなるマスクが記録される。ここで、繰り返し数は、行数に一致する。すなわち、行数が７の場合は、１２３と、（００００１００００１００００１００００１００００１００００１００００１）ｂが記録される。また、次のＦＥＣパケットには、１２４と、（００００１）ｂの繰り返しからなるマスクが記録される。なお、（）ｂの形式で記載した値は、バイナリ、すなわちビット列であることを示す。
【０１２２】
本形態においては、５列の行列と同時に７列の行列を生成するため、１２３と、（００００００１）ｂの繰り返しからなるマスクを設定したＦＥＣパケットも生成される。
【０１２３】
クライアント１０２は、ＲＴＰパケットのロスやビットエラーを検出した場合、エラーしたＲＴＰパケットに対応するＦＥＣパケットを、上記のようなヘッダ情報から検索し、エラー訂正処理を実行することができる。
【０１２４】
このように、従来の方式に基づいてＦＥＣパケットヘッダを生成すると、特に、列数が大きい場合に、ＦＥＣパケットヘッダが大きくなりすぎてしまうという問題がある。そこで、本形態のＦＥＣ生成部１０６は、ビットマスクの代わりに、列数と行数を指定することによってＦＥＣパケットヘッダの情報を生成する。
【０１２５】
そのような例を図７に示す。図７は、列数と行数によるＦＥＣパケットの構造の例である。
【０１２６】
ＳＮ  Ｂａｓｅ７０１は、対応するＲＴＰパケットの最も小さな順序番号を示している。これは、従来のＦＥＣパケットにも存在するデータである。ＣＯＬ７０２は、行列の列数を示している。ＲＯＷ７０３は、行数を示している。
例えば、ＦＥＣ生成部１０６は、列数が５、行数が７の行列に基づいて生成されたＦＥＣパケットには、ＳＮ  Ｂａｓｅ７０１に順序番号をセットすると共に、ＣＯＬ７０２に５の値をセットし、ＲＯＷ７０３に７の値をセットする。そして、クライアント１０２は、受信したＦＥＣパケットが、ＳＮ  Ｂａｓｅ７０１の順序番号を持つＲＴＰパケットと、それよりも５パケットずつ後のＲＴＰパケットを７個用いて生成されたＦＥＣパケットであることがわかる。
【０１２７】
このように、本形態のＦＥＣ生成部１０６は、従来のマスクの代わりに、列数と行数を記録することで、ＦＥＣパケットのデータ量を少なくすることができる。
【０１２８】
＜実施形態２＞
本発明は、排他的論理和以外の冗長パケット生成にも適用することが可能である。実施形態１においては、冗長パケットの生成例として、背景技術にも記載した排他的論理和を用いた方式を暗黙に適用してきた。しかしながら、先に説明したように、リードソロモン符号化などのその他のＦＥＣ技術を用いても本発明を実施することが出来る。
【０１２９】
リードソロモン符号化は、その誤り訂正能力の高さから、衛星通信やＤＶＤなど多くの誤り訂正に応用されている符号化技術である。リードソロモン符号化は、その適用方法によっては、対応する複数のパケットがエラーしてもそれを訂正することができる。このように、エラー訂正能力の高い方式に本発明を適用することによって、よりエラー耐性を高くすることができる。
【０１３０】
＜実施形態３＞
実施形態１では、複数の列方向の冗長パケットを生成する例について説明したが、本発明は、行方向の冗長パケットを生成に適用することが可能である。
【０１３１】
行方向の冗長パケットを生成する場合の例を図８に示す。同図において、例えば、データパケット１１、１５、２１、２５がエラーした場合、図１０のような２Ｄ−ＦＥＣではエラー訂正することができないが、図８のように複数の行列のそれぞれについて行方向の冗長データを生成することで、エラー訂正できる。つまり、エラーしたデータパケット１１と２５が、それぞれ、行列８０２の冗長パケットＦａ２、Ｆａ４を用いてエラー訂正される。その後、エラーしたデータパケット１５、２５が、それぞれ、行列８０１の冗長パケットＦｂ３、Ｆｂ５を用いてエラー訂正される。
【０１３２】
尚、本形態も、図１で説明したサーバー１０１と同様の構成によって実現可能である。即ち、本形態のデータパケット生成部１０５は、データパケット（保護対象データ）を入力する。そして、ＦＥＣ生成部１０６は、図８の行列構成において、エラーしたデータパケット１（第１の保護対象データ）を訂正するために用いる冗長パケットＦｂ１（第１の訂正用データ）を、データパケット１と、データパケット２〜５を用いて生成する。尚、データパケット２〜５は、データパケット１（第１の保護対象データ）に連続する４個（Ｎ個）の保護対象データである。
また、ＦＥＣ生成部１０６は、エラーしたデータパケット１を訂正するために用いる冗長パケットＦａ１（第２の訂正用データ）を、以下のように生成する。つまり、ＦＥＣ生成部１０６は、冗長パケットＦａ１を、データパケット１（第１の保護対象データ）と、データパケット２〜７を用いて生成する。尚、データパケット２〜７は、データパケット１（第１の保護対象データ）に連続する６個（Ｍ個）の保護対象データである。
【０１３３】
以上説明したように、本形態のように、複数の行列のそれぞれについて行方向のＦＥＣパケットを生成する場合にも、エラー訂正能力を向上させる効果がある。
【０１３４】
＜実施形態４＞
本発明は、ＩＰネットワークなどを介したデータ伝送などの用途のみならず、記録媒体などへのデータ記録にも適用することが可能である。
【０１３５】
通常、記録媒体にデータを記録する際には、データ全体を連続的に記録するのではなく、２０４８バイトといった固定長の記録媒体固有の記録単位でデータを分割して記録する。これをひとつのデータとみなすために、これらの記録単位を連結する情報を別途記録するようになっている。本発明をこのような記録媒体に適用する場合のひとつの方法は、この記録媒体固有の記録単位をデータパケット４１２とみなすことによって実現される。
【０１３６】
このような記録媒体への適用例を図９に示す。
図９において、記録媒体は、２つのディスク装置から構成されている。第１のディスク装置９０１は、一般的なファイルシステムで構成されており、論理的なファイルテーブル９０３と記録媒体固有の記録単位で記録されたデータ群９０４が格納されている。第２のディスク装置９０２は、記録媒体固有の記録単位で記録された第１の冗長データ群９０５と第２の冗長データ群９０６が格納されている。
【０１３７】
本形態において、データ群９０４は、単一のファイルの連続したデータではない。論理的なファイルテーブル９０３には、Ｆｉｌｅ−ＡからＦｉｌｅ−Ｃの３つの論理ファイルが記録されており、そのテーブルエントリの後に記録された番号とｘの付与された記号によりデータ群９０４のデータへと結び付けられている。たとえば、Ｆｉｌｅ−Ａは、１番から４個の記録単位が連続しており、その後、１０番から８個の記録単位が連続しているとなっている。
【０１３８】
図９は、説明を明確にするために、図３と極力同じ構成となるように記載している。図９のデータ群９０４は、図３の５列７行の行列３０１や７列５行の行列３０３と同じように考えることが可能である。同様に、第１の冗長データ群９０５と第２の冗長データ群９０６は、５列７行の冗長パケット３０２と７列５行の冗長パケット３０４と同一のものとみなすことが出来る。
【０１３９】
この訂正用データの生成方法は、実施形態１におけるサーバー１０１と同様である。ただし、本形態のサーバー１０１は、データパケットに基づいて映像を表示するクライアント１０２に送信せずに、サーバー１０１内の記録領域に、生成した冗長データ群を記録する。即ち、本形態のＦＥＣ生成部１０６は、実施形態１のステップＳ４０８において、生成された訂正用データ（冗長データ群９０５、９０６）を記録部に記録させる。つまり、ＦＥＣ生成部１０６は、記録制御部として動作する。
【０１４０】
尚、データパケット生成部１０５は、入力された保護対象データ（データ群９０４）を記録部に記録させている。また、クライアント１０２のような外部の機器に記録させるようにしても良い。本実施形態によれば、記録データのエラー耐性を向上させることができる。
【０１４１】
＜その他の実施形態＞
以上、実施形態例を詳述したが、本発明は例えば、システム、装置、方法、プログラム若しくは記録媒体（記憶媒体）等としての実施態様をとることが可能である。具体的には、複数の機器（例えば、ホストコンピュータ、インタフェース機器、撮像装置、ｗｅｂアプリケーション等）から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１４２】
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。なお、この場合のプログラムとは、コンピュータ読取可能であり、実施形態において図４ならびに図５に示したフローチャートに対応したプログラムである。
【０１４３】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【図１】
2010283606.tif 000003
【図２】
2010283606.tif 000004
【図３】
2010283606.tif 000005
【図４】
2010283606.tif 000006
【図５】
2010283606.tif 000007
【図６】
2010283606.tif 000008
【図７】
2010283606.tif 000009
【図８】
2010283606.tif 000010
【図９】
2010283606.tif 000011
【図１０】
2010283606.tif 000012