図1はビデオ通信システム5の全体的な構成の例を示す図、図2は映像配信サーバ1のハードウェア構成の例を示す図、図3は映像配信サーバ1の機能的構成の例を示す図、図4はクライアント2のハードウェア構成の例を示す図、図5はクライアント2の機能的構成の例を示す図である。
図1において、ビデオ通信システム5は、ビデオカメラ61によって撮影された映像のデータを、Transmission Control Protocol/Internet Protocol(TCP/IP)によって通信するためのシステムである。
ビデオ通信システム5には、映像配信サーバ1、クライアント2、および複数台のスイッチ3A、3B、3C、…などが含まれる。以下、スイッチ3A、3B、3C、…を「スイッチ3」と総称することがある。
スイッチ3は、スイッチングハブなどのレイヤIIスイッチである。これらのスイッチ3は、複数のグループに分けられている。そして、グループごとにVirtual Local Area Network(VLAN)を形成している。1台のスイッチ3が複数のグループに所属することは、ない。本実施形態では、スイッチ3A、3Cが第一のグループに分けられ、スイッチ3B、3Dが第二のグループに分けられている。そして、スイッチ3A、3Cが第一のVLAN41を形成し、スイッチ3B、3Dが第二のVLAN42を形成している。
スイッチ3は、後述するVLANタグが付いたMACフレームを受信した場合は、そのVLANタグに示されるVLANに所属する他の装置へそのMACフレームを転送する。よって、例えば、第一のVLAN41がVLANタグに示されるMACフレームは、第一のVLAN41に所属する装置間だけでやり取りされる。
映像配信サーバ1とクライアント2とは、第一のVLAN41によっても第二のVLAN42によっても接続可能である。つまり、映像配信サーバ1およびクライアント2は、第一のVLAN41にも第二のVLAN42にも所属しており、両装置の間の通信回線は、二重化されている。
映像配信サーバ1は、ビデオカメラ61によって撮影された映像のデータをクライアント2へストリーミングによって配信する。
映像配信サーバ1は、図2に示すように、制御装置10a、Random Access Memory(RAM)10b、Read Only Memory(ROM)10c、ハードディスク10d、グラフィックボード10e、入出力インタフェース10f、および2枚のNetwork Interface Card(NIC)10gなどを有する。
グラフィックボード10eは、制御装置10aからの指令に基づいて描画を行い、ディスプレイに画像を出力する。
入出力インタフェース10fは、ビデオカメラ61、キーボード、またはマウスなどを映像配信サーバ1に繋ぐためのインタフェースである。入出力インタフェース10fとして、Universal Serial Bus(USB)が用いられる。ビデオカメラ61を繋ぐための入出力インタフェース10fとして、Institute of Electrical and Electronics Engineers(IEEE)1394またはHigh-Definition Multimedia Interface(HDMI)などを用いてもよい。キーボードおよびマウスを繋ぐためのインタフェースとして、PS/2ポートを用いてもよい。
NIC10gは、いわゆるLocal Area Network(LAN)カードであって、TCP/IPによってクライアント2と通信を行うために用いられる。2枚のNIC10gのうちの一方は、第一のVLAN41を形成するいずれかのスイッチ3に繋がれている。もう一方のNIC10gは、第二のVLAN42を形成するいずれかのスイッチ3に繋がれている。以下、第一のVLAN41に繋がれるNIC10gおよび第二のVLAN42に繋がれるNIC10gをそれぞれ「第一のNIC10g1」および「第二のNIC10g2」と区別して記載することがある。
ROM10cまたはハードディスク10dには、図3に示す映像データ分割部101、フレームバッファ102、TCP/IP処理部103、コピー処理部104、Media Access Control(MAC)処理部105、および廃棄処理部106などを実現するためのプログラムが記憶されている。これらのプログラムは、必要に応じて呼び出され、RAM10bに記憶される。
制御装置10aは、Central Processing Unit(CPU)またはMicro Processing Unit(MPU)などであって、RAM10bまたはROM10cに記憶されているプログラムを実行する。なお、制御装置10aがMPUである場合は、RAM10bおよびROM10cが制御装置10aに一体的に組み込まれていることがある。
映像配信サーバ1として、いわゆるサーバ機が用いられる。また、ビデオカメラ61として、デジタルビデオカメラが用いられる。
図1に戻って、クライアント2は、図4に示すように、制御装置20a、RAM20b、ROM20c、ハードディスク20d、グラフィックボード20e、入出力インタフェース20f、および2枚のNIC20gなどを有する。
グラフィックボード20eは、制御装置20aからの指令に基づいて描画を行い、クライアント2に繋がれているディスプレイ62に画像を出力する。
入出力インタフェース20fは、キーボードまたはマウスなどをクライアント2に繋ぐためのインタフェースである。
NIC20gは、いわゆるLANカードであって、映像配信サーバ1と通信を行うために用いられる。2枚のNIC20gのうちの一方は、第一のVLAN41を形成するいずれかのスイッチ3に繋がれている。もう一方のNIC20gは、第二のVLAN42を形成するいずれかのスイッチ3に繋がれている。以下、第一のVLAN41に繋がれるNIC20gおよび第二のVLAN42に繋がれるNIC20gをそれぞれ「第一のNIC20g1」および「第二のNIC20g2」と区別して記載することがある。
ROM20cまたはハードディスク20dには、図5に示す映像再生処理部201、フレームバッファ202、TCP/IP処理部203、コピー処理部204、MAC処理部205、および廃棄処理部206などを実現するためのプログラムが記憶されている。これらのプログラムは、必要に応じて呼び出され、RAM20bに記憶される。
制御装置20aは、CPUまたはMPUなどであって、RAM20bまたはROM20cに記憶されているプログラムを実行する。
クライアント2として、パーソナルコンピュータまたはセットトップボックスなどが用いられる。
次に、図3に示す映像配信サーバ1の各部および図5に示すクライアント2の各部の処理について説明する。
〔各部の処理の概要〕
図3において、ビデオカメラ61によって撮影された映像(動画像)の電子データである映像データ70は、リアルタイムで映像配信サーバ1に次々に入力される。
映像データ分割部101は、ビデオカメラ61から入力された映像データ70を次々に分割することによって、フレームデータ7Aを生成する。
フレームバッファ102は、映像データ分割部101によって生成されたフレームデータ7Aを一時的に記憶する。
TCP/IP処理部103は、パケット化処理部131およびパケット再送処理部132を有し、TCP/IPのパケットに関する処理を行う。
パケット化処理部131は、フレームバッファ102に記憶されているフレームデータ7AにIPヘッダを付すなどしてパケット7Pを生成する。パケット再送処理部132については、後述する。
コピー処理部104は、パケット化処理部131によって生成されたパケット7Pを、映像配信サーバ1が接続されるVLANの数になるようにコピー(複製)する。本実施形態では、第一のVLAN41および第二のVLAN42つまり2つのVLANが映像配信サーバ1に接続されているので、同一のパケット7Pを、2つにコピーする。
MAC処理部105は、MACフレーム化処理部151およびパケット抽出部152を有し、MACフレームに関する処理を行う。
MACフレーム化処理部151は、各パケット7PにMACヘッダなどを付すことによってMACフレーム7Fを生成する。具体的には、2つの同一のパケット7Pのうち、一方には第一のNIC10g1に応じたMACヘッダなどを付すことによって、MACフレーム7Fを生成する。もう一方には第二のNIC10g2に応じたMACヘッダなどを付すことによって、MACフレーム7Fを生成する。これにより、同一のパケット7Pを載せたMACフレーム7Fが2つ生成される。
そして、一方のMACフレーム7Fは第一のNIC10g1によって第一のVLAN41を介してクライアント2へ送信される。もう一方のMACフレーム7Fは第二のNIC10g2によって第二のVLAN42を介してクライアント2へ送信される。パケット抽出部152および廃棄処理部106については、後述する。
図5において、クライアント2の廃棄処理部206は、映像配信サーバ1から受信したMACフレーム7Fのうち不要なものを廃棄する処理を行う。クライアント2は、同一のパケット7Pを載せたMACフレーム7Fを複数、映像配信サーバ1から受信することがある。そこで、廃棄処理部206は、それらのMACフレーム7Fのうちの1つのみを受け入れ、残りを廃棄する。
MAC処理部205は、MACフレーム化処理部251およびパケット抽出部252を有し、MACフレームに関する処理を行う。
パケット抽出部252は、受信されたMACフレーム7Fからパケット7Pを抽出する。MACフレーム化処理部251については、後述する。
TCP/IP処理部203は、確認応答処理部231およびフレームデータ抽出部232を有し、TCP/IPのパケットに関する処理を行う。
フレームデータ抽出部232は、パケット抽出部252によって抽出されたパケット7Pからフレームデータ7Aを抽出する。抽出されたフレームデータ7Aは、フレームバッファ202に一時的に記憶される。
確認応答処理部231は、パケット7Pが受信されるごとに、受信が成功したことを示すパケット8Pを生成する。
映像再生処理部201は、フレームバッファ202に記憶されたフレームデータ7Aを組み立てることによって映像データ70を再現し、映像信号を生成しディスプレイ62に出力する。これにより、ビデオカメラ61で撮影された映像がディスプレイ62において再生される。
コピー処理部204は、パケット8Pが生成されるごとに、そのパケット8Pを、クライアント2が接続されるVLANの数になるようにコピー(複製)する。つまり、同一のパケット8Pを、2つにコピーする。
MACフレーム化処理部251は、各パケット8PにMACヘッダなどを付すことによってMACフレーム8Fを生成する。具体的には、2つの同一のパケット8Pのうち、一方には第一のNIC20g1に応じたMACヘッダなどを付すことによって、MACフレーム8Fを生成する。もう一方には第二のNIC20g2に応じたMACヘッダなどを付すことによって、MACフレーム8Fを生成する。これにより、同一のパケット8Pを載せたMACフレーム8Fが2つ生成される。
そして、一方のMACフレーム8Fは第一のVLAN41を介して映像配信サーバ1へ送信され、もう一方のMACフレーム8Fは第二のVLAN42を介して映像配信サーバ1へ送信される。
図3において、映像配信サーバ1の廃棄処理部106は、クライアント2から送信されてきたMACフレーム8Fのうち不要なものを廃棄する処理を行う。映像配信サーバ1は、同一のパケット8Pを載せたMACフレーム8Fを複数、クライアント2から受信することがある。廃棄処理部106は、同一のパケット8Pを含むMACフレームのうちの1つのみを受け入れ、残りを廃棄する。
パケット抽出部152は、MACフレーム8Fからパケット8Pを抽出する。パケット再送処理部132は、パケット8P(つまり応答の確認)が得られないパケット7Pを、クライアント2へ再送するために、コピー処理部104に渡す。コピー処理部104、MAC処理部105、およびNIC10gは、上述と同様の方法で、そのパケット7Pを2つにコピーし、それぞれをMACフレーム7Fに変換し、一方を第一のVLAN41を介して再送しもう一方を第二のVLAN42を介して再送する。
〔各部の詳細な処理内容〕
図6は映像データのパケット化およびMACフレーム化の手順の例を説明するための図、図7および図8はパケットロスがない場合の映像配信サーバ1およびクライアント2の処理の流れの例を示すシーケンス図である。
映像配信サーバ1の各部およびクライアント2の各部の上記の処理の仕組みを詳細に説明する。
図6、図7、および図8において、ビデオカメラ61による撮影が開始すると、映像配信サーバ1に映像データ70が次々に入力される。映像データ分割部101は、映像データ70を分割してフレームデータ7Aを生成しフレームバッファ102に蓄積する。TCP/IP処理部103は、フレームデータ7Aを、早い時刻のものから順にMACフレーム7Fに変換(パケット化)し、コピー処理部104へ送る。
パケット7Pには、図6に示すように、IPヘッダおよびTCPデータ部が含まれる。IPヘッダには、クライアント2のIPアドレスが宛先アドレスとして示される。そのほか、IPヘッダには、パケット7Pのバケット長(LENGTH)が示される。
TCPデータ部には、フレームデータ7Aが含まれる。さらに、確認応答番号(以下、「ACK番号」と記載する。)およびシーケンス番号(以下、「SEQ番号」と記載する。)が含まれる。1つ目のフレームデータ7Aを含むパケット7PのSEQ番号は「1」である。また、フレームデータ7Aを含むパケット7PのACK番号は、何番目のフレームデータ7Aを含むのかに関わらず「1」である。
1つ目のパケット7PがTCP/IP処理部103によって生成されコピー処理部104へ送られると(図7の#301)、コピー処理部104は、パケット7Pを2つにコピーする。MAC処理部105は、2つのパケット7Pを次のようにMACフレーム7Fに変換する。
MAC処理部105は、一方のパケット7Pを、MACヘッダ、VLANタグ、およびFrame Check Sequence(FCS)を付すことによって、MACフレーム7Fに変換する。MACヘッダには、第一のNIC10g1のMACアドレスが送信元アドレスとして示される。VLANタグには、第一のVLAN41を識別する番号(VLAN番号)が示される。
また、MAC処理部105は、もう一方のパケット7Pも同様に、MACヘッダ、VLANタグ、およびFCSを付すことによって、MACフレーム7Fに変換する。ただし、MACヘッダには、第二のNIC10g2のMACアドレスが送信元アドレスとして示される。VLANタグには、第二のVLAN42のVLAN番号が示される。
以下、第一のNIC10g1のMACアドレスを示すMACヘッダを含むMACフレーム7Fを「第一のMACフレーム7F1」と記載し、第二のNIC10g2のMACアドレスを示すMACヘッダを含むMACフレーム7Fを「第二のMACフレーム7F2」と記載することがある。
第一のNIC10g1は、第一のMACフレーム7F1を、第一のVLAN41を介してクライアント2へ送信し、第二のNIC10g2は、第二のMACフレーム7F2を、第二のVLAN42を介してクライアント2へ送信する(#302)。
クライアント2の第一のNIC20g1は第一のMACフレーム7F1を受信し、第二のNIC20g2は第二のMACフレーム7F2を受信する。
廃棄処理部206は、1つ目のパケット7Pを含む第一のMACフレーム7F1および第二のMACフレーム7F2のうち、最も早く到着したほうを受け入れ(#303)、それ以外を破棄する(#304)。図7の例では、第一のMACフレーム7F1が最も早く到着しているので、第一のMACフレーム7F1を受け入れ、第二のMACフレーム7F2を破棄する。
MAC処理部205は、受け入れられたMACフレーム7Fつまり第一のMACフレーム7F1からパケット7Pを抽出する。TCP/IP処理部203は、パケット7Pからフレームデータ7Aを抽出しフレームバッファ202に記憶させ、そのパケット7Pの受信の確認を意味するパケット8Pを生成しコピー処理部204へ送る(#305)。
パケット8Pは、パケット7Pと同様に、IPヘッダおよびTCPデータ部が含まれる。ただし、IPヘッダおよびTCPデータ部の内容は、次の通りである。
IPヘッダには、映像配信サーバ1のIPアドレスが宛先アドレスとして示される。SEQ番号は、常に「1」である。ACK番号は、次に受信されるはずのパケット7PのSEQ番号と同じであって、後述するRCV.NXT番号とも同じである。
パケット8PがTCP/IP処理部203によって生成されコピー処理部204へ送られると(#305)、コピー処理部204は、パケット8Pを2つにコピーする。MAC処理部205は、2つのパケット8Pを次のようにMACフレーム8Fに変換する。
MAC処理部205は、一方のパケット8Pを、MACヘッダ、VLANタグ、およびFCSを付すことによって、MACフレーム8Fに変換する。MACヘッダには、第一のNIC20g1のMACアドレスが送信元アドレスとして示される。VLANタグには、第一のVLAN41のVLAN番号が示される。
また、MAC処理部205は、もう一方のパケット8Pも同様に、MACヘッダ、VLANタグ、およびFCSを付すことによって、MACフレーム8Fに変換する。ただし、MACヘッダには、第二のNIC20g2のMACアドレスが送信元アドレスとして示される。VLANタグには、第二のVLAN42のVLAN番号が示される。
以下、第一のNIC20g1のMACアドレスを示すMACヘッダを含むMACフレーム8Fを「第一のMACフレーム8F1」と記載し、第二のNIC20g2のMACアドレスを示すMACヘッダを含むMACフレーム8Fを「第二のMACフレーム8F2」と記載することがある。
第一のNIC20g1は、第一のMACフレーム8F1を、第一のVLAN41を介して映像配信サーバ1へ送信すし、第二のNIC20g2は、第二のMACフレーム8F2を、第二のVLAN42を介して映像配信サーバ1へ送信する(#306)。
映像配信サーバ1の第一のNIC10g1は第一のMACフレーム8F1を受信し、第二のNIC10g2は第二のMACフレーム8F2を受信する。
廃棄処理部106は、第一のMACフレーム8F1および第二のMACフレーム8F2のうち、最も早く到着したほうを受け入れ(#307)、それ以外を破棄する(#308)。図7の例では、第一のMACフレーム8F1が最も早く到着しているので、第一のMACフレーム8F1を受け入れ、第二のMACフレーム8F2を破棄する。
1つ目の第一のMACフレーム8F1がクライアント2によって受信されれば、2つ目以降の第一のMACフレーム8F1が欠損(ロス)しない限り、2つ目以降の各フレームおよび各パケットは、ステップ#301〜#308と同様に処理される。
ところで、映像配信サーバ1は、管理テーブル7TLを有する。クライアント2は、管理テーブル8TLおよび管理テーブル8TMを有する。これらのテーブルは、MACフレーム7F、8Fを受け入れるか破棄するかを判別するために用いられる。
映像配信サーバ1の管理テーブル7TLには、「SND.NXT」、「SND.UNA」、および「RCV.NXT」の3つの番号を示すデータが含まれている。
管理テーブル7TLにおいて、SND.NXT番号は、次にクライアント2へ送信するパケット7PのSEQ番号を示す。初期値は、1つ目のパケット7PのSEQ番号つまり「1」である。1つ目のパケット7Pがコピー処理部104に渡されると、SND.NXT番号は、次のパケット7PのSEQ番号に更新される。
SND.UNA番号は、クライアント2から直前に送信されてきたパケット8Pに示されるACK番号である。よって、原則として、パケット8Pが受信されるごとに更新される。
RCV.NXT番号は、次にクライアント2から受信するはずのパケット8PのSEQ番号である。パケット8PのSEQ番号は常に「1」であるので、RCV.NXT番号も常に「1」である。
クライアント2の管理テーブル8TLには、「SND.NXT」、「SND.UNA」、および「RCV.NXT」の3つの番号を示すデータが含まれている。管理テーブル8TMには、「VLAN」、「LAST_SEQ」、および「SEQ_VALID」の3つの番号を示すデータが含まれている。
管理テーブル8TLにおいて、SND.NXT番号は、次に映像配信サーバ1へ送信するパケット8PのSEQ番号を示す。パケット8PのSEQ番号は常に「1」であるので、SND.NXT番号も常に「1」である。
SND.UNA番号は、映像配信サーバ1から直前に送信されてきたパケット7Pに示されるACK番号である。パケット7PのACK番号は常に「1」であるので、SND.UNA番号も常に「1」である。
RCV.NXT番号は、次に映像配信サーバ1から受信するはずのパケット7PのSEQ番号である。RCV.NXT番号の初期値は「1」である。パケット7Pが送信されてくるごとに、RCV.NXT番号に、そのパケット7PのLENGTHの値が加算される。
管理テーブル8TMにおいて、通過VLAN番号は、廃棄処理部206によって直近に受け入れられた(廃棄処理部206を通過した)MACフレーム7Fが通ったVLANのVLAN番号である。ただし、初期値は「0」である。
LAST_SEQ番号は、RCV.NXT番号よりも大きいSEQ番号のパケット7P(つまり、次に受信されると予測していたパケット7P以外のパケット7P)を受信した場合に用いられる。具体的には、LAST_SEQ番号は、そのようなパケット7Pが受信された場合に、そのパケット7PのSEQ番号とLENGTHの値との和に更新される。初期値は「0」である。
SEQ_VALID番号は、RCV.NXT番号と同じ値のSEQ番号のパケット7Pが受信されたか否かを表わす。具体的には、SEQ_VALID番号は、そのようなパケット7Pが受信された場合は「0」に更新され、LAST_SEQ番号が更新された場合は「1」に更新される。初期値は「0」である。
図9は送信処理の流れの例を説明するフローチャート、図10はクライアント2における受入廃棄処理の流れの例を説明するフローチャート、図11はクライアント2における廃棄処理部206の処理の例を説明するための図、図12は映像配信サーバ1における受入廃棄処理の流れの例を説明するフローチャート、図13は映像配信サーバ1における廃棄処理部106の処理の例を説明するための図、図14および図15はパケットロスがあった場合の映像配信サーバ1およびクライアント2の処理の流れの例を示すシーケンス図である。
ここで、図9のフローチャートなどを参照しながら、MACフレーム7F、8Fを送信する処理およびその際のテーブルの更新の処理を説明する。さらに、受信されたMACフレーム7F、8Fを受け入れまたは廃棄する処理およびその際のテーブルの更新の処理を説明する。
図9において、映像配信サーバ1のコピー処理部104は、パケット7PがTCP/IP処理部103によって生成されるごとに、VLANの数に合わせてパケット7Pをコピーする(#401)。MAC処理部105は、各パケット7PにVLANタグ、MACヘッダ、およびFCSを付与することによって第一のMACフレーム8F1および第二のMACフレーム8F2を生成する(#402、#403)。第一のNIC10g1は、第一のMACフレーム8F1を、第一のVLAN41介してクライアント2へ送信し、第二のNIC10g2は、第二のMACフレーム8F2を、第二のVLAN42を介してクライアント2へ送信する(#404)。
そして、管理テーブル7TLのSND.NXT番号が、送信したパケット7PのSEQ番号とLENGTHの値との和に更新される(#405)。
図10および図11において、クライアント2の廃棄処理部206は、MACフレーム7Fが届くと、そのMACフレーム7FからSEQ番号、VLAN番号、およびLENGTHを抽出する(#501)。さらに、管理テーブル8TLからRCV.NXT番号を抽出し、管理テーブル8TMからLAST_SEQ番号、通過VLAN番号、およびSEQ_VALIDを抽出する(#502)。
抽出したVLAN番号と通過VLAN番号とを比較し、両者が一致しない場合は(#503でNo)、廃棄処理部206は、そのMACフレーム7Fを廃棄する(#505)。一致する場合は(#503でYes)、さらに、以下の条件を満たすか否かによってMACフレーム7Fを廃棄するか否かを判別する。ただし、通過VLAN番号が「0」である場合は、VLAN番号と通過VLAN番号とが一致した場合と同様に取り扱う(#503でYes)。
抽出したRCV.NXT番号とSEQ番号とを比較し、RCV.NXT番号がSEQ番号よりも大きい場合は(#504でNo)、MACフレーム7Fを廃棄する(#505)。
RCV.NXT番号がSEQ番号未満である場合は(#504でYesかつ#506でNo)、受信したMACフレーム7Fを受け入れる(#511)。これにより、そのMACフレーム7Fに含まれるパケット7Pが廃棄処理部206を通過する。この際に、管理テーブル8TL、8TMの各データを次のように更新する(#507)。SEQ_VALID番号を「1」に更新する。LAST_SEQ番号を、抽出したSEQ番号とLENGTHとの和に更新する。通過VLAN番号を、抽出したVLAN番号に更新する。
RCV.NXT番号とSEQ番号とが一致する場合は(#504でYesかつ#506でYes)、MACフレーム7Fを受け入れる(#511)。この際に、抽出したSEQ_VALID番号に応じて、管理テーブル8TL、8TMの各データを次のように更新する。
SEQ_VALID番号が「0」である場合は(#508でYes)、RCV.NXT番号を、抽出したSEQ番号とLENGTHとの和に更新するとともに、通過VLAN番号を、抽出したVLAN番号に更新する(#509)。SEQ_VALID番号が「1」である場合は(#508でNo)、SEQ_VALID番号を「0」に更新し、RCV.NXT番号を、抽出したLAST_SEQ番号に更新し、通過VLAN番号を、抽出したVLAN番号に更新する(#510)。
クライアント2は、上述の通り、パケット7Pを受信すると、映像配信サーバ1へパケット8Pを送信することによってその旨を通知する。パケット8Pを映像配信サーバ1へ送信する手順は、パケット7Pをクライアント2へ送信する手順と基本的に同様であり、図9に示した通りである。つまり、同一のパケット7Pを、2つのMACフレーム8Fに載せて、映像配信サーバ1へ送信する。ただし、ステップ#405において、管理テーブル8TLのSND.NXT番号の更新は行わない。上述の通り、パケット8PのSEQ番号は常に「1」だからである。
図12および図13において、映像配信サーバ1の廃棄処理部106は、MACフレーム8Fが届くと、そのMACフレーム8FからACK番号を抽出する(#521)。さらに、管理テーブル7TLからSND.UNA番号を抽出する(#522)。
廃棄処理部106は、抽出したACK番号とSND.UNA番号とを比較し、ACK番号がSND.UNA番号以下である場合は(#523でNo)、受信したMACフレーム8Fを受け入れる(#525)。これにより、そのMACフレーム8Fに含まれるパケット8Pが廃棄処理部106を通過する。この際に、管理テーブル7TLのACK番号を、抽出したSND.UNA番号に更新する(#524)。
一方、ACK番号がSND.UNA番号よりも大きい場合は(#523でYes)、受信したMACフレーム8Fを廃棄する(#526)。
図9〜図13で説明した処理を映像配信サーバ1およびクライアント2が適宜実行すると、パケットロスが発生しなければ、前に図7および図8で説明した通りに各パケットおよび各MACフレームが両装置間でやり取りされ、図7および図8に示すように管理テーブル7TL、8TL、8TMに含まれる各データの値が遷移する。
MACフレーム7Fがクライアント2に届かずそのMACフレーム7Fに含まれるパケット7Pが欠損した場合は、映像配信サーバ1は、そのMACフレーム7Fをクライアント2へ再送する。例えば、管理テーブル8TLに含まれる通過VLAN番号が「1」に決まった後、2つ目のパケット7Pを載せた第一のMACフレーム7F1がクライアント2に届かなかった場合は、図14および図15に示す手順で処理が行われる。
図14において、太い点線で示すように、2つ目のパケット7Pを載せた第一のMACフレーム7F1が第一のVLAN41の中で失われ、3つ目のパケット7Pを載せた第一のMACフレーム7F1がクライアント2に届く。届いた第一のMACフレーム7F1は、RCV.NXT番号と一致しないSEQ番号を有するので、次に届くと予測していた第一のMACフレーム7F1とは異なる。
そこで、クライアント2は、図10の#507で説明した通り、RCV.NXT番号を更新せず、前回のパケット8Pの返信と同様に、SEQ番号が「101」のパケット8Pを乗せたMACフレーム8Fを映像配信サーバ1へ返信する。その次も2つ目のパケット7Pを載せた第一のMACフレーム7F1は届かないので、クライアント2は、RCV.NXT番号を更新せず、SEQ番号が「101」のパケット8Pを乗せたMACフレーム8Fを映像配信サーバ1へ返信する。
したがって、映像配信サーバ1は、同一のSEQ番号を有するパケット8Pを複数受信する。映像配信サーバ1は、所定の回数(本例では、3回)連続して同一のSEQ番号を有するパケット8Pを受信すると、図15において太い点線で示すように、そのSEQ番号を有するパケット7Pをクライアント2へ再送信する。
図16は映像配信サーバ1の全体的な処理の流れの例を説明するフローチャート、図17はクライアント2の全体的な処理の流れの例を説明するフローチャートである。
次に、映像配信サーバ1およびクライアント2の全体的な処理の流れを、図16および図17のフローチャートを参照しながら説明する。
図16において、映像配信サーバ1は、ビデオカメラ61から入力された映像データ70のフレームデータ7Aがフレームバッファ102に溜まっていると(#11でYes)、そのフレームデータ7Aをパケット7Pに変換し、さらにそれをMACフレーム7Fに変換し、クライアント2へ送信する(#12)。送信の処理の手順は、前に図9で説明した通りである。
または、映像配信サーバ1は、MACフレーム8Fを受信すると(#13でYes)、図12で説明した手順で、それを受け入れまたは廃棄する(#14)。
所定の回数(例えば、3回)以上連続して同一のACK番号を示すパケット8Pを含むMACフレーム8Fを受け入れた場合は(#15でYes)、映像配信サーバ1は、そのACK番号と同じSEQ番号のパケット7Pをもう一度送信する(#16)。送信の処理の手順は、前に図9で説明した通りである。
映像配信サーバ1は、ビデオカメラ61による撮影およびクライアント2との通信が終了するまで、パケット7Pの送信および再送信の処理を適時実行する。
図17において、クライアント2は、MACフレーム7Fを受信すると(#21でYes)、図10で説明した手順で、それを受け入れまたは廃棄する(#22)。
MACフレーム7Fを受け入れた場合は(#23でYes)、それに含まれるパケット7Pの確認応答のためのパケット8Pを映像配信サーバ1へ送信する(#24)。
フレームバッファ202にフレームデータ7Aが格納されている場合は(#25でYes)、映像データ70を再現しディスプレイ62に映像の信号を出力する(#26)。
クライアント2は、映像配信サーバ1との通信が終了し未処理のフレームデータ7Aがなくなるまで、ステップ#22、#24、および#26の処理を適宜実行する。
映像配信サーバ1およびクライアント2は、MACフレームを一方のVLANからは受信できるが他方のVLANからは受信できない場合は、管理テーブルの通過VLAN番号を「0」にリセットすればよい。
本実施形態によると、映像配信サーバ1からクライアント2へ従来よりも確実に映像のデータを送ることができる。
〔変形例〕
図18は映像配信サーバ1における廃棄処理部106の処理の変形例を説明するための図、図19は映像配信サーバ1における受入廃棄処理の流れの変形例を説明するフローチャート、図20はレコード削除処理の流れの例を説明するフローチャート、図21はクライアント2における廃棄処理部206の処理の変形例を説明するための図、図22はクライアント2における受入廃棄処理の流れの変形例を説明するフローチャートである。
本実施形態では、映像配信サーバ1は、クライアント2から送信されてきたMACフレーム8Fを受け入れるか廃棄するかを、図12および図13に示した方法で判別した。また、クライアント2は、映像配信サーバ1から送信されてきたMACフレーム7Fを受け入れるか廃棄するかを、図10および図11に示した方法で判別した。これらの方法の代わりに、次の方法を用いてもよい。
映像配信サーバ1に、図18に示すような管理テーブル7TNを用意しておく。クライアント2との通信を開始する前は、管理テーブル7TNにはレコードは1つも格納されていない。
廃棄処理部106は、MACフレーム8Fを受信すると、そのMACフレーム8FからACK番号、VLAN番号、およびLENGTHを抽出するとともに(図19の#601)、現在のSND.UNA番号に対応するレコードを管理テーブル7TNの中から検索する(#602)。
抽出したACK番号と現在のSND.UNA番号とが一致しない場合は(#603でYes)、現在のSND.UNA番号に対応するレコードが未だ管理テーブル7TNに存在しないので、廃棄処理部106は、それを生成し管理テーブル7TNに追加する(#604)。このレコードには、映像配信サーバ1とクライアント2とを接続するVLANごとのカウンタが含まれている。図18には、3つのVLANが用いられている場合つまり通信回線が三重化されている場合の管理テーブル7TNの例を示している。そして、廃棄処理部106は、そのMACフレーム8Fを受け入れ(#605)、そのレコードの中の、抽出したVLAN番号のVLANに対応するカウンタに「1」を加算する(#606)。
抽出したACK番号と現在のSND.UNA番号とが一致する場合は(#603でNo)、既に現在のSND.UNA番号に対応するレコードが管理テーブル7TNに存在する。廃棄処理部106は、抽出したVLAN番号のVLANに対応するカウンタの値が1以上であれば(#610でYes)、そのMACフレーム8Fを受け入れ(#611)、0であれば(#610でNo)、そのMACフレーム8Fを破棄する(#613)。受け入れるのは、パケット7Pの再送信の判断のためである。受け入れた場合は、廃棄処理部106は、そのレコードの中の、抽出したVLAN番号のVLANに対応するカウンタに「1」を加算する(#612)。
なお、レコードを生成したら、廃棄処理部106は、エージングタイマを稼働させ(図20の#615)、所定の時間が経過したら(#616)、そのレコードを管理テーブル7TNから削除する(#617)。
一方、クライアント2には、図21に示すような管理テーブル8TNを用意しておく。映像配信サーバ1との通信を開始する前は、管理テーブル8TNにはレコードは1つも格納されていない。
廃棄処理部206は、MACフレーム7Fを受信すると、そのMACフレーム7FからSEQ番号、VLAN番号、およびLENGTHを抽出するとともに(図22の#621)、SUQ_NUMが、抽出したSEQ番号とLENGTHとの和(以下、「SUM」と記載する。)と同じ値であるレコードを、管理テーブル8TNの中から検索する(#622)。
SUMがいずれのSEQ_NUMとも一致しない場合は(#623でNo)、現在のSUMと一致するSEQ_NUMに対応するレコードが未だ管理テーブル8TNに存在しないので、廃棄処理部106は、それを生成し管理テーブル8TNに追加する(#624)。このレコードには、映像配信サーバ1とクライアント2とを接続するVLANごとのカウンタが含まれている。図21には、3つのVLANが用いられている場合の管理テーブル8TNの例を示している。そして、廃棄処理部206は、そのMACフレーム7Fを受け入れ(#625)、そのレコードの中の、抽出したVLAN番号のVLANに対応するカウンタに「1」を加算する(#626)。
SUMといずれかのSEQ_NUMとが一致する場合は(#623でYes)、既にSUMと同じ値のSEQ_NUMに対応するレコードが管理テーブル8TNに存在する。廃棄処理部206は、抽出したVLAN番号のVLANに対応するカウンタの値が1以上であれば(#627でYes)、そのMACフレーム7Fを受け入れ(#628)、0であれば(#627でNo)、そのMACフレーム7Fを破棄する(#630)。受け入れるのは、パケット8Pの再送信の判断のためである。受け入れた場合は、廃棄処理部206は、そのレコードの中の、抽出したVLAN番号のVLANに対応するカウンタに「1」を加算する(#629)。
なお、レコードを生成したら、廃棄処理部206は、エージングタイマを稼働させ(図20の#615)、所定の時間が経過したら(#616)、そのレコードを管理テーブル8TNから削除する(#617)。
本実施形態では、ビデオカメラ61で撮影した映像をリアルタイムでクライアント2へ送信したが、本発明は、マイクで集音した音声を単独でまたは映像とともにリアルタイムでクライアント2へ送信する場合にも、適用可能である。また、オンデマンドで送信する場合にも、適用可能である。
その他、ビデオ通信システム5、映像配信サーバ1、クライアント2、スイッチ3の全体または各部の構成、処理内容、処理順序、テーブルの構成などは、本発明の趣旨に沿って適宜変更することができる。
上に述べた実施例には、以下に述べるような付記も開示されている。
(付記1)
複数のスイッチを含む第一のネットワーク、第一の装置、および第二の装置を有する通信システムであって、
前記複数のスイッチは複数のグループに分けられており、当該グループごとに第二のネットワークが形成されており、
前記第一の装置は、前記第二の装置に宛てたパケットを前記各第二のネットワークのそれぞれへ送出するパケット送出手段を有し、
前記第二の装置は、同一のパケットが前記第一の装置から複数届いた場合に1つを受け入れ残りを廃棄する受入廃棄手段を有する、
通信システム。
(付記2)
前記スイッチは、前記第一の装置から送出されたパケットを、当該スイッチが属する前記第二のネットワークに属する他のスイッチまたは前記第二の装置へのみ転送する、
付記1記載の通信システム。
(付記3)
複数のスイッチを有し、当該複数のスイッチが複数のグループに分けられており、かつ当該グループごとに第二のネットワークが形成されている第一のネットワークを介して、送信装置からパケットを受信する受信装置であって、
同一のパケットが前記第一の装置から複数届いた場合に1つを受け入れ残りを廃棄する受入廃棄手段を有する、
受信装置。
(付記4)
複数のスイッチを有し、当該複数のスイッチが複数のグループに分けられており、かつ当該グループごとに第二のネットワークが形成されている第一のネットワークを介して、受信装置へパケットを送信する送信装置であって、
前記受信装置に宛てたパケットを前記各第二のネットワークのそれぞれへ送出するパケット送出手段を有する、
送信装置。
(付記5)
前記受信装置は、次に当該送信装置から届くと予測される未受信のパケットの識別情報を当該送信手段へ送信する手段を有しており、
前記パケット送出手段は、前記受信装置から同一の前記識別情報が同一の前記第二のネットワークを介して所定の複数回以上届いた場合は、当該識別情報に係るパケットをもう一度送信する、
付記4記載の送信装置。
(付記6)
複数のスイッチを有する第一のネットワークを介して第一の装置から第二の装置へのパケットのやり取りを行う通信方法であって、
前記複数のスイッチを複数のグループに分け、当該グループごとに第二のネットワークを形成しておき、
前記第一の装置および前記第二の装置を前記各第二のネットワークへ繋げておき、
前記第一の装置に、前記第二の装置に宛てたパケットを前記各第二のネットワークのそれぞれへ送出する処理を実行させ、
前記第二の装置に、同一のパケットが前記第一の装置から複数届いた場合に、1つを受け入れ残りを廃棄する処理を実行させる、
通信方法。
(付記7)
前記スイッチは、前記第一の装置から送出されたパケットを、当該スイッチが属する前記第二のネットワークに属する他のスイッチまたは前記第二の装置へのみ転送する、
付記6記載の通信方法。