以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が本明細書に記載されていることを確認するためのものである。従って、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
さらに、この記載は、本明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
請求項1に記載の受信装置(例えば、図7のクライアント84)は、受信したパケットを基に、受信したパケットの順番が、相手から送信されたパケットの順番と異なる、パケットのリオーダが、予め定められた第1の期間内に所定の回数以上発生したか否かを判定する判定手段(例えば、図7のリオーダ判定部204)と、パケットのリオーダが、第1の期間内に所定の回数以上発生したと判定された場合、所定の時間間隔で、パケットの再送を要求する旨の再送要求信号を生成し、パケットのリオーダが、第1の期間内に所定の回数以上発生していないと判定された場合、パケットが正常に受信されなかったとき、直ちに、そのパケットの再送を要求する旨の再送要求信号を生成する生成手段(例えば、図7のNACK処理部207)と、生成した再送要求信号を、通信網を介して、相手に送信する送信手段(例えば、図7の送信部231)とを備えることを特徴とする。
請求項2に記載の受信装置(例えば、図7のクライアント84)は、再送要求信号を送信した時刻を含む、再送要求信号の送信の履歴を示す情報を記憶する記憶手段(例えば、図7の送信履歴保持部209)と、再送要求信号を送信してから、再送されてくるパケットを受信するまでに必要とされる遅延時間を算出する算出手段(例えば、図7のRTT計測部210)とをさらに備え、判定手段(例えば、図7のリオーダ判定部204)は、再送要求信号の送信の履歴を示す情報および遅延時間を基に、受信したパケットが、再送されたパケットであるか否かを判定し、さらに、受信したパケットが、再送されたパケットであるか否かの判定の結果を用いて、パケットのリオーダが、第1の期間内に所定の回数以上発生したか否かを判定することを特徴とする。
請求項3に記載の受信装置(例えば、図7のクライアント84)は、生成手段(例えば、図7のNACK処理部207)は、パケットのリオーダが、第1の期間内に所定の回数以上発生したと判定された場合、正常に受信されなかったパケットのうち、再送要求信号を1度も送信していないパケットの再送要求信号と、再送要求信号を送信してから、所定の第2の期間が経過しても再送されたパケットを受信していないパケットの再送要求信号とを、所定の時間間隔で生成し、パケットのリオーダが、第1の期間内に所定の回数以上発生していないと判定された場合、パケットが正常に受信されなかったとき、直ちに、そのパケットの再送を要求する旨の再送要求信号を生成することを特徴とする。
請求項4に記載の受信方法は、受信したパケットを基に、受信したパケットの順番が、相手から送信されたパケットの順番と異なる、パケットのリオーダが、予め定められた期間内に所定の回数以上発生したか否かを判定する判定ステップ(例えば、図15のステップS104の処理)と、パケットのリオーダが、予め定められた期間内に所定の回数以上発生したと判定された場合、所定の時間間隔で、パケットの再送を要求する旨の再送要求信号の生成を制御し、パケットのリオーダが、予め定められた期間内に所定の回数以上発生していないと判定された場合、パケットが正常に受信されなかったとき、直ちに、そのパケットの再送を要求する旨の再送要求信号の生成を制御する生成制御ステップ(例えば、図18ステップS166の処理および図20のステップS195の処理)と、生成された再送要求信号の相手への送信を制御する送信制御ステップ(例えば、図18ステップS167の処理および図20のステップS196の処理)とを含むことを特徴とする。
なお、請求項5に記載の記録媒体および請求項6に記載のプログラムも、上述した請求項4に記載の受信方法と基本的に同様の処理であるため、繰り返しになるのでその説明は省略する。
請求項7に記載の受信装置(例えば、図23のクライアント351)は、受信したパケットを基に、受信したパケットの順番が、相手から送信されたパケットの順番と異なる、パケットのリオーダが、受信した予め定められた数のパケットにおいて、所定の回数以上のリオーダが発生したか否かを判定する判定手段(例えば、図23のリオーダ判定部364)と、パケットのリオーダが、受信した予め定められた数のパケットにおいて、所定の回数以上のリオーダが発生したと判定された場合、所定の時間間隔で、パケットの再送を要求する旨の再送要求信号を生成し、受信した予め定められた数のパケットにおいて、所定の回数以上のリオーダが発生していないと判定された場合、パケットが正常に受信されなかったとき、直ちに、そのパケットの再送を要求する旨の再送要求信号を生成する生成手段(例えば、図23のNACK処理部367)と、生成した再送要求信号を、通信網を介して、相手に送信する送信手段(例えば、図23の送信部381)とを備えることを特徴とする。
請求項8に記載の通信システム(例えば、図4のサーバ82およびクライアント84からなる通信システム)は、第1の情報処理装置(例えば、図4のサーバ82)は、ストリーミングデータが格納されているパケットを、第2の情報処理装置(例えば、図4のクライアント84)あてに送信する送信手段(例えば、図6の送信部181)を備え、第2の情報処理装置は、第1の情報処理装置から送信されてきたパケットを受信する受信手段(例えば、図7の受信部232)と、受信したパケットを基に、受信したパケットの順番が、第1の情報処理装置から送信されたパケットの順番と異なる、パケットのリオーダが、予め定められた期間内に所定の回数以上発生したか否かを判定する判定手段(例えば、図7のリオーダ判定部204)と、パケットのリオーダが、予め定められた期間内に所定の回数以上発生したと判定された場合、所定の時間間隔で、パケットの再送を要求する旨の再送要求信号を生成し、パケットのリオーダが、予め定められた期間内に所定の回数以上発生していないと判定された場合、パケットが正常に受信されなかったとき、直ちに、そのパケットの再送を要求する旨の再送要求信号を生成する生成手段(例えば、図7のNACK処理部207)と、生成した再送要求信号を、第1の情報処理装置あてに送信する送信手段(例えば、図7の送信部231)とを備え、第1の情報処理装置は、第2の情報処理装置から送信されてきた再送要求信号を受信する受信手段(例えば、図6の受信部182)をさらに備え、第1の情報処理装置における送信手段は、さらに、再送が要求されたパケットを、再送パケットとして第2の情報処理装置あてに送信することを特徴とする。
請求項9に記載の通信システム(例えば、図4のサーバ82およびクライアント84からなる通信システム)は、第1の情報処理装置(例えば、図22のサーバ301)は、パケットが、再送されるパケットであるか否かを示す情報を含むパケットを生成する生成手段(例えば、図22のパケタイザ312)をさらに備え、第2の情報処理装置(例えば、図23のクライアント351)における判定手段(例えば、図23のリオーダ判定部364)は、パケットに含まれる、パケットが、再送されるパケットであるか否かを示す情報を基に、受信したパケットが、再送されたパケットであるか否かを判定し、さらに、受信したパケットが、再送されたパケットであるか否かの判定の結果を用いて、パケットのリオーダが、予め定められた期間内に所定の回数以上発生したか否かを判定することを特徴とする。
本発明は、例えば、インターネット電話、遠隔テレビ会議システム、ライブ映像ストリーミング配信システム、またはテレビ電話などのリアルタイムにストリーミングデータを伝送する通信システムに適用できる。
まず、本発明を適用した第1の実施の形態について説明する。
図4は、本発明を適用したストリーミング配信システムの一実施例の形態を示す図である。このストリーミング配信システムにおいては、インターネットなどの通信網83に、サーバ82およびクライアント84が接続されている。
ビデオカメラ81は、画像を撮像して、撮像した画像に対応する画像データをサーバ82に供給する。例えば、ビデオカメラ81は、動画像を撮像して、動画像に対応する画像データをサーバ82に供給する。
画像データは、ストリーミングデータの一例である。ストリーミングデータは、音声のデータ、またはリアルタイム制御データなど、時間の経過に対応して順次送信または受信が要求されるデータであればよい。
サーバ82は、クライアント84からストリーミングデータの配信が要求された場合、ビデオカメラ81から供給された画像データをパケットに格納して、パケットを、通信網83を介して、クライアント84あてに送信する。
通信網83は、有線または無線の、通信回線、ネットワーク、またはインターネットなどからなる伝送路であり、サーバ82から送信されたパケットをクライアント84まで伝送する。また、通信網83は、クライアント84から送信された再送要求信号をサーバ82まで伝送する。
クライアント84は、サーバ82から送信されてきたパケットを受信する。クライアント84は、受信したパケットから画像データを抽出し、抽出した画像データを出力する。
クライアント84は、パケットのリオーダが発生した回数を基に、再送要求信号の送信の時間間隔を決定する、再送モードの設定を行う。
なお、再送モードの詳細は後述するが、クライアント84は、所定の期間内に、予め定められた回数以上のリオーダが発生した場合、再送モードに同期モードを設定し、所定の期間内に、予め定められた回数以上のリオーダが発生しなかった場合、再送モードに非同期モードを設定する。
クライアント84は、ストリーミングデータが格納されているパケットを正常に受信できなかった場合、再送モードに同期モードが設定されているときには、予め定められた所定の時間間隔で、パケットの再送を要求する旨の再送要求信号をサーバ82あてに送信する。
また、クライアント84は、ストリーミングデータが格納されているパケットを正常に受信できなかった場合、再送モードに非同期モードが設定されているときには、直ちに再送要求信号をサーバ82あてに送信する。
サーバ82は、クライアント84から送信されてきた、再送要求信号を受信する。サーバ82は、再送要求信号を受信した場合、再送が要求された画像データが格納されているパケットを、通信網83を介してクライアント84あてに送信する。そして、クライアント84は、サーバ82から送信されてきたパケットを受信する。
図5は、サーバ82の構成の例を示すブロック図である。CPU(Central Processing Unit)101は、ROM(Read Only Memory)102、または記録部108に記録されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)103には、CPU101が実行するプログラムやデータなどが適宜記憶される。これらのCPU101、ROM102、およびRAM103は、バス104により相互に接続されている。
CPU101にはまた、バス104を介して入出力インタフェース105が接続されている。入出力インタフェース105には、キーボード、マウス、スイッチなどよりなる入力部106、ディスプレイ、スピーカ、ランプなどよりなる出力部107が接続されている。CPU101は、入力部106から入力される指令に対応して各種の処理を実行する。
入出力インタフェース105に接続されている記録部108は、例えばハードディスクなどで構成され、CPU101が実行するプログラムや各種のデータを記録する。通信部109は、インターネット、その他のネットワークなどの通信網83を介して、クライアント84などの外部の装置と通信する。
また、通信部109は、通信網83を介してプログラムを取得し、記録部108に記録させるようにしてもよい。
入出力インタフェース105に接続されているドライブ110は、磁気ディスク131、光ディスク132、光磁気ディスク133、或いは半導体メモリ134などが装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記録部108に転送され、記録される。
なお、クライアント84は、サーバ82と同様に構成されるので、その説明は省略する。
図6は、サーバ82の機能の構成を示すブロック図である。
サーバ82は、通信部109、エンコーダ161、パケタイザ162、再送用バッファ163、NACK処理部164、およびRTT計測部165を含むように構成される。
エンコーダ161は、ビデオカメラ81から供給されたストリーミングデータの一例である画像データをエンコード(符号化)し、エンコードした画像データをパケタイザ162に供給する。
パケタイザ162は、エンコーダ161から供給された画像データをRTP方式のパケットに格納することによって、RTPパケットを生成する。パケタイザ162は、生成したRTPパケットを通信部109および再送用バッファ163に供給する。
通信部109は、各種のデータを送信する送信部181および各種のデータを受信する受信部182を備えており、通信網83を介してデータの送受信を行う。
通信部109の送信部181は、パケタイザ162またはNACK処理部164から供給されたRTPパケットを、通信網83を介して、クライアント84あてに送信する。また、通信部109の送信部181は、RTT計測部165から供給されたRTT計測パケットを、通信網83を介して、クライアント84あてに送信する。なお、RTT計測パケットの詳細は後述するが、RTT計測パケットとは、通信網83における往復遅延時間を算出するためのパケットである。ここで、往復遅延時間とは、クライアント84が、再送要求信号を、通信網83を介してサーバ82あてに送信してから、サーバ82から送信されてくるRTPパケットを受信するまでに要する時間をいう。
通信部109の受信部182は、クライアント84から送信されてきた再送要求信号を受信し、受信した再送要求信号をNACK処理部164に供給する。また、通信部109の受信部182は、クライアント84から送信されてきたRTT計測パケットを受信し、受信したRTT計測パケットをRTT計測部165に供給する。
再送用バッファ163は、パケタイザ162から供給されたRTPパケットを、クライアント84に再送する再送パケットとして、一時的に記憶する。再送用バッファ163は、記憶しているRTPパケットをNACK処理部164に供給する。
NACK処理部164は、通信部109から供給された再送要求信号を基に、再送が要求された画像データが格納されているRTPパケットを再送用バッファ163から取得する。NACK処理部164は、再送用バッファ163から取得したRTPパケットを通信部109に供給する。
RTT計測部165は、通信部109が受信し、通信部109から供給されたRTT計測パケットを取得する。RTT計測部165は、取得したRTT計測パケットのデータ部と同一のデータを含むRTT計測パケットを生成し、生成したRTT計測パケットを通信部109に供給する。
図7は、クライアント84の機能の構成を示すブロック図である。
クライアント84は、通信部201、RTP処理部202、デコーダ203、リオーダ判定部204、リオーダデータベース205、再送モード記憶部206、NACK処理部207、NACKデータベース208、送信履歴保持部209、RTT計測部210、およびRTT保持部211を含むように構成される。
通信部201は、各種のデータを送信する送信部231および各種のデータを受信する受信部232を備えており、通信網83を介してデータの送受信を行う。
通信部201の送信部231は、NACK処理部207から供給された再送要求信号を、通信網83を介して、サーバ82あてに送信する。また、通信部201の送信部231は、RTT計測部210から供給されたRTT計測パケットを、通信網83を介して、サーバ82あてに送信する。
通信部201の受信部232は、サーバ82から送信されてきたRTPパケットを受信し、受信したRTPパケットをRTP処理部202に供給する。また、通信部201の受信部232は、サーバ82から送信されてきたRTT計測パケットを受信し、受信したRTT計測パケットを、RTT計測部210に供給する。
RTP処理部202は、通信部201から供給されたRTPパケットから画像データを抽出し、抽出した画像データをデコーダ203に供給する。また、RTP処理部202は、通信部201から供給されたRTPパケットからシーケンス番号を抽出し、抽出したシーケンス番号をNACK処理部207およびリオーダ判定部204に供給する。
なお、シーケンス番号の詳細は後述するが、シーケンス番号とは、RTPパケットを特定するための番号であり、シーケンス番号は、RTPパケットに格納されている。
デコーダ203は、RTP処理部202から供給された画像データを、エンコーダ161に対応するデコード(復号)方式によりデコードし、デコードした画像データを出力する。
リオーダ判定部204は、リオーダデータベース205を制御し、リオーダデータベース205に、RTP処理部202から供給されたシーケンス番号を保持させる。また、リオーダ判定部204は、再送モード記憶部206を制御し、再送モード記憶部206に再送モードの設定を行わせる。
リオーダ判定部204は、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持しているか否かを判定する。リオーダ判定部204は、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持していないと判定された場合、リオーダデータベース205を制御し、RTP処理部202から供給されたシーケンス番号を、リオーダデータベース205にRTPパケットを受信した順に(RTP処理部202から供給された順に)保持させる。
一方、リオーダ判定部204は、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持していると判定された場合、送信履歴保持部209に保持されている、再送を要求したRTPパケットのシーケンス番号および再送を要求した時刻、並びにRTT保持部211に保持されている往復遅延時間を基に、RTP処理部202から供給されたシーケンス番号によって特定されるRTPパケットが、再送されたRTPパケットであるか否かを判定する。
リオーダ判定部204は、RTP処理部202から供給されたシーケンス番号によって特定されるRTPパケットが、再送されたRTPパケットであると判定された場合、リオーダデータベース205を制御し、RTP処理部202から供給されたシーケンス番号を、リオーダデータベース205に番号順に保持させる。
また、リオーダ判定部204は、RTP処理部202から供給されたシーケンス番号によって特定されるRTPパケットが、再送されたRTPパケットでないと判定された場合、リオーダデータベース205を制御し、RTP処理部202から供給されたシーケンス番号を、リオーダデータベース205にRTPパケットを受信した順に保持させる。
リオーダ判定部204は、リオーダデータベース205が保持しているシーケンス番号を基に、所定の期間内に予め定められた回数以上のリオーダが発生したか否かを判定する。
リオーダ判定部204は、所定の期間内に予め定められた回数以上のリオーダが発生したと判定された場合、再送モード記憶部206を制御し、再送モードに同期モードを設定させる。
一方、リオーダ判定部204は、所定の期間内に予め定められた回数以上のリオーダが発生していないと判定された場合、再送モード記憶部206を制御し、再送モードに非同期モードを設定させる。
リオーダデータベース205は、リオーダ判定部204の制御のもと、受信されたRTPパケットのシーケンス番号を所定の期間、一時的に保持する。
再送モード記憶部206は、再送モードを示す再送モードフラグを記憶している。セットされている(例えば、“1”が設定されている)再送モードフラグは、再送モードに同期モードが設定されていることを示し、リセットされている(例えば、“0”が設定されている)再送モードフラグは、再送モードに非同期モードが設定されていることを示す。
再送モード記憶部206は、リオーダ判定部204によって、所定の期間内に予め定められた回数以上のリオーダが発生したと判定された場合、リオーダ判定部204の制御のもと、記憶している再送モードフラグをセットすることにより、再送モードに同期モードを設定する。
再送モード記憶部206は、リオーダ判定部204によって、所定の期間内に予め定められた回数以上のリオーダが発生していないと判定された場合、リオーダ判定部204の制御のもと、記憶している再送モードフラグをリセットすることにより、再送モードに非同期モードを設定する。
NACK処理部207は、NACKデータベース208が、RTP処理部202から供給されたシーケンス番号を保持している場合、NACKデータベース208を制御し、RTP処理部202から供給されたシーケンス番号を、NACKデータベース208から消去させる。
NACK処理部207は、NACKデータベース208が、RTP処理部202から供給されたシーケンス番号を保持していない場合、シーケンス番号を消去させない。
NACK処理部207は、RTP処理部202から供給されたシーケンス番号を基に、パケットロスが発生したか否かを判定する。
NACK処理部207は、パケットロスが発生したと判定された場合、NACKデータベース208を制御し、ロスしたRTPパケットのシーケンス番号を、NACKデータベース208に保持させる。NACK処理部207は、パケットロスが発生していないと判定された場合、シーケンス番号を保持させない。
NACK処理部207は、再送モード記憶部206が記憶している再送モードフラグを基に、再送モードに同期モードが設定されているか否かを判定する。
NACK処理部207は、再送モードに同期モードが設定されていると判定された場合、予め定められた時間間隔で、NACKデータベース208に保持されているシーケンス番号を基に、再送要求信号を生成する。NACK処理部207は、生成した再送要求信号を通信部201に供給する。なお、NACKデータベース208にシーケンス番号が保持されていない場合、NACK処理部207は、予め定められた所定の期間が経過しても再送要求信号を生成しない。
NACK処理部207は、再送モードに同期モードが設定されていないと判定された場合、パケットロスが発生したとき、直ちにNACKデータベース208に保持されているシーケンス番号を基に、再送要求信号を生成する。NACK処理部207は、生成した再送要求信号を通信部201に供給する。なお、パケットロスが発生していないとき、NACK処理部207は、再送要求信号を生成しない。
NACK処理部207は、生成した再送要求信号のシーケンス番号および送信時刻を送信履歴保持部209に供給する。
NACKデータベース208は、NACK処理部207の制御のもと、ロスしたRTPパケットのシーケンス番号を一時的に保持する。また、NACKデータベース208は、NACK処理部207の制御のもと、保持しているRTPパケットのシーケンス番号を消去する。
送信履歴保持部209は、通信網83を介して、サーバ82に送信された再送要求信号の送信の履歴を保持している。すなわち、送信履歴保持部209は、NACK処理部207から供給された、再送要求信号の送信時刻および再送要求信号に含まれるシーケンス番号を保持する。
RTT計測部210は、通信網83における往復遅延時間を計測(算出)するためのRTT計測パケットを生成し、生成したRTT計測パケットを通信部201に供給する。RTT計測部210は、通信部201から供給されたRTT計測パケットを基に、通信網83における往復遅延時間を算出し、算出した往復遅延時間をRTT保持部211に供給する。
RTT保持部211は、RTT計測部210から供給された往復遅延時間を保持する。
次に、図8および図9のタイムチャートを参照して、本発明に係るストリーミングデータ配信システムを説明する。
図8は、再送モードに同期モードが設定されている場合に、クライアント84が再送要求信号を送信する処理を説明するタイムチャートである。
図8において、横方向は、時間を示す。また、時刻t201から時刻t205までの期間T1−1および時刻t205から所定の時刻までの期間T1−2は、クライアント84における、予め定められたタイマの期間であり、再送要求信号を送信する時間の間隔を示す。
サーバ82は、ストリーミングデータが格納されたRTPパケット251−1乃至RTPパケット251−7を、通信網83を介して、クライアント84あてに送信する。
クライアント84は、サーバ82から送信されてきたRTPパケット251−1乃至RTPパケット251−3を受信する。また、時刻t202において、クライアント84は、サーバ82から送信されてきたRTPパケット251−5を受信する。すなわち、この場合、クライアント84は、RTPパケット251−4よりも先にRTPパケット251−5を受信したので、通信網83において、パケットのリオーダまたはパケットロスが発生したことが分かる。
時刻t202において、クライアント84は、RTPパケット251−5を受信し、RTPパケット251−4を受信していないので、パケットロスが発生したと判定し、ロスしたRTPパケット251−4のシーケンス番号をNACKデータベース208に保持する。
時刻t203において、クライアント84は、サーバ82から送信されてきたRTPパケット251−4を受信する。このとき、クライアント84は、RTPパケット251−4を受信したので、NACKデータベース208に保持されているRTPパケット251−4のシーケンス番号を消去する。
時刻t204において、クライアント84は、サーバ82から送信されてきたRTPパケット251−7を受信する。このとき、クライアント84は、RTPパケット251−7を受信し、RTPパケット251−6を受信していないので、パケットロスが発生したと判定し、ロスしたRTPパケット251−6のシーケンス番号をNACKデータベース208に保持する。
時刻t205において、クライアント84は、内蔵しているタイマが終了し、再送要求信号を送信する時刻となったので、再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
このとき、クライアント84は、NACKデータベース208がRTPパケット251−6のシーケンス番号を保持しているので、RTPパケット251−6に格納されているストリーミングデータの再送を要求する旨の再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
時刻t206において、サーバ82は、クライアント84から送信されてきた再送要求信号を受信する。また、時刻t206において、サーバ82は、再送要求信号を受信したので、再送が要求されたストリーミングデータが格納されているRTPパケット252を、RTPパケット251−6に対応する再送パケットとして、通信網83を介してクライアント84あてに送信する。
時刻t207において、クライアント84は、サーバ82から送信されてきた、再送パケットとしてのRTPパケット252を受信する。
このようにして、クライアント84は、再送モードに同期モードが設定されている場合、予め定められた所定の時間間隔で再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
このように、予め定められた所定の時間間隔で、再送要求信号を送信することによって、無駄な再送要求信号の送信を防止することができ、より効率的にデータを送受信することができる。
図9は、再送モードに非同期モードが設定されている場合に、クライアント84が再送要求信号を送信する処理を説明するタイムチャートである。
図9において、横方向は、時間を示す。サーバ82は、ストリーミングデータが格納されたRTPパケット271−1乃至RTPパケット271−5を、通信網83を介して、クライアント84あてに送信する。
クライアント84は、サーバ82から送信されてきたRTPパケット271−1乃至RTPパケット271−3を受信する。また、時刻t231において、クライアント84は、サーバ82から送信されてきたRTPパケット271−5を受信する。
このとき、クライアント84は、RTPパケット271−5を受信し、RTPパケット271−4を受信していないので、パケットロスが発生したと判定し、直ちに、RTPパケット271−4に格納されているストリーミングデータの再送を要求する旨の再送要求信号を生成する。そして、クライアント84は、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
時刻t232において、サーバ82は、クライアント84から送信されてきた再送要求信号を受信する。また、時刻t232において、サーバ82は、再送要求信号を受信したので、再送が要求されたストリーミングデータが格納されているRTPパケット272を、RTPパケット271−4に対応する再送パケットとして、通信網83を介してクライアント84あてに送信する。
クライアント84は、サーバ82から送信されてきた、再送パケットとしてのRTPパケット272を受信する。
このようにして、クライアント84は、再送モードに非同期モードが設定されている場合、パケットロスが発生したと判定されたとき、直ちに再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
このように、再送モードに非同期モードが設定されている場合、リオーダが発生する可能性は低いので、パケットロスが発生したと判定されたとき、直ちに再送要求信号を送信することで、より迅速にデータを受信することができる。
以下、図を参照して、サーバ82およびクライアント84のより具体的な処理について説明する。
まず、図10のフローチャートを参照して、サーバプログラムを実行するサーバ82によるRTPパケットの送信の処理を説明する。
ステップS11において、サーバ82は、RTPパケットの送信の処理に必要なデータを初期化する。例えば、ステップS11において、エンコーダ161は、内蔵しているタイマの値を0msにセットし、パケタイザ162は、タイムスタンプおよびシーケンス番号を初期化する。
ステップS12において、エンコーダ161は、内蔵しているタイマの値を基に、タイマが終了したか否かを判定し、タイマが終了していないと判定された場合、ステップS12に戻り、タイマが終了したと判定されるまで、判定の処理を繰り返す。
ステップS12において、タイマが終了したと判定された場合、処理はステップS13に進む。
例えば、画像データのフレームの数が1秒当たり30である場合、タイマが時間の経過に対応して値を増加させるとき、ステップS12において、エンコーダ161は、33msなどの所定の値とタイマの値を比較することによりタイマが終了したか否かを判定する。
例えば、ステップS11において、タイマの値を33msにセットし、タイマの値が時間の経過に対応して値を減少させるとき、エンコーダ161は、タイマの値と、0msとを比較することによりタイマが終了したか否かを判定する。
この場合における、タイマの値と比較される0msまたは33msは、フレームの数が1秒当たり30である場合の例であり、本発明を限定するものではない。
以下に説明するタイマに関する処理において、同様である。
ステップS13において、エンコーダ161は、ビデオカメラ81から供給された画像データを1フレーム分キャプチャする。例えば、ステップS13において、エンコーダ161は、ビデオカメラ81から供給された画像データを順次取得して、取得した画像データのうち、1フレーム分をキャプチャする。
ステップS14において、エンコーダ161は、キャプチャした画像データをエンコードし、エンコードした画像データをパケタイザ162に供給する。例えば、ステップS14において、エンコーダ161は、キャプチャした画像データをMPEG1、2、4、7、もしくは21、JPEG(Joint Photographic Experts Group)、JPEG2000、またはモーションJPEGなどの方式によりエンコードし、エンコードした画像データをパケタイザ162に供給する。
ステップS15において、パケタイザ162は、エンコーダ161から供給された画像データをRTP方式のパケットに格納することによって、RTPパケットを生成する。パケタイザ162は、生成したRTPパケットを通信部109および再送用バッファ163に供給する。
ここで、図11は、RTPパケットを説明する図である。RTPパケットの先頭には、図11において“V”で表される、2ビットのバージョン情報が配置される。バージョン情報は、RTPパケットのバージョンを示す。
バージョン情報の次に図11中の“P”で表される1ビットのパディングが配置され、パディングに続いて、1ビットの拡張情報がRTPパケットに配置される。拡張情報は、図11において、“X”で表される。拡張情報は、RTPパケットに拡張ヘッダを配置する場合に、所定の値に設定される。
拡張情報に続いて、CSRC(Contributing Source)カウントがRTPパケットに配置される。CSRCカウントは、図11中において、“CC”で表される。CSRCカウントは、CSRC識別子の数を表す。
CSRCカウントに続いて配置される、1ビットのメーカー情報は、プロファイルによって定義される。メーカー情報は、図11中において“m”で表される。
メーカー情報に続いて配置される、7ビットのペイロードタイプは、RTPパケットのフォーマットを定義するための情報である。ペイロードタイプは、図11中において、“PT”で表される。RTPパケットにおいて、ペイロードタイプは、33とされる。
シーケンス番号は、ペイロードタイプの次に配置される、16ビットの情報である。シーケンス番号は、RTPパケットの再生の順番を示す番号であり、送信の度に、1ずつ増える。
シーケンス番号の次に配置される、32ビットのタイムスタンプは、そのRTPパケットに格納されているストリーミングデータの最初のオクテットがサンプルされた時刻を示す情報である。また、タイムスタンプにより、受信側においてRTPパケットの展開時に処理時間の制御が実行され、リアルタイム画像、または音声の再生制御を行うことが可能となる。タイムスタンプは、1つの画像フレームに属する複数のRTPパケットに共通のタイムスタンプが設定される。
SSRC(Synchronization Source)識別子は、タイムスタンプの次に配置される32ビットの情報であって、RTPパケットに格納されるストリーミングデータのソースを示す。
RTPパケットにおいて、SSRC識別子の次には、ストリーミングデータが格納される。図11において、“Original Data”は、ストリーミングデータを示す。
図10のフローチャートの説明に戻り、ステップS16において、再送用バッファ163は、パケタイザ162から供給されたRTPパケットを、再送パケットとして一時的に記憶する。
ステップS17において、通信部109の送信部181は、パケタイザ162から供給されたRTPパケットを、通信網83を介して、クライアント84あてに送信する。
ステップS18において、パケタイザ162は、RTPパケットに付加するタイムスタンプを更新する。
ステップS19において、エンコーダ161は、内蔵しているタイマをセットして、ステップS12に戻り、上述した処理を繰り返す。例えば、ステップS19において、エンコーダ161は、タイマの値を0msにセットする。
このようにして、サーバ82は、RTPパケットを生成し、生成したRTPパケットを、通信網83を介して、クライアント84あてに送信する。
次に、図12のフローチャートを参照して、サーバ82による、RTPパケットの再送の処理を説明する。
ステップS41において、NACK処理部164は、通信部109が、クライアント84から送信されてきた再送要求信号を受信したか否かを判定する。
ステップS41において、再送要求信号を受信していないと判定された場合、ステップS41に戻り、再送要求信号を受信したと判定されるまで、判定の処理を繰り返す。
ステップS41において、再送要求信号を受信したと判定された場合、通信部109から再送要求信号が供給されるので、ステップS42に進み、NACK処理部164は、通信部109から供給された再送要求信号を基に、再送が要求された画像データが格納されているRTPパケットを、再送用バッファ163から取得する。NACK処理部164は、再送用バッファ163から取得したRTPパケットを通信部109に供給する。
より詳細には、ステップS42において、NACK処理部164は、通信部109から供給された再送要求信号に含まれるシーケンス番号と同一のシーケンス番号を格納しているRTPパケットを、再送用バッファ163から取得する。NACK処理部164は、再送用バッファ163から取得したRTPパケットを通信部109に供給する。
ステップS43において、通信部109の送信部181は、NACK処理部164から供給されたRTPパケットを再送し、手続きは、ステップS41に戻り上述した処理を繰り返す。すなわち、ステップS43において、通信部109の送信部181は、NACK処理部164から供給されたRTPパケットを、通信網83を介して、クライアント84あてに送信する。
このようにして、サーバ82は、クライアント84から送信されてきた再送要求信号を受信すると、再送が要求された画像データが格納されているRTPパケットを取得し、取得したRTPパケットを再送する。
このように、RTPパケットを再送することによって、パケットロスが発生した場合においても、クライアント84は、ロスしたRTPパケットに格納されている画像データを受信することができる。
図13のフローチャートを参照して、サーバ82による、RTT計測パケットの返信の処理を説明する。
ステップS61において、RTT計測部165は、通信部109がクライアント84から送信されてきたRTT計測パケットを受信したか否かを判定する。
ステップS61において、通信部109が、クライアント84から送信されてきたRTT計測パケットを受信していないと判定された場合、ステップS61に戻り、RTT計測パケットを受信したと判定されるまで、判定の処理を繰り返す。
一方、ステップS61において、通信部109が、クライアント84から送信されてきたRTT計測パケットを受信したと判定された場合、通信部109からRTT計測パケットが供給されるので、ステップS62に進み、RTT計測部165は、直ちに、受信したRTT計測パケットのデータ部分と同様のRTT計測パケットを生成して、生成したRTT計測パケットを通信部109に供給する。そして、通信部109の送信部181は、RTT計測部165から供給されたRTT計測パケットを、通信網83を介して、クライアント84あてに送信し、ステップS61に戻り、上述した処理を繰り返す。
このように、サーバ82は、RTT計測パケットを受信すると、直ちに、クライアント84あてにRTT計測パケットを返送(返信)する。
図14のフローチャートを参照して、クライアントプログラムを実行するクライアント84による、デコードの処理を説明する。
ステップS81において、RTP処理部202は、通信部201がサーバ82から送信されてきたRTPパケットを受信したか否かを判定する。ステップS81において、RTPパケットを受信していないと判定された場合、ステップS81に戻り、RTPパケットを受信したと判定されるまで、判定の処理を繰り返す。
一方、ステップS81において、RTPパケットを受信したと判定された場合、ステップS82に進み、RTP処理部202は、通信部201の受信部232が受信し、通信部201の受信部232から供給されたRTPパケットからシーケンス番号を抽出する。RTP処理部202は、抽出したシーケンス番号をNACK処理部207およびリオーダ判定部204に供給する。
ステップS83において、RTP処理部202は、通信部201から供給されたRTPパケットから画像データを抽出し、抽出した画像データをデコーダ203に供給する。
ステップS84において、デコーダ203は、RTP処理部202から供給された画像データを、エンコーダ161の符号化方式に対応する復号方式で復号(デコード)する。デコーダ203は、復号した画像データを出力して、手続きはステップS81に戻り、上述した処理を繰り返す。
このようにして、クライアント84は、サーバ82から送信されてきたRTPパケットを受信し、RTPパケットに格納されている画像データを出力する。
図15のフローチャートを参照して、クライアント84による、再送モードの更新の処理を説明する。
ステップS101において、クライアント84は、再送モードの更新の処理に必要なデータを初期化する。例えば、ステップS101において、リオーダ判定部204は、リオーダデータベース205を制御し、リオーダデータベース205を初期化させる。
ステップS102において、リオーダデータ判定部204は、RTP処理部202からシーケンス番号が供給されたか否かを判定する。ステップS102において、RTP処理部202からシーケンス番号が供給されていないと判定された場合、ステップS102に戻り、RTP処理部202からシーケンス番号が供給されたと判定されるまで、判定の処理を繰り返す。
一方、ステップS102において、RTP処理部202からシーケンス番号が供給されたと判定された場合、ステップS103に進み、リオーダ判定部204は、リオーダデータベースの更新の処理を行う。なお、リオーダデータベースの更新の処理の詳細は後述するが、リオーダデータベースの更新の処理において、リオーダ判定部204は、リオーダデータベース205制御し、シーケンス番号を保持させることにより、リオーダデータベース205を更新する。
ステップS104において、リオーダ判定部204は、リオーダデータベース205に保持されているシーケンス番号を基に、所定の期間内に予め定められた回数以上のリオーダが発生したか否かを判定する。
例えば、ステップS104において、リオーダ判定部204は、10秒間に2回以上のリオーダが発生したか否かを判定する。
ここで、例えば、現在時刻を時刻t252とし、現在時刻よりも10秒前の時刻を時刻t251とする。そして、例えば、リオーダデータベース205が、時刻t251から時刻t252(現在時刻)までの期間に受信されたRTPパケットのシーケンス番号を保持しており、リオーダデータベース205が、シーケンス番号“1”、“2”、“3”、“4”、“5”、“6”、および“7”を、“1”、“2”、“3”、“4”、“5”、“7”、および“6”の順番で保持している場合、時刻t251から時刻t252(現在時刻)までの10秒間にリオーダの発生は、1回であるので、ステップS104において、リオーダ判定部204は、10秒間に2回以上のリオーダが発生していないと判定する。
ステップS104において、所定の期間内に予め定められた回数以上のリオーダが発生したと判定された場合、ステップS105に進み、再送モード記憶部206は、リオーダ判定部204の制御のもと、再送モードに同期モードを設定し、手続きは、ステップS102に戻る。
例えば、ステップS105において、再送モード記憶部206は、リオーダ判定部204の制御のもと、記憶している再送モードフラグをセットする(例えば、再送モードフラグを“1”に設定する)ことにより、再送モードに同期モードを設定する。
一方、ステップS104において、所定の期間内に予め定められた回数以上のリオーダが発生していないと判定された場合、ステップS106に進み、再送モード記憶部206は、リオーダ判定部204の制御のもと、再送モードに非同期モードを設定し、手続きは、ステップS102に戻り、上述した処理を繰り返す。
例えば、ステップS106において、再送モード記憶部206は、リオーダ判定部204の制御のもと、記憶している再送モードフラグをリセットする(例えば、再送モードフラグを“0”に設定する)ことにより、再送モードに非同期モードを設定する。
このようにして、リオーダ判定部204は、リオーダデータベース205を更新し、リオーダデータベース205が保持しているシーケンス番号を基に、再送モードの設定を行う。
このように、再送モードの設定を行うことにより、クライアント84は、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率良くデータを受信することができる。
次に、図16のフローチャートを参照して、図15のステップS103の処理に対応するリオーダデータベースの更新の処理を説明する。
ステップS121において、リオーダ判定部204は、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持しているか否かを判定する。
例えば、再送モードに非同期モードが設定されており、RTP処理部202からリオーダ判定部204に、シーケンス番号“1”、“2”、“3”、“4”、“5”、“6”、および“7”が、“1”、“2”、“3”、“4”、“5”、“7”、および“6”の順番で供給された場合、リオーダ判定部204にシーケンス番号“7”が供給されたとき、NACK処理部207は、シーケンス番号“6”をロスしたと判定し、シーケンス番号が“6”であるRTPパケットの再送を要求する旨の再送要求信号を生成するので、送信履歴保持部209には、シーケンス番号“6”およびシーケンス番号“6”を含む再送要求信号が送信された時刻が保持されている。
したがって、この場合、RTP処理部202からリオーダ判定部204にシーケンス番号“6”が供給されたとき、送信履歴保持部209には、シーケンス番号“6”およびシーケンス番号“6”を含む再送要求信号が送信された時刻が保持されているので、ステップS121において、リオーダ判定部204は、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持していると判定する。
ステップS121において、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持していると判定された場合、ステップS122に進み、リオーダ判定部204は、RTP処理部202から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットであるか否かを判定する。
例えば、ステップS122において、リオーダ判定部204は、送信履歴保持部209が保持しているシーケンス番号およびシーケンス番号を含む再送要求信号を送信した時刻、並びにRTT保持部211が保持している往復遅延時間を基に、式(1)を計算することにより、RTP処理部202から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットであるか否かを判定する。
(現在時刻)−(再送要求信号の送信時刻)≦(往復遅延時間) ・・・(1)
ここで、再送要求信号の送信時刻は、送信履歴保持部209に保持されている再送要求信号の送信時刻のうち、RTP処理部202からリオーダ判定部204に供給されたシーケンス番号と同一のシーケンス番号を含む再送要求信号の送信時刻をいう。また、ここで、リオーダ判定部204は、例えば、内蔵しているRTC(Real Time Clock)などから現在時刻を取得する。
すなわち、この場合、リオーダ判定部204は、式(1)が満たされる場合、RTP処理部202から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットであると判定し、式(1)が満たされないとき、RTP処理部202から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットでないと判定する。
ステップS122において、RTP処理部202から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットでないと判定された場合、リオーダが発生したので、手続きはステップS123に進む。
また、ステップS121において、送信履歴保持部209が、RTP処理部202から供給されたシーケンス番号を保持していないと判定された場合、RTP処理部202から供給されたシーケンス番号を含むRTPパケットは、再送されたRTPパケットではないRTPパケットであって、正常に受信されたRTPパケットまたはリオーダの発生によりシーケンス番号の順番で受信されなかったRTPパケットであるので、ステップS122の処理はスキップされ、手続きはステップS123に進む。
ステップS123において、リオーダデータベース205は、リオーダ判定部204の制御のもと、RTP処理部202からリオーダ判定部204に供給されたシーケンス番号を、RTPパケットを受信した順(すなわち、RTP処理部202からリオーダ判定部204に供給された順)に保持する。
したがって、この場合、例えば、RTP処理部202からシーケンス番号“6”がリオーダ判定部204に供給され、リオーダデータベース205がシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”をシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”の順番で保持しているとき、リオーダデータベース205は、リオーダ判定部204の制御のもと、リオーダデータベース205が保持しているシーケンス番号の順番が、“1”、“2”、“3”、“4”、“5”、“7”、および“6”の順番となるように、シーケンス番号“6”を保持する。
また、ステップS122において、RTP処理部202から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットであると判定された場合、ステップS124に進み、リオーダデータベース205は、リオーダ判定部204の制御のもと、RTP処理部202からリオーダ判定部204に供給されたシーケンス番号を、シーケンス番号順に保持する。
したがって、この場合、例えば、RTP処理部202からシーケンス番号“6”がリオーダ判定部204に供給され、リオーダデータベース205がシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”をシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”の順番で保持しているとき、リオーダデータベース205は、リオーダ判定部204の制御のもと、リオーダデータベース205が保持しているシーケンス番号の順番が、“1”、“2”、“3”、“4”、“5”、“6”、および“7”の順番となるように、シーケンス番号“6”を保持する。
ステップS125において、リオーダデータベース205は、リオーダ判定部204の制御のもと、リオーダデータベース205を更新し、処理は終了する。例えば、現在時刻を時刻t252とし、現在時刻よりも10秒前の時刻を時刻t251とする。そして、リオーダデータベース205が、時刻t251から時刻t252(現在時刻)までの期間に受信されたRTPパケットに含まれるシーケンス番号を保持する場合、ステップS125において、リオーダデータベース205は、リオーダ判定部204の制御のもと、リオーダデータベース205が保持しているシーケンス番号のうち、時刻t251より前の時刻に受信されたRTPパケットに含まれるシーケンス番号を消去することによって、リオーダデータベース205を更新する。
このようにして、クライアント84は、RTPパケットを受信すると、リオーダデータベース205を更新する。
このように、リオーダデータベース205を更新することによって、クライアント84は、リオーダデータベース205に保持されているシーケンス番号を基に、パケットのリオーダが発生したか否かを知ることができる。
図17のフローチャートを参照して、クライアント84による、応答の処理を説明する。
ステップS141において、クライアント84は、応答の処理に必要なデータを初期化する。例えば、ステップS141において、NACK処理部207は、NACKデータベース208および送信履歴保持部209を制御し、NACKデータベース208および送信履歴保持部209を初期化させる。
ステップS142において、NACK処理部207は、再送モードに同期モードが設定されているか否かを判定する。例えば、ステップS142において、NACK処理部207は、再送モード記憶部206が記憶している再送モードフラグがセットされているか否かを判定することで、再送モードに同期モードが設定されているか否かを判定する。
この場合、例えば、NACK処理部207は、再送モード記憶部206が記憶している再送モードフラグがセットされている(例えば、再送モードフラグに“1”が設定されている)とき、再送モードに同期モードが設定されていると判定し、再送モード記憶部206が記憶している再送モードフラグがリセットされている(例えば、再送モードフラグに“0”が設定されている)とき、再送モードに同期モードが設定されていないと判定する。
ステップS142において、再送モードに同期モードが設定されていると判定された場合、ステップS143に進み、NACK処理部207は、同期モードにおける再送要求信号の送信の処理を行い、手続きは、ステップS142に戻る。なお、同期モードにおける再送要求信号の送信の処理の詳細は後述するが、同期モードにおける再送要求信号の送信の処理において、クライアント84は、所定の時間間隔で、再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
一方、ステップS142において、再送モードに同期モードが設定されていないと判定された場合、ステップS144に進み、NACK処理部207は、非同期モードにおける再送要求信号の送信の処理を行い、手続きは、ステップS142に戻り、上述した処理を繰り返す。なお、非同期モードにおける再送要求信号の送信の処理の詳細は後述するが、非同期モードにおける再送要求信号の送信の処理において、クライアント84は、パケットロスが発生したと判定されると、直ちに、再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
このようにして、NACK処理部207は、再送モード記憶部206に記憶されている再送モードフラグを基に、同期モードにおける再送要求信号の送信の処理または非同期モードにおける再送要求信号の送信の処理を行う。
このように、再送モードフラグを基に、同期モードにおける再送要求信号の送信の処理または非同期モードにおける再送要求信号の送信の処理を行うことで、クライアント84は、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率良くデータを受信することができる。
次に、図18のフローチャートを参照して、図17のステップS143の処理に対応する、同期モードにおける再送要求信号の送信の処理を説明する。
ステップS161において、NACK処理部207は、RTP処理部202からシーケンス番号が供給されたか否かを判定する。
ステップS161において、RTP処理部202からシーケンス番号が供給されたと判定された場合、ステップS162に進み、NACKデータベース208は、NACK処理部207の制御のもと、NACKデータベース208に保持されているシーケンス番号のうち、RTP処理部202からNACK処理部207に供給されたシーケンス番号を消去する。
より詳細には、ステップSステップ162において、NACKデータベース208は、NACKデータベース208が、RTP処理部202からNACK処理部207に供給されたシーケンス番号と同一のシーケンス番号を保持している場合、NACK処理部207の制御のもと、NACKデータベース208が保持しているシーケンス番号のうち、RTP処理部202からNACK処理部207に供給されたシーケンス番号を消去する。
また、NACKデータベース208は、NACKデータベース208が、RTP処理部202からNACK処理部207に供給されたシーケンス番号と同一のシーケンス番号を保持していない場合、シーケンス番号を消去しない。
したがって、例えば、NACKデータベース208にシーケンス番号“1”が保持されており、RTP処理部202からNACK処理部207にシーケンス番号“1”が供給された場合、ステップS162において、NACKデータベース208は、NACK処理部207の制御のもと、NACKデータベース208からシーケンス番号“1”を消去する。
ステップS163において、NACK処理部207は、RTP処理部202から供給されたシーケンス番号を基に、パケットロスが発生したか否かを判定する。
ステップS163において、パケットロスが発生したと判定された場合、ステップS164に進み、NACKデータベース208は、NACK処理部207の制御のもと、ロスしたRTPパケットに含まれるシーケンス番号を保持する。
ステップS165において、NACK処理部207は、内蔵しているタイマが終了したか否かを判定する。例えば、ステップS165において、NACK処理部207は、内蔵しているタイマの値と10sなどの所定の値とを比較することによって、タイマが終了したか否かを判定する。
ステップS165において、タイマが終了したと判定された場合、ステップS166に進み、NACK処理部207は、NACKデータベース208に保持されているシーケンス番号、RTT保持部211に保持されている往復遅延時間、並びに送信履歴保持部209に保持されているシーケンス番号および再送要求信号を送信した時刻を基に、再送要求信号を生成する。NACK処理部207は、生成した再送要求信号を通信部201に供給するとともに、再送要求信号を送信した時刻(より詳細には、再送要求信号を生成した時刻)および再送要求信号に含まれるシーケンス番号を送信履歴保持部209に供給する。
例えば、ステップS166において、NACK処理部207は、NACKデータベース208に保持されているシーケンス番号のうち、式(2)を満たすシーケンス番号を含むRTPパケットの再送を要求する旨の再送要求信号を生成する。そして、NACK処理部207は、生成した再送要求信号を通信部201に供給するとともに、再送要求信号を送信した時刻および再送要求信号に含まれるシーケンス番号を送信履歴保持部209に供給する。
(現在時刻)−(再送要求信号の送信時刻)≧(往復遅延時間) ・・・(2)
ここで、再送要求信号の送信時刻とは、送信履歴保持部209に保持されている再送要求信号の送信時刻のうち、NACKデータベース208に保持されているシーケンス番号と同一のシーケンス番号を含む再送要求信号の送信時刻をいう。また、ここで、NACK処理部207は、例えば、内蔵しているRTCなどから現在時刻を取得する。
また、NACK処理部207は、NACKデータベース208に保持されているシーケンス番号のうち、送信履歴保持部209に保持されていないシーケンス番号を含むRTPパケットの再送を要求する旨の再送要求信号を生成する。NACK処理部207は、生成した再送要求信号を通信部201に供給するとともに、再送要求信号を送信した時刻および再送要求信号に含まれるシーケンス番号を送信履歴保持部209に供給する。
ここで、再送要求信号は、例えば、図19に示すNACK(Negative Acknowledgement)パケットである。なお、バージョン情報、パディング、およびSSRC識別子は、図11で示されるRTPパケットの場合と同様であるので、その説明は省略する。
NACKパケットにおいて、パディングに続いて5ビットのサブタイプが配置される。
NACKパケットにおいて、ペイロードタイプは204とされる。ペイロードタイプの次に配置される、16ビットのメッセージ長は、NACKパケットの長さ(サイズ)を示す情報である。
32ビットのSSRC識別子に続いて、32ビットの名前が配置される。名前は、例えば、NACKパケットを取り扱うアプリケーションプログラムの名前である。
名前に続いて配置される32ビットの要求シーケンス番号は、パケットロスが発生したRTPパケット、すなわち、クライアント84によって再送が要求されるパケットを特定するシーケンス番号を示す。
図18のフローチャートの説明に戻り、ステップS167において、通信部201の送信部231は、NACK処理部207から供給された再送要求信号を、通信網83を介して、サーバ82あてに送信する。
ステップS168において、送信履歴保持部209は、NACK処理部207から供給された、再送要求信号を送信した時刻および再送要求信号に含まれるシーケンス番号を保持する。
ステップS169において、NACK処理部207は、内蔵しているタイマをセットして、処理は終了する。例えば、ステップS169において、NACK処理部207は、内蔵しているタイマの値を0sにセットする。
また、ステップS161において、RTP処理部202からシーケンス番号が供給されなかったと判定された場合、ステップS162の処理乃至ステップS169の処理はスキップされ、処理は終了する。
ステップS163において、パケットロスが発生していないと判定された場合、ステップS164の処理乃至ステップS169の処理はスキップされ、処理は終了する。
ステップS165において、タイマが終了していないと判定された場合、ステップS166の処理乃至ステップS169の処理はスキップされ、処理は終了する。
このようにして、クライアント84は、再送モードに同期モードが設定されている場合、所定の時間間隔で再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
このように、再送モードに同期モードが設定されている場合、所定の時間間隔で再送要求信号を送信するので、クライアント84は、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率良くデータを受信することができる。
図20のフローチャートを参照して、図17のステップS144の処理に対応する、非同期モードにおける再送要求信号の送信の処理を説明する。なお、ステップS191の処理乃至ステップS194の処理、ステップS196の処理、およびステップS197の処理のそれぞれは、図18におけるステップS161の処理乃至ステップS164の処理、ステップS167の処理、およびステップS168の処理のそれぞれと同様なので、その説明は省略する。
ステップS195において、NACK処理部207は、NACKデータベース208に保持されているシーケンス番号を含む、RTPパケットの再送を要求する旨の再送要求信号を生成する。NACK処理部207は、生成した再送要求信号を通信部201に供給するとともに、再送要求信号を送信した時刻および再送要求信号に含まれるシーケンス番号を送信履歴保持部209に供給する。
このようにして、クライアント84は、再送モードに非同期モードが設定されている場合、パケットロスが発生したと判定されたとき、直ちに再送要求信号を生成し、生成した再送要求信号を、通信網83を介して、サーバ82あてに送信する。
このように、再送モードに非同期モードが設定されている場合、クライアント84は、リオーダが発生する可能性は低いので、パケットロスが発生したと判定されたとき、直ちに再送要求信号を送信することで、より迅速にデータを受信することができる。
図21のフローチャートを参照して、クライアント84による、RTT計測パケットの送信の処理を説明する。
ステップS221において、RTT計測部210は、内蔵しているタイマの初期化を行う。例えば、ステップS221において、RTT計測部210は、内蔵しているタイマの値を0sにセットし、10sなどの所定の値と比較することによりタイマが終了したか否かを判定する。
ステップS222において、RTT計測部210は、内蔵しているタイマの値を基に、タイマが終了したか否かを判定する。
ステップS222において、タイマが終了したと判定された場合、ステップS223に進み、RTT計測部210は、現在時刻を含むRTT計測パケットを生成し、生成したRTT計測パケットを通信部201に供給する。
例えば、ステップS223において、RTT計測部210は、RTT計測パケットとしてピン(Ping)を生成し、生成したピンを通信部201に供給する。
ステップS224において、通信部201の送信部231は、RTT計測部210から供給されたRTT計測パケットを、通信網83を介して、サーバ82あてに送信する。
ステップS225において、RTT計測部210は、内蔵しているタイマをセットし、手続きは、ステップS222に戻り、上述した処理を繰り返す。例えば、ステップS225において、RTT計測部210は、内蔵しているタイマの値を0sにセットする。
一方、ステップS222において、タイマが終了していないと判定された場合、ステップS226に進み、RTT計測部210は、通信部201が、サーバ82から送信されてきたRTT計測パケットを受信したか否かを判定する。
ステップS226において、RTT計測パケットを受信したと判定された場合、通信部201からRTT計測パケットが供給されるので、ステップS227に進み、RTT計測部210は、往復遅延時間を算出し、算出した往復遅延時間をRTT保持部211に供給する。
例えば、ステップS227において、RTT計測部210は、式(3)を計算することにより、往復遅延時間を算出する。
(往復遅延時間)=
(RTT計測パケットの受信時刻)−(RTT計測パケットの送信時刻) ・・・(3)
ここで、RTT計測パケットの送信時刻とは、RTT計測パケットに格納された、RTT計測パケットの送信時刻であり、RTT計測パケットの受信時刻とは、通信部201が受信したRTT計測パケットがRTT計測部210に供給された時刻である。
ステップS228において、RTT保持部211は、RTT計測部210から供給された往復遅延時間を保持し、手続きは、ステップS222に戻り、上述した処理を繰り返す。
また、ステップS226において、RTT計測パケットを受信していないと判定された場合、ステップS227の処理およびステップS228の処理はスキップされ、手続きは、ステップS222に戻る。
このようにして、クライアント84は、RTT計測パケットを生成し、生成したRTT計測パケットを、通信網83を介して、サーバ82あてに送信する。そして、クライアント84は、サーバ82から送信されてきたRTT計測パケットを受信し、受信したRTT計測パケットを基に、往復遅延時間を算出する。
以上のように、クライアント84は、所定の期間にリオーダが発生した回数を基に、再送要求信号を送信する時間間隔を変化させるようにしたので、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率よくデータを送受信することができる。
次に、本発明を適用した第2の実施の形態について説明する。
図22は、サーバの機能の構成を示すブロック図である。
サーバ301は、エンコーダ311、パケタイザ312、通信部313、再送用バッファ314、およびNACK処理部315を含むように構成される。
なお、エンコーダ311、再送用バッファ314、およびNACK処理部315のそれぞれは、図6におけるエンコーダ161、再送用バッファ163、およびNACK処理部164のそれぞれと同様なので、その説明は、適宜、省略する。
パケタイザ312は、エンコーダ311から供給された画像データをRTP方式のパケットに格納し、拡張情報に“0”を設定したRTPパケットを生成する。パケタイザ312は、生成した、拡張情報に“0”を設定したRTPパケットを通信部313に供給する。ここで、拡張情報に“0”を設定したRTPパケットは、送信パケット(再送パケットではないパケット)としてのRTPパケットであることを示す。
また、パケタイザ312は、エンコーダ311から供給された画像データをRTP方式のパケットに格納し、拡張情報に“1”を設定したRTPパケットを生成する。パケタイザ312は、生成した、拡張情報に“1”を設定したRTPパケットを再送用バッファ314に供給する。ここで、拡張情報に“1”を設定したRTPパケットは、再送パケットとしてのRTPパケットであることを示す。
通信部313は、各種のデータを送信する送信部331および各種のデータを受信する受信部332を備えており、通信網を介してデータの送受信を行う。
通信部313の送信部331は、パケタイザ312またはNACK処理部315から供給されたRTPパケットを、通信網を介して、クライアントあてに送信する。
また、通信部313の受信部332は、クライアントから送信されてきた再送要求信号を受信し、受信した再送要求信号をNACK処理部315に供給する。
図23は、クライアントの機能の構成を示すブロック図である。
クライアント351は、通信部361、RTP処理部362、デコーダ363、リオーダ判定部364、リオーダデータベース365、再送モード記憶部366、NACK処理部367、およびNACKデータベース368を含むように構成される。
なお、デコーダ363、再送モード記憶部366、およびNACKデータベース368のそれぞれは、図7におけるデコーダ203、再送モード記憶部206、およびNACKデータベース208のそれぞれと同様なので、その説明は、適宜、省略する。
通信部361は、各種のデータを送信する送信部381および各種のデータを受信する受信部382を備えており、通信網を介してデータの送受信を行う。
通信部361の送信部381は、NACK処理部367から供給された再送要求信号を、通信網を介して、サーバ301あてに送信する。
通信部361の受信部382は、サーバ301から送信されてきたRTPパケットを受信し、受信したRTPパケットをRTP処理部362に供給する。
RTP処理部362は、通信部361から供給されたRTPパケットから画像データを抽出し、抽出した画像データをデコーダ363に供給する。また、RTP処理部362は、通信部361から供給されたRTPパケットからシーケンス番号を抽出し、抽出したシーケンス番号をNACK処理部367に供給する。
RTP処理部362は、通信部361から供給されたRTPパケットからシーケンス番号および再送情報を抽出し、抽出したシーケンス番号および再送情報をリオーダ判定部364に供給する。ここで、再送情報とは、通信部361から供給されたRTPパケットが再送されたRTPパケットであるか否かを示す情報をいう。
したがって、RTPパケットに含まれる拡張情報に“0”が設定されているRTPパケットから抽出される再送情報は、RTPパケットが、送信パケットであることを示す再送情報であり、RTPパケットに含まれる拡張情報に“1”が設定されているRTPパケットから抽出される再送情報は、RTPパケットが、再送パケットであることを示す再送情報である。
リオーダ判定部364は、リオーダデータベース365を制御し、リオーダデータベース365に、RTP処理部362から供給されたシーケンス番号を保持させる。また、リオーダ判定部364は、再送モード記憶部366を制御し、再送モード記憶部366に再送モードの設定を行わせる。
リオーダ判定部364は、RTP処理部362から供給されたシーケンス番号および再送情報を基に、RTP処理部362から供給されたシーケンス番号によって特定されるRTPパケットが、再送されたRTPパケットであるか否かを判定する。
リオーダ判定部364は、RTP処理部362から供給されたシーケンス番号によって特定されるRTPパケットが、再送されたRTPパケットであると判定された場合、リオーダデータベース365を制御し、RTP処理部362から供給されたシーケンス番号を、リオーダデータベース365に番号順に保持させる。
また、リオーダ判定部364は、RTP処理部362から供給されたシーケンス番号によって特定されるRTPパケットが、再送されたRTPパケットでないと判定された場合、リオーダデータベース365を制御し、RTP処理部362から供給されたシーケンス番号を、リオーダデータベース365にRTPパケットを受信した順に保持させる。
リオーダ判定部364は、リオーダデータベース365が保持しているシーケンス番号が含まれているRTPパケットを受信した期間に、予め定められた回数以上のリオーダが発生したか否かを判定する。すなわち、リオーダ判定部364は、リオーダデータベース365が保持しているシーケンス番号の数のRTPパケットにおいて、所定の回数以上のリオーダが発生したか否かを判定する。
リオーダ判定部364は、所定の回数以上のリオーダが発生したと判定された場合、再送モード記憶部366を制御し、再送モードに同期モードを設定させる。
一方、リオーダ判定部364は、所定の回数以上のリオーダが発生していないと判定された場合、再送モード記憶部366を制御し、再送モードに非同期モードを設定させる。
リオーダデータベース365は、リオーダ判定部364の制御のもと、受信されたRTPパケットのシーケンス番号を、所定の数だけ一時的に保持する。また、リオーダデータベース365は、シーケンス番号のそれぞれに対応する再送フラグを保持しており、リオーダ判定部364の制御のもと、再送フラグをセットするかリセットする。
すなわち、リオーダデータベース365は、シーケンス番号を保持する場合、送信パケットに含まれているシーケンス番号に対応する再送フラグをリセット(例えば、“0”が設定される)し、再送パケットに含まれているシーケンス番号に対応する再送フラグをセット(例えば、“1”が設定される)する。
NACK処理部367は、NACKデータベース368が、RTP処理部362から供給されたシーケンス番号を保持している場合、NACKデータベース368を制御し、RTP処理部362から供給されたシーケンス番号を、NACKデータベース368から消去させる。
NACK処理部367は、NACKデータベース368が、RTP処理部362から供給されたシーケンス番号を保持していない場合、シーケンス番号を消去させない。
NACK処理部367は、RTP処理部362から供給されたシーケンス番号を基に、パケットロスが発生したか否かを判定する。
NACK処理部367は、パケットロスが発生したと判定された場合、NACKデータベース368を制御し、ロスしたRTPパケットのシーケンス番号を、NACKデータベース368に保持させる。NACK処理部367は、パケットロスが発生していないと判定された場合、シーケンス番号を保持させない。
NACK処理部367は、再送モード記憶部366が記憶している再送モードフラグを基に、再送モードに同期モードが設定されているか否かを判定する。
NACK処理部367は、再送モードに同期モードが設定されていると判定された場合、予め定められた所定の時間間隔で、NACKデータベース368に保持されているシーケンス番号を基に、再送要求信号を生成する。NACK処理部367は、生成した再送要求信号を通信部361に供給する。なお、NACKデータベース368にシーケンス番号が保持されていない場合、NACK処理部367は、予め定められた所定の期間が経過しても再送要求信号を生成しない。
NACK処理部367は、再送モードに同期モードが設定されていないと判定された場合、パケットロスが発生したとき、直ちにNACKデータベース368に保持されているシーケンス番号を基に、再送要求信号を生成する。NACK処理部367は、生成した再送要求信号を通信部361に供給する。なお、パケットロスが発生していないとき、NACK処理部367は、再送要求信号を生成しない。
ところで、ARQ方式においては、再送パケットとして送信されるRTPパケットには、送信パケットとして送信されるRTPパケットに格納されるデータと同一のデータが格納されて送信される。
したがって、ARQ方式によるストリーミングデータ配信システムにおいて、受信したRTPパケットが、再送パケットとしてのRTPパケットであるか否かの判定を行うためには、図24に示すようにクライアントは、再送要求信号の送信履歴を保持しておく必要があった。
図24において、横方向は、時間を示す。サーバは、ストリーミングデータが格納された送信パケット401−1乃至送信パケット401−5を、通信網を介して、クライアントあてに送信する。
クライアントは、サーバから送信されてきた送信パケット401−1乃至送信パケット401−3を受信する。時刻t301において、クライアントは、サーバから送信されてきた送信パケット401−5を受信する。
このとき、クライアントは、送信パケット401−5を受信し、送信パケット401−4を受信していないので、パケットロスが発生したと判定し、直ちに、送信パケット401−4に格納されているストリーミングデータの再送を要求する旨の再送要求信号を生成する。そして、クライアントは、生成した再送要求信号を、通信網を介して、サーバあてに送信するとともに、送信パケット401−4の再送を要求した旨の情報を、送信履歴として保持する。
また、サーバは、ストリーミングデータが格納された送信パケット401−6乃至送信パケット401−8を、通信網を介して、クライアントあてに送信する。クライアントは、サーバから送信されてきた送信パケット401−6乃至送信パケット401−8を受信する。
時刻t302において、サーバは、クライアントから送信されてきた再送要求信号を受信する。サーバは、再送要求信号を受信したので、再送が要求されたストリーミングデータが格納されている再送パケット402を、送信パケット401−4に対応する再送パケットとして、通信網を介してクライアントあてに送信する。
時刻t303において、クライアントは、サーバから送信されてきた再送パケット402を受信する。クライアントは、送信パケット401−4の再送を要求した旨の情報を、送信履歴として保持しているので、時刻t303において受信した再送パケット402が、送信パケット401−4に対応する再送パケットであることを知ることができる。
サーバは、ストリーミングデータが格納された送信パケット401−9および送信パケット401−10を、通信網を介して、クライアントあてに送信する。クライアントは、サーバから送信されてきた送信パケット401−9および送信パケット401−10を受信する。
このように、受信したRTPパケットが、再送パケットとしてのRTPパケットであるか否かの判定を行うためには、クライアントが、再送要求信号の送信履歴を保持しておく必要があった。
したがって、例えば、クライアントにおいて、再送パケットとしてのRTPパケットの数をカウントする処理などを実行する場合、シーケンス番号の順番に受信されなかったRTPパケットが、再送パケットとしてのRTPパケットであるか、またはリオーダが生じたためにシーケンス番号の順番に受信されなかった、送信パケットとしてのRTPパケットであるかの判定を行うための処理が複雑になるばかりでなく、メモリなどのリソースが必要であった。
さらに、例えば、再送パケットとしてのRTPパケットの数をカウントし、その値(数)を用いて、統計処理を行うことにより、伝送速度などの通信網の状態を推定し、伝送させるデータ量を制御する場合、統計処理を行うために、さらにリソースが必要となる。
そこで、サーバ301およびクライアント351を、図22および図23に示す構成とすることで、送信パケットとしてのRTPパケットと、再送パケットとしてのRTPパケットとを容易に判別することができる。以下、図を参照して、具体的な処理を説明する。
図25のフローチャートを参照して、サーバ301による、RTPパケットの送信の処理を説明する。
なお、ステップS301の処理乃至ステップS304の処理およびステップS307の処理乃至ステップS310の処理のそれぞれは、図10におけるステップS11の処理乃至ステップS14の処理およびステップS16の処理乃至ステップS19の処理のそれぞれと同様なので、その説明は省略する。
ステップS305において、パケタイザ312は、エンコーダ311から供給された画像データをRTP方式のパケットに格納することによって、RTPパケットを生成する。パケタイザ312は、生成したRTPパケットに含まれる拡張情報に“0”を設定し、拡張情報に“0”を設定したRTPパケットを通信部313に供給する。
ステップS306において、パケタイザ312は、生成したRTPパケットに含まれる拡張情報に“1”を設定し、拡張情報に“1”を設定したRTPパケットを再送用バッファ314に供給する。
ここで、拡張情報に“0”が設定されたRTPパケットは、送信パケットとしてのRTPパケットを示し、拡張情報に“1”が設定されたRTPパケットは、再送パケットとしてのRTPパケットを示す。
図26は、再送パケットとしてのRTPパケットを示す図である。なお、バージョン情報、パディング、CSRCカウント、メーカー情報、ペイロードタイプ、シーケンス番号、タイムスタンプ、SSRC識別子、およびストリーミングデータのそれぞれは、図11における場合と同様なので、その説明は省略する。
パディングに続いて、1ビットの拡張情報がRTPパケットに配置される。拡張情報は、図26において、“X=1”で表される。拡張情報として、“X=1”が設定されているRTPパケットは、再送パケットとしてのRTPパケットを示す。
このようにして、サーバ301は、RTPパケットを生成し、生成したRTPパケットを、通信網を介して、クライアント351あてに送信する。また、サーバ301は、生成したRTPパケットの拡張情報に“1”を設定し、拡張情報に“1”を設定したRTPパケットを再送パケットとして、一時的に記憶する。
このように、RTPパケットに含まれる拡張情報に“0”または“1”を設定することで、クライアント351は、受信したRTPパケットが、送信パケットとしてのRTPパケットであるか、または再送パケットとしてのRTPパケットであるかを容易に判別することができる。
なお、サーバ301によるRTPパケットの再送の処理は、図12のフローチャートを参照して説明した処理と同様であるので、その説明は省略する。
次に、図27のフローチャートを参照して、クライアントプログラムを実行するクライアント351による、デコードの処理を説明する。なお、ステップS331の処理、ステップS334の処理、およびステップS335の処理のそれぞれは、図14におけるステップS81の処理、ステップS83の処理、およびステップS84の処理のそれぞれと同様なので、その説明は省略する。
ステップS332において、RTP処理部362は、通信部361の受信部382が受信し、通信部361の受信部382から供給されたRTPパケットからシーケンス番号を抽出する。RTP処理部362は、抽出したシーケンス番号をNACK処理部367に供給する。
ステップS333において、RTP処理部362は、通信部361の受信部382が受信し、通信部361の受信部382から供給されたRTPパケットからシーケンス番号および再送情報を抽出する。RTP処理部362は、抽出したシーケンス番号および再送情報をリオーダ判定部364に供給する。
ここで、例えば、RTP処理部362は、RTPパケットの拡張情報に“0”が設定されている場合、RTPパケットが送信パケットであることを示す再送情報を抽出し、RTPパケットの拡張情報に“1”が設定されている場合、RTPパケットが再送パケットであることを示す再送情報を抽出する。
このようにして、クライアント351は、サーバ301から送信されてきたRTPパケットを受信し、受信したRTPパケットに格納されている画像データを出力する。
次に、図28のフローチャートを参照して、クライアント351による、再送モードの更新の処理を説明する。
なお、ステップS351の処理、ステップS355の処理、およびステップS356の処理のそれぞれは、図15におけるステップS101の処理、ステップS105の処理、およびステップS106の処理のそれぞれと同様なので、その説明は省略する。
ステップS352において、リオーダ判定部364は、RTP処理部362からシーケンス番号および再送情報が供給されたか否かを判定する。ステップS352において、RTP処理部362からシーケンス番号および再送情報が供給されていないと判定された場合、ステップS352に戻り、RTP処理部362からシーケンス番号および再送情報が供給されたと判定されるまで、判定の処理を繰り返す。
一方、ステップS352において、RTP処理部362からシーケンス番号および再送情報が供給されたと判定された場合、ステップS353に進み、リオーダ判定部364は、リオーダデータベースの更新の処理を行う。なお、リオーダデータベースの更新の処理の詳細は後述するが、リオーダデータベースの更新の処理において、リオーダ判定部364は、リオーダデータベース365制御し、シーケンス番号を保持させることにより、リオーダデータベース365を更新する。
ステップS354において、リオーダ判定部364は、リオーダデータベース365に保持されているシーケンス番号を基に、リオーダデータベース365が保持しているシーケンス番号が含まれているRTPパケットを受信した期間に、予め定められた回数以上のリオーダが発生したか否かを判定する。
換言すれば、リオーダ判定部364は、リオーダデータベース365に保持されているシーケンス番号の数のRTPパケットにおいて、所定の回数以上のリオーダが発生しているか否かを判定する。
例えば、リオーダデータベース365が、新しく受信した順に、100個のシーケンス番号を保持する場合、例えば、ステップS354において、リオーダ判定部364は、リオーダデータベース365が保持している100個のシーケンス番号のうち、リオーダが発生し、番号順に保持されなかったシーケンス番号が、5個以上あるか否かを判定することにより、リオーダデータベース365が保持しているシーケンス番号が含まれているRTPパケットを受信した期間に、予め定められた回数以上のリオーダが発生したか否かを判定する。
ステップS354において、予め定められた回数以上のリオーダが発生したと判定された場合、ステップS355に進む。
一方、ステップS354において、予め定められた回数以上のリオーダが発生していないと判定された場合、ステップS356に進む。
このようにして、リオーダ判定部364は、リオーダデータベース365を更新し、リオーダデータベース365が保持しているシーケンス番号を基に、再送モードの設定を行う。
このように、再送モードの設定を行うことにより、クライアント351は、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率良くデータを受信することができる。
次に、図29のフローチャートを参照して、図28のステップS353の処理に対応する、リオーダデータベースの更新の処理を説明する。
ステップS371において、リオーダ判定部364は、RTP処理部362から供給されたシーケンス番号および再送情報を基に、RTP処理部362から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットであるか否かを判定する。
例えば、ステップS371において、リオーダ判定部364は、RTP処理部362から供給された再送情報が、再送パケットであることを示す再送情報である場合、対応するRTPパケットは、再送されたRTPパケットであると判定し、RTP処理部362から供給された再送情報が、送信パケットであることを示す再送情報である場合、対応するRTPパケットは、再送されたRTPパケットでないと判定する。
ステップS371において、RTP処理部362から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットであると判定された場合、ステップS372に進み、リオーダデータベース365は、リオーダ判定部364の制御のもと、RTP処理部362からリオーダ判定部364に供給されたシーケンス番号を、シーケンス番号順に保持する。そして、リオーダデータベース365は、リオーダ判定部364の制御のもと、保持するシーケンス番号に対応する再送フラグをセット(例えば、“1”が設定される)する。
したがって、この場合、例えば、RTP処理部362からシーケンス番号“6”がリオーダ判定部364に供給され、リオーダデータベース365がシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”をシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”の順番で保持しているとき、リオーダデータベース365は、リオーダ判定部364の制御のもと、リオーダデータベース365が保持しているシーケンス番号の順番が、“1”、“2”、“3”、“4”、“5”、“6再”、および“7”の順番となるように、シーケンス番号“6”を保持する。
ここで、“6再”は、シーケンス番号“6”を含むRTPパケットが、再送されたRTPパケットであることを示す。換言すれば、“6再”は、シーケンス番号“6”に対応する再送フラグがセットされていることを示す。
一方、ステップS371において、RTP処理部362から供給されたシーケンス番号を含むRTPパケットが、再送されたRTPパケットでないと判定された場合、ステップS373に進み、リオーダデータベース365は、リオーダ判定部364の制御のもと、RTP処理部362からリオーダ判定部364に供給されたシーケンス番号を、RTPパケットを受信した順(すなわち、RTP処理部362からリオーダ判定部364に供給された順)に保持する。そして、リオーダデータベース365は、リオーダ判定部364の制御のもと、保持するシーケンス番号に対応する再送フラグをリセット(例えば、“0”が設定される)する。
したがって、この場合、例えば、RTP処理部362からシーケンス番号“6”がリオーダ判定部364に供給され、リオーダデータベース365がシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”をシーケンス番号“1”、“2”、“3”、“4”、“5”、および“7”の順番で保持しているとき、リオーダデータベース365は、リオーダ判定部364の制御のもと、リオーダデータベース365が保持しているシーケンス番号の順番が、“1”、“2”、“3”、“4”、“5”、“7”、および“6”の順番となるように、シーケンス番号“6”を保持する。
ステップS374において、リオーダデータベース365は、リオーダ判定部364の制御のもと、リオーダデータベース365を更新し、処理は終了する。
例えば、リオーダデータベース365が、新しく受信した順に、100個のシーケンス番号を保持する場合、リオーダ判定部364から新たにシーケンス番号が供給されたとき、ステップS374において、リオーダデータベース365は、リオーダ判定部364の制御のもと、リオーダデータベース365が保持しているシーケンス番号のうち、最初に受信されたRTPパケットに含まれるシーケンス番号を消去することによって、新しく受信した順に、100個のシーケンス番号を保持するように、リオーダデータベース365を更新する。
したがって、例えば、6個のシーケンス番号を保持するリオーダデータベース365が、シーケンス番号“1”、“2”、“3”、“4”、“5”、および“6”をシーケンス番号“1”、“2”、“3”、“4”、“5”、および“6”の順番で保持しており、リオーダ判定部364から新たにシーケンス番号“7”が供給された場合、リオーダデータベース365は、リオーダ判定部364の制御のもと、シーケンス番号“2”、“3”、“4”、“5”、“6”、および“7”を保持するようにリオーダデータベース365を更新する。
このようにして、クライアント351は、RTPパケットが受信されると、リオーダデータベース365を更新する。
このように、リオーダデータベース365を更新することによって、クライアント351は、リオーダデータベース365に保持されているシーケンス番号を基に、パケットのリオーダが発生したか否かを知ることができる。
次に、図30のフローチャートを参照して、クライアント351による、同期モードにおける再送要求信号の送信の処理を説明する。
なお、ステップS391の処理乃至ステップS395の処理、ステップS397の処理、およびステップS398の処理のそれぞれは、図18におけるステップS161の処理乃至ステップS165の処理、ステップS167の処理、およびステップS169の処理のそれぞれと同様なので、その説明は省略する。
ステップS396において、NACK処理部367は、NACKデータベース368に保持されているシーケンス番号を含むRTPパケットの再送を要求する旨の再送要求信号を生成する。そして、NACK処理部367は、生成した再送要求信号を通信部361に供給する。
このようにして、クライアント351は、再送モードに同期モードが設定されている場合、所定の時間間隔で再送要求信号を生成し、生成した再送要求信号を、通信網を介して、サーバ301あてに送信する。
このように、再送モードに同期モードが設定されている場合、所定の時間間隔で再送要求信号を送信するので、クライアント351は、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率良くデータを受信することができる。
図31のフローチャートを参照して、クライアント351による、非同期モードにおける再送要求信号の送信の処理を説明する。
なお、ステップS411の処理乃至ステップS414の処理のそれぞれは、図30におけるステップS391の処理乃至ステップS394の処理のそれぞれと同様なので、その説明は省略する。
ステップS415において、NACK処理部367は、NACKデータベース368にシーケンス番号が保持されると、直ちに、NACKデータベース368に保持されているシーケンス番号を含むRTPパケットの再送を要求する旨の再送要求信号を生成する。そして、NACK処理部367は、生成した再送要求信号を通信部361に供給する。
ステップS416において、通信部361の送信部381は、NACK処理部367から供給された再送要求信号を、通信網を介して、サーバ301あてに送信し、処理は終了する。
このようにして、クライアント351は、再送モードに非同期モードが設定されている場合、パケットロスが発生したと判定されたとき、直ちに再送要求信号を生成し、生成した再送要求信号を、通信網を介して、サーバ301あてに送信する。
このように、再送モードに非同期モードが設定されている場合、クライアント351は、リオーダが発生する可能性は低いので、パケットロスが発生したと判定されたとき、直ちに再送要求信号を送信することで、より迅速にデータを受信することができる。
以上のように、クライアント351は、所定の数のRTPパケットにおいて、リオーダが発生した回数を基に、再送要求信号を送信する時間間隔を変化させるようにしたので、より効率よくデータを送受信することができる。また、RTPパケットに含まれる拡張情報に“1”または“0”を設定するようにしたので、クライアント351において、再送要求信号の送信履歴を保持することなく、送信パケットと再送パケットとを容易に判別することができる。
なお、サーバ301において、パケタイザ312が、再送パケットとして、エンコーダ311から供給された画像データをRTP方式のパケットに格納し、拡張情報に“1”を設定したRTPパケットを生成すると説明したが、NACK処理部315が、RTPパケットを再送用バッファ314から取得したときに、拡張情報に“1”を設定するようにしてもよい。
この場合、パケタイザ312は、エンコーダ311から供給された画像データをRTP方式のパケットに格納し、拡張情報に“0”を設定したRTPパケットを生成する。そして、拡張情報に“0”を設定したRTPパケットを、通信部313および再送用バッファ314に供給する。
また、NACK処理部315は、通信部313から再送要求信号が供給されると、再送用バッファ314から要求された画像データを格納しているRTPパケットを取得する。そして、NACK処理部315は、取得したRTPパケットの拡張情報に“1”を設定し、拡張情報に“1”を設定したRTPパケットを、再送パケットとして、通信部313に供給する。
すなわち、サーバ301は、図10を参照して説明した処理と同様の処理を行う。また、サーバ301は、RTPパケットの再送の処理を行う。
図32のフローチャートを参照して、サーバ301による、RTPパケットの再送の処理を説明する。なお、ステップS431の処理、ステップS432の処理、およびステップS434の処理のそれぞれは、図12におけるステップS41の処理乃至ステップS43の処理のそれぞれと同様なので、その説明は省略する。
ステップS433において、NACK処理部315は、再送用バッファ314から取得したRTPパケットの拡張情報に“1”を設定し、拡張情報に“1”を設定したRTPパケットを、再送パケットとして、通信部313に供給する。
このように、NACK処理部315が、RTPパケットを再送用バッファ314から取得したときに、拡張情報に“1”を設定するようにしてもよい。
本発明によれば、送信装置から送信されてきたデータを受信するようにしたので、受信したデータを出力することができる。また、本発明によれば、リオーダが発生する回数を基に、再送要求信号を送信する時間間隔を変化させるようにしたので、リオーダにより生じる無駄な再送要求信号の送信を防止することができ、より効率よくデータを送受信することができる。
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
この記録媒体は、図5に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク131(フレキシブルディスクを含む)、光ディスク132(CD-ROM(Compact Disc-Read Only Memory)、DVD(Digital Versatile Disc)を含む)、光磁気ディスク133(MD(Mini-Disc)(商標)を含む)、若しくは半導体メモリ134などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM102や、記録部108に含まれるハードディスクなどで構成される。
なお、上述した一連の処理を実行させるプログラムは、必要に応じてルータ、モデムなどのインタフェースを介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を介してコンピュータにインストールされるようにしてもよい。
また、本明細書において、記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
82 サーバ, 84 クライアント, 101 CPU, 102 ROM, 103 RAM, 108 記録部, 109 通信部, 131 磁気ディスク, 132 光ディスク, 133 光磁気ディスク, 134 半導体メモリ, 162 パケタイザ, 164 NACK処理部, 165 RTT計測部, 181 送信部, 182 受信部, 201 通信部, 202 RTP処理部, 204 リオーダ判定部, 205 リオーダデータベース, 206 再送モード記憶部, 207 NACK処理部, 208 NACKデータベース, 209 送信履歴保持部, 210 RTT計測部, 211 RTT保持部, 301 サーバ, 312 パケタイザ, 313 通信部, 314 再送用バッファ, 315 NACK処理部, 331 送信部, 332 受信部, 351 クライアント, 361 通信部, 362 RTP処理部, 364 リオーダ判定部, 365 リオーダデータベース, 366 再送モード記憶部, 367 NACK処理部, 368 NACKデータベース, 381 送信部, 382 受信部