(57)【特許請求の範囲】
【請求項１】
他の情報処理装置から配信用データを受信する情報処理装置において、
前記他の情報処理装置により送信された、前記配信用データのデータパケット、および複数の前記データパケットに含まれる各データの排他的論理和演算結果を含む冗長パケットを受信する受信手段と、
前記受信手段により受信できなかった前記データパケットが復元可能であるか否かを判定する可能性判定手段と、
前記可能性判定手段による判定結果に基づいて、復元不可能である場合、受信できなかった前記データパケットの再送を前記他の情報処理装置に要求する要求手段と、
前記可能性判定手段による判定結果に基づいて、復元可能である場合、前記受信手段により受信された前記データパケットおよび前記冗長パケットを用いて、排他的論理和演算を用いた連立一次方程式を解くことによって、受信できなかった前記データパケットを復元する復元手段と
を備え、
前記復元手段は、値が０でない係数を選択するための処理方法であるピボット選択を用いたガウス消去法を用いて、前記連立一次方程式を解く
ことを特徴とする情報処理装置。
【請求項２】
前記冗長パケットは、所定の大きさに分割された前記配信用データであるブロック毎に、同一の前記ブロックに対応する、任意に選択された複数の前記データパケットを用いて生成される
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記データパケットおよび前記冗長パケットは、前記ブロック単位で前記他の情報処理装置より送信される
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記受信手段は、同一の前記ブロックの前記データパケットおよび前記冗長パケットの受信処理が完了したか否かを監視する監視手段をさらに備える
ことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記受信手段により受信できなかった前記データパケットが存在するか否かを判定する存在判定手段をさらに備える
ことを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記冗長パケットの生成に関する情報を前記他の情報処理装置と共有する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記可能性判定手段は、前記連立一次方程式の係数を表す行列の成分に基づいて、前記受信手段により受信できなかった前記データパケットを復元可能であるか否かを判定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項８】
前記可能性判定手段により復元不可能と判定された前記データパケットの再送処理を行う余裕があるか否かを判定する余裕判定手段をさらに備え、
前記要求手段は、前記余裕判定手段により前記再送処理を行う余裕があると判定された場合、受信できなかった前記データパケットの再送を前記他の情報処理装置に要求する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項９】
他の情報処理装置から配信用データを受信する情報処理装置において、
前記他の情報処理装置により送信された、前記配信用データのデータパケット、および複数の前記データパケットに含まれる各データの排他的論理和演算結果を含む冗長パケットを受信する受信手段と、
前記受信手段により受信できなかった前記データパケットが復元可能であるか否かを判定する可能性判定手段と、
前記可能性判定手段による判定結果に基づいて、復元不可能である場合、受信できなかった前記データパケットの再送を前記他の情報処理装置に要求する要求手段と、
前記可能性判定手段による判定結果に基づいて、復元可能である場合、前記受信手段により受信された前記データパケットおよび前記冗長パケットを用いて、排他的論理和演算を用いた連立一次方程式を解くことによって、受信できなかった前記データパケットを復元する復元手段と
を備え、
前記復元手段は、前記行列の所定の列について値が０でない係数を含む方程式のうち、隣り合う方程式同士で各項毎に排他的論理和を演算する応用ガウス消去法を用いて、前記連立一次方程式を解く
ことを特徴とする情報処理装置。
【請求項１０】
前記冗長パケットは、所定の大きさに分割された前記配信用データであるブロック毎に、同一の前記ブロックに対応する、任意に選択された複数の前記データパケットを用いて生成される
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記データパケットおよび前記冗長パケットは、前記ブロック単位で前記他の情報処理装置より送信される
ことを特徴とする請求項１０に記載の情報処理装置。
【請求項１２】
前記受信手段は、同一の前記ブロックの前記データパケットおよび前記冗長パケットの受信処理が完了したか否かを監視する監視手段をさらに備える
ことを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
前記受信手段により受信できなかった前記データパケットが存在するか否かを判定する存在判定手段をさらに備える
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１４】
前記冗長パケットの生成に関する情報を前記他の情報処理装置と共有する
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１５】
前記可能性判定手段は、前記連立一次方程式の係数を表す行列の成分に基づいて、前記受信手段により受信できなかった前記データパケットを復元可能であるか否かを判定する
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１６】
前記可能性判定手段により復元不可能と判定された前記データパケットの再送処理を行う余裕があるか否かを判定する余裕判定手段をさらに備え、
前記要求手段は、前記余裕判定手段により前記再送処理を行う余裕があると判定された場合、受信できなかった前記データパケットの再送を前記他の情報処理装置に要求する
ことを特徴とする請求項９に記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報処理装置に関し、特に、より好適にパケットデータを取得し、データの再生を行うことができるようにした、情報処理装置に関する。
【０００２】
【従来の技術】
近年、ブロードバンド通信網の発達などにより、インターネットに代表されるネットワークを介して、ユニキャストやマルチキャストでの、音声や映像等のデータのストリーミング配信やリアルタイムな放送などが数多く行われるようになってきた。
【０００３】
従来、このようなネットワークを介した通信において、UDP/IP（User Datagram Protocol/Internet Protocol）を用いたユニキャストやマルチキャスト等の配信に、ブロック内のデータ誤りを検出し訂正するブロック符号の１つであるリードソロモン符号等を用いたFEC（Forward Error Correction）を併用した配信方式が提案されている（例えば、非特許文献１乃至３参照）。
【０００４】
リードソロモン符号によるパケットロスに対するエラー訂正処理において、送信側では、所定の大きさのブロック単位ごとに、送信データの誤り訂正コードが生成され、その誤り訂正コードより冗長パケットが生成され、その生成された冗長パケットが、パケット化された送信データとともに配信される。
【０００５】
そして、受信側では、パケット化された送信データとともに冗長パケットも受信し、送信データのパケットのロスが生じた場合、そのパケットを、受信した冗長パケットを用いて復元する。ロスしたパケットの復元が不可能である場合は、送信側に対して、ロスしたパケットの再送が要求される。
【０００６】
しかしながら、この場合、ガロア体上の加減算、乗算、または除算が必要であり、復元等の処理に要する負荷が大きくなってしまう場合があった。
【０００７】
一方、FECの符号化方式として、リードソロモン符号方式の代わりに、EOR（exclusive OR）演算を用いて冗長パケットを生成する方式がある（例えば、特許文献１参照）。
【０００８】
EOR演算を用いた、パケットロスに対するエラー訂正処理において、送信側では、所定の大きさのブロック単位ごとに、EOR演算を用いて、送信データの誤り訂正コードが生成され、その誤り訂正コードより冗長パケットが生成され、その生成された冗長パケットが、パケット化された送信データとともに配信される。
【０００９】
そして、受信側では、パケット化された送信データとともに冗長パケットも受信し、送信データのパケットのロスが生じた場合、そのパケットを、受信した冗長パケットを用いて復元する。ロスしたパケットの復元が不可能である場合は、送信側に対して、ロスしたパケットの再送が要求される。
【００１０】
【非特許文献１】
米山  清二郎、外２名、“Reliable Multicast - Using FEC on IP version6”、[online]、平成１１年１２月１５日、インターネットコンファレンス、［平成１４年１０月８日検索］、インターネット,<URL:http://www.internetconference.org/ic99/program.html>
【００１１】
【非特許文献２】
窪  貴志、“信頼性マルチキャストを用いた実時間メディア伝送に関する考察”、[online]、平成１３年２月１８日、奈良先端科学技術大学院大学修士論文・課題研究発表会、［平成１４年１０月８日検索］、インターネット,<URL: http://isw3.aist-nara.ac.jp/IS/MasterThesis/2001/0051031.html>
【００１２】
【非特許文献３】
米山  清二郎、“FEC on IPv6 for Reliable Multicast”、[online]、平成１２年１１月１日、インターネットコンファレンス、［平成１４年１０月８日検索］、インターネット,<URL: http://www.csl.sony.co.jp/ic2000/papers/S03_01.pdf>
【００１３】
【特許文献１】
特開２００１−１８９６６５号公報（第２５−２６ページ、図３）
【００１４】
【発明が解決しようとする課題】
しかしながら、以上のような方法においては、実際にロスしたパケットの復元処理を実行するまで復元可能であるか否かを判定することができず、再送処理の必要が生じた場合の遅延時間が長くなってしまうという課題があった。
【００１５】
特に、ストリーミング配信やリアルタイムのデータ配信において、受信側の装置は、順次送信されるデータを受信し、再生しなければならず、復元処理を短時間で行わなければならない。従って、上述したような遅延時間の増大は、再生能力に大きく影響する。
【００１６】
本発明はこのような状況に鑑みてなされたものであり、より好適にパケットデータを取得し、データの再生を行うことができるようにしたものである。
【００１７】
【課題を解決するための手段】
本発明の第１の情報処理装置は、他の情報処理装置により送信された、配信用データのデータパケット、および複数のデータパケットに含まれる各データの排他的論理和演算結果を含む冗長パケットを受信する受信手段と、受信手段により受信できなかったデータパケットが復元可能であるか否かを判定する可能性判定手段と、可能性判定手段による判定結果に基づいて、復元不可能である場合、受信できなかったデータパケットの再送を他の情報処理装置に要求する要求手段と、可能性判定手段による判定結果に基づいて、復元可能である場合、受信手段により受信されたデータパケットおよび冗長パケットを用いて、排他的論理和演算を用いた連立一次方程式を解くことによって、受信できなかったデータパケットを復元する復元手段とを備え、復元手段は、値が０でない係数を選択するための処理方法であるピボット選択を用いたガウス消去法を用いて、連立一次方程式を解くことを特徴とする。
【００１８】
前記冗長パケットは、所定の大きさに分割された配信用データであるブロック毎に、同一のブロックに対応する、任意に選択された複数のデータパケットを用いて生成されるようにすることができる。
【００１９】
前記データパケットおよび冗長パケットは、ブロック単位で他の情報処理装置より送信されるようにすることができる。
【００２０】
前記受信手段は、同一のブロックのデータパケットおよび冗長パケットの受信処理が完了したか否かを監視する監視手段をさらに備えるようにすることができる。
【００２１】
前記受信手段により受信できなかったデータパケットが存在するか否かを判定する存在判定手段をさらに備えるようにすることができる。
【００２２】
前記冗長パケットの生成に関する情報を他の情報処理装置と共有するようにすることができる。
【００２３】
前記可能性判定手段は、連立一次方程式の係数を表す行列の成分に基づいて、受信手段により受信できなかったデータパケットを復元可能であるか否かを判定するようにすることができる。
【００２４】
前記可能性判定手段により復元不可能と判定されたデータパケットの再送処理を行う余裕があるか否かを判定する余裕判定手段をさらに備え、要求手段は、余裕判定手段により再送処理を行う余裕があると判定された場合、受信できなかったデータパケットの再送を他の情報処理装置に要求するようにすることができる。
【００２５】
本発明の第２の情報処理装置は、他の情報処理装置により送信された、配信用データのデータパケット、および複数のデータパケットに含まれる各データの排他的論理和演算結果を含む冗長パケットを受信する受信手段と、受信手段により受信できなかったデータパケットが復元可能であるか否かを判定する可能性判定手段と、可能性判定手段による判定結果に基づいて、復元不可能である場合、受信できなかったデータパケットの再送を他の情報処理装置に要求する要求手段と、可能性判定手段による判定結果に基づいて、復元可能である場合、受信手段により受信されたデータパケットおよび冗長パケットを用いて、排他的論理和演算を用いた連立一次方程式を解くことによって、受信できなかったデータパケットを復元する復元手段とを備え、復元手段は、行列の所定の列について値が０でない係数を含む方程式のうち、隣り合う方程式同士で各項毎に排他的論理和を演算する応用ガウス消去法を用いて、連立一次方程式を解くことを特徴とする。
【００２６】
前記冗長パケットは、所定の大きさに分割された配信用データであるブロック毎に、同一のブロックに対応する、任意に選択された複数のデータパケットを用いて生成されるようにすることができる。
【００２７】
前記データパケットおよび冗長パケットは、ブロック単位で他の情報処理装置より送信されるようにすることができる。
【００２８】
前記受信手段は、同一のブロックのデータパケットおよび冗長パケットの受信処理が完了したか否かを監視する監視手段をさらに備えるようにすることができる。
前記受信手段により受信できなかったデータパケットが存在するか否かを判定する存在判定手段をさらに備えるようにすることができる。
前記冗長パケットの生成に関する情報を他の情報処理装置と共有するようにすることができる。
前記可能性判定手段は、連立一次方程式の係数を表す行列の成分に基づいて、受信手段により受信できなかったデータパケットを復元可能であるか否かを判定するようにすることができる。
前記可能性判定手段により復元不可能と判定されたデータパケットの再送処理を行う余裕があるか否かを判定する余裕判定手段をさらに備え、要求手段は、余裕判定手段により再送処理を行う余裕があると判定された場合、受信できなかったデータパケットの再送を他の情報処理装置に要求するようにすることができる。
【００２９】
本発明の第１の情報処理装置においては、他の情報処理装置により送信された、配信用データのデータパケット、および複数のデータパケットに含まれる各データの排他的論理和演算結果を含む冗長パケットが受信され、受信できなかったデータパケットが復元可能であるか否かが判定され、その判定結果に基づいて、復元不可能である場合、受信できなかったデータパケットの再送が他の情報処理装置に要求され、復元可能である場合、受信されたデータパケットおよび冗長パケットを用いて、排他的論理和演算を用いた連立一次方程式を、値が０でない係数を選択するための処理方法であるピボット選択を用いたガウス消去法で解くことによって、受信できなかったデータパケットが復元される。
本発明の第２の情報処理装置においては、他の情報処理装置により送信された、配信用データのデータパケット、および複数のデータパケットに含まれる各データの排他的論理和演算結果を含む冗長パケットが受信され、受信できなかったデータパケットが復元可能であるか否かが判定され、その判定結果に基づいて、復元不可能である場合、受信できなかったデータパケットの再送が他の情報処理装置に要求され、復元可能である場合、受信されたデータパケットおよび冗長パケットを用いて、排他的論理和演算を用いた連立一次方程式を、行列の所定の列について値が０でない係数を含む方程式のうち、隣り合う方程式同士で各項毎に排他的論理和を演算する応用ガウス消去法で解くことによって、受信できなかったデータパケットが復元される。
【００３０】
【発明の実施の形態】
図１は、本発明を適用したデータ配信システムの基本的な構成例を表す図である。
【００３１】
図１において、サーバ１は、ストリーミング配信用の、画像や音声等のストリーミングデータを蓄積しており、インターネット等に代表されるネットワーク２を介して、配信を要求したクライアント３−１または３−２に対して、ストリーミング配信サービスを提供する。サーバ１は、クライアント３−１または３−２より供給された配信要求に基づいて、ユニキャストまたはマルチキャストでデータを配信する。
【００３２】
また、サーバ１は、カメラやマイク等の図示せぬ外部入力装置を介して入力された画像や音声等のデータを送信用のデータに変換し、配信を要求したクライアント３−１または３−２に、ネットワーク２を介してリアルタイムに配信（以下、LIVE配信と称する）する。
【００３３】
クライアント３−１および３−２は、ユーザに操作され、ネットワーク２を介してサーバ１にアクセスし、ユーザに指示されたデータの配信を要求する。そして、その要求に基づいて、サーバ１が要求されたデータのストリーミング配信またはLIVE配信を行うと、クライアント３−１および３−２は、そのデータを受信し、処理を行い、受信したデータに対応する画像をディスプレイに表示したり、受信したデータに対応する音声をスピーカより出力したりする。
【００３４】
なお、クライアント３−１，３−２を個々に区別する必要がない場合、単にクライアント３と称する。
【００３５】
サーバ１は、後述するように、上述したストリーミング配信やLIVE配信において、UDP（User Datagram Protocol）/IP（Internet Protocol）プロトコルに、EORによって形成された冗長パケットによるFECと再送制御を併用して、データを配信する。すなわち、サーバ１は、データをパケット化するとともに、パケット化されたデータ（以下、データパケットと称する）より誤り訂正用の冗長パケットを生成し、それらのデータパケットおよび冗長パケットをクライアント３に配信する。
【００３６】
データパケットおよび冗長パケットを受信したクライアント３は、誤り訂正処理を行い、受信したパケットからロスしたデータパケットを復元する。復元不可能であり、かつ、再送が可能な場合、クライアント３は、そのデータパケットの再送を、ネットワーク２を介してサーバ１に要求する。サーバ１は、その再送要求を取得すると、要求されたデータパケットを要求元であるクライアント３に再送する。クライアント３は、再送されたデータパケットと、既に取得されている他のデータパケットを用いて、データを再生する。
【００３７】
図２は、図１に示すサーバ１の構成例を示すブロック図である。
【００３８】
図２において、CPU（Central Processing Unit）１１は、ROM（Read Only Memory）１２に記憶されているプログラム、または記憶部３３からRAM（Random Access Memory）１３にロードされたプログラムに従って各種の処理を実行する。RAM１３にはまた、CPU１１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００３９】
パケット生成部１４は、CPU１１に制御され、記憶部３３または通信部３４より供給された配信用のデータ（以下、配信データと称する）をパケット化してデータパケットを生成し、そのデータパケットを通信部３４に供給する。また、パケット生成部１４は、CPU１１に制御され、後述するように、EOR演算を用いて、生成したデータパケットより誤り訂正用の冗長パケットを生成する。
【００４０】
CPU１１、ROM１２、RAM１３、およびパケット生成部１４は、バス２０を介して相互に接続されている。このバス２０にはまた、入出力インタフェース３０も接続されている。
【００４１】
入出力インタフェース３０には、キーボードやマウスなどよりなる入力部３１、CRT（Cathode Ray Tube）やLCD（Liquid Crystal Display）などよりなるディスプレイ、およびスピーカなどよりなる出力部３２、ハードディスクなどにより構成される記憶部３３、並びに、モデム、LANカード、およびターミナルアダプタなどにより構成される通信部３４が接続されている。
【００４２】
記憶部３３には、入力部３１または通信部３４を介して取得された配信データ、並びに、各種の処理を実行するためのデータやプログラム等が記憶されており、各部にそれらのデータやプログラムを供給する。
【００４３】
通信部３４は、ネットワーク２を介しての通信処理を行う。例えば、通信部３４は、CPU１１に制御され、パケット生成部１４より供給されたストリーミング配信用データパケットを、UDPやRTP（Real-time Transport Protocol）/RTSP（Real Time Streaming Protocol）等の所定のプロトコルを用いて配信する。また、通信部３４は、CPU１１に制御され、接続された外部入力装置より供給されるデータを取得し、RAM１３、パケット生成部１４、または記憶部３３に供給する。
【００４４】
入出力インタフェース３０にはまた、必要に応じてドライブ４０が接続され、磁気ディスク４１、光ディスク４２、光磁気ディスク４３、或いは半導体メモリ４４などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部３３にインストールされる。
【００４５】
以上において、バス２０に接続されるパケット生成部１４がデータパケットおよび冗長パケットの生成処理を行うように説明したが、これに限らず、パケット生成部１４において行われるパケット生成処理の全部または一部が、通信部６４またはCPU１１において実行されるようにしてもよい。
【００４６】
図３は、図１に示すクライアント３の構成例を示すブロック図である。
【００４７】
図３において、CPU６１は、ROM６２に記憶されているプログラム、または記憶部８３からRAM６３にロードされたプログラムに従って各種の処理を実行する。RAM６３にはまた、CPU６１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００４８】
データ再生部６４は、CPU６１に制御され、通信部８４において受信したデータパケット、およびパケット復元部６５において復元されたデータパケットより配信データを再構成し、MPEG（Moving Picture Experts Group）方式やATRAC３（Adaptive TRansform Acoustic Coding 3）（登録商標）方式等でデータがエンコードされている場合、対応する方式でデコードするなどしてデータを再生し、その再生されたデータ（以下、再生データと称する）をCPU６１、RAM６２、出力部８２、または記憶部８３に供給する。
【００４９】
パケット復元部６５は、CPU６１に制御され、後述するように、通信部８４において受信した冗長パケットを用いて、ロスしたデータパケットの復元処理を行う。そして、パケット復元部６５は、復元したデータパケットをCPU６１、RAM６３、または、データ再生部６４に供給する。また、パケット復元部６５は、復元処理の前に、ロスしたパケットが復元可能であるか否かの判定処理も行い、判定結果をCPU６１に供給する。
【００５０】
CPU６１、ROM６２、RAM６３、データ再生部６４、およびパケット復元部６５は、バス７０を介して相互に接続されている。このバス７０にはまた、入出力インタフェース８０も接続されている。
【００５１】
入出力インタフェース８０には、キーボードやマウスなどよりなる入力部８１、CRTやLCDなどよりなるディスプレイ、およびスピーカなどよりなる出力部８２、ハードディスクなどにより構成される記憶部８３、並びに、モデム、LANカード、およびターミナルアダプタなどにより構成される通信部８４が接続されている。
【００５２】
入力部８１は、キーボードやマウスなどにより構成され、ユーザからの要求を受け付け、その情報をCPU６１やRAM６２に供給する。出力部８２は、データ再生部６４などより供給されたデータに対応する画像をディスプレイに表示したり、供給されたデータに対応する音声をスピーカより出力したりする。
【００５３】
記憶部８３には、入力部３１または通信部３４を介して供給された各種の処理を実行するためのデータやプログラム等が記憶されており、各部にそれらのデータやプログラムを供給する。
【００５４】
通信部８４は、ネットワーク２を介しての通信処理を行う。例えば、通信部８４は、ネットワーク２を介して、サーバ１よりストリーミング配信されたデータパケットや冗長パケットを、UDPやRTP/RTSP等の所定のプロトコルを用いて受信し、受信したパケットをCPU６１、RAM６３、データ再生部６４、またはパケット復元部６５等に供給する。また、通信部８４は、配信要求やパケットの再送要求などの、CPU６１などより供給された各種の情報を、ネットワーク２を介してサーバ１に供給する。
【００５５】
入出力インタフェース８０にはまた、必要に応じてドライブ９０が接続され、磁気ディスク９１、光ディスク９２、光磁気ディスク９３、或いは半導体メモリ９４などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部８３にインストールされる。
【００５６】
以上において、バス７０に接続されたデータ再生部６４において、配信データの再構成やデコード等の再生処理が行われるように説明したが、これに限らず、上述したデータ再生部６４が行う処理の全部または一部が、通信部８４またはCPU６１において実行されるようにしてもよい。
【００５７】
同様に、バス７０に接続されたパケット復元部６５において行われる、ロスしたパケットの復元処理の全部または一部が、通信部８４またはCPU６１において実行されるようにしてもよい。
【００５８】
次に、サーバ１による配信データのストリーミング配信処理について説明する。クライアント３より配信要求を、ネットワーク２を介して取得したサーバ１のCPU１１は、要求された配信データを記憶部３３より取得し、パケット生成部１４に供給し、データ送信処理を開始する。図４のフローチャートを参照して、サーバ１によるデータ送信処理を説明する。
【００５９】
配信データを供給されたパケット生成部１４は、取得した配信データを、所定の大きさのブロック単位で処理する。パケット生成部１４は、ステップＳ１において、１ブロック分の配信データを分割してパケット化し、データパケットを生成する。
【００６０】
図５は、パケット生成部１４において生成される１ブロック分のデータパケットおよび冗長パケットの構成例を示す模式図である。図５においてEOR演算は、「＋」を用いて表す。
【００６１】
図５において、データパケット１０１は、パケット１０１−１乃至１０１−Ｎにより構成される。各パケットには、1ブロック分の配信データが所定の大きさで分割されたデータＤ1乃至ＤNが1つずつ含まれている。
【００６２】
すなわち、図４のステップＳ１において、パケット生成部１４は、１ブロック分の配信データＤをＮ個のデータＤ1乃至ＤNに分割し、各データをパケット化してパケット１０１−１乃至パケット１０１−Ｎを生成する。
【００６３】
そして、パケット生成部１４は、処理をステップＳ２に進め、生成したデータパケット１０１の中から任意に複数のパケットを選択し、それらのパケットに含まれるデータのEOR演算を行い、誤り訂正用の冗長パケットを生成する。
【００６４】
図５において、冗長パケット１０２は、パケット１０２−１乃至１０２−Ｍにより構成される。パケット生成部１４は、データＤ1乃至ＤNの中から複数個のデータを選択し、それらの値のEOR演算を行う。パケット生成部１４は、この処理をＭ回繰り返して誤り訂正用の冗長データを生成し、さらにパケット化して誤り訂正用のパケットであるパケット１０２−１乃至１０２−Ｍを生成する。
【００６５】
すなわち、パケット生成部１４は、図４のステップＳ１およびステップＳ２の処理において、供給された１ブロック分の配信データＤをＮ個に分割してデータＤ1乃至ＤNを生成した後、以下の式（１）に示されるような演算を行い、誤り訂正用のＭ個のデータを生成して、送信データＳ1乃至ＳN+Mを算出する。
【００６６】
【数１】
0004088956.tif 000002
【００６７】
式（１）において、右辺第１項はＮ＋Ｍ行Ｎ列の行列であり、その第１行乃至第Ｎ行はデータパケット１０１に対応する送信データＳ1乃至ＳNを生成するための係数であり、第Ｎ＋１行乃至第Ｎ＋Ｍ行は冗長パケット１０２に対応する送信データＳN+1乃至ＳN+Mを生成するための係数である。この第Ｎ＋１行乃至第Ｎ＋Ｍ行の各成分の値は、「０」または「１」のいずれかが任意に設定される。なお、式（１）において、各成分の加算は、対応するビットごとのEOR演算を用いて行う。
【００６８】
式（１）の左辺の送信データＳ1乃至ＳNは、それぞれ、右辺第２項のデータＤ1乃至ＤNに対応し、送信データＳN+1乃至ＳN+Mは、それぞれ、データＤ1乃至ＤNより任意に選択されたデータのEOR演算結果である。
【００６９】
式（１）の右辺第１項の行列は、パケット生成部１４により生成される。この行列の第１行乃至第Ｎ行の各成分は、Ｎ行Ｎ列の単位行列を形成するように構成され、第Ｎ＋１行乃至第Ｎ＋Ｍ行の各成分は、例えば、ランダム関数等を用いて、「０」または「１」のいずれかの値がランダムに設定される。なお、EOR演算されるデータの個数はいくつであってもでもよいが、データＤN+1乃至ＤN+Mの各データ間でその個数を統一したり、所定の個数以上に限定したりする等、個数の範囲に制限を設けるようにしてもよい。
【００７０】
なお、式（１）の右辺第１項の行列は、演算に用いられるまでに生成されていれば、どのようなタイミングで生成されてもよく、データ送信処理を行う前より予め準備されていてもよいし、演算の際に算出されるようにしてもよい。また、この行列は、ブロック毎に異なる成分の行列を使用するようにしてもよいし、全てのブロックにおいて共通の行列を使用するようにしてもよい。
【００７１】
さらに、演算に使用された式（１）の右辺第１項の行列は、後述するように、データを受信するクライアント３によるパケット復元処理においても使用される。すなわち、データの授受を行うサーバ１およびクライアント３において、同じブロックに対しては、共通の行列を用いて処理できるように、式（１）の右辺第１項の行列に関する情報を共有する必要がある。この情報の共有は、クライアント３がサーバ１にデータの配信を要求する際に行うようにしてもよいし、サーバ１で使用された式（１）の右辺第１項の行列に関する情報をデータパケット１０１や冗長パケット１０２に付加することによって行うようにしてもよいし、上述した以外の方法であってもよい。
【００７２】
この、式（１）の右辺第１項の行列に関する情報は、その行列の各成分の内容を直接表す情報であってもよいし、間接的に行列の各成分の内容を表す情報であってももちろんよい。例えば、その行列の各成分がランダム関数によって決定されている場合、そのランダム関数の「種」を表す情報を式（１）の右辺第１項の行列に関する情報とすることも可能である。
【００７３】
なお、EOR演算するデータの選択方法（すなわち、式（１）の右辺第１項の行列の第Ｎ＋１行乃至第Ｎ＋Ｍ行の各成分の値の決定方法）は、上述したランダムに選択する以外の方法であってもよく、例えば、複数の所定の組み合わせを用いる等、どのような方法であってもよい。さらに、パケット生成部１４が生成した誤り訂正用のパケットの性能評価を行い、それらの中から性能の良いパケットの組み合わせを選択し、冗長パケット１０２として採用するようにしてもよい。
【００７４】
また、生成される冗長パケット１０２のパケット数（Ｍ個）は、実用的な範囲であればいくつであってもよいが、１ブロックのデータに対して冗長パケット数を増加させると、データパケットの復元能力が上がるとともに、配信されるデータ量や処理に必要な負荷が増加するという特徴があり、システムやネットワーク等の環境や配信データの内容等に合わせて、最適な冗長パケット数を選択するのが望ましい。
【００７５】
以上のようにして、式（１）の演算により誤り訂正用のデータを生成したパケット生成部１４は、生成された各データをパケット化し、冗長パケット１０２を生成する。
【００７６】
図４に戻り、ステップＳ２の処理を行い、冗長パケット１０２を生成したパケット生成部１４は、CPU１１に制御され、生成されたデータパケット１０１および冗長パケット１０２を通信部３４に供給する。
【００７７】
ステップＳ３において、通信部３４は、取得したデータパケット１０１および冗長パケット１０２を、所定のプロトコルに従い、ネットワーク２を介して配信先のクライアント３に送信する。
【００７８】
そして、ステップＳ４においてCPU１１は、データ送信処理を終了するか否かを判定する。未送信の配信データが存在し、終了しないと判定した場合、CPU１１は、ステップＳ１に処理を戻し、次のブロックに対して、上述した処理を繰り返す。また、例えば、要求された配信データの送信が完了したり、ユーザやクライアント３より配信停止の指示を取得したりして、データ送信処理を終了すると判定した場合、CPU１１は、データ送信処理を終了する。
【００７９】
以上のように、配信データは、サーバ１により、所定のブロックごとにデータ送信処理を施され、パケット単位でクライアント３に配信される。
【００８０】
図６は、サーバ１よりクライアント３に送信されるパケットの様子の例を示す模式図である。図６Ａに示されるように、サーバ１は、ブロック毎に生成されたデータパケットおよび冗長パケットを、ブロック毎に送信する。
【００８１】
すなわち、サーバ１は、第（Ｔ−１）ブロックの最後の冗長パケット１１１−Ｍに続いて、第Ｔブロックのデータパケット１１２−１乃至１１２−Ｎ、および冗長パケット１１３−１乃至１１３−Ｍを送信する。
【００８２】
そして、サーバ１は、第Ｔブロックの最後の冗長パケット１１３−Ｍを送信すると、次のブロックである第（Ｔ＋１）ブロックのデータパケットを、データパケット１１４−１、１１４−２、・・・という具合に順次送信する。
【００８３】
パケットの送信先であるクライアント３は、通信部８４において各パケットを受信するが、ネットワーク２等のパケット転送経路上において、図６Ｂに示されるようなクライアント３に受信されたパケットをブロック毎に整列させた例のように、一部のパケットをロスしている場合がある。図６Ｂにおいて、クライアント３は、第Ｔブロックのデータパケット１１２−１乃至１１２−４、並びに冗長パケット１１３−２をロスしている。
【００８４】
クライアント３は、後述するようにデータ受信処理を行い、受信した冗長パケット１１３−１、１１３−３乃至１１３−Ｍを用いて、このようにロスしたデータパケット１１２−１乃至１１２−４を復元することが可能か否かを判定し、可能である場合は復元処理を行い、不可能である場合はサーバ１にロスしたパケットの再送を要求する。
【００８５】
図６Ｂの第Ｔブロックに対する処理を例にして、クライアント３によるデータ受信処理を、図７のフローチャートを参照して説明する。
【００８６】
配信データの送信先であるクライアント３の通信部８４は、ステップＳ２１において、パケットの受信制御処理を行い、ネットワーク２を介してサーバ１より供給された第Ｔブロックのデータパケット１１２−５乃至１１２−Ｎ、並びに冗長パケット１１３−１、１１３−３乃至１１３−Ｍを順次取得し、バス７０を介してデータ再生部６４に供給する。
【００８７】
なお、受信されたパケットは、通信部８４に内蔵されるRAMに一時保持され、後述するステップＳ２２の処理において、対象ブロックのパケット受信が完了したと判定された場合に、ブロック毎にデータ再生部６４に供給されるようにしてもよい。また、受信されたパケットがCPU６１に内蔵されるRAM、RAM６３、または記憶部８３に保持されるようにしてももちろんよい。さらに、受信されたパケットは、データ再生部６４に供給される際に、パケット復元部６５にも供給されるようにしてもよい。
【００８８】
ステップＳ２２において、CPU６１は、通信部８４を制御して、受信対象ブロックのパケット受信が完了したか否かを判定する。受信対象ブロックについて未受信のパケットが存在し、受信対象ブロックのパケット受信が完了していないと判定した場合、CPU６１は、処理をステップＳ２１に戻し、パケットの受信制御処理を繰り返す。
【００８９】
ステップＳ２２において、受信対象ブロックのパケットを全て受信し、受信が完了したと判定した場合、CPU６１は、ステップＳ２３に処理を進める。
【００９０】
なお、パケットが受信される順番はパケットの到着順であり、送信された順序でパケットが受信されるとは限らない。従って、CPU６１は、予め定められた所定の時間内において上述したようにステップＳ２２の判定処理を行う。ステップＳ２１およびＳ２２の処理を繰り返し、所定の時間が経過した場合、CPU６１は、ステップＳ２２において、受信対象ブロックのパケット受信が完了したと判定し、処理をステップＳ２３に進める。
【００９１】
例えば、図６Ｂに示されるように、第Ｔブロックのデータパケット１１２−１乃至１１２−４をロスしており、所定の時間が経過しても、受信対象ブロックについて未受信のパケットが存在する場合、CPU６１は、それらのパケットをロスしたと判定し、対象ブロックのパケット受信が完了したと判定し、ステップＳ２３に処理を進める。
【００９２】
ステップＳ２３において、CPU６１に制御されたデータ再生部６４は、供給されたデータパケットが1ブロック分揃っているかを確認し、ロスしたデータパケットが存在するか否かを判定する。ロスしたデータパケットが存在すると判定した場合、データ再生部６４は、取得したデータパケットおよび冗長パケット、並びに、式（１）の右辺第１項に関する情報をパケット復元部６５に供給し、処理をステップＳ２４に進める。
【００９３】
ステップＳ２４において、データ再生部６４より各種のデータを取得したパケット復元部６５は、ロスしたデータパケットについてパケット復元可能性判定処理を行い、処理結果をCPU６１に供給する。パケット復元可能性判定処理の詳細については、図８乃至図１０のフローチャートを参照して後述する。
【００９４】
CPU６１は、ステップＳ２５において、取得したパケット復元可能性判定処理結果に基づいて、ロスしたデータパケットが復元可能であるか否かを判定し、復元可能であると判定した場合、CPU６１は、処理をステップＳ２６に進める。
【００９５】
ステップＳ２６において、パケット復元部６５は、CPU６１に制御され、ロスしたデータパケット復元処理を行う。データパケット復元処理の詳細については、図１１および図１２のフローチャートを参照して説明する。
【００９６】
データパケット復元処理によりロスしたデータパケットを復元すると、パケット復元部６５は、復元したデータパケットをデータ再生部６４に供給する。
【００９７】
CPU６１に制御されたデータ再生部６４は、ステップＳ２７において、取得したデータパケット群より１ブロック分の配信データを再生し、出力部８２等に供給する。配信データを供給された出力部８２は、取得した配信データに対応する画像や音声等を所定の出力方法で出力する。
【００９８】
CPU６１は、ステップＳ２８において、データ受信処理を終了するか否かを判定し、配信されるデータの受信が完了しておらず、終了しないと判定した場合、処理をステップＳ２１に戻し、次のブロックに対して、それ以降の処理を繰り返す。
【００９９】
ステップＳ２８において、配信データの受信が完了したり、ユーザより処理中止の指示を受け付けたりしてデータ受信処理を終了すると判定した場合、CPU６１は、ステップＳ２９に処理を進めて終了処理を行った後、データ受信処理を終了する。
【０１００】
ステップＳ２３において、対象ブロックのデータパケットを全て受信しており、ロスしたデータパケットが存在しないと判定した場合、データ再生部６４は、処理をステップＳ２６に進め、データパケット復元処理を実行する。
【０１０１】
CPU６１は、ステップＳ２５において、例えば、ロスしたパケットが多すぎる場合等、ロスしたパケットが復元可能でないと判定した場合、処理をステップＳ３０に進め、ロスしたパケットの再送が可能であるか否かを判定する。
【０１０２】
ストリーミング配信において、通常、パケットの転送レートは、数回の再送が有り得ることを前提に設定されている。従って、サーバ１やネットワーク２の負荷状況等が良好であり、かつ、対象ブロックに対するパケット受信制御処理を終了するまでの時間（ステップＳ２２において考慮される所定の時間）が十分残されている場合、クライアント１は、ロスしたデータパケットの再送を要求することができる。
【０１０３】
ステップＳ３０において、例えば、要求するデータパケット数が予め定められた所定の回数以上である場合、サーバ１やネットワーク２の負荷が大きい場合、または、再送に必要な時間が残されていない場合等において、再送が不可能であると判定した場合、CPU６１は、処理をステップＳ２７に戻し、それ以降の処理を繰り返す。なお、この場合、対象ブロックのデータパケットが揃っていないので、このブロックの再生処理はエラーになり、例えば、画像データの場合、次のブロックのデータが再生されるまで、その再生画像はフリーズしたりする。
【０１０４】
また、ステップＳ３０において、再送が可能であると判定された場合、CPU６１は、処理をステップＳ３１に進め、通信部８４を制御して、ロスしたデータパケットの再送を要求する。そして、CPU６１は、処理をステップＳ２１に戻し、要求したデータパケットを受信するために、現在の対象ブロックに対して、それ以降の処理を繰り返す。
【０１０５】
以上のようにして、クライアント３は、サーバ１より供給されるパケットを受信し、サーバ１によるストリーミング配信やライブ放送などを出力することができる。
【０１０６】
次に、図７のステップＳ２４において実行されるパケット復元可能性判定処理について説明する。
【０１０７】
受信したデータパケットおよび冗長パケットを取得したパケット復元部６５は、ロスしたデータパケットを復元する前に、復元が可能であるか否かを判定する。
【０１０８】
クライアント３がＫ個のデータパケット、および、サーバ１より送信されたＭ個の冗長パケットのうち、Ｌ個の冗長パケットをロスしたものとし、ロスしたデータパケットに含まれるデータをＰ1乃至ＰKとすると、パケット復元部６５によるデータパケットの復元は、以下に示す式（２）の連立一次方程式において、Ｐ1乃至ＰKの解を求めることによって行われる。
【０１０９】
【数２】
0004088956.tif 000003
【０１１０】
なお、式（２）において、各成分の加算は、対応するビットごとのEOR演算を用いて行う。
【０１１１】
式（２）において、右辺第１項の行列の成分Ｑ1乃至ＱM-Lは、後述するように、受信したデータパケットおよび冗長パケットに含まれるデータより算出された変数である。
【０１１２】
式（２）の左辺第１項は、サーバ１と共有している式（１）の右辺第１項に関する情報に基づいて生成されたＭ−Ｌ行Ｋ列の行列であり、Ｐ1乃至ＰKの係数を表す行列である。
【０１１３】
パケット復元部６５は、サーバ１と共有する式（１）の右辺第１項に関する情報に基づいて、式（１）の右辺第１項の行列の成分の中から、ロスしたデータパケット、および受信された冗長パケットの両方に対応する成分を抽出し、式（２）の左辺第１項の行列を生成する。
【０１１４】
例えば、図６Ｂに示されるような例の場合、パケット復元部６５は、サーバ１において演算に用いられた式（１）の右辺第１項の行列の、第Ｎ＋１行並びに第Ｎ＋３行乃至第Ｎ＋Ｍ行の、第１列乃至第４列を成分とする行列を生成する。
【０１１５】
この式（２）の左辺第１項の行列の各成分は、上述したように、Ｐ1乃至ＰKの係数を表している。従って、この式（２）の左辺第１項の行列において、全ての成分の値が「０」である列が存在する場合、対応する変数Ｐ1乃至ＰKの解を求めることができない。また、この式（２）の左辺第１項の行列の列数Ｋが行数Ｍ−Ｌより大きい場合、方程式の数より変数の数が多いことになり、パケット復元部６５は、変数Ｐの解を求めることができない。
【０１１６】
このように、パケット復元部６５は、式（２）の左辺第１項の行列に基づいて、簡易的に変数Ｐ1乃至ＰKの解を算出可能か否かを判定することができる。
【０１１７】
図８のフローチャートを参照して、上述したパケット復元可能性判定処理の詳細について説明する。なお、以下において、式（２）の左辺第１項の行列の行数をＭ−Ｌとし、列数をＫとし、Ｘ行Ｙ列の成分の値をＡXYとする。
【０１１８】
最初に、ステップＳ５１において、パケット復元部６５は、式（２）の左辺第１項の行列の、行数Ｍ−Ｌの値が列数Ｋの値以上であるか否かを判定し、行数Ｍ−Ｌの値が列数Ｋの値以上であると判定した場合、処理をステップＳ５２に進める。
【０１１９】
パケット復元部６５は、ステップＳ５２において、変数Ｙの値を「０」に設定し、ステップＳ５３において、変数Ｘの値を「０」に設定し、初期化する。
【０１２０】
ステップＳ５４において、パケット復元部６５は、式（２）の左辺第１項の行列について、成分ＡXYの値が「１」であるか否かを判定する。成分ＡXYの値が「０」であり、値が「１」でないと判定した場合、パケット復元部６５は、処理をステップＳ５５に進め、変数Ｘの値に「１」を加算し、対象を次の行の成分に変更する。
【０１２１】
そして、パケット復元部６５は、ステップＳ５６において、変数Ｘの値が行数Ｍ−Ｌ以下であるか否かを判定し、成分ＡXYが存在するか否かを判定する。変数Ｘの値が行数Ｍ−Ｌ以下であると判定した場合、パケット復元部６５は、処理をステップＳ５４に戻し、新たな行の成分ＡXYについてそれ以降の処理を繰り返す。
【０１２２】
パケット復元部６５は、ステップＳ５６において、変数Ｘの値がＭ−Ｌより大きいと判定した場合、第Ｙ列には、値が「１」である成分ＡXYが存在しないので、処理をステップＳ５７に進め、復元不可能フラグを立てる。そして、パケット復元部６５は、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１２３】
また、ステップＳ５１において、式（２）の左辺第１項の行列の列数Ｋが行数Ｍ−Ｌより大きく、Ｍ−ＬがＫ以上ではないと判定した場合、パケット復元部６５は、処理をステップＳ５７に進め、復元不可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１２４】
上述したステップＳ２４において、成分ＡXYの値が「１」であると判定した場合、パケット復元部６５は、処理をステップＳ５８に進め、変数Ｙの値に「１」を加算し、対象とする列を次の列に変更する。そして、パケット復元部６５は、ステップＳ５９において、変数Ｙの値は列数Ｋ以下か否かを判定し、成分ＡXYが存在するか否かを判定する。
【０１２５】
変数Ｙの値が列数Ｋ以下であると判定した場合、パケット復元部６５は、処理をステップＳ５３に戻し、次の列に対して、それ以降の処理を繰り返す。
【０１２６】
変数Ｙの値が列数Ｋより大きいと判定した場合、全ての列について値が「１」である成分ＡXYが存在するので、パケット復元部６５は、ステップＳ６０において、復元可能フラグを立てる。そして、パケット復元部６５は、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１２７】
以上のようにして、パケット復元部６５は、データパケット復元処理の前にパケット復元可能性判定処理を行う。これにより、クライアント３は、データパケット復元処理を行う前に、サーバ１に対してロスしたデータパケットの再送を要求することができる。
【０１２８】
以上において、パケット復元部６５は、式（２）に示される連立一次方程式を解くことによってロスしたデータパケットを復元するように説明したが、その際、パケット復元部６５は、値が「０」でない係数を選択するための処理方法であるピボット選択を用いたガウス消去法を利用して解を求める。ピボット選択を用いたガウス消去法は、前進消去および後退代入などのプロセスにより、方程式に含まれる変数を減らすことにより、解を算出する方法である。
【０１２９】
この場合、パケット復元部６５が、このピボット選択を用いたガウス消去法を用いたデータパケット復元処理の一部を行いながら、ロスしたデータパケットの復元可能性判定処理を行うようにしてもよい。
【０１３０】
図９のフローチャートを参照して、ピボット選択を用いたガウス消去法を用いたパケット復元可能性判定処理を説明する。
【０１３１】
最初に、パケット復元部６５は、ステップＳ８１において、式（２）の左辺第１項の行列の、行数Ｍ−Ｌの値が列数Ｋの値以上であるか否かを判定し、行数Ｍ−Ｌの値が列数Ｋの値以上であると判定した場合、処理をステップＳ８２に進め、変数Ｙの値を「０」に設定し、初期化する。
【０１３２】
そして、パケット復元部６５は、ステップＳ８３において、第Ｙ列の各成分について、値が「１」である成分を検出し、ステップＳ８４において、その検出結果に基づいて、対象となるＹ列に値が「１」の成分が存在するか否かを判定する。
【０１３３】
対象となるＹ列に値が「１」の成分が存在すると判定した場合、パケット復元部６５は、処理をステップＳ８５に進め、その値が「１」となる成分が複数存在するか否かを判定する。
【０１３４】
複数存在すると判定した場合、パケット復元部６５は、ステップＳ８６において、２番目以降に検出された成分を含む行と、最初に検出された成分を含む行との間で、各成分についてEOR演算処理を行い、その演算結果を、演算に用いた２番目以降に検出された成分を含む行に置き換える。すなわち、パケット復元部６５は、前進消去のプロセスを行い、対象の列について、最初に検出された成分を含む行以外の行の成分の値を全て「０」にする。
【０１３５】
例えば、式（２）の左辺第１項の行列の第１行、第３行、第４行、第６行において、値が「１」の成分が検出された場合、パケット復元部６５は、第１行と第３行、第１行と第４行、第１行と第６行で、各成分についてEOR演算を行い、それらの演算結果を、それぞれ、元の第３行、第４行、第６行と置き換える。これにより、対象列の第３行、第４行、および第６行の各成分の値は、全て「０」になる。
【０１３６】
パケット復元部６５は、ステップＳ８７において、今回最初に検出された成分を含む行が、次の列に対する処理においてEOR演算処理の対象とならないように、最初に検出された成分を含む行を削除する。
【０１３７】
ステップＳ８７の処理が完了すると、パケット復元部６５は、ステップＳ８８において、変数Ｙの値に「１」を加算し、対象列を変更し、ステップＳ８９において、変数Ｙの値が列数Ｋ以下であるか否かを判定する。変数Ｙの値が、列数Ｋ以下であり、成分ＡXYが存在すると判定した場合、パケット復元部６５は、処理をステップＳ８３に戻し、新たな列に対してそれ以降の処理を繰り返す。
【０１３８】
ステップＳ８９において、変数Ｙの値がＫより大きい場合、すなわち、成分ＡXYが存在しないと判定した場合、全ての列において前進消去の処理を行うことができるので、パケット復元部６５は、データパケットの復元処理を行うことができると判定し、処理をステップＳ９０に進め、復元可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１３９】
また、ステップＳ８１において、式（２）の左辺第１項の行列の列数Ｋが行数Ｍ−Ｌより大きく、Ｍ−ＬがＫ以上ではないと判定した場合、パケット復元部６５は、データパケットの復元処理を行うことができないと判定し、処理をステップＳ９１に進め、復元不可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１４０】
同様に、ステップＳ８４において、対象の列において、全ての行の成分の値が「０」であり、値が「１」の成分が存在しないと判定した場合、パケット復元部６５は、処理をステップＳ９１に進め、復元不可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１４１】
さらに、ステップＳ８５において、対象の列において、値が「１」の成分が１つしか存在しないと判定した場合、パケット復元部６５は、ステップＳ８６の処理を省略し、ステップＳ８７に処理を進める。
【０１４２】
以上のようにして、パケット復元部６５は、ガウス消去法を利用してパケット復元の可能性を判定する。
【０１４３】
なお、ステップＳ８７において、削除された行は、パケット復元部６５等において保持されるようにし、図７のステップＳ２６におけるデータパケット復元処理の際に利用できるようにしてもよい。
【０１４４】
また、以上の処理において最後の列については省略するようにしてもよい。すなわち、ステップＳ８９の処理において、パケット復元部６５が、変数Ｙの値がＫ−１以下であるか否かを判定するようにしてもよい。
【０１４５】
以上において、パケット復元部６５が、値が「０」でない係数を選択するための処理方法であるピボット選択を用いたガウス消去法を利用して、式（２）に示される連立一次方程式の解を求めるように説明したが、これに限らず、パケット復元部６５が、ガウス消去法を応用した応用ガウス消去法を用いて、式（２）に示される連立一次方程式の解を求めるようにしてもよい。応用ガウス消去法は、後述するように、式（２）に示される全ての連立一次方程式から変数を１つずつ減らしていき、残った最後の変数の解を用いて全ての解を算出する方法である。
【０１４６】
この場合、パケット復元部６５が、この応用ガウス消去法を用いたデータパケット復元処理の一部を行いながら、ロスしたデータパケットの復元可能性判定処理を行うようにしてもよい。
【０１４７】
図１０のフローチャートを参照して、応用ガウス消去法を用いたパケット復元可能性判定処理を説明する。
【０１４８】
最初に、パケット復元部６５は、ステップＳ１１１において、式（２）の左辺第１項の行列の、行数Ｍ−Ｌの値が列数Ｋの値以上であるか否かを判定し、行数Ｍ−Ｌの値が列数Ｋの値以上であると判定した場合、処理をステップＳ１１２に進め、変数Ｙの値を「０」に設定し、初期化する。
【０１４９】
そして、パケット復元部６５は、ステップＳ１１３において、第Ｙ列の各成分について、値が「１」である成分を検出し、ステップＳ１１４において、その検出結果に基づいて、対象となるＹ列に値が「１」の成分が存在するか否かを判定する。
【０１５０】
対象となるＹ列に値が「１」の成分が存在すると判定した場合、パケット復元部６５は、処理をステップＳ１１５に進め、その値が「１」となる成分が複数存在するか否かを判定する。
【０１５１】
複数存在すると判定した場合、パケット復元部６５は、ステップＳ１１６において、検出された順番が連続する２つの成分をそれぞれ含む２行間で、各成分についてEOR演算処理を行い、その演算結果を、演算に用いた行のうち、検出された順番が後の行に置き換える。なお、最初に検出された行は、最後に検出された行とのEOR演算処理結果に置き換えられる。すなわち、パケット復元部６５は、対象の列の成分の値を全て「０」にする。
【０１５２】
例えば、式（２）の左辺第１項の行列の第１行、第３行、第４行、第６行において、値が「１」の成分が検出された場合、パケット復元部６５は、第１行と第３行、第３行と第４行、第４行と第６行、第６行と第１行で、各成分についてEOR演算を行い、それらの演算結果を、それぞれ、元の第３行、第４行、第６行、第１行と置き換える。これにより、対象列の成分の値は、全て「０」になる。
【０１５３】
ステップＳ１１６の処理が完了すると、パケット復元部６５は、ステップＳ１１７において、変数Ｙの値に「１」を加算し、対象列を変更し、ステップＳ１１８において、変数Ｙの値が列数Ｋ以下であるか否かを判定する。変数Ｙの値が、列数Ｋ以下であり、成分ＡXYが存在すると判定した場合、パケット復元部６５は、処理をステップＳ１１３に戻し、新たな列に対してそれ以降の処理を繰り返す。
【０１５４】
ステップＳ１１８において、変数Ｙの値がＫより大きい場合、すなわち、成分ＡXYが存在しないと判定した場合、全ての列において以上の処理を行うことができるので、パケット復元部６５は、データパケットの復元処理を行うことができると判定し、処理をステップＳ１１９に進め、復元可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１５５】
また、ステップＳ１１１において、式（２）の左辺第１項の行列の列数Ｋが行数Ｍ−Ｌより大きく、Ｍ−ＬがＫ以上ではないと判定した場合、パケット復元部６５は、データパケットの復元処理を行うことができないと判定し、処理をステップＳ１２０に進め、復元不可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１５６】
同様に、ステップＳ１１４において、対象の列において、全ての行の成分の値が「０」であり、値が「１」の成分が存在しないと判定した場合、パケット復元部６５は、処理をステップＳ１２０に進め、復元不可能フラグを立てた後、判定結果としてフラグの状態をCPU６１に出力し、図７のステップＳ２５に処理を進める。
【０１５７】
さらに、ステップＳ１１５において、対象の列において、値が「１」の成分が１つしか存在しないと判定した場合、パケット復元部６５は、ステップＳ１１６の処理を省略し、ステップＳ１１７に処理を進める。
【０１５８】
以上のようにして、パケット復元部６５は、応用ガウス消去法を利用してパケット復元の可能性を判定する。
【０１５９】
なお、ステップＳ１１６において、最初に検出された行は、パケット復元部６５等において保持されるようにし、図７のステップＳ２６におけるデータパケット復元処理の際に利用できるようにしてもよい。
【０１６０】
また、以上の処理において最後の列については省略するようにしてもよい。すなわち、ステップＳ１１８の処理において、パケット復元部６５が、変数Ｙの値がＫ−１以下であるか否かを判定するようにしてもよい。
【０１６１】
次に、図７のステップＳ２６において実行されるデータパケット復元処理について説明する。
【０１６２】
データパケットの復元処理は、上述したように、ピボット選択を用いたガウス消去法、または応用ガウス消去法を利用して、式（２）の連立一次方程式のＰ1乃至ＰKの解を求めることによって行われる。このとき、式（２）の右辺第１項の行列の各成分Ｑ1乃至ＱM-Lは、以下に示す式（３）により算出される。
【０１６３】
【数３】
0004088956.tif 000004
【０１６４】
なお、式（３）において、各成分の加算は、対応するビットごとのEOR演算を用いて行う。
【０１６５】
式（３）において、定数Ｍはサーバ１より送信されたデータパケット数であり、定数Ｋはクライアント３がロスしたデータパケット数であり、定数Ｍはサーバ１より送信された冗長パケット数であり、定数Ｌはクライアント３がロスした冗長パケット数である。また、式（３）において、Ｒ1乃至ＲN-Kはクライアント３が受信した各データパケットに含まれているデータを表し、Ｊ1乃至ＪM-Lはクライアント３が受信した各冗長パケットに含まれているデータを表す。
【０１６６】
式（３）の右辺第１項は、サーバ１と共有している式（１）の右辺第１項に関する情報に基づいて生成されたＭ−Ｌ行Ｎ−Ｋ列の行列であり、Ｒ1乃至ＲN-Kの係数を表す行列である。
【０１６７】
パケット復元部６５は、サーバ１と共有する式（１）の右辺第１項に関する情報に基づいて、式（１）の右辺第１項の行列の成分の中から、受信されたデータパケット、および受信された冗長パケットの両方に対応する成分を抽出し、式（３）の右第１項の行列を生成する。
【０１６８】
例えば、図６Ｂに示されるような例の場合、パケット復元部６５は、サーバ１において演算に用いられた式（１）の右辺第１項の行列の、第Ｎ＋１行並びに第Ｎ＋３行乃至第Ｎ＋Ｍ行の、第５列乃至第Ｎ列を成分とする行列を生成する。
【０１６９】
パケット復元部６５は、以上のような式（３）を演算することにより、左辺第１項の行列の各成分Ｑ1乃至ＱM-Lを算出し、それらの値を式（２）に代入して、Ｐ1乃至ＰKの解を求める。その際、パケット復元部６５は、ピボット選択を用いたガウス消去法、または応用ガウス消去法のうち、図７のステップＳ２４のパケット復元可能性判定処理において利用した方法を用いて解を算出する。
【０１７０】
すなわち、パケット復元部６５は、図７のステップＳ２４において、図９に示されるフローチャートのような、ピボット選択を用いたガウス消去法を利用した処理を行った場合、このデータパケット復元処理においても同様に、ピボット選択を用いたガウス消去法を利用した処理を行う。
【０１７１】
また、パケット復元部６５は、図７のステップＳ２４において、図１０に示されるフローチャートのような、応用ガウス消去法を利用した処理を行った場合、このデータパケット復元処理においても同様に、応用ガウス消去法を利用した処理を行う。
【０１７２】
なお、パケット復元部６５が図８に示されるフローチャートのような処理を行った場合、データ復元処理に利用される方法は、ピボット選択を用いたガウス消去法であってもよいし、応用ガウス消去法であってもよい。
【０１７３】
次に、図１１のフローチャートを参照して、クライアント３によるデータパケット復元処理を説明する。
【０１７４】
最初に、パケット復元部６５は、ステップＳ１３１において、式（３）の演算を行い、Ｑ1乃至ＱM-Lを算出して、式（２）のような、ロスしたデータパケットを復元するための連立一次方程式をたてる。
【０１７５】
そして、パケット復元部６５は、ステップＳ１３２において、変数Ｙの値を「０」に設定して初期化し、ステップＳ１３３において、式（２）の左辺第1項の行列の第Ｙ列の各成分について、値が「１」の成分を検出する。
【０１７６】
その検出結果に基づいて、パケット復元部６５は、ステップＳ１３４において、値が「１」の成分が存在するか否かを判定し、存在すると判定した場合、パケット復元部６５は,処理をステップＳ１３５に進める。
【０１７７】
ステップＳ１３５において、パケット復元部６５は、値が「１」の成分が複数存在するか否かを判定し、複数存在すると判定した場合、処理をステップＳ１３６に進める。
【０１７８】
値が「１」の成分が複数存在する場合、パケット復元部６５は、ステップＳ１３６において、２番目以降に検出された成分を含む方程式と、最初に検出された成分を含む方程式との間で、各項についてEOR演算を行い、その演算結果を、演算に用いた２番目以降に検出された成分を含む行に置き換える。すなわち、パケット復元部６５は、前進消去のプロセスを行い、対象のＹ列について、最初に検出された成分を含む行以外の行の成分の値を全て「０」にする。
【０１７９】
そして、パケット復元部６５は、ステップＳ１３７において、最初に検出された成分を含む方程式を求解用に抽出し、保持する。すなわち、この後ステップＳ１３６の処理が繰り返される際のEOR演算は、抽出した方程式を対象とせずに、抽出されずに残された方程式の中で行われる。
【０１８０】
ステップＳ１３７の処理を終えたパケット復元部６５は、ステップＳ１３８に処理を進め、変数Ｙの値に「１」を加算し、ステップＳ１３９において、その変数Ｙの値が列数Ｋ以下であるか否かを判定する。変数Ｙの値が、列数Ｋ以下であり、成分ＡXYが存在すると判定した場合、パケット復元部６５は、処理をステップＳ１３３に戻し、新たな列に対してそれ以降の処理を繰り返す。
【０１８１】
ステップＳ１３９において、変数Ｙの値がＫより大きい場合、すなわち、成分ＡXYが存在しないと判定した場合、パケット復元部６５は、処理をステップＳ１４０に進め、変数Ｙの値を「Ｋ」に設定する。
【０１８２】
そして、ステップＳ１４１において、パケット復元部６５は、ステップＳ１３７の処理により求解用に保持されている方程式を用いて、ＰYの解を算出し、ステップＳ１４２において、変数Ｙの値より「１」を減算し、ステップＳ１４３において、変数Ｙの値が「０」か否かを判定する。「０」でないと判定した場合、パケット復元部６５は、処理をステップＳ１４１に戻し、それ以降の処理を繰り返す。
【０１８３】
そして、ステップＳ１４３において、変数Ｙの値が「０」であると判定した場合、パケット復元部６５は、Ｐ1乃至ＰKの解を算出したので、データパケット復元処理を終了し、図７のステップＳ２７に処理を進める。
【０１８４】
また、ステップＳ１３４において、式（２）の左辺第1項の行列の第Ｙ列について、値が「１」の成分が存在しないと判定した場合、パケット復元部６５は、データパケット復元処理を終了し、図７のステップＳ２７に処理を進める。
【０１８５】
さらに、ステップＳ１３５において、式（２）の左辺第1項の行列の第Ｙ列について、値が「１」の成分が複数存在すると判定した場合、パケット復元部６５は、ステップＳ１３６の処理を省略し、ステップＳ１３７に処理を進める。
【０１８６】
以上のようにして、パケット復元部６５は、ガウス消去法を利用してロスしたデータパケットに含まれているデータを復元する。
【０１８７】
次に、図１２のフローチャートを参照して、クライアント３によるデータパケット復元処理の応用ガウス消去法を利用した他の例について説明する。
【０１８８】
最初に、パケット復元部６５は、ステップＳ１６１において、式（３）の演算を行い、Ｑ1乃至ＱM-Lを算出して、式（２）のような、ロスしたデータパケットを復元するための連立一次方程式をたてる。
【０１８９】
そして、パケット復元部６５は、ステップＳ１６２において、変数Ｙの値を「０」に設定して初期化し、ステップＳ１６３において、式（２）の左辺第1項の行列の第Ｙ列の各成分について、値が「１」の成分を検出する。
【０１９０】
その検出結果に基づいて、パケット復元部６５は、ステップＳ１６４において、値が「１」の成分が存在するか否かを判定し、存在すると判定した場合、パケット復元部６５は,処理をステップＳ１６５に進める。
【０１９１】
ステップＳ１６５において、パケット復元部６５は、最初に検出された成分を含む方程式を求解用に保持する。そして、ステップＳ１６６において、パケット復元部６５は、値が「１」の成分が複数存在するか否かを判定し、複数存在すると判定した場合、処理をステップＳ１６７に進める。
【０１９２】
値が「１」の成分が複数存在する場合、パケット復元部６５は、ステップＳ１６７において、検出された順番が連続する２つの成分をそれぞれ含む２つの方程式間で、各項についてEOR演算処理を行い、その演算結果を、演算に用いた方程式のうち、検出された順番が後の方程式に置き換える。なお、最初に検出された方程式は、最後に検出された方程式とのEOR演算処理結果に置き換えられる。
【０１９３】
そして、パケット復元部６５は、ステップＳ１６８において、変数Ｙの値に「１」を加算するし、ステップＳ１６９において、その変数Ｙの値が列数Ｋ以下であるか否かを判定する。変数Ｙの値が、列数Ｋ以下であり、成分ＡXYが存在すると判定した場合、パケット復元部６５は、処理をステップＳ１６３に戻し、新たな列に対してそれ以降の処理を繰り返す。
【０１９４】
ステップＳ１６９において、変数Ｙの値がＫより大きい場合、すなわち、成分ＡXYが存在しないと判定した場合、パケット復元部６５は、処理をステップＳ１７０に進め、変数Ｙの値を「Ｋ」に設定する。
【０１９５】
そして、ステップＳ１７１において、パケット復元部６５は、ステップＳ１６５の処理により求解用に保持されている方程式を用いて、ＰYの解を算出し、ステップＳ１７２において、変数Ｙの値より「１」を減算し、ステップＳ１７３において、変数Ｙの値が「０」か否かを判定する。「０」でないと判定した場合、パケット復元部６５は、処理をステップＳ１７１に戻し、それ以降の処理を繰り返す。
【０１９６】
そして、ステップＳ１７３において、変数Ｙの値が「０」であると判定した場合、パケット復元部６５は、Ｐ1乃至ＰKの解を算出したので、データパケット復元処理を終了し、図７のステップＳ２７に処理を進める。
【０１９７】
また、ステップＳ１６４において、式（２）の左辺第1項の行列の第Ｙ列について、値が「１」の成分が存在しないと判定した場合、パケット復元部６５は、データパケット復元処理を終了し、図７のステップＳ２７に処理を進める。
【０１９８】
さらに、ステップＳ１６６において、式（２）の左辺第1項の行列の第Ｙ列について、値が「１」の成分が複数存在すると判定した場合、パケット復元部６５は、ステップＳ１６７の処理を省略し、ステップＳ１６８に処理を進める。
【０１９９】
以上のようにして、パケット復元部６５は、応用ガウス消去法を利用してロスしたデータパケットに含まれているデータを復元する。
【０２００】
以上のように、クライアント３において、ロスしたデータパケットを復元する処理を行うようにしたので、データパケットの再送を要求する回数を減らすことができる。さらに、データパケット復元処理を行う前に、ロスしたデータパケットが復元可能であるか否かを判定するようにしたので、再送の必要がある場合も、即座に再送の要求を行うことができる。このような処理は、処理時間に制限のあるストリーミング配信やライブ放送等において特に有効である。
【０２０１】
なお、図１においては、１つのネットワーク２にサーバ１並びにクライアント３−１および３−２が接続されているシステムについて説明したが、システムの構成は、これ以外にも、例えば、複数のサーバがネットワーク２に接続されるようにしてもよいし、さらに多くのクライアント３が接続されるようにしてもよい。また、サーバ１が複数のネットワーク、さらには中継局等の他の装置を介してクライアント３に接続されるようにしてもよい。その場合、本発明を適用した配信処理は、例えば、サーバ１と中継局との間、または、中継局とクライアント３との間における配信処理であってもよい。
【０２０２】
また、図１において、サーバ１およびクライアント３は、有線を介してネットワーク２に接続されており、有線通信を行うように説明したが、これに限らず、サーバ１およびクライアント３が無線通信機能を有し、無線通信によりネットワーク２とそれぞれ接続し、ネットワーク２を介して通信を行うようにしてもよい。その際、利用される通信規格は、通信キャリアを介した電話回線経由の通信以外にも、IEEE（Institute of Electrical and Electronic Engineers）８０２．１１ｘ、ブルートゥース、赤外線を用いたIrDA（InfraRed Data Association）等の近距離無線通信であってもよい。
【０２０３】
さらに、図２において示されるサーバ１の内部の構成例における各ブロックは、その機能の一部または全部が、他のブロックと一体化されて構成されていてもよいし、１つのブロックとして示した機能が複数のブロックとして構成されていてもよい。図３において示されるクライアント３についても同様である。
【０２０４】
なお、サーバ１およびクライアント３は、上述したパーソナルコンピュータ以外にも、例えば、携帯電話機、デジタルビデオカメラ、あるいはテレビジョン受像機などの電子機器に広く適用することができる。
【０２０５】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０２０６】
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを記録する記録媒体は、図２または図３に示されるように、磁気ディスク４１または９１（フレキシブルディスクを含む）、光ディスク４２または９２（CD-ROM（Compact Disc-Read Only Memory）、DVD(Digital Versatile Disc)を含む）、光磁気ディスク４３または９３（MD(Mini-Disc)（登録商標）を含む）、もしくは半導体メモリ４４または９４などよりなるパッケージメディア、または、プログラムが一時的もしくは永続的に記録されるROM１２または６２などにより構成される。記録媒体へのプログラムの記録は、必要に応じてルータ、モデムなどのインターフェースを介して、公衆回線網、ローカルエリアネットワーク、またはインターネットなどのネットワーク、デジタル衛星放送といった、有線または無線の通信媒体を利用して行われる。
【０２０７】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０２０８】
【発明の効果】
以上のように、本発明によれば、他の装置より供給されたパケットデータを取得することができる。特に、より好適にパケットデータを取得し、データの再生を行うことができる。
【図面の簡単な説明】
【図１】本発明を適用したデータ伝送システムの基本的な構成例を示す図である。
【図２】図１のサーバの内部の構成例を示すブロック図である。
【図３】図１のクライアントの内部の構成例を示すブロック図である。
【図４】図１のサーバによるデータ伝送処理を説明するフローチャートである。
【図５】図１のサーバが生成するパケットの例を示す模式図である。
【図６】図１のデータ伝送システムにおいて、サーバより送信され、クライアントによって受信されるパケットの様子を示す模式図である。
【図７】図１のクライアントによるデータ受信処理を説明するフローチャートである。
【図８】図７のステップＳ２４において実行されるパケット復元可能性判定処理の例について説明するフローチャートである。
【図９】図７のステップＳ２４において実行されるパケット復元可能性判定処理の他の例について説明するフローチャートである。
【図１０】図７のステップＳ２４において実行されるパケット復元可能性判定処理の、さらに他の例について説明するフローチャートである。
【図１１】図７のステップＳ２６において実行されるデータパケット復元処理の例について説明するフローチャートである。
【図１２】図７のステップＳ２６において実行されるデータパケット復元処理の他の例について説明するフローチャートである。
【符号の説明】
１  サーバ，  ２  ネットワーク，  ３−１および３−２  クライアント，  １４  パケット生成部，  ６４  データ再生部，  ６５  パケット復元部，  １０１  データパケット，  １０２  冗長パケット
【図１】
0004088956.tif 000005
【図２】
0004088956.tif 000006
【図３】
0004088956.tif 000007
【図４】
0004088956.tif 000008
【図５】
0004088956.tif 000009
【図６】
0004088956.tif 000010
【図７】
0004088956.tif 000011
【図８】
0004088956.tif 000012
【図９】
0004088956.tif 000013
【図１０】
0004088956.tif 000014
【図１１】
0004088956.tif 000015
【図１２】
0004088956.tif 000016