図1は、本発明の実施の形態による通話システムのネットワーク構成図を示している。図1に示す通話システムは、送信装置1及び受信装置2を備えている。送信装置1及び受信装置2は、IPネットワークを介して接続されている。ここで、IPネットワークは、インターネットプロトコル技術を利用して相互接続されたネットワークであり、TCP(Transmission Control Protocol)/IP(Internet Protocol)の通信プロトコルを用いて、種々のデータが送受信される。
送信装置1は、例えば、VoIP(Voice over Internet Protocol)による通話機能を備える通信装置であり、SIP(Session Initiation Protocol)、H.323、IPv4、又はIPv6等の通信プロトコルを用いて受信装置2との間で通信を行う。そして、送信装置1は、音声及び映像をストリーム伝送するための所定のプロトコルであるRTP(Real-time Transport Protocol)を用いて音声又は映像をパケット化し、受信装置2に送信する。
本実施の形態では、送信装置1は、音声信号をRTPによりパケット化して、所定の第1の周期(例えば20msec)で受信装置2に送信するものとする。よって、送信装置1が送信するパケットは、20msecのデジタルの音声信号を含む。なお、音声信号としては、例えば、PCMμ−Law等により8kHzのサンプリング周波数でサンプリングされた信号を採用することができる。なお、送信装置1は映像信号をパケット化してもよい。
受信装置2は、送信装置1と同一構成の通信装置から構成されている。なお、図1では、説明の便宜上、送信装置1及び受信装置2と記述しているが、両装置とも、相互にパケットを送受信することができる。
図2は、図1に示す受信装置2のブロック図を示している。受信装置2は、パケット送受信部21、揺らぎ吸収バッファ22、カウント部23、バッファサイズ変更部24、受信時刻記録部25、基準値記憶部26、隠蔽処理部27、再生部28、観測履歴保持部29、スピーカ30、表示部31、マイク33、及びパケット生成部34を備えている。
パケット送受信部21は、送信装置1から第1の周期で送信されるパケットを受信し、このパケットを揺らぎ吸収バッファ22に蓄積する。このパケットは、上述したようにRTPに準拠したパケットであるため、RTPヘッダを含んでいる。よって、パケット送受信部21は、RTPヘッダに含まれるシーケンス番号に従って、受信したパケットを時系列順に揺らぎ吸収バッファ22に蓄積させる。
なお、RTPヘッダには、シーケンス番号等が含まれている。シーケンス番号は、音声パケットの送信順序を示す。
また、パケット送受信部21は、パケット生成部34により生成されたパケットを第1の周期TaでIPネットワークに送信する。
また、パケット送受信部21は、受信したパケットの受信時刻を受信時刻記録部25に記録する。この場合、パケット送受信部21は、受信したパケットのシーケンス番号を受信時刻と対応付けて受信時刻記録部25に記録すればよい。
揺らぎ吸収バッファ22は、例えばリングバッファにより構成され、パケット送受信部21により受信されたパケットを時系列順で蓄積する。これにより、送信装置1から送信されたパケットの伝送遅延の揺らぎが吸収される。なお、揺らぎ吸収バッファ22のサイズとしては、後述する基準値よりも大きなサイズが採用されている。
カウント部23は、第1の周期以下の所定の第2の周期で、揺らぎ吸収バッファ22に蓄積されている蓄積パケット数をカウントすることでパケットカウント値を算出し、算出したパケットカウント値を観測履歴保持部29に保持させる。観測履歴保持部29は、例えば、揮発性の記憶装置により構成され、カウント部23により算出された過去N(Nは正の整数)回のパケットカウント値を保持する。
図3は、カウント部23によるパケットカウント値の算出処理の説明図である。図3に示すように、カウント部23は、第2の周期Tbでパケットカウント値を算出している。
ここで、カウント部23は、パケットカウント値の算出タイミングである算出時刻Tkから、過去、第1の周期Ta内に受信したパケットPSについては、カウント値をΔT/Taにより得られる値に設定し、算出時刻Tkから、過去、第1の周期Ta以前に受信したパケットPLについては、カウント値を1に設定することでパケットカウント値を算出する。つまり、パケットPSのパケットカウント値は、受信時刻が算出時刻Tkに近づくにつれて差分ΔTが小さくなるため、値が小さくなる。
ここで、パケットPSについては、パケットカウント値を算出するにあたり受信時刻が用いられているため、受信時刻を保持しておく必要がある。一方、パケットPLについては、パケットカウント値を算出するにあたり、受信時刻が不要であるため、受信時刻を記録しておく必要はない。
そこで、カウント部23は、パケットカウント値の算出処理が終了すると、算出時刻Tkから、過去、第1の周期Taと第2の周期Tbとの差分(=Ta−Tb)以前に受信したパケットについては、受信時刻を受信時刻記録部25から削除する。
これにより、パケットカウント値の次の算出時刻である時刻Tk+1において、過去、第1の周期Taに受信したパケットの受信時刻が受信時刻記録部25に保持されている結果、カウント部23は、時刻Tk+1において、過去、第1の周期Taに受信したパケットの受信時刻を取得することができる。こうすることで、受信時刻記録部25の容量を節約することが可能となる。
バッファサイズ変更部24は、カウント部23により算出されたパケットカウント値の過去のN回のパケットカウント値を観測履歴保持部29から読み出し、読み出したN回のパケットカウント値から、n番目に小さいパケットカウント値をパケットカウント値の代表値として算出し、算出した代表値が所定の基準値より大きければ、揺らぎ吸収バッファ22に蓄積されているパケットを削除し、代表値が基準値より小さければ、揺らぎ吸収バッファ22にパケットを挿入する。
ここで、バッファサイズ変更部24は、代表値が基準値より小さい場合は、代表値が、基準値以上かつ基準値+1未満となるように、揺らぎ吸収バッファ22にパケットを挿入すればよい。
例えば、代表値が2.1、基準値が4の場合、代表値が4.1となるように2つのパケットが揺らぎ吸収バッファ22に挿入される。
また、バッファサイズ変更部24は、代表値が基準値より大きい場合は、代表値が基準値以上かつ基準値+1未満となるように、揺らぎ吸収バッファ22からパケットを削除すればよい。
例えば、代表値が4.2、基準値が2の場合、代表値が2.2となるように2つのパケットが揺らぎ吸収バッファ22から削除される。
なお、nとしては、N×αにより整数値に丸め込んだ値を採用することが好ましい。また、基準値としては、送信装置1と受信装置2とが双方向通信する場合において、通話システムが許容する通話遅延時間に基づいて予め定められた値が採用されている。つまり、揺らぎ吸収バッファ22の蓄積パケット数が基準値よりも大きければ、揺らぎ吸収バッファ22において、出力待ちのパケット数が増大するため、通話遅延が発生する。そこで、本通話システムでは、n番目のパケットカウント値である代表値が基準値よりも大きい場合(具体的には基準値+1よりも大きい場合)、揺らぎ吸収バッファ22からパケットを削除している。これにより、通話遅延を防止することができる。
一方、n番目のパケットカウント値である代表値が基準値よりも小さい場合は、揺らぎ吸収バッファ22にパケットを挿入している。これにより、蓄積パケット数が基準値以下になる確率を、α(=n/N)%にすることができる。
受信時刻記録部25は、例えば揮発性の記憶装置により構成され、パケット送受信部21により受信されたパケットの受信時刻を記録する。基準値記憶部26は、例えば不揮発性の記憶装置により構成され、基準値を記憶する。
隠蔽処理部27は、揺らぎ吸収バッファ22に挿入された無効パケットに対して、パケットロス隠蔽処理を行うと共に、揺らぎ吸収バッファ22においてパケットが枯渇した場合にパケットロス隠蔽処理を行う。ここで、パケットロス隠蔽処理としては、例えば、無効パケットより過去の音声信号から音声信号の基本周期を検出し、無効パケットの直前の有効パケットの音声信号において、終端から基本周期分前の区間の音声波形を取り出し、この音声波形を20msの期間、繰り返すことで得られる音声波形を無効パケットの音声信号として生成する手法を採用すればよい。
また、基本周期を検出する手法としては、現時点から過去に向けてある時間幅の音声信号を基準信号として設定し、基準信号を音声信号に対して現時点から過去に向けてスライドさせ、基準信号と音声信号との相関を求めることで基本周期を検出する手法であって、基準信号のスライド量が増大するにつれて、基準信号の時間幅を増大させる手法を採用すればよい。また、基本周期を検出する手法としては、上記の手法に代えて、特許第3219868号公報に記載された手法を採用してもよい。なお、無効パケットには音声信号が含まれていない。また、有効パケットには音声信号が含まれている。
再生部28は、揺らぎ吸収バッファ22の蓄積パケット数が基準値以上となった場合、揺らぎ吸収バッファ22からパケットを第1の周期Taで時系列順に読み出し、読み出したパケットから音声信号を取り出し、取り出した音声信号を逆符号化処理及びデジタルアナログ変換処理した後、スピーカ30に出力する。ここで、再生部28は、揺らぎ吸収バッファ22から取り出したパケットが音声信号を含まない無効パケットである場合、隠蔽処理部27にパケットロス隠蔽処理を実行させ、実行処理後の音声信号をスピーカ30に出力する。
観測履歴保持部29は、例えば不揮発性の記憶装置により構成され、カウント部23により算出された過去N回のパケットカウント値を保持する。
スピーカ30は再生部28から出力される音声信号に従って、音声を出力する。表示部31は、例えば液晶表示パネルにより構成され、再生部28から出力される映像信号に従って、映像を表示する。
マイク33は、通話者の音声を電気信号である音声信号に変換する。パケット生成部34は、マイク33から出力される音声信号を20ms毎に分割し、分割した音声信号をRTPに従ってパケット化してパケット送受信部21に出力する。
図4は、揺らぎ吸収バッファ22の役割を説明するための図である。図4に示すように、送信装置1は、音声信号VSを符号化処理及びアナログデジタル変換処理した後、パケット化して、20msの周期で送信する。図4では、1〜8の番号が付された8個のパケットが送信装置1から20msの間隔で出力されていることが分かる。
送信装置1から送信されたパケットはIPネットワークを介して受信装置2で受信されることになるが、IPネットワークを構成する各伝送路の特性の相違や、時々刻々変動するIPネットワークのトラフィック状況により、送信装置1から20msの周期で送信されたパケットが受信装置2にまで到達するまでの時間である伝送遅延は、パケット毎に大きく相違し、伝送遅延揺らぎが発生する。よって、受信装置2によるパケットの受信間隔は不等間隔になる。
そこで、この遅延揺らぎを吸収するために、揺らぎ吸収バッファ22が設けられている。図4においては、揺らぎ吸収バッファ22のバッファサイズはパケット3個分とされている。また、受信装置2は、1番目のパケットを受信してから、遅延時間Td経過した時刻T1において、1番目のパケットに復号化処理及びデジタルアナログ変換処理施して再生を開始している。
図4の場合、時刻T1から20ms経過後の2番目のパケットの再生時刻である時刻T2において、揺らぎ吸収バッファ22は、2番目のパケットを蓄積している。よって、受信装置2は、時刻T2において、2番目のパケットを再生することができる。
一方、3番目のパケットは、伝送遅延が極端に大きいため、時刻T3において、受信装置2に到達しておらず、揺らぎ吸収バッファ22において、パケットの枯渇が生じている。そのため、受信装置2は、時刻T3において、3番目のパケットを再生することができず、音抜けが発生する。
また、3〜7番目のパケットは輻輳解消後に短時間で連続して受信装置2に到達しており、7番目のパケットが受信装置2に到達したとき、揺らぎ吸収バッファ22には、5、6番目のパケットが存在するが、揺らぎ吸収バッファ22に空きがあるため、7番目のパケットは破棄されず、揺らぎ吸収バッファ22に格納される。よって、時刻T7において、7番目のパケットが再生される。
よって、時刻T7において、揺らぎ吸収バッファ22に7番目のパケットが蓄積されていないため、音抜けが発生する。
このように、伝送遅延揺らぎの特性は動的に変化するため、揺らぎ吸収バッファ22のバッファサイズを固定サイズにすると、想定される伝送遅延揺らぎよりも充分に長くせざるを得ない。また、揺らぎ吸収バッファ22のバッファサイズを充分に長くし、かつ、遅延時間Tdを充分に長くすれば、音抜けの発生は防止できるが、遅延時間Tdが長いと、揺らぎ吸収バッファ22において、出力待ちのパケットが増大し、通話遅延が発生してしまう。
図5は、伝送遅延と伝送遅延の発生頻度との関係を示す伝送遅延特性のグラフの一例を示している。なお、図5において、縦軸は、発生頻度を示し、横軸は伝送遅延を示している。また、図6は、揺らぎ吸収バッファ22の最適なバッファサイズを説明するための図である。図5において、dminは最小の伝送遅延を示し、dmaxは最大の伝送遅延を示している。図6では、k−1番目のパケットの伝送遅延はdminであり、k番目のパケットの伝送遅延はdであり、k+1番目のパケットの伝送遅延はdmaxである。
この場合、受信装置2による最適な出力の待ち時間は下記のようになる。i)dmaxで届いたパケットは直ちに出力する。ii)dminで届いたパケットは、dmax−dmin待ってから出力する。iii)dで届いたパケットはdmax−d待ってから出力する。
よって、揺らぎ吸収バッファ22におけるパケットの枯渇を回避するためには、揺らぎ吸収バッファ22のバッファサイズbufをbuf≧dmax−dminとすればよいが、伝送遅延特性のdmaxが極端に大きくなると、つまり、図5のグラフの右端の尾が極端に長くなると、バッファサイズbufの値が大きくなってしまう。
また、図5のグラフに示すように、伝送遅延が増大するにつれて発生頻度が低下しているため、真のdmaxを観測するには、膨大な数のパケットの伝送遅延を観測する必要がある。
そのため、図5のグラフでは、真のdmaxではなく、伝送特性の分布の上位数%を切り捨てる値がdmaxとみなされている。この場合、dmax以上の伝送遅延が発生するとパケットの枯渇が発生する。
したがって、パケットの枯渇を防止するためにはバッファサイズbufをdmaxより大きく設定することが好ましいが、そうると、dmaxが大きい場合、揺らぎ吸収バッファ22において、出力待ちの待ちパケットが増大する結果、出力遅延が生じてしまう。このような出力遅延は、IP電話では通話遅延となって現れるため、極力低く抑える方が好ましい。そこで、本通話システムでは、上述の処理を実行することで、パケットの枯渇を防止すると同時に、通話遅延の防止を図っているのである。
図7は、図1に示す受信装置2の処理を示すフローチャートである。なお、図2に示す送信装置1は、受信装置2に対して第1の周期Taでパケットを送信しているものとする。まず、ステップS1において、カウント部23は、前回、パケットカウント値の算出タイミングを算出してから、第2の周期Tbが経過して、パケットカウント値の算出タイミングとなったか否かを判定する。そして、カウント部23は、パケットカウント値の算出タイミングになったと判定すると(ステップS1でYES)、現在、揺らぎ吸収バッファ22に蓄積されているパケット数である蓄積パケット数をカウントする(ステップS2)。一方、カウント部23は、パケットカウント値の算出タイミングになっていないと判定すると(ステップS1でNO)、処理をステップS1に戻す。
次に、カウント部23は、パケットカウント値の算出処理を実行して、パケットカウント値を算出する(ステップS3)。
図8は、パケットカウント値の算出処理の詳細を示すフローチャートである。まず、カウント部23は、現在時刻をパケットカウント値の算出時刻として特定する(ステップS21)。ここで、受信装置2は時計を有しているため、この時計を用いて算出時刻が特定される。
次に、カウント部23は、揺らぎ吸収バッファ22に蓄積されているパケットのうち、図3に示すように算出時刻Tkから、過去、第1の周期Ta内に受信された各パケットの受信時刻を特定する(ステップS22)。この場合、カウント部23は、受信時刻記録部25に記録された受信時刻に対応付けられたシーケンス番号を特定することで、各パケットの受信時刻を特定する。
次に、カウント部23は、算出時刻Tkから、過去、第1の周期Ta内に受信された各パケットについて、算出時刻Tkと受信時刻との差分ΔTを算出する(ステップS23)。次に、カウント部23は、過去、第1の周期Ta内に受信された各パケットについて、ΔT/Taを算出し、このΔT/Taを、各パケットのカウント値として設定する(ステップS24)。
次に、カウント部23は、揺らぎ吸収バッファ22に蓄積されているパケットのうち、算出時刻Tkから、過去、第1の周期Ta以前に受信されたパケットについては、カウント値を1として設定する(ステップS25)。
次に、カウント部23は、ステップS24,S25で設定したカウント値を用いて、揺らぎ吸収バッファ22の蓄積パケット数をカウントすることで、パケットカウント値を算出する(ステップS26)。例えば、算出時刻Tkから、過去、第1の周期Ta以前に受信されたパケット数が1個、算出時刻Tkから、過去、第1の周期Ta内に受信されたパケット数が2個であり、この2個のパケットの受信時刻がTi、Tjとすると、パケットカウント値は、1+(Tk−Ti)/Ta+(Tk−Tj)/Taとなる。
次に、カウント部23は、算出時刻Tkから、過去、Ta−Tb以前に受信したパケットについては、受信時刻記録部25から受信時刻を削除する(ステップS27)。
図7に戻り、ステップS4において、カウント部23は、算出時刻Tkにおけるパケットカウント値を観測履歴保持部29に保持させる。この場合、カウント部23は、観測履歴保持部29に保持されているパケットカウント値の個数がN個となるように、最古のパケットカウント値を観測履歴保持部29から削除する。
次に、バッファサイズ変更部24は、観測履歴保持部29に記憶されているN個のパケットカウント値のうち、n番目に小さいパケットカウント値を代表値として特定する(ステップS5)。
図9は、パケットカウント値と、パケットカウント値の算出時刻との関係を示した模式図であり、縦軸がパケットカウント値を示し、横軸がパケットカウント値の算出時刻を示している。図9では、N=9、n=3とされている。したがって、バッファサイズ変更部24は、図9で示す左端から2番目の時刻Tk−7のパケットカウント値が、3番目に小さいため、時刻Tk−7のパケットカウント値を代表値として特定する。
次に、バッファサイズ変更部24は、代表値が基準値より大きいか否かを判定し、代表値≧基準値+1の場合(ステップS6でYES)、代表値が基準値以上かつ基準値+1未満となる個数のパケットを揺らぎ吸収バッファ22から削除する(ステップS7)。
次に、バッファサイズ変更部24は、観測履歴保持部29に保持されているN個のパケットカウント値のそれぞれから、ステップS7で削除したパケット数を差し引き、N個のパケットカウント値を更新し、観測履歴を更新する(ステップS8)。例えば、削除したパケット数が1個であるとすると、N個のパケットカウント値の全てから1が減算される。これにより、揺らぎ吸収バッファ22からパケットを削除した事実が観測履歴に反映される。
一方、ステップS6において、代表値が基準値+1未満であり(ステップS6でNO)、かつ、代表値が基準値以上(ステップS9でNO)の場合、バッファサイズ変更部24は、揺らぎ吸収バッファ22に対してパケットの削除及び挿入を行わない(ステップS10)。
一方、代表値<基準値の場合(ステップS9でYES)、バッファサイズ変更部24は、代表値が基準値以上かつ基準値+1未満となる個数のパケットを揺らぎ吸収バッファ22に挿入する(ステップS11)。
次に、バッファサイズ変更部24は、観測履歴保持部29に保持されているN個のパケットカウント値のそれぞれに対し、ステップS11で挿入したパケット数を加算し、N個のパケットカウント値を更新し、観測履歴を更新する(ステップS12)。例えば、挿入したパケット数が1個であるとすると、N個のパケットカウント値の全てに1が加算される。これにより、揺らぎ吸収バッファ22にパケットを挿入した事実が観測履歴に反映される。
そして、ステップS8、S10、又はS12の処理が終了されると、処理がステップS1に戻され、次のパケットカウント値の算出時刻が到来すると、ステップS2以降の処理が実行される。
図10(a)はバッファサイズ変更部24によるパケット挿入時の処理を示した模式図であり、図10(b)はバッファサイズ変更部24によるパケット削除時の処理を示した模式図である。図10(a)の例では、バッファサイズ変更部24は、有効パケットである4番目のパケットと5番目のパケットとの間に無効パケットを挿入している。図10(b)の例では、バッファサイズ変更部24は、有効パケットである4番目のパケットと5番目のパケットとをオーバーラップ加算して2つのパケット長を1つのパケット長にすることで、1つのパケットを削除している。
次に、揺らぎ吸収バッファ22にパケットを挿入又は削除を行う処理を具体的に説明する。図2に示すバッファサイズ変更部24は、揺らぎ吸収バッファ22から1つのパケットを削除する場合、音声信号又は映像信号を含む有効パケットが連続して2つ以上存在すれば、これら連続する有効パケットのうち、中間に位置する連続する2つの有効パケットをオーバーラップ加算して削除する。
図11は、バッファサイズ変更部24がオーバーラップ加算により1つのパケットを削除する処理の説明図であり、(a)は削除前の揺らぎ吸収バッファ22を示し、(b)は削除後の揺らぎ吸収バッファ22を示している。
図11に示すリードポインタRPは、リングバッファ構造を有する揺らぎ吸収バッファ22の開始アドレスを示し、ライトポインタWPは、揺らぎ吸収バッファ22の終了アドレスを示している。また、図11において、各升は1つのパケットを示しており、升内の数字はパケットの時系列の順序を示している。また、内部が白色の升は無効パケットを示し、内部がグレーの升は有効パケットを示している。
図11(a)の場合、1番目〜2番目の有効パケットの区間ではなく、4番目〜7番目の有効パケットの区間に位置する5番目と6番目との有効パケットが、図11(b)に示すようにオーバーラップ加算により1つのパケットに纏められ、1つのパケットが削除されている。
ここで、図11(a)に示す1番目〜2番目の有効パケットの区間でオーバーラップ加算を行うと、オーバーラップ加算により生成された1つのパケットの次に無効パケットが存在することになるため、パケットロス隠蔽処理を行った場合の音声劣化が大きくなる可能性がある。一方、5番目の有効パケットと6番目の有効パケットとをオーバーラップ加算すると、オーバーラップ加算により生成された1つのパケットの前後のパケットは有効パケットであるため、パケットロス隠蔽処理による音声劣化を小さくすることができる。
つまり、有効パケットが2つ以上連続していれば、オーバーラップ加算により1つのパケットを削除することができるが、有効パケットの連続数が多い区間でオーバーラップ加算した方がパケットロス隠蔽処理を行ったときの音声劣化を少なくすることができる。
よって、揺らぎ吸収バッファ22において、有効パケットが連続する区間が複数存在する場合、有効パケットの連続数が多い区間の中間の有効パケットを用いてオーバーラップ加算を行うようにしている。
ここで、オーバーラップ加算としては、図11(c)に示すように、三角窓関数RF1,RF2を用いたオーバーラップ加算を採用することができる。具体的には、バッファサイズ変更部24は、5番目のパケットの音声信号に対して、三角窓関数RF1を用いた窓関数処理を行い、6番目のパケットの音声信号に対しては、三角窓関数RF2を用いた窓関数処理を行い、窓関数処理後の両音声信号を加算して1つの音声信号を生成し、これを1つにパケット化することで、オーバーラップ加算を行えばよい。
ここで、三角窓関数RF1としては、時間幅が20ms、最大値が1、最小値が0であり、時間が経過するにつれて値が減少する一次関数を採用することができる。また、三角窓関数RF2としては、時間幅が20ms、最大値が1、最小値が0であり、時間が経過するにつれて値が増大する一次関数を採用することができる。
また、バッファサイズ変更部24は、揺らぎ吸収バッファ22からパケットを削除する場合、過去に挿入した無効パケットがあれば、当該無効パケットを削除する。
図12は、バッファサイズ変更部24が1つの無効パケットを削除する処理の説明図であり、(a)は削除前の揺らぎ吸収バッファ22を示し、(b)は削除後の揺らぎ吸収バッファ22を示している。
図12(a)においては、3番目と4番目とのパケットが無効パケットである。そのため、バッファサイズ変更部24は、3番目又は4番目のパケットのいずれかを削除することで、1つのパケットを削除する。ここで、揺らぎ吸収バッファ22に複数の無効パケットが存在する場合は、例えば、ランダムに1つの無効パケットを選択し、選択した無効パケットを削除するようにしてもよい。或いは、バッファサイズ変更部24は、無効パケットが2つ以上連続して存在する場合は、連続している領域の無効パケットを優先して抽出し、抽出した無効パケットのうち、ランダムに1つの無効パケットを選択して削除するようにしてもよい。
また、バッファサイズ変更部24は、揺らぎ吸収バッファ22にパケットを挿入する場合、連続する2つの有効パケットが存在すれば、これら2つの有効パケットの間に無効パケットを挿入する。
図13は、バッファサイズ変更部24が1つのパケットを挿入する処理の説明図であり、(a)は挿入前の揺らぎ吸収バッファ22を示し、(b)は挿入後の揺らぎ吸収バッファ22を示している。
図13(a)、(b)に示すように、5番目の有効パケットと6番目の有効パケットとの間に1つの無効パケットが挿入されている。これは、5番目の有効パケットと6番目の有効パケットとの間に1つの無効パケットを挿入するのが、連続する有効パケットの個数がより多くなるためである。
例えば、1番目の有効パケットと2番目の有効パケットとの間に無効パケットを挿入したとしても、挿入した無効パケットの前後に有効パケットが存在するため、パケット隠蔽処理を行うことは可能である。
しかしながら、2番目の有効パケットの前後が無効パケットとなってしまうため、有効パケットの連続数が小さくなってしまう。一方、5番目の有効パケットと6番目の有効パケットとの間に、無効パケットを挿入すると、全ての有効パケットが連続することになる。ここで、パケットロス隠蔽処理を行う場合、有効パケットの連続数が多い方が音声劣化を小さくすることができる。そこで、バッファサイズ変更部24は、揺らぎ吸収バッファ22において有効パケットが連続する区間が複数存在する場合、有効パケットの連続数が多い区間の中間に無効パケットを挿入している。
また、バッファサイズ変更部24は、一度に挿入又は削除することができるパケット数の上限値が予め定められている。
図14は、揺らぎ吸収バッファ22に5つのパケットを一度に挿入する場合の処理を説明するための図であり、(a)は挿入前の揺らぎ吸収バッファ22を示し、(b)は挿入後の揺らぎ吸収バッファ22を示している。図14(a)、(b)においては、1番目の有効パケットと2番目の有効パケットとの間に5つの無効パケットが挿入されている。この場合、無効パケットが連続して存在しているため、音声劣化が増大する虞がある。そこで、本実施の形態では、無効パケットの挿入個数に上限値が設けられている。ここで、「1度に」とは、上述した第2の周期Tbが到達した時に実行される1回の処理を指している。
例えば、図14(a)において、上限値=3に設定されていたとすると、5つの無効パケットを挿入する必要がある場合であっても、3個の無効パケットしか挿入されなくなる。
これにより、無効パケットの連続数が一定個数以上になることが防止され、パケットロス隠蔽処理による音声劣化を小さくすることができる。
また、バッファサイズ変更部24は、無効パケットを削除した場合において、削除した無効パケットに対応する有効パケットを後から受信した場合、削除した無効パケットの他に無効パケットが存在すれば、他の無効パケットと受信した有効パケットとを入れ換える。
図15は、無効パケットを削除した後に、削除した無効パケットに対応する有効パケットを受信した場合の処理を説明する図であり、(a)は削除前の揺らぎ吸収バッファ22を示し、(b)は削除後の揺らぎ吸収バッファ22を示し、(c)は入れ換え後の揺らぎ吸収バッファ22を示している。
図15(a)、(b)に示すように3番目の無効パケットが削除されている。その後、図15(c)に示すように3番目の無効パケットに対応する3番目の有効パケットが受信されている。
この場合、バッファサイズ変更部24は、3番目の無効パケットの次の4番目のパケットが無効パケットであるため、この4番目の無効パケットを受信した3番目の有効パケットに入れ換える。これにより、3番目の有効パケットを復活させることができ、音声劣化を低減させることができる。
ここで、バッファサイズ変更部24は、揺らぎ吸収バッファ22にパケットが蓄積されると蓄積されたパケットに対応する無効パケットが揺らぎ吸収バッファ22に蓄積されているか否かを判定する。そして、バッファサイズ変更部24は、対応する無効パケットが揺らぎ吸収バッファ22に蓄積されている場合は、当該無効パケットの次に無効パケットが格納されているか否かを判定し、無効パケットが格納されている場合は、次の無効パケットを削除し、削除した箇所に受信した有効パケットを挿入することで、次の無効パケットと受信した有効パケットとを入れ換えればよい。
一方、バッファサイズ変更部24は、揺らぎ吸収バッファ22に蓄積されたパケットに対応する無効パケットが揺らぎ吸収バッファ22に蓄積されていない場合、或いは、対応する無効パケットの次に無効パケットが格納されていない場合、上記の入れ換えを行わない。なお、バッファサイズ変更部24は、無効パケットのシーケンス番号と同じシーケンス番号を有するパケットが揺らぎ吸収バッファ22に蓄積された場合、無効パケットに対応する有効パケットが受信されたと判断すればよい。
また、バッファサイズ変更部24は、連続する2つの有効パケットの間にパケットを挿入する場合、隠蔽処理部27に対して、前に位置する有効パケットを用いてパケットロス隠蔽処理を実行させ、隠蔽処理されたパケットを生成させ、このパケットを揺らぎ吸収バッファ22に挿入するようにしてもよい。
図16は、バッファサイズ変更部24が無効パケットに代えて隠蔽処理されたパケットを揺らぎ吸収バッファ22に挿入させる場合の処理を説明する図であり、(a)は挿入前の揺らぎ吸収バッファ22を示し、(b)は挿入後の揺らぎ吸収バッファ22を示している。
図16(a)、(b)に示すように、3番目の有効パケットと4番目の有効パケットとの間に隠蔽処理されたパケットが挿入されている。
これにより、再生部28が揺らぎ吸収バッファ22からパケットを読み出す際に、パケットロス隠蔽処理を実行する必要がなくなり、再生時におけるパケットロス隠蔽処理の処理遅延を低減することができる。
なお、バッファサイズ変更部24は、無効パケットを挿入する場合、母音の音声を含む連続する2つのパケットの間に、無効パケットを挿入することが好ましい。これにより、挿入した無効パケットに対してパケットロス隠蔽処理を実行することで生成された音声が、前後のパケットに含まれる音声と連続的に繋げられ、音声劣化を低減させることができる。
図17は、バッファサイズ変更部24による削除処理を示したフローチャートである。
まず、ステップS51において、バッファサイズ変更部24は、パケットの削除要求数が予め定められたパケット最大削除数(上限値)以下であるか否かを判定し、削除要求数が上限値以下である場合(ステップS51でYES)、削除カウント値DNを削除要求数に設定する(ステップS52)。一方、削除要求数が上限値より大きい場合(ステップS51でNO)、削除カウント値DNを上限値に設定する(ステップS53)。
次に、バッファサイズ変更部24は、揺らぎ吸収バッファ22において、連続する有効パケットの最大連続数が2以上の場合(ステップS54で2以上)、最大連続数が削除カウント値DNの2倍以上であるか否かを判定する(ステップS55)。ここで、最大連続数が削除カウント値DNの2倍であるか否かを判定するのは、1つのパケットを削除する場合は、2つのパケットがオーバーラップ加算されるため、有効パケットが削除カウント値DNの2倍必要になるからである。
そして、バッファサイズ変更部24は、最大連続数が削除カウント値DNの2倍以上であると判定すると(ステップS55でYES)、オーバーラップ加算により削除カウント値DN分のパケットを削除し、削除カウント値DNから削除したパケット数を減じ、削除カウント値DNを更新する(ステップS58)。
一方、ステップS55において、最大連続数が削除カウント値DNの2倍未満である場合(ステップS55でNO)、バッファサイズ変更部24は、削除可能なパケットをオーバーラップ加算によって削除し、削除カウント値DNから削除したパケット数を減じ、削除カウント値DNを更新し(ステップS56)、処理をステップS54に戻す。
例えば、最大連続数が7、削除カウント値DN(=4)×2が8の場合、連続する7個の有効パケットのうち、6個の有効パケットを2個ずつオーバーラップ加算して、3個のパケットを削除する。そして、削除カウント値DNを、DN=1(=4−3)に更新する。
一方、ステップS54において、連続する有効パケットの最大連続数が1以下である場合(ステップS54で1以下)、無効パケットを削除し、削除カウント値DNから削除したパケット数を減じ、削除カウント値DNを更新する(ステップS57)。
例えば、削除カウント値DNが4、無効パケットの個数が3とすると、3個の無効パケットが削除され、DN=1(=4−3)に更新される。
ステップS59において、バッファサイズ変更部24は、削除カウント値DNが0となったか否かを判定し、削除カウント値DNが0である場合(ステップS59でYES)、処理を終了する。
一方、ステップS59において、バッファサイズ変更部24は、削除カウント値DNが0になっていない場合(ステップS59でNO)、有効パケットがあれば(ステップS60でYES)、有効パケットを削除して処理を終了する(ステップS61)。この場合、削除される有効パケットは他の有効パケットと連続していないため、オーバーラップ加算によらず、単純に削除される。一方、有効パケットが無ければ(ステップS60でNO)、そのまま処理が終了される。
図18は、バッファサイズ変更部24による挿入処理を示したフローチャートである。
まず、ステップS71において、バッファサイズ変更部24は、パケットの挿入要求数が予め定められたパケット最大挿入数(上限値)以下であるか否かを判定し、削除要求数が最大挿入数以下である場合(ステップS71でYES)、挿入数を挿入要求数に設定する(ステップS72)。一方、挿入要求数が最大挿入数より大きい場合(ステップS71でNO)、挿入数を最大挿入数に設定する(ステップS73)。
次に、バッファサイズ変更部24は、揺らぎ吸収バッファ22において、連続する有効パケットの最大連続数が0の場合(ステップS74で0)、揺らぎ吸収バッファ22の先頭から挿入数分の無効パケットを挿入し(ステップS75)、処理を終了する。
また、バッファサイズ変更部24は、揺らぎ吸収バッファ22において、連続する有効パケットの最大連続数が2以上の場合(ステップS74で2以上)、連続する有効パケットの区間の真ん中に挿入数分、無効パケットを挿入し(ステップS76)、処理を終了する。
また、バッファサイズ変更部24は、揺らぎ吸収バッファ22において、連続する有効パケットの最大連続数が1の場合(ステップS74で1)、有効パケットの直後に挿入数分、無効パケットを挿入し(ステップS77)、処理を終了する。
このように、本実施の形態による通話システムによれば、揺らぎ吸収バッファから1つのパケットを削除する場合、有効パケットが2つ以上連続する区間の真ん中に位置する2つのパケットをオーバーラップ加算して1つのパケットを生成することにより1つのパケットを削除しているため、音声及び映像の品質劣化を低減させることができる。
また、揺らぎ吸収バッファ22にパケットを挿入する場合、連続する2つの有効パケットが存在すれば、これら2つの有効パケットの間に無効パケットが挿入されるため、無効パケットは、2つの有効パケットの間に挟まれることになり、この無効パケットに対してパケットロス隠蔽処理を実行した場合、前後の有効パケットから無効パケットが隠蔽でき、音声及び映像の連続性が保たれ、音声及び映像を滑らかに再生することが出来る。