本発明は、例えば、インターネット電話、遠隔テレビ会議システム、ライブ映像ストリーミング配信システムなどのリアルタイムにストリーミングデータを転送する通信システムに適用することができる。
図1は、本発明を適用した通信システムの一実施の形態の構成例を示すブロック図である。
図1において、通信システムは、送信側端末12と受信側端末14とが、IPネットワーク13を介して接続されて構成されている。
ビデオカメラ11は、動画を撮影し、送信側端末12へ画像データと音声データを供給する。
画像データや音声データはストリーミングデータの一例であり、ストリーミングデータは、リアルタイム制御データなど、時間経過に対応して順次に送信または受信が要求されるデータであればよい。
送信側端末12は、ビデオカメラ11から供給されたデータをパケットに格納し、IPネットワーク13を介して、受信側端末14へ送信する。
受信側端末14は、IPネットワーク13を介して送信側端末12から送信されてきたパケットを受信し、そのパケットに格納されているデータを抽出して、画像データまたは音声データに復元する。
受信側端末14は、送信側端末12から連続して送信されてくるストリーミングデータが格納されたパケットの中に、正常に受信できないパケットがあった場合、送信側端末12に対して再送を要求し、送信側端末12は、受信側端末14からの要求に対応したパケットを再送する。
送信側端末12は、エンコーダ21、バッファ22、RTPパケット作成部23、RTP出力ポート24、通信部25、RTCP入出力ポート26、RTCPパケット解析部27、ARQ解析部28、およびRTCPパケット作成部29から構成される。
エンコーダ21は、ビデオカメラ11から供給されたデータの符号化を行う。エンコーダ21で符号化されたデータはバッファ22に供給され、蓄積される。
RTPパケット作成部23は、バッファ22に蓄積されたデータを定期的に読み込み、RTPパケットを作成し、RTP出力ポート24を介して通信部25に供給する。
また、RTPパケット作成部23は、バッファ22に蓄積された全データの送信が完了した場合、RTCPパケット作成部29に対して、EOS(End Of Stream)パケット作成の指示を行う。
RTP出力ポート24は、RTPパケット作成部23から供給されたRTPパケットを通信部25へ供給する。
通信部25は、RTP出力ポート24を介してRTPパケット作成部23から供給されたRTPパケットをもとにIPパケットを作成し、IPネットワーク13を介して、受信側端末14へ送信する。
また、通信部25は、IPネットワーク13を介して受信側端末14から送信されてきたIPパケットを受信し、RTCP入出力ポート26を介してRTCPパケット解析部27に供給する。
RTCP入出力ポート26は、通信部25から供給されたRTCPパケットをRTCPパケット解析部27に供給する。
RTCPパケット解析部27は、RTCP入出力ポート26を介して供給されたRTCPパケットのヘッダ部を解析し、そのRTCPパケットが、パケットの再送を要求する再送要求通知パケットであるかどうかを判定する。RTCPパケット解析部27は、RTCPパケットが再送要求通知パケットであると判定した場合、ARQ解析部28に、その再送要求通知パケットのデータ部を供給する。
ARQ解析部28は、RTCPパケット解析部27から供給された再送要求通知パケットのデータ部から、その再送要求通知パケットによって要求されたパケットを示すシーケンス番号などのパケットの再送処理に必要な情報を取得し、RTPパケット作成部23に対して、パケットの再送処理を指示する。
RTCPパケット作成部29は、RTPパケット作成部23からの、EOSパケット作成の指示に従い、EOSパケットを作成し、RTCP入出力ポート26を介して通信部25に供給する。
受信側端末14は、通信部31、RTP入力ポート32、RTPパケット解析部33、バッファ34、インデックスリスト35、デコーダ36、ARQ処理部37、RTCPパケット作成部40、RTCP入出力ポート41、およびRTCPパケット解析部42により構成される。
さらに、ARQ処理部37は、パケット損失検出部38、NACKパケット送信数決定部39から構成されている。
通信部31は、IPネットワークを介して送信側端末12から送信されてくる各種パケットを受信し、受信パケットがRTPパケットの場合、そのRTPパケットを、RTP入力ポート32を介してRTPパケット解析部33へ供給する。また、通信部31は、受信パケットがRTCPパケットの場合、そのRTCPパケットを、RTCP入出力ポート41を介してRTCPパケット解析部42へ供給する。
また、通信部31は、RTCP入出力ポート41を介してRTCPパケット作成部40から供給された再送要求通知パケットであるRTCPパケットをもとにIPパケットを作成し、IPネットワーク13を介して送信側端末12へ送信する。
RTP入力ポート32は、通信部31から供給されたRTPパケットを、RTPパケット解析部33へ供給する。
RTPパケット解析部33は、RTP入力ポート32を介して通信部31から供給されたRTPパケットを解析し、受信したRTPパケットが正常なものであるか否かを判定する。RTPパケット解析部33は、受信したRTPパケットが異常なものである場合(正常なものではない場合)、そのRTPパケットを破棄する。また、RTPパケット解析部33は、受信したRTPパケットが正常なものである場合、そのRTPパケットを、ヘッダ部とデータ部とに分割し、データ部をバッファ34へ、ヘッダ部をインデックスリスト35およびパケット損失検出部38へ供給する。
バッファ34は、RTPパケット解析部33から供給されたRTPパケットのデータ部を一時的に記憶する。
インデックスリスト35は、RTPパケット解析部33から供給されたRTPパケットのヘッダ部を一時的に記憶する。このとき、インデックスリスト35は、ヘッダ部に対応するデータ部のバッファ34内のアドレスを、ヘッダ部と関連付けて記憶する。
デコーダ36は、定期的にインデックスリスト35に蓄積されたヘッダ部のヘッダ情報をもとにして、バッファ34から必要なデータ部のデータを読み出し、送信側端末12のエンコーダ21に対応する復号を行う。そして、デコーダ36は、復号によって得られたデータをディスプレイ15、またはスピーカ16に出力する。
ARQ処理部37を構成するパケット損失検出部38は、RTPパケット解析部33から供給されるRTPパケットのヘッダ部のヘッダ情報を元に、パケット損失チェックのタイミングを判断し、インデックスリスト35に蓄積されているRTPパケットのヘッダ情報を解析して、パケット損失の有無を判定する。パケット損失検出部38は、パケット損失を検出した場合(パケット損失ありの判定をした場合)、損失したパケットを示す情報をNACKパケット送信数決定部39に供給する。
ARQ処理部37を構成するNACKパケット送信数決定部39は、パケット損失検出部38から供給された損失パケットを示す情報をもとに、損失したパケットの再送を要求する再送要求通知パケットの送信数を決定し、損失したパケットを示す情報とともに、再送要求通知パケットの送信数を示す情報をRTCPパケット作成部40に供給する。
RTCPパケット作成部40は、NACKパケット送信数決定部39から供給された情報をもとに、再送要求通知パケット(RTCPパケット)を作成し、NACKパケット送信数決定部39によって決定された送信数だけ、RTCP入出力ポート41を介して通信部31へ供給する。以下、再送要求通知パケットを、適宜NACKパケットという。NACKパケットの詳細については後述する。
RTCP入出力ポート41は、RTCPパケット作成部40から供給されたRTCPパケット(NACKパケット)を通信部31へ供給する。また、RTCP入出力ポート41は、通信部31から供給されたRTCPパケット(EOSパケット)をRTCPパケット解析部42へ供給する。
RTCPパケット解析部42は、通信部31からRTCP入出力ポート41を介して供給されたRTCPパケットを解析し、そのRTCPパケットが、ストリーミングデータの終了を表すEOSパケットであった場合、送信側端末12においてストリーミングデータの送信が完了したことを認識する。
図2は、送信側端末12においてストリーミングデータが格納され、受信側端末14に送信されてくるパケットであるRTPパケットを説明する図である。
RTPパケットのヘッダ部は、バージョン番号、パディング、拡張ビット、counter、marker_bit、payload type、シーケンス番号、TIMESTAMP、同期ソース識別子、貢献ソース識別子の各フィールドから構成されている。
バージョン番号フィールドは、2ビットの領域であり、そこに記述されるバージョン番号はRTPパケットのバージョンを表す。
続いて配置されるパディングは、例えば、0が設定される1ビットの領域である。
拡張ビットフィールドは、1ビットの領域であり、そこに記述される拡張ビットは、拡張ヘッダの有無を表す。
counterフィールドは、4ビットの領域であり、そこに記述されるcounterは、貢献ソース識別子の設定数を表す。
marker_bitフィールドは、1ビットの領域であり、そこに記述されるmarker_bitは、プロファイルによって定義される。
payload typeフィールドは、7ビットの領域であり、そこに記述されるpayload type は、RTPペイロードのフォーマットを定義するための情報である。
シーケンス番号フィールドは、16ビットの領域であり、そこに記述されるシーケンス番号は、パケットの順序を表す。また、シーケンス番号は、RTPパケットの送信の度に1つずつ増える情報である。シーケンス番号は、パケット損失を検出したり、受信したRTPパケットの順序を修復するために使用される。
TIMESTAMPフィールドは、32ビットの領域であり、そこに記述されるTIMESTAMPは、RTPパケットに格納されているストリーミングデータの最初のオクテットがサンプルされた時刻を示す情報である。
同期ソース識別子フィールドは、32ビットの領域であり、そこに記述される同期ソース識別子には、送信元を示す識別子が設定される。
貢献ソース識別子は、32ビットの領域であり、そこに記述される貢献ソース識別子は、最大15個の貢献ソース識別子が設定可能である。この貢献ソース識別子の設定数は、上記のcounterに設定されている。貢献ソース識別子は、送信元が複数の場合に、それぞれの送信元から送信されたパケットが経由するミキサによって、それぞれのパケットに設定されている上記の同期ソース識別子が設定される。その際、同期ソース識別子には、ミキサを示す識別子が設定される。
図2において、以上のような各フィールドからなるヘッダ部に続くPayloadは、ストリーミングデータを示す。
図3は、受信側端末14が送信側端末12に送信する再送要求通知パケットとしてのNACKパケットを説明する図である。
NACKパケットには、バージョン番号、パディング、FORMAT、PayloadType、パケット長、送信同期ソース識別子(RTCP)、TIMESTAMPの情報に加え、再送要求対象となるパケットを示すシーケンス番号である再送指定シーケンス番号、再送要求回数、オプション(OPTION)、重複指定回数が設定可能である。
バージョン番号、パディングは、図2のRTPヘッダ部のバージョン番号とパディングと同様であるため、ここでの説明は省略する。
本実施の形態においては、NACKパケットおよびEOSパケット等の制御メッセージの区別に関して、RTCPヘッダのPayloadTypeによってのみ区別するのではなく、PayloadTypeとFORMATを使用して区別することとする。
FORMATには、NACKパケットおよびEOSパケット等を示す値が設定され、PayloadTypeには、制御メッセージであることを示す値が設定される。
図3に示すように、1つのNACKパケットにおいて、1つ以上の、再送要求対象となるパケットのシーケンス番号を、再送指定シーケンス番号として設定することが可能である(図3において、複数の「再送指定シーケンス番号」はこのことを表す)。
また、再送要求対象となるパケットのシーケンス番号それぞれに対して付加される再送要求回数は、そのシーケンス番号に対応するパケットの再送要求が何回目のものであるかを示すフィールドであり、重複指定回数は、送信側端末12が再送する際の、同一パケットの再送回数を指定するフィールドである。OPTIONは、その他の任意の情報を格納するフィールドとして使用される。OPTIONには、任意の情報を格納することが可能であり、設定値に従った処理を送信側端末12に実行させることができる。
例えば、重複指定回数に3を設定した場合、NACKパケットを受信した送信側端末12に、そのNACKパケットによって再送を要求したパケットを3回送信させることができる。
また、再送要求回数に何回目の要求であるのかを設定することで、NACKパケット自身が損失したことを送信側端末12に認識させることができる。
図4は、送信側端末12から受信側端末14へ送信されるEOSパケットを説明する図である。
EOSパケットは、バージョン番号、パディング、FORMAT、payload type、パケット長、送信同期ソース識別子(RTCP)、TIMESTAMPから構成される。EOSパケットを構成するそれぞれのフィールドは、図3に示すNACKパケットのそれぞれのフィールドと同様であるので説明は省略する。
次に、図1の送信側端末12におけるパケットの送信処理を図5のフローチャートを参照して説明する。
ステップS11において、エンコーダ21はビデオカメラ11から供給されたデータを符号化する。例えば、エンコーダ21は、供給された画像データをMPEG(Moving Picture Experts Group)などの方式により符号化し、バッファ22に格納する。RTPパケット作成部23は、バッファ22に格納された符号化データを読み込み、その符号化データをPayload(図2)に配置したRTPパケットを作成し、RTP出力ポート24を介して通信部25に供給する。RTPパケットは、ストリーミングデータを転送する際に使用されるパケットの一例である。
ステップS11からステップS12に進み、通信部25は、RTP出力ポート24を介してRTPパケット作成部23から供給されたRTPパケットをもとにIPパケットを作成し、ステップS13へ進む。ステップS13において、通信部25は、作成したIPパケットを、IPネットワーク13を介して受信側端末14へ送信し、ステップS14へ進む。
ステップS14において、RTCPパケット解析部27は、受信側端末14からNACKパケットを受信したかどうかのNACKパケット受信判定を行う。ステップS14において、NACKパケットが受信されてないと判定された場合、ステップS15に進み、RTPパケット作成部23は、送信すべき全データの送信が完了したか否かを判定する。
ステップS15において、送信すべき全データの送信が完了していないと判定された場合、ステップS11に戻り、送信すべき全データの送信が完了するまでRTPパケット送信処理が繰り返される。
一方、ステップS14において、NACKパケットを受信したと判定された場合、即ち、受信側端末14から送信されたNACKパケットが、通信部25で受信され、RTCP入出力ポート26を介してRTCPパケット解析部27に供給された場合、パケット解析部27は、そのNACKパケットをARQ解析部28へ供給して、ステップS16へ進む。
ARQ解析部28は、ステップS16において、RTCPパケット解析部27に供給されたNACKパケットのデータ部を解析し、そのNACKパケットによって再送を要求されたパケットのシーケンス番号などの、パケットの再送処理に必要な情報を取得し、RTPパケット作成部23に対して、再送処理を指示する。
なお、ステップS16において、ARQ解析部28は、タイマを設定することで、ある一定時間内に、同一パケットを示すシーケンス番号を含むNACKパケットを複数受信した場合、最初のNACKパケットを受信した時点において、RTPパケット作成部23に再送を要求されたパケットの再送指示を行い、その後、タイマによる一定時間の計時が終了するまでの間に受信したNACKパケットに含まれる同一パケットを示すシーケンス番号を無視することで、再送要求されたパケットの再送を制御することも可能である。
この場合、一定時間内に同一パケットの再送を要求する1以上のNACKパケットを受信しても、そのパケットの再送が1回しか行われないこととなり、無駄なトラフィックの増加を防止することができる。
ステップS16からステップS17に進み、RTPパケット作成部23は、ARQ解析部28から入力される再送処理の指示に従い、再送要求に対応するデータ(NACKパケットによって再送が要求されたデータ)をバッファ22から抽出し、ステップS18へ進む。
ステップS18において、RTPパケット作成部23は、ステップS17でバッファ22から抽出したデータを格納したRTPパケットを作成し、RTP出力ポート24を介して通信部25に供給して、ステップS19に進む。
ステップS19において、通信部25は、RTP出力ポート24を介してRTPパケット作成部23から供給されたRTPパケットをもとにIPパケットを作成し、ステップS20に進み、通信部25は、作成したIPパケットを、IPネットワーク13を介して受信側端末14へ送信する。その後、ステップS14に戻り、以下同様の処理が繰り返される。
一方、ステップS15において、送信すべき全データの送信が完了と判定された場合、ステップS21へ進み、RTPパケット作成部23は、EOSパケットを送信済みであるか否かの判定を行う。
ステップS21においてEOSパケットが未送信であると判定された場合、ステップS22に進み、RTPパケット作成部23は、RTCPパケット作成部29に対してEOSパケット送信の指示を行う。RTCPパケット作成部29は、RTPパケット作成部23からの指示に従い、EOSパケットを作成し、RTCP入出力ポート26を介して通信部25にEOSパケットを供給する。通信部25は、RTCP入出力ポート26を介してRTCPパケット作成部29から供給されたEOSパケットをもとにIPパケットを作成し、IPネットワーク13を介して受信側端末14に送信する。
そして、ステップS22からステップS23に進み、RTCPパケット作成部29は、送信処理終了タイマの計時を開始し、ステップS14に戻る。ここで、送信処理終了タイマは、EOSパケット送信後にも受信側端末14からNACKパケットが送信されてくる可能性があるために、そのNACKパケットの処理を行う時間として計時されるものである。
一方、ステップS21において、EOSパケットが送信済みであると判定された場合は、ステップS24へ進み、RTCPパケット作成部29は、送信処理終了タイマによる所定の時間の計時が終了したか否かを判定する。
ステップS24において、送信処理終了タイマによる所定の時間の計時が終了していないと判定された場合、ステップS14に戻り、上述の処理が繰り返される。
また、ステップS24において、送信処理終了タイマによる所定の時間の計時が終了したと判定された場合、送信処理が終了される。
図6に示すフローチャートを参照して、図1の受信側端末14によるパケットの受信処理を説明する。
ステップS31において、受信処理に必要な初期化処理が行い行われる。例えば、パケット損失検出部38は、内蔵しているパケット損失チェックタイマによる所定の時間の計時を開始する。このパケット損失チェックタイマは、一定の時間毎にパケット損失のチェックを実行するために、その時間を計時するためのものである。
ステップS32において、RTPパケット解析部33は、送信側端末12からのRTPパケットを受信したか否かの判定を行う。ステップS32において、RTPパケットを受信したと判定された場合、即ち、送信側端末12からのRTPパケットが通信部31で受信され、RTP入力ポート32を介してRTPパケット解析部33へ供給された場合、ステップS33へ進み、RTPパケット解析部33は、RTP入力ポート32を介して供給されたRTPパケットのデータ部をバッファ34へ供給し、ヘッダ部をインデックスリスト35およびパケット損失検出部38へ供給し、ステップS34へ進む。
ここで、バッファ34は、RTP解析部33から供給されたRTPパケットのデータ部のデータを記憶し、また、インデックスリスト35は、RTP解析部33から供給されたRTPパケットのヘッダ部のヘッダ情報を記憶する。
ステップS34において、パケット損失検出部38は、RTP解析部33から供給されたRTPパケットのヘッダ部に基づき、そのRTPパケット(以下、適宜、注目パケットという)が再生の単位となるデータフレームのnフレーム目(n=1,2,...)の終端パケットであるか否かの判定を行う。ステップS34において、注目パケットがnフレーム目の終端パケットではないと判定された場合、ステップS35に進み、パケット損失検出部38は、注目パケットが(n+1)フレーム目の先頭パケットであるか否かの判定を行う。
ステップS35において、注目パケットが(n+1)フレーム目の先頭パケットではないと判定された場合、ステップS36へ進み、パケット損失検出部38は、パケット損失チェックタイマによる所定の時間の計時が終了したか否かの判定を行う。
ステップS36において、パケット損失チェックタイマによる所定の時間の計時が終了していないと判定された場合、ステップS39へ進み、デコーダ36は、現在時刻がmフレーム目(m=1,2,...)の再生時刻であるか否かの判定を行う。
ここで、各フレームの再生時刻は、そのフレームを構成するデータが格納されていたRTPパケットに含まれるタイムスタンプから算出することができる。
ステップS39において、現在時刻がmフレーム目の再生時刻ではないと判定された場合、ステップS40をスキップして、ステップS32に戻り、上述の処理を繰り返す。
また、ステップS39において、現在時刻がmフレーム目の再生時刻であると判定された場合、ステップS40へ進み、デコーダ36は、バッファ34に記憶されたデータを読み出し、mフレーム目の復号処理を行う。その後、ステップS32へ戻り、上述の処理を繰り返す。
一方、ステップS34において、注目パケットがnフレーム目の終端パケットであると判定された場合、またはステップS35において、注目パケットが(n+1)フレーム目の先頭パケットであると判定された場合、ステップS38へ進む。
また、ステップS36において、パケット損失チェックタイマによる所定の時間の計時が終了したと判定された場合も、ステップS37において、パケット損失検出部38は、パケット損失チェックタイマによる所定の時間の計時を再開してから、ステップS38へ進む。
ステップS38において、パケット損失検出部38は、インデックスリスト35に記憶されているヘッダ情報を参照して、各フレームを構成するデータの損失の有無、即ち、各フレーム内の損失パケットの有無を判定する。ステップS38において、損失パケットがないと判定された場合、ステップS39に進み、以下、上述した処理が行われる。
また、ステップS38において、損失パケットがあると判定された場合、即ち、パケット損失検出部38において損失パケットが検出された場合、ステップS41へ進み、NACKパケット送信数決定部39は、パケット損失検出部38により検出された損失パケットに格納されているデータを含むフレームの再生時刻と現在時刻の差である再生猶予時間を算出し、さらに、その再生猶予時間から、損失パケットの受信の緊急性を表す要求レベルを判定する。
なお、再生猶予時間は、例えば、RTPパケットのヘッダ情報に含まれるタイムスタンプから算出することができる。即ち、損失パケットの再生猶予時間は、例えば、現在再生中のフレームを構成するデータが格納されていたRTPパケットのタイムスタンプと損失パケットの、1つ前または後のシーケンス番号のRTPパケットのタイムスタンプの差から求めることができる。
また、再生猶予時間としては、その他、例えば、現在再生中のフレームを構成するデータが格納されていたRTPパケットのシーケンス番号と損失パケットのシーケンス番号の差分値を用いるようにしても良い。この場合、現在再生中のフレームを構成するデータが格納されていたRTPパケットのシーケンス番号としては、現在再生中のフレームの、先頭のデータが格納されていたRTPパケットのシーケンス番号、または現在再生中のフレームの最後のデータが格納されていたRTPパケットのシーケンス番号、さらにその先頭と最後の間のデータが格納されていた任意のRTPパケットのシーケンス番号を用いることができる。
要求レベルは、例えば次の式により判定することができる。
要求レベル = 再生猶予時間/T
Tは、再生猶予時間をタイムスタンプから求める場合には、ある一定の時間(タイムスタンプ)差を示す値であり、再生猶予時間をシーケンス番号から求める場合には、ある一定のシーケンス番号の差を示す値である。また、要求レベルは、値が小さい程、損失パケットの受信の緊急性が高いことを表すものとする。
ステップS41での要求レベルの判定後、ステップS42に進み、NACKパケット送信数決定部39は、要求レベルに従い、NACKパケットの送信数を決定し、決定した送信数を示す情報をRTCPパケット作成部40に供給して、ステップS43に進む。
NACKパケットの送信数は、例えば、次のように決定することができる。
要求レベル ≦(K−1)の場合は、NACKパケットの送信数 = K−要求レベル
要求レベル >(K−1)の場合は、NACKパケットの送信数 = 1
上記において、Kは正の整数である。
上記内容に従うと、再生猶予時間が大きい損失パケット(再生時刻までに余裕がある損失パケット)に対するNACKパケットは少数送信され(少数のNACKパケットが送信され)、再生猶予時間の小さい損失パケット(再生時刻までに余裕がない損失パケット)に対するNACKパケットは多数送信される(多数のNACKパケットが送信される)。
例えば、画像フレームF1の再生予定時刻が3000、画像フレームF2の再生時刻が6000、画像フレームF3の再生予定時刻が9000であるとし、上記T = 3000、K = 4、さらに現在時刻が0であるとしたとき、画像フレームF1に対する損失パケットP1、画像フレームF2に対する損失パケットP2、画像フレームF3に対する損失パケットP3を検出したとする。このとき、損失パケットP1に対するNACKパケットの送信数C1は、下記の式により算出される。
C1 = 4−(3000/3000)= 3
同様に、損失パケットP2に対するNACKパケットの送信数C2、損失パケットP3に対するNACKパケットの送信数C3は下記の式より算出される。
C2 = 4−(6000/3000)= 2
C3 = 4−(9000/3000)= 1
ステップS43において、RTCPパケット作成部40は、損失パケットに対するNACKパケットを作成し、NACKパケット送信数決定部39により決定された送信数に等しい数のNACKパケットを、RTCP入出力ポート41を介して通信部31に供給し、ステップS44に進む。
ステップS44において、通信部31は、RTCP入出力ポート41を介して供給されたNACKパケットをもとに、その個数分のIPパケットを作成し、ステップS45に進む。ステップS45において、通信部31は、作成したIPパケットを、IPネットワーク13を介して送信側端末12へ送信し、ステップS32の処理へ戻り、上述の処理を繰り返す。
上記のように、損失パケットの受信の緊急性を表す要求レベルに応じて、NACKパケットの送信数を調整することで、無駄なトラフィックの増加を防止することができる。
なお、NACKパケットを複数送信する場合(複数個のNACKパケットを送信する場合)、RTCPパケット作成部40においてタイマを設けることで、同一のRTPパケット(損失パケット)の再送を要求する複数のNACKパケットを一定の時間おきに送信側端末12へ送信することが可能である。
NACKパケットを一定の時間おきに送信することで、複数のNACKパケットを一度にまとめて送信した場合に、IPネットワーク13の輻輳により、送信した全てのNACKパケットが損失する危険性を低下させることができる。
一方、ステップS32において、送信側端末12からのRTPパケットを受信していないと判定された場合、ステップS46へ進み、RTCPパケット解析部42は、送信側端末12からのEOSパケットを受信したか否かの判定を行う。
ステップS46において、EOSパケットを受信したと判定された場合、ステップS47へ進み、RTCPパケット解析部42は、受信処理終了タイマによる一定時間の計時を開始し、ステップS32の処理へ戻る。この受信処理終了タイマにより計時される一定時間は、最終フレームの再生時刻をもとに設定され、EOSパケット受信後も、再生が終了するまでの間は、NACKパケットにより再送を要求したRTPパケットの受信を可能にするための時間として使用される。
また、ステップS46において、EOSパケットを受信していないと判定された場合、ステップS48へ進み、デコーダ36は、現在時刻がmフレーム目の再生時刻であるか否かの判定を行う。
ステップS48において、現在時刻がmフレーム目の再生時刻であると判定された場合、ステップS49へ進み、デコーダ36は、バッファ34に記憶されたデータを読み出し、mフレーム目の復号処理を行う。
そして、ステップS50に進み、RTCPパケット解析部42は、EOSパケットを受信済みであるか否かの判定を行う。ステップS50において、EOSパケットを受信済みであると判定された場合、ステップS51へ進み、RTCPパケット解析部42は、受信処理終了タイマによる一定時間の計時が終了したか否かの判定を行う。
ステップS51において、受信処理終了タイマによる一定時間の計時が終了したと判定された場合、受信側端末14は、受信処理を終了する。
一方、ステップS48において、現在時刻がmフレーム目の再生時刻でないと判定された場合、ステップS50において、EOSパケットが受信済みでないと判定された場合、または、ステップS51において、受信処理終了タイマによる一定時間の計時が終了していないと判定された場合は、ステップS32の処理へ戻り、上述した処理を繰り返す。
以上のように、損失パケットの受信の緊急性を表す要求レベルに応じて、NACKパケットの送信数を調整することにより、再生時刻の迫ったデータを格納する損失パケットに対するNACKパケットを高い確率で送信側へ到達させることが可能となり、再生時刻の迫ったデータを格納した再送パケットを、受信側にて再生時刻までに受信できる確立を高めることができる。その結果として、信頼性の高いデータ通信、および高品位なメディアの再生が可能となる。
次に、他の実施の形態について説明する。
図7は、本発明を適用した通信システムの他の実施の形態の構成例を示すブロック図である。図7において、図1に示す場合と同様の部分には同一の番号を付してあり、その説明は適宜省略する。
図7において、IPネットワーク51は、Diffserv(Differentiated Services)対応のIPネットワークである。
ARQ解析部53は、RTCPパケット解析部27から供給されたNACKパケット(RTCPパケット)のデータ部から、受信側端末14から再送を要求されたRTPパケットを示すシーケンス番号などのパケットの再送処理に必要な情報を取得し、RTPパケット作成部23に対して、再送処理を指示する。また、ARQ解析部53は、RTCPパケット解析部27から供給されたNACKパケット(RTCPパケット)のデータ部の指定優先度から、RTPパケットの再送の際にIPヘッダのDS(Differentiated Services)フィールドに設定する、IPネットワーク51上でのパケットの転送処理における優先度を判定し、再送を要求されたRTPパケットを示す情報とともに、通信部52へ優先度を示す情報を通知する。
通信部52は、図1の通信部25と同様の処理を行う。ただし、通信部52は、RTP出力ポート26を介してRTPパケット作成部23から供給された再送パケット(RTPパケット)からIPパケットを作成する際、ARQ解析部53から供給された情報をもとにして、IPヘッダのDSフィールドに、NACKパケットに設定された優先度に対応する値を設定し、Diffserv対応のIPネットワーク51を介して、受信側端末14へ再送パケットを送信する。
図7において、ARQ処理部37は、図1のNACKパケット送信数決定部39に代えて、NACKパケット優先度決定部55が設けられて構成されている。
NACKパケット優先度決定部55は、パケット損失検出部38から供給された損失パケットを示す情報をもとに、その損失パケットの再送を要求する再送要求通知パケットの優先度を決定し、パケット損失検出部38から供給された損失パケットを示す情報とともに、再送要求通知パケットの優先度を示す情報をRTCPパケット作成部40に供給する。同時に、NACKパケット優先度決定部55は、再送要求通知パケットの優先度を示す情報を通信部54へ供給する。
通信部54は、図1の通信部31と同様の処理を行う。ただし、通信部54は、RTCP入出力ポート41を介してRTCPパケット作成部40から供給されたRTCPパケット(NACKパケット)をもとにIPパケットを作成する際、NACKパケット優先度決定部55から供給された情報をもとに、IPヘッダのDSフィールドに、IPネットワーク51上でのパケットの転送処理における優先度を示す値を設定し、Diffserv対応のIPネットワーク51を介して送信側端末12へ送信する。
図8は、受信側端末14が送信側端末12へ送信するNACKパケットとしてのIPパケットの構成を説明する図である。
IPパケットは、バージョン情報、ヘッダ長、TOS(Type Of Service)、パケット長、識別子、フラグ、断片オフセット、TTL(Time To Live)、プロトコル、送信元IPアドレス、宛て先IPアドレス、オプション、およびデータの各フィールドから構成されている。
IPパケットの先頭に配置されるバージョン情報フィールドは、4ビットの領域であり、バージョン情報は、IPのバージョンを表す。
次に配置されるヘッダ長は、バージョン情報からオプションまでを含む、IPヘッダの長さを表す。
8ビット領域のTOSフィールドは、IPパケットがDiffserv対応の場合、6ビットのDS(Differentiated Services)フィールドと2ビットの未使用領域に置き換えられ、DSフィールドにIPパケットの優先度を示す値が設定される。
パケット長フィールドは、16ビットの領域であり、そこに記述されるパケット長は、IPパケットの全長、つまり、バージョン情報からデータまでを含んだ長さを表す。
識別子フィールドは、16ビットの領域であり、そこには、パケットを識別するための情報が設定される。
フラグフィールドは、3ビットの領域であり、先頭に1ビットの未使用領域、次に、フラグメント禁止か否かを示す1ビットの領域、最後に、分割されたデータグラムの最後であるか否かを示す1ビットの領域が設けられている。
断片オフセットフィールドは、13ビットの領域であり、そこには、分割されたデータグラムが再構成される際の順番を示す値が設定される。
TTLフィールドは、8ビットの領域であり、そこには、パケットの生存時間、つまりパケットが通過できるルータの数が設定される。また、TTLの値は、ルータを通過する度に、その通過したルータによって1づつ減らされ、TTLの値が0になったパケットを受け取ったルータによって破棄される。
プロトコルフィールドは、8ビットの領域であり、そこには、上位のプロトコルを示す値が設定される。本実施の形態においてはストリーミングデータの転送に、例としてRTPパケットを使用しており、この場合、プロトコルにはUDP(User Datagram Protocol)を示す値が設定される。
ヘッダチェックサムフィールドは、16ビットの領域であり、そこには、IPヘッダ部のエラー判定に使用される情報が設定される。
送信元IPアドレスフィールドは、32ビットの領域であり、送信元IPアドレスフィールドには、送信元のIPアドレスが設定される。
宛て先IPアドレスフィールドは、32ビットの領域であり、宛て先IPアドレスフィールドには、宛て先のIPアドレスが設定される。
オプションフィールドには、可変長のオプショナル情報リストが配置される。
データフィールドは、IPパケットのデータ部であり、後述する図9のNACKパケットとしてのRTCPパケットが配置される。
図9は、RTCPパケット作成部40からRTCP入出力ポート41を介して通信部54に供給されるNACKパケットとしてのRTCPパケットを説明する図である。
バージョン番号、パディング、FORMAT、送信同期ソース識別子(RTCP)、TIMESTAMP、再送要求回数、OPTION、および再送指定シーケンスは、図3で示されるNACKパケットと同様であるため、その説明は省略する。
図9に示される指定優先度は、NACKパケットとしてのIPパケットのヘッダ部のDSフィールドに設定される優先度を表す。
なお、NACKパケットに複数の再送指定シーケンス番号が設定されており、それぞれの再送指定シーケンス番号に対応する指定優先度が同一でない場合、NACKパケットとしてのIPパケットのヘッダ部のDSフィールドには、複数の再送指定シーケンス番号それぞれに対応する指定優先度の中で、例えば、最も高い優先度が設定される。
図10は、図7の送信側端末12の送信処理を示したフローチャートである。
ステップS61乃至ステップS65、ステップS67、またはステップS70乃至ステップS74の処理は、図5のステップS11乃至ステップS15、ステップS17、またはステップS20乃至ステップS24の処理のそれぞれと同様なので、その説明は適宜省略する。
ステップS64において、NACKパケットを受信したと判定された場合、即ち、受信側端末14から送信されたNACKパケットが、通信部52で受信され、RTCP入出力ポート26を介してRTCPパケット解析部27に供給された場合、RTCPパケット解析部27は、そのNACKパケットをARQ解析部53へ供給して、ステップS66へ進む。ステップS66では、ARQ処理部53は、RTCPパケット解析部27から供給されたNACKパケットのデータ部を解析し、そのNACKパケットによって再送を要求されたパケットを示すシーケンス番号などの、パケットの再送処理に必要な情報を取得し、RTPパケット作成部23に対して、再送処理を指示する。
また、ARQ解析部53は、RTCPパケット解析部27から供給されたNACKパケットのデータ部の指定優先度(図9)から、パケットの再送の際にIPヘッダのDS(Differentiated Services)フィールドに設定する、IPネットワーク51上でのパケットの転送処理における優先度を判定し、通信部52に再送が要求されたRTPパケットを示す情報とともに優先度を示す情報を通知する。
ステップS66からステップS67へ進み、RTPパケット作成部23は、ARQ解析部28からの再送処理の指示に従い、再送要求に対応するデータ(NACKパケットによって再送が要求されたデータ)をバッファ22から取得し、ステップS68に進む。
ステップS68において、RTPパケット作成部23は、ステップS67でバッファ22から取得したデータを格納したRTPパケットを作成し、再送パケットとして、RTP出力ポート24を介して通信部52に供給して、ステップS69に進む。
ステップS69において、通信部52は、RTP出力ポート24を介してRTPパケット作成部23から供給された再送パケットをもとにIPパケットを作成する。この際、通信部52は、ARQ処理部53から供給された優先度を示す情報に対応する値を、IPヘッダのDSフィールドに設定する。そして、ステップS70へ進み、通信部52は、作成したIPパケットを、IPネットワーク51を介して受信側端末14へ送信する。その後、ステップS64へ戻り、以下、同様の処理が繰り返される。
従って、図7の通信システムでは、送信側端末12から受信側端末14に対して、NACKパケットに設定されている指定優先度、即ち、NACKパケットとしてのIPパケットのDSフィールドに設定されている値と、例えば、同一の値が、再送パケットとしてのIPパケットのDSフィールドに設定され、その再送パケットとしてのIPパケットが送信される。この場合、再送パケットは、その再送パケットの再送を要求するNACKパケットと同一の優先度で、IPネットワーク51内で転送されることになる。
図11は、図7の受信側端末14の受信処理を示したフローチャートである。
ステップS81乃至ステップS91、ステップS95乃至ステップS101の処理は、図6のステップS31乃至ステップS41、ステップS45乃至ステップS51の処理のそれぞれと同様なので、その説明は適宜省略する。
ステップS88において、損失パケットがあると判定された場合、即ち、パケット損失検出部38において損失パケットが検出された場合、ステップS91へ進み、NACKパケット優先度決定部55は、パケット損失検出部38により検出された損失パケットに格納されているデータを含むフレームの要求レベルを、図1のNACKパケット送信数決定部39が図6のステップS41で行うのと同様にして判定し、ステップS92に進む。
ステップS92において、NACKパケット優先度決定部55は、ステップS91にて判定された要求レベルに従い、IPネットワーク51上でのパケットの転送処理における優先度を表すNACKパケット優先度を決定し、損失パケットを示す情報(シーケンス番号)とともにNACKパケット優先度をRTCPパケット作成部40へ供給する。同時に、NACKパケット優先度決定部55は、NACKパケット優先度を通信部54へ供給し、ステップS93に進む。
なお、ステップS88において、複数の損失パケットが検出された場合、ステップS92においてNACKパケット優先度決定部55は、その複数の損失パケットそれぞれに対するNACKパケット優先度を決定し、さらに、そのNACKパケット優先度のうちの、最も高い優先度を示すNACKパケット優先度を通信部54に供給する。
ステップS93において、RTCPパケット作成部40は、損失パケットを要求するNACKパケットとしてのRTCPパケットを作成する。このとき、RTCPパケット作成部40は、NACKパケットに、パケット損失検出部55からの損失パケットを示す情報としてのシーケンス番号を、図9の再送指定シーケンス番号として設定するとともに、パケット損失検出部55からのNACKパケットの優先度を、図9の指定優先度として設定し、RTCP入出力ポート41を介して通信部54に供給して、ステップS94に進む。
ステップS94において、通信部54は、RTCP入出力ポート41を介してRTCPパケット作成部40から供給されたNACKパケットをもとにIPパケットを作成する。その際、NACKパケット優先度決定部55から供給された、NACKパケット優先度に従って、IPヘッダのDSフィールドに値を設定し、ステップS95に進む。ステップS95において、通信部54は、作成したIPパケットを、IPネットワーク51を介して送信側端末12へ送信する。
ここで、NACKパケット優先度は、複数の段階を表すことが可能である。ここでは、2段階のNACKパケット優先度と、3段階以上のNACKパケット優先度とについて説明する。
まず、NACKパケット優先度を2段階とする場合、NACKパケット優先度は、例えば、次の式から求められる。
要求レベル ≦ θ の場合、 NACKパケット優先度 = 2
要求レベル > θ の場合、 NACKパケット優先度 = 1
θは正の整数である。
次に、NACKパケット優先度を3段階以上とする場合、NACKパケット優先度は、例えば、次のように求められる。
要求レベル ≦(K−1)の場合は、NACKパケット優先度 = K− 要求レベル
要求レベル >(K−1)の場合は、NACKパケット優先度 = 1
上記において、Kは正の整数である。NACKパケット優先度は値が大きい程、ネットワーク51上でのパケットの転送処理において、より優先的に転送が行われることを表すものとする。
上述の内容に従うと、再生猶予時間が充分にあり、従って要求レベルが大きい損失パケットに対するNACKパケットは低い優先度にて送信され、再生猶予時間が短く、従って要求レベルが小さい損失パケットに対するNACKパケットは高い優先度にて送信される(IPネットワーク51内を優先的に転送される)。
例えば、3段階のNACKパケット優先度を持つ場合において、K = 3とすると、NACKパケット優先度は、要求レベルに応じて、下記のように決定される。
要求レベル ≧ 2 の場合、 NACKパケット優先度 = 1
1 ≦ 要求レベル < 2 の場合、 NACKパケット優先度 = 2
要求レベル < 1 の場合、 NACKパケット優先度 = 3
ここで、IPヘッダのDSフィールドに設定される値について説明する。
2段階のNACKパケット優先度を採用する場合、例えば、IETF RFC2598に規定されているDiffservにおけるExpedited Forwarding Class(EF Class)とIETF RFC2597に規定されているBest Effort Class(BE Class)を用いる。
このとき、NACKパケット優先度 = 2をEF Class 、NACKパケット優先度 = 1をBE Classに対応させる。また、例えば、EF ClassのパケットのDSフィールドには、2進数表記で101110、BE ClassのパケットのDSフィールドには、2進数表記で000000を設定する。
なお、Diffservネットワークにおいて、EF Classは、最も高い優先度のクラスで、遅延と最大損失率が保証される最優先Classである。一方、BE Classは、Diffservネットワークにおいて、最も低い優先度のクラスで、Diffserv対応ルータにてEF Classのパケット処理が行われていない空き時間に処理される。
3段階のNACKパケット優先度を採用する場合、例えば、IETF RFC2598に規定されているExpedited Forwarding Class(EF Class)、IETF RFC2597に規定されているAssured Forwarding Class(AF Class)および、Best Effort Class(BE Class)を用いる。
このとき、NACKパケット優先度 = 3をEF Class 、NACKパケット優先度 = 2をAF Class 、NACKパケット優先度 = 1をBE Classに対応させる。また、例えば、EF ClassのパケットのDSフィールドには、2進数表記で101110、AF ClassのパケットのDSフィールドには、2進数表記で001010、BE ClassのパケットのDSフィールドには、2進数表記で000000を設定する。
なお、NACKパケット優先度は、高い順に、EF Class、AF Class、BE Classとなる。また、AF Classは、IETF RFC2597にて3段階のClassと4段階のパケット棄却率を設定できるため、全体として、さらに細かい優先度分けを行うことが可能である。
本実施の形態では、優先度によりパケットの送信を制御する優先制御方式として、IETF RFC2474、IETF RFC2475、IETF RFC2597、IETF RFC2598に規定されるDiffserv(Differentiated Services)に対応した例について説明したが、その他の優先制御方式を採用してもよい。
また、本実施の形態では、NACKパケットとしてのRTCPパケットのデータ部に指定優先度フィールドを設け、その指定優先度フィールドに、要求レベルに応じて決定されたNACKパケット優先度を設定するとともに、そのNACKパケット優先度に対応する値を、そのRTCPパケットが格納されるIPパケットのDSフィールドに設定し、そのIPパケットを受信側端末14から送信側端末12に送信するようにしたが、受信側端末14では、指定優先度フィールドがないNACKパケットを作成することが可能である。この場合、送信側端末12では、受信側端末14から受信したNACKパケットとしてのIPパケットのDSフィールドに設定されている優先度と同一の優先度が、再送パケットのIPヘッダ部のDSフィールドに設定される。
以上のように、損失パケットの受信の緊急性を表す要求レベルに応じて、NACKパケットのネットワーク上で転送処理における優先度を調整することにより、再生時刻の迫ったデータを格納する損失パケットに対するNACKパケットを高い確率で送信側へ到達させることが可能となり、再生時刻の迫ったデータを格納した再送パケットを、受信側にて再生時刻までに受信できる確立を高めることができる。その結果として、信頼性の高いデータ通信、および高品位なメディアの再生が可能となる。
本発明を用いることにより、従来の自動再送要求方式(ARQ)を用いたRTPパケット通信における、損失パケットの再送を要求するパケット自身がネットワーク上で損失し、そのパケットによって再送を要求しようとしていた損失パケットの再送処理が行われない可能性があるという問題点において、RTPパケット通信の頑健性を向上させ、信頼性の高いデータ通信を実現することができる。
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。この場合、上述した処理は、図12に示されるようなパーソナルコンピュータ60により実行される。
図12において、CPU(Central Processing Unit)61は、ROM(Read Only Memory)62に記憶されているプログラム、または、記憶部68からRAM(Random Access Memory)63にロードされたプログラムに従って各種の処理を実行する。RAM63にはまた、CPU61が各種の処理を実行する上において必要なデータなどが適宜記憶される。
CPU61、ROM62、およびRAM63は、内部バス64を介して相互に接続されている。この内部バス64にはまた、入出力インターフェース65も接続されている。
入出力インターフェース65には、キーボード、マウスなどよりなる入力部66、CRT,LCD(Liquid Crystal Display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部67、ハードディスクなどより構成される記憶部68、モデム、ターミナルアダプタなどより構成される通信部69が接続されている。通信部69は、電話回線やCATVを含む各種のネットワークを介しての通信処理を行う。
入出力インターフェース65にはまた、必要に応じてドライブ70が接続され、磁気ディスク71(フレキシブルディスクを含む)、光ディスク72(CD-ROM(Compact Disc-Read Only Memory) 、DVD(Digital Versatile Disc)を含む)、光磁気ディスク73(MD(Mini-Disc)(商標)を含む)、あるいは半導体メモリ74などによりなるリムーバブルメディアが適宜装着され、それから読み出されたコンピュータプログラムが、必要に応じて記憶部68にインストールされる。
一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば、汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
この記録媒体は、図12に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク71、光ディスク72、光磁気ディスク73、若しくは半導体メモリ74などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM62や、記憶部68に含まれるハードディスクなどで構成される。
なお、本明細書において、フローチャートに記載された処理は、ステップとして記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
11 ビデオカメラ, 12 送信側端末, 13 IPネットワーク, 14 受信側端末, 15 ディスプレイ, 16 スピーカ, 21 エンコーダ, 22 バッファ, 23 RTPパケット作成部, 24 RTP出力ポート, 25, 26 RTCP入出力ポート, 27 RTCPパケット解析部, 28 ARQ処理部, 29 RTCPパケット作成部, 31 通信部, 32 RTP入力ポート, 33 RTPパケット解析部, 34 バッファ, 35 インデックスリスト, 36 デコーダ, 37 ARQ処理部, 38 パケット損失検出部, 39 NACKパケット送信数決定部, 40 RTCPパケット作成部, 41 RTCP入出力ポート, 42 RTCPパケット解析部, 51 IPネットワーク, 52 通信部, 53 ARQ解析部, 54通信部, 55 NACKパケット優先度決定部, 61 CPU, 62 ROM, 63 RAM, 64 内部バス, 65 入出力インターフェース, 66 入力部, 67 出力部, 68 記憶部, 71 磁気ディスク, 72 光ディスク, 73 光磁気ディスク, 74 半導体メモリ