バッファ制御装置、バッファ制御プログラム及び通信装置
【課題】パケットの順序の入れ替わりやパケットロスなどが生じた場合に、できるだけ小さい遅延で、パケットの順序の入れ替えやパケットロス補償を実行して、音質の劣化を防止することができるようにする。
【解決手段】本発明は、バッファ手段と、バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段と、少なくとも、入力されたパケットのシーケンス番号に基づき、バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、データのバッファ手段への投入時又はバッファ手段からのデータ取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段とを備える。
【解決手段】本発明は、バッファ手段と、バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段と、少なくとも、入力されたパケットのシーケンス番号に基づき、バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、データのバッファ手段への投入時又はバッファ手段からのデータ取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段とを備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、バッファ制御装置、バッファ制御プログラム及び通信装置に関し、例えば、ネットワーク境界に設けられるセッションボーダーコントローラ(S/BC)に適用し得るものである。
【背景技術】
【0002】
例えば、NGN(次世代ネットワーク)等のIP相互接続環境等において、各事業者網に収容された異なる端末間で、データ交換が行なわれるようになる。IP相互接続における通信は、単なるデータ以外に、音声や映像等のメディアデータも含まれることになる。この場合、各事業者網のコーデックが異なる場合、送信元の事業者網のコーデックから送信先の事業者網のコーデックに変換するコーデック変換技術が必要となる。
【0003】
従来のコーデック変換方式として、特許文献1に記載の技術がある。特許文献1に記載のコーデック変換方式は、特許文献1の図1に示すように、パケット(例えばRTPパケット)が受信されると、NW(ネットワーク)バッファにパケットを投入する。NWバッファにパケットが蓄積されると、リソース振分部が、順次、NWバッファからパケットを取り出し、リソース振分を行う。そして、各デコーダ/エンコーダでコーデック変換処理を実施して、パケット送出するというものである。
【0004】
特許文献1には、多くのエンドのVoIP電話端末が、パケットの順序入れ替えやパケットロス補償を実行することに鑑み、エンドツーエンドの端末にそれら処理を期待し、コーデック変換装置は、パケットの順序入れ替えやパケットロス補償を実行しないこととし、コーデック変換処理遅延を小さくすることが記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2009−267628号公報
【特許文献2】特開2005−64873号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述したように、特許文献1に記載の技術は、コーデック変換処理遅延を小さくするため、コーデック変換装置が、パケットの順序入れ替えやパケットロス補償を実行しないというものである。
【0007】
しかしながら、エンドツーエンド端末でパケットの順序入れ替えやパケットロス補償を実行していたとしても、コーデック変換装置が、パケットの順序入れ替えやパケットロス補償を実行しないと、音質の劣化が生じることがあるという問題がある。
【0008】
図2は、コーデック変換装置において、パケットの順序入れ替わりが発生した場合に、音質が劣化するときの例を説明する説明図である。図2では、コーデック変換装置91が、AMR(Adaptive MultiRate)からITU−T G.711にコーデック変換を行うものである。
【0009】
図2において、送信側の端末92は、原音を例えば20msで区切り、原音(1)、原音(2),原音(3),原音(4)を順次AMRでエンコードし、AMR(1),AMR(2),AMR(3),AMR(4)を順次送出する。ここで、送信側の端末92からコーデック変換装置91へのネットワークにて、パケットの順序入れ替わりが発生し、コーデック変換装置91が、AMR(2)より先にAMR(3)を受信したとする。
【0010】
この場合、コーデック変換装置91のAMRデコーダ入力は、AMR(1),AMR(2),AMR(3),AMR(4)の順番ではなく、AMR(1),AMR(3),AMR(2),AMR(4)の順番でデコード処理を実行する。
【0011】
ここで、デコーダ入力の順序が入れ替ったことにより、デコーダ出力のLinear音声が原音と異なってしまい、音質が劣化するという問題が生ずる。これは、AMRなどの音声コーデックでは、過去の音声データより得られた情報も用いて、エンコード/デコード処理を実施しているからである。
【0012】
受信側の端末93において、パケットの順序入れ替わりを元に戻したとしても、劣化した音質を元通りにすることは出来ない。
【0013】
また、例えば特許文献2に記載のジッタバッファを用いることで、パケットの順序入れ替わりやパケットロスが発生しても、音質の劣化を低減することができる。しかし、ジッタバッファへの投入から取り出しまでの時間分だけ、コーデック変換処理に遅延が増加してしまうという問題が生じ得る。
【0014】
そのため、パケットの順序の入れ替わりやパケットロスなどが生じた場合に、できるだけ小さい遅延で、パケットの順序の入れ替えやパケットロス補償を実行して、音質の劣化を防止することができるバッファ制御装置、バッファ制御プログラム及び通信装置が求められている。
【課題を解決するための手段】
【0015】
かかる課題を解決するために、第1の本発明は、(1)ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段と、(2)バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段と、(3)少なくとも、入力されたパケットのシーケンス番号に基づき、バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、データのバッファ手段への投入時又はバッファ手段からのデータ取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段とを備えることを特徴とするバッファ制御装置である。
【0016】
第2の本発明は、コンピュータを、(1)ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段、(2)バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段、(3)少なくとも、入力されたパケットのシーケンス番号に基づき、バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、パケットのデータのバッファ手段への投入時又はバッファ手段からの取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段として機能させるものであることを特徴とするバッファ制御プログラムである。
【0017】
第3の本発明は、それぞれ異なるネットワークに接続する通信装置において、各ネットワークにおけるコーデックの相違を吸収する第1の本発明のバッファ制御装置を有することを特徴とする通信装置である。
【発明の効果】
【0018】
本発明によれば、パケットの順序の入れ替わりやパケットロスなどが生じた場合に、できるだけ小さい遅延で、パケットの順序の入れ替えやパケットロス補償を実行して、音質の劣化を防止することができる。
【図面の簡単な説明】
【0019】
【図1】第1の実施形態のコーデック変換装置の詳細な内部構成を示すブロック図である。
【図2】コーデック変換装置において、パケットの順序入れ替わりが発生した場合に、音質が劣化するときの例を説明する説明図である。
【図3】第1の実施形態のセッションボーダーコントローラの概略内部構成を示すブロック図である。
【図4】第1の実施形態におけるソートバッファ制御部のバッファ制御処理に係る変数を説明する説明図である。
【図5】第1の実施形態におけるソートバッファ制御処理を説明する説明図である。
【図6】第1の実施形態におけるソートバッファ制御部による通常の投入動作を説明する説明図である。
【図7】第1の実施形態におけるソートバッファ制御部による通常の取出動作を説明する説明図である。
【図8】第1の実施形態において、順序が入れ替わって投入されたときのソートバッファ制御部による投入動作を説明する説明図である。
【図9】第1の実施形態において、順序が入れ替わって投入されたときのソートバッファ制御部による取出動作を説明する説明図である。
【図10】第1の実施形態において、パケットロス発生時のソートバッファ制御部による投入動作を説明する説明図である。
【図11】第1の実施形態において、パケットロス発生時のソートバッファ制御部による取出動作を説明する説明図である。
【図12】第2の実施形態のソートバッファ制御部によるバッファ制御処理を説明する説明図である。
【発明を実施するための形態】
【0020】
(A)第1の実施形態
以下では、本発明のバッファ制御装置、バッファ制御プログラム及び通信装置の第1の実施形態を、図面を参照しながら説明する。
【0021】
第1の実施形態では、事業者網の境界に設けられるセッションボーダーコントローラ(S/BC)のコーデック変換装置に、本発明を適用する場合の実施形態を例示する。
【0022】
(A−1)第1の実施形態の構成
図3は、第1の実施形態のセッションボーダーコントローラの概略内部構成(イメージ的な構成)を示すブロック図である。
【0023】
第1の実施形態のセッションボーダーコントローラ1は、異なる事業者網間の境界設けられる通信装置である。図3に示すように、セッションボーダーコントローラ1は、複数のインタフェース部11−1及び11−2、制御部12、スイッチ部13を有する。
【0024】
セッションボーダーコントローラ1は、例えば、文献「ITU−T Y.2012 Supplement」に規定されている、IPv4/v6変換(NAT/NAPT)ピンホール制御、THIG(トポロジーハイディング)等の機能を実現するものである。
【0025】
また、セッションボーダーコントローラ1は、コーデック変換装置14を内蔵又は外付けで備えるものである。
【0026】
SIPサーバ2は、IP電話端末3−1及び3−2間の呼を制御する呼制御サーバである。SIPサーバ2は、SIPのセッションの確立処理の中で、通話しようとするIP電話端末3−1、3−2が適用しているコーデック(IP電話端末3−1、3−2が収容されている事業者網の採用コーデック)を認識する。そして、両IP電話端末3−1及び3−2のコーデックが異なる場合、SIPサーバ2は、コーデック変換開始指示をセッションボーダーコントローラ2に発行するものである。
【0027】
セッションボーダーコントローラ1において、制御部12は、コーデック変換開始指示が与えられると、インタフェース部11−1、11−2、スイッチ部13及びコーデック変換装置14を制御し、コーデック変換を実行できるようにする。
【0028】
制御部12は、一方のIP電話端末3−1からのパケットを、IP電話端末3−1を収容しているインタフェース部11−1及びスイッチ部13を介して、コーデック変換装置14に与える。そして、制御部12は、コーデック変換装置14を制御して、他方のIP電話端末3−2が適用しているコーデックに変換させ、コーデック変換装置14から出力されたパケットを、スイッチ部13、及び、IP電話端末3−2を収容しているインタフェース部11−2を介して、他方のIP電話端末3−2に送出できるように制御する。また、制御部12は、逆方向についても、コーデック変換を実行できるように制御する。
【0029】
コーデック変換が可能となったときに、制御部12は、SIPサーバ2に、コーデック変換開始OKを返信する。SIPサーバ2は、両電話端末3−1及び3−2に通話OKを通知する。
【0030】
これにより、通話が開始し、開始された通話に係るパケットは、コーデック変換装置14を介して対向するIP電話端末が適用しているコーデックのパケットに変換され、対向するIP電話端末に送出される。
【0031】
図1は、コーデック変換装置14の詳細な内部構成を示すブロック図である。図1において、コーデック変換装置14は、パケット受信部21、チャネル振分け制御部22、複数のソートバッファ23−1〜23−n(n:正の整数)、それぞれ対をなす複数のデコーダ24−1〜24−n及びエンコーダ25−1〜25−n、パケット送信部26、ソートバッファ制御部27を有する。
【0032】
なお、コーデック変換装置14は、例えば、CPU、RAM、ROM、EEPROM、入出力インタフェース部等を有して構成される装置である。コーデック変換装置14の機能は、CPUが、ROMに格納されるコーデック変換プログラムやバッファ制御プログラム等の処理プログラムを実行することにより実現されるものである。なお、処理プログラムはネットワークを通じてインストールされるものであってもよく、その場合でも、図1に示す機能構成を有する。
【0033】
コーデック変換装置14は、ある事業者網の符号化方式のデータを、他の事業者網の符号化方式のデータに変換するものである。コーデック変換装置14は、例えば、ITU−T G.711、ITU−T G.722、EVRC(Enhanced Variable Rate Codec)、AMR等の間で符号化方式の変換を行うことができる。
【0034】
例えば、コーデック変化装置14は、「G.711→EVRC」、「G.711→AMR」、「G.711→G.722」、「EVRC→G.711」、「AMR→G.711」、「G.722→G.711」のコーデック変換を行うことができる。なお、上記以外のコーデック変換として、コーデック変化装置14は、例えば「EVRC→AMR」等のようなコーデック変換を行うようにしてもよい。
【0035】
デコーダ24−N(Nは1〜n)は、入力された符号化音声データを復号して、原音に戻すものである。デコーダ24−Nは、原音の音声データを、対応するエンコーダ25−Nに与えるものである。
【0036】
エンコーダ25−Nは、原音の音声データを、自己について定まっている符号化方式(コーデック方式)に従って符号化し、符号化音声データをパケット送信部26に与えるものである。
【0037】
ここで、デコーダ24−Nとエンコーダ25−Nとは、対をなすものである。すなわち、デコーダ24−N及びエンコーダ25−Nの符号化方式の組み合わせによって、コーデック変換の内容が定まる。例えば、デコーダ24−1がG.711対応であり、エンコーダ25−1がEVRC対応であれば、この対は、「G.711→EVRC」へのコーデック変換に供するものである。
【0038】
例えば、デコーダ24−Nとエンコーダ25−Nとの対は、DSP(ディジタルシグナルプロセッサ)によって実現される。1個のDSPには、複数のチャネル(例えば200チャネル程度)用のデコーダ及びエンコーダの対が搭載されている。コーデック変換装置14は、このようなDSPを複数個(例えば150個)設けられている。
【0039】
パケット受信部21は、入力されたパケットを受信し、その受信されたパケットをチャネル振分け制御部22に与えるものである。
【0040】
チャネル振分け制御部22は、パケット受信部21からのパケットのチャネルを識別し、チャネル別のソートバッファ23−1〜23−nにパケットを与えるものである。
【0041】
チャネル振分け制御部22によるチャネル振分け方法は、例えば、特許文献1に記載の技術を用いて振り分けることができる。例えば、チャネル振分け制御部22は、デコーダ及びエンコーダの1対1の対を示す内部セッション番号を管理する内部セッション管理テーブルと、デコーダ及びエンコーダのコーデック変換種類と各コーデック変換を実行させるDSPとを対応付けたDSP管理テーブル等を有する。チャネル振分け制御部22は、IPパケットのRTPヘッダに含まれる情報(例えば、送信先IPアドレス、送信先ポート番号、送信元IPアドレス等)に基づいて、内部セッション番号テーブルから内部セッション番号を検索して、その検索した内部セッション番号に応じたデコーダ及びエンコーダの対に対応するソートバッファ23−1〜23−nに振り分ける。
【0042】
パケット送信部26は、エンコーダ25−1〜25−nにより符号化された符号化データを用いて送信パケットを形成し、その送信パケットを送出するものである。
【0043】
パケット送信部26によるパケットの形成方法は、種々の方法を適用することができるが、例えば、特許文献1に記載の方法を適用するようにしてもよい。例えば、チャネル振分け制御部22が、処理対象のデータに、デコーダ及びエンコーダの対を示す内部セッション番号を付与しておく。このとき、内部セッション管理テーブルには、内部セッション番号と、ヘッダ情報(例えば、送信先MACアドレス、送信元MACアドレス、送信先IPアドレス、送信元IPアドレス、送信先ポート番号、送信元ポート番号)とを対応付ける。そして、パケット送信部26が、符号化データに付与されている内部セッション番号に基づいて、対応するヘッダ情報を読み出し、このヘッダ情報を符号化データに付与してパケットを形成する方法を適用することができる。
【0044】
ソートバッファ23−1〜23−nは、対応するデコーダ24−1〜24−n及びエンコーダ25−1〜25−nの前段に設けられており、投入されたパケットの取り出し順序を変更することができるバッファ手段である。
【0045】
ソートバッファ23−1〜23−nは、ソートバッファ制御部27の制御により、チャネル振分け制御部22からのパケットの投入及び取り出しを行い、取り出したパケットを、対応するデコーダ24−1〜24−nに与えるものである。
【0046】
ソートバッファ制御部27は、ソートバッファ23−1〜23−nに投入されるパケットのバッファ制御を行うものである。なお、ソートバッファ制御部27によるバッファ制御処理については、動作の項で詳細に説明する。
【0047】
図4は、ソートバッファ制御部27のバッファ制御処理に係る変数を説明する説明図である。図5は、ソートバッファ制御処理を説明する説明図である。
【0048】
図4において、ソートバッファ制御部27は、バッファ制御処理に係る変数として「sort_buf_num」、RTPパケットのシーケンス番号を示す「sn」、受信したRTPパケットのシーケンス番号を示す「sn_recv」、ソートバッファに存在する最大シーケンス番号を示す「sn_biggest」、ソートバッファに入り得る最小シーケンス番号を示す「sn_min」、ソートバッファに入り得る最大シーケンス番号を示す「sn_max」、Transcodeを実施するか否かを示す「trs_ctl」を用いる。
【0049】
「sort_buf_num」は、各ソートバッファ23−N(Nは1〜n)内のバッファの個数である。「sort_buf_num」は、1つのソートバッファ23−Nが受け入れることができるパケットデータの個数である。
【0050】
「sort_buf_num」を設定することで、パケットデータの順序を入れ替えできる個数を設定することができる。つまり、「sort_buf_num」を設定は、「(sort_buf_num)−2」個のRTPパケットデータの入れ替えができる。例えば、「(sort_buf_num)=4」に設定すると、「(sort_buf_num)−2=2個」のRTPパケットデータの入れ替えができる。すなわち、この場合、2個のパケットデータの順序を元通りに並べ替えることができる。
【0051】
ソートバッファ制御部27は、受信したRTPパケットのシーケンス番号(sn)に基づいて、ソートバッファ23−Nへの投入及び当該ソートバッファからの取り出し処理を制御する。
【0052】
ソートバッファ制御部27は、ソートバッファ23−Nにパケットデータを投入した時点で、図4に示した変数に基づいて、Transcodeを実施するかを判断し、Transcodeを実施する場合には、「trs_ctl」フラグを「Enable」とし、そうでない場合には「trs_ctl」フラグを「Disable」に設定する。
【0053】
つまり、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭位置又は最終位置に、パケットデータが投入されると、「trs_ctl」フラグを「Enable」とする。
【0054】
「trs_ctl」フラグが「Enable」となったら、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nからパケットデータを取り出す。これにより、ソートバッファ23−Nからのパケットデータは、デコーダ24−N及びエンコーダ25−Nに与えられるために、Transcodeを実行させることができる。
【0055】
また、ソートバッファ制御部27は、ソートバッファ23−Nからパケットデータを取り出す時点でも、継続してTranscodeを実施するかを判断し、上記と同様に、「trs_ctl」フラグを「Enable」又は「Disable」に設定する。
【0056】
すなわち、パケットデータを取り出した時点で、引き続き、有効なデータ(すなわち、正しく取り出すべきデータ)があった場合には、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」のままとして、次のデータをソートバッファ23−Nから取り出し、デコード及びエンコード処理を実行させる。有効なデータが無い場合、ソートバッファ制御部27は、「trs_ctl」フラグを「Disable」に設定する。
【0057】
また、ソートバッファ制御部27は、受信したRTPパケットデータのシーケンス番号が「sn_recv」<「sn_min」である場合、ソートバッファ制御部27は、受信したパケットデータを廃棄する。また、「sn_recv」<「sn_max」である場合、ソートバッファ制御部27は、すきまを空けずパケットデータを投入する。
【0058】
(A−2)第1の実施形態の動作
第1の実施形態のセッションボーダーコントローラ1の動作説明は省略する。以下では、第1の実施形態のコーデック変化装置14におけるバッファ制御処理の動作を、図面を参照しながら詳細に説明する。
【0059】
なお、以下では、各ソートバッファ23−Nの「sort_buf_num」が「4」に設定されている場合を例示する。
【0060】
図6は、ソートバッファ制御部27による通常の投入動作を説明する説明図である。図7は、ソートバッファ制御部27による通常の取出動作を説明する説明図である。
【0061】
図6(A)において、ソートバッファ23−Nに入り得る最小シーケンス番号が「sn_min=12」であるとする。このとき、ソートバッファ23−Nには、パケットデータが存在していないので、「sn_biggest=−(なし)」である。
【0062】
また、「sort_buf_num=4」であるから、ソートバッファ23−Nは4個のパケットデータを受け入れることができるので、ソートバッファ23−Nに入り得る最大シーケンス番号は「sn_max=15」である。さらに、有効なデータがないので、ソートバッファ制御部27は、「trs_ctl」フラグを「Disable」に設定する。
【0063】
この状態で、シーケンス番号「sn_=12」のRTPパケットデータが、シーケンス番号の順序通り受信されると、ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=12」に設定する(図6(A)参照)。
【0064】
そして、「sn_min=12」であるから、ソートバッファ制御部27は、当該受信されたパケットデータをソートバッファ23−Nの先頭の取出し位置に投入し、「trs_ctl」フラグを「Enable」に設定する。また、「sn=12」のパケットデータが投入されたので、ソートバッファ制御部27は「sn_biggest=12」に設定する。
【0065】
図7(A)において、上記の状態で、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=12」パケットデータを取り出し、デコーダ24−Nに与える。
【0066】
このとき、図7(B)に示すように、ソートバッファ制御部27は、「sn_min=13」、「sn_max=16」、「sn_biggest=−」に更新すると共に、「trs_ctl」フラグを「Disable」に書き換える。
【0067】
次に、図8及び図9を用いて、パケット順序が入れ替って、パケットデータがソートバッファに投入されたときの投入動作及び取り出し動作を説明する。
【0068】
図8は、順序が入れ替わって投入されたときのソートバッファ制御部27による投入動作を説明する説明図である。図9は、順序が入れ替わって投入されたときのソートバッファ制御部27による取出動作を説明する説明図である。
【0069】
以下では、シーケンス番号「sn=12」のRTPパケットデータの前に、「sn=13」のRTPパケットデータが受信された場合の動作を例示する。
【0070】
図8(A)の状態は、図6(A)の状態と同じである。この状態で、「sn=13」のRTPパケットデータが受信されると、ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=13」に設定する(図8(A)参照)。
【0071】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から2番目の位置に、当該受信されたパケットデータを投入する。「trs_ctl」フラグは「Disable」のままとする。また、ソートバッファ制御部27は「sn_biggest=13」に更新する(図8(B)参照)。
【0072】
引き続き、シーケンス番号「sn=12」のRTPパケットが受信されると、ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=12」に設定する(図8(C)参照)。
【0073】
そして、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭の位置に、当該受信されたパケットデータを投入する。また、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」に設定する。
【0074】
図9(A)において、上記状態において、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=12」パケットデータを取り出し、デコーダ24−Nに与える(図9(B)参照)。
【0075】
このとき、ソートバッファ制御部27は、「sn_min=13」、「sn_max=16」に更新する。また、次に、取り出すべき「sn=13」のパケットデータがあるので、「trs_ctl」フラグは「Enable」のままである。
【0076】
そして、引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=13」パケットデータを取り出す。
【0077】
このとき、ソートバッファ制御部27は、「sn_min=14」、「sn_max=17」に更新すると共に、「trs_ctl」フラグを「Disable」に書き換える。
【0078】
次に、図10及び図11を用いて、パケットロス発生時のソートバッファ23−Nへの投入動作及び取出動作を説明する。
【0079】
図10は、パケットロス発生時のソートバッファ制御部27による投入動作を説明する説明図である。図11は、パケットロス発生時のソートバッファ制御部27による取出動作を説明する説明図である。
【0080】
以下では、送信側端末からコーデック変換装置14までのネットワーク上で、シーケンス番号「sn=12」のRTPパケットが失われた場合の動作を例示する。
【0081】
図10(A)の状態は、図6(A)の状態と同じである。この状態で、シーケンス番号「sn=13」のRTPパケットが受信されたものとする。
【0082】
ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=13」に設定する(図10(A)参照)。
【0083】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から2番目の位置に、当該受信されたパケットデータを投入する。「trs_ctl」フラグは「Disable」のままとする。また、ソートバッファ制御部27は「sn_biggest=13」に更新する(図10(B)参照)。
【0084】
引き続き、シーケンス番号「sn=14」のRTPパケットが受信される。ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=14」に設定する(図10(B)参照)。
【0085】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から3番目の位置に、当該受信されたパケットデータを投入する。「trs_ctl」フラグは「Disable」のままとする(図10(B)参照)。また、ソートバッファ制御部27は「sn_biggest=14」に更新する(図10(C)参照)。
【0086】
次に、引き続き、シーケンス番号「sn=15」のRTPパケットが受信される。ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=15」に設定する(図10(C)参照)。
【0087】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から4番目の位置に、当該受信されたパケットデータを投入する。
【0088】
ここで、ソートバッファの取出位置の最後の位置にパケットデータが投入されたので、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」に書き換え、
「sn_biggest=15」に更新する(図10(D)参照)。
【0089】
図11(A)において、上記の状態で、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nからの取出し処理を行う。
【0090】
このとき、ソートバッファ23−Nの先頭取出し位置にあるのは、「empty(データ無し)」であるから、デコーダ24−Nは、パケットロス補償を実行し、エンコード処理も実行する(図11(B)参照)。
【0091】
また、このとき、ソートバッファ制御部27は、「sn_min=13」に更新をする(図11(B)参照)。
【0092】
そして、引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=13」パケットデータを取り出す(図11(C)参照)。
【0093】
このとき、ソートバッファ制御部27は、「sn_min=14」及び「sn_max=17」に更新をする(図11(C)参照)。
【0094】
引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=14」のパケットデータを取り出す。ソートバッファ制御部27は、「sn_min=15」及び「sn_max=18」に更新をする(図11(C)参照)。
【0095】
さらに、引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=15」のパケットデータを取り出す。ソートバッファ制御部27は、「sn_min=16」、「sn_max=19」及び「sn_biggest=−」に更新をすると共に、「trs_ctl」フラグが「Disable」に書き換える(図11(D)参照)。
【0096】
(A−3)第1の実施形態の効果
以上のように、第1の実施形態によれば、ソートバッファ制御部は、パケット受信した時点で、ソートバッファにパケットデータを投入し、Transcodeを実施するかを判断する。そして、Transcodeの実施可能な条件となれば、直ちにデータを取出し、エンコードおよびデコード処理を実行するようにしたので、パケットの順序入れ替わりやパケットロスが発生しても、必要最小限の遅延で、パケットの順序入れ替えやパケットロス補償を実行し、音質の劣化を防止することができる。
【0097】
(B)第2の実施形態
次に、本発明の本発明のバッファ制御装置、バッファ制御プログラム及び通信装置の第2の実施形態を、図面を参照しながら説明する。
【0098】
(B−1)第2の実施形態の構成
第2の実施形態が、第1の実施形態と異なる点は、ソートバッファ制御部が、タイマ処理を行う点である。
【0099】
それ以外の第2の実施形態の構成及び動作は、第1の実施形態の構成及び動作と同じであるので、第2の実施形態でも、図1及び図3を用いながら、第2の実施形態の特徴的な構成及び動作を中心に説明する。
【0100】
第2の実施形態のソートバッファ制御部27は、タイマ処理機能を有する。ソートバッファ制御部27は、パケットデータがソートバッファ23−Nの取出し位置の先頭又は最終位置以外に投入されると、所定のタイマ時間を計時するものである。また、ソートバッファ制御部27は、タイマ時間が満了になると、「trs_ctl」フラグを「Enable」に書き換えるものである。なお、タイマ時間が満了する前に、次のパケットが受信された場合、ソートバッファ制御部27はタイマをリセットする。
【0101】
(B−2)第2の実施形態の動作
図12は、第2の実施形態のソートバッファ制御部27のバッファ制御処理を説明する説明図である。
【0102】
図12(A)の状態は、図6(A)の状態と同じである。この状態で、シーケンス番号「sn=13」のRTPパケットが受信されたものとする。
【0103】
ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=13」に設定する(図12(A)参照)。
【0104】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から2番目の位置に、当該受信されたパケットデータを投入する。
【0105】
ここで、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭又は最終位置以外に、パケットデータが投入されたので、タイマを起動する。タイマ時間は、特に限定されるものではないが、例えば20msとする。
【0106】
なお、ソートバッファ制御部27は、「trs_ctl」フラグは「Disable」のままとする。また、ソートバッファ制御部27は「sn_biggest=13」に更新する(図12(B)参照)。
【0107】
その後、タイマを起動してから、次に到着すべきRTPパケットが受信しないものとする。
【0108】
タイマ時間が満了すると、図12(C)に示すように、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」に書き換えを行う。
【0109】
このとき、図12(D)に示すように、ソートバッファ23−Nの取出し位置の先頭位置は「Empty(データ無し)」であるから、ソートバッファ制御部27は、「Empty」を取り出し、対応するデコーダ24−Nによるパケットロス補償を行い、エンコード処理を行う。
【0110】
次に、図12(E)に示すように、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭位置にある、シーケンス番号「sn=13」のパケットデータを取り出すようにする。
【0111】
そして、ソートバッファ制御部27は、「trs_ctl」フラグを「Disable」に書き換え、又内部の変数の更新も行う。
【0112】
(B−3)第2の実施形態の効果
以上のように、第2の実施形態によれば、第1の実施形態の効果に加えて、パケットロス発生時のソートバッファでの遅延時間を、タイマ満了時間以下となるようにしたので、パケットロス発生時は更に遅延を低減することができる。但し、タイマ満了時間を短くし過ぎると、パケット入れ替わりに対応できないケースも生じるので、注意が必要である。
【0113】
(C)他の実施形態
上述した第1及び第2の実施形態では、デコーダ及びエンコーダが複数ある場合を例示したが、1個の場合であってもよい。
【0114】
また、上述した第1及び第2の実施形態では、コーデック変換装置に、本発明のバッファ制御処理を適用する場合を説明したが、コーデック変換装置のバッファ制御処理に限定されるものでない。例えば、コーデック変換処理が無くても、RTPパケットを中継する通信装置が、受信パケットをバッファリングする制御処理に、本発明を適用することができる。
【0115】
上述した第1及び第2の実施形態では、パケットロス発生時に、パケットロス補償を行うようにしたが、パケットロス時のデコード/エンコード処理を省略し、パケットロス補償を受信側の端末に委ねるようにしても良い。
【符号の説明】
【0116】
1…セッションボーダーコントローラ、14…コーデック変換装置、
21…パケット受信部、22…チャネル振分け制御部、
23−1〜23−n…ソートバッファ、24−1〜24−n…デコーダ、
25−1〜25−n…エンコーダ、26…パケット送信部、
27…ソートバッファ制御部。
【技術分野】
【0001】
本発明は、バッファ制御装置、バッファ制御プログラム及び通信装置に関し、例えば、ネットワーク境界に設けられるセッションボーダーコントローラ(S/BC)に適用し得るものである。
【背景技術】
【0002】
例えば、NGN(次世代ネットワーク)等のIP相互接続環境等において、各事業者網に収容された異なる端末間で、データ交換が行なわれるようになる。IP相互接続における通信は、単なるデータ以外に、音声や映像等のメディアデータも含まれることになる。この場合、各事業者網のコーデックが異なる場合、送信元の事業者網のコーデックから送信先の事業者網のコーデックに変換するコーデック変換技術が必要となる。
【0003】
従来のコーデック変換方式として、特許文献1に記載の技術がある。特許文献1に記載のコーデック変換方式は、特許文献1の図1に示すように、パケット(例えばRTPパケット)が受信されると、NW(ネットワーク)バッファにパケットを投入する。NWバッファにパケットが蓄積されると、リソース振分部が、順次、NWバッファからパケットを取り出し、リソース振分を行う。そして、各デコーダ/エンコーダでコーデック変換処理を実施して、パケット送出するというものである。
【0004】
特許文献1には、多くのエンドのVoIP電話端末が、パケットの順序入れ替えやパケットロス補償を実行することに鑑み、エンドツーエンドの端末にそれら処理を期待し、コーデック変換装置は、パケットの順序入れ替えやパケットロス補償を実行しないこととし、コーデック変換処理遅延を小さくすることが記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2009−267628号公報
【特許文献2】特開2005−64873号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述したように、特許文献1に記載の技術は、コーデック変換処理遅延を小さくするため、コーデック変換装置が、パケットの順序入れ替えやパケットロス補償を実行しないというものである。
【0007】
しかしながら、エンドツーエンド端末でパケットの順序入れ替えやパケットロス補償を実行していたとしても、コーデック変換装置が、パケットの順序入れ替えやパケットロス補償を実行しないと、音質の劣化が生じることがあるという問題がある。
【0008】
図2は、コーデック変換装置において、パケットの順序入れ替わりが発生した場合に、音質が劣化するときの例を説明する説明図である。図2では、コーデック変換装置91が、AMR(Adaptive MultiRate)からITU−T G.711にコーデック変換を行うものである。
【0009】
図2において、送信側の端末92は、原音を例えば20msで区切り、原音(1)、原音(2),原音(3),原音(4)を順次AMRでエンコードし、AMR(1),AMR(2),AMR(3),AMR(4)を順次送出する。ここで、送信側の端末92からコーデック変換装置91へのネットワークにて、パケットの順序入れ替わりが発生し、コーデック変換装置91が、AMR(2)より先にAMR(3)を受信したとする。
【0010】
この場合、コーデック変換装置91のAMRデコーダ入力は、AMR(1),AMR(2),AMR(3),AMR(4)の順番ではなく、AMR(1),AMR(3),AMR(2),AMR(4)の順番でデコード処理を実行する。
【0011】
ここで、デコーダ入力の順序が入れ替ったことにより、デコーダ出力のLinear音声が原音と異なってしまい、音質が劣化するという問題が生ずる。これは、AMRなどの音声コーデックでは、過去の音声データより得られた情報も用いて、エンコード/デコード処理を実施しているからである。
【0012】
受信側の端末93において、パケットの順序入れ替わりを元に戻したとしても、劣化した音質を元通りにすることは出来ない。
【0013】
また、例えば特許文献2に記載のジッタバッファを用いることで、パケットの順序入れ替わりやパケットロスが発生しても、音質の劣化を低減することができる。しかし、ジッタバッファへの投入から取り出しまでの時間分だけ、コーデック変換処理に遅延が増加してしまうという問題が生じ得る。
【0014】
そのため、パケットの順序の入れ替わりやパケットロスなどが生じた場合に、できるだけ小さい遅延で、パケットの順序の入れ替えやパケットロス補償を実行して、音質の劣化を防止することができるバッファ制御装置、バッファ制御プログラム及び通信装置が求められている。
【課題を解決するための手段】
【0015】
かかる課題を解決するために、第1の本発明は、(1)ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段と、(2)バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段と、(3)少なくとも、入力されたパケットのシーケンス番号に基づき、バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、データのバッファ手段への投入時又はバッファ手段からのデータ取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段とを備えることを特徴とするバッファ制御装置である。
【0016】
第2の本発明は、コンピュータを、(1)ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段、(2)バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段、(3)少なくとも、入力されたパケットのシーケンス番号に基づき、バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、パケットのデータのバッファ手段への投入時又はバッファ手段からの取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段として機能させるものであることを特徴とするバッファ制御プログラムである。
【0017】
第3の本発明は、それぞれ異なるネットワークに接続する通信装置において、各ネットワークにおけるコーデックの相違を吸収する第1の本発明のバッファ制御装置を有することを特徴とする通信装置である。
【発明の効果】
【0018】
本発明によれば、パケットの順序の入れ替わりやパケットロスなどが生じた場合に、できるだけ小さい遅延で、パケットの順序の入れ替えやパケットロス補償を実行して、音質の劣化を防止することができる。
【図面の簡単な説明】
【0019】
【図1】第1の実施形態のコーデック変換装置の詳細な内部構成を示すブロック図である。
【図2】コーデック変換装置において、パケットの順序入れ替わりが発生した場合に、音質が劣化するときの例を説明する説明図である。
【図3】第1の実施形態のセッションボーダーコントローラの概略内部構成を示すブロック図である。
【図4】第1の実施形態におけるソートバッファ制御部のバッファ制御処理に係る変数を説明する説明図である。
【図5】第1の実施形態におけるソートバッファ制御処理を説明する説明図である。
【図6】第1の実施形態におけるソートバッファ制御部による通常の投入動作を説明する説明図である。
【図7】第1の実施形態におけるソートバッファ制御部による通常の取出動作を説明する説明図である。
【図8】第1の実施形態において、順序が入れ替わって投入されたときのソートバッファ制御部による投入動作を説明する説明図である。
【図9】第1の実施形態において、順序が入れ替わって投入されたときのソートバッファ制御部による取出動作を説明する説明図である。
【図10】第1の実施形態において、パケットロス発生時のソートバッファ制御部による投入動作を説明する説明図である。
【図11】第1の実施形態において、パケットロス発生時のソートバッファ制御部による取出動作を説明する説明図である。
【図12】第2の実施形態のソートバッファ制御部によるバッファ制御処理を説明する説明図である。
【発明を実施するための形態】
【0020】
(A)第1の実施形態
以下では、本発明のバッファ制御装置、バッファ制御プログラム及び通信装置の第1の実施形態を、図面を参照しながら説明する。
【0021】
第1の実施形態では、事業者網の境界に設けられるセッションボーダーコントローラ(S/BC)のコーデック変換装置に、本発明を適用する場合の実施形態を例示する。
【0022】
(A−1)第1の実施形態の構成
図3は、第1の実施形態のセッションボーダーコントローラの概略内部構成(イメージ的な構成)を示すブロック図である。
【0023】
第1の実施形態のセッションボーダーコントローラ1は、異なる事業者網間の境界設けられる通信装置である。図3に示すように、セッションボーダーコントローラ1は、複数のインタフェース部11−1及び11−2、制御部12、スイッチ部13を有する。
【0024】
セッションボーダーコントローラ1は、例えば、文献「ITU−T Y.2012 Supplement」に規定されている、IPv4/v6変換(NAT/NAPT)ピンホール制御、THIG(トポロジーハイディング)等の機能を実現するものである。
【0025】
また、セッションボーダーコントローラ1は、コーデック変換装置14を内蔵又は外付けで備えるものである。
【0026】
SIPサーバ2は、IP電話端末3−1及び3−2間の呼を制御する呼制御サーバである。SIPサーバ2は、SIPのセッションの確立処理の中で、通話しようとするIP電話端末3−1、3−2が適用しているコーデック(IP電話端末3−1、3−2が収容されている事業者網の採用コーデック)を認識する。そして、両IP電話端末3−1及び3−2のコーデックが異なる場合、SIPサーバ2は、コーデック変換開始指示をセッションボーダーコントローラ2に発行するものである。
【0027】
セッションボーダーコントローラ1において、制御部12は、コーデック変換開始指示が与えられると、インタフェース部11−1、11−2、スイッチ部13及びコーデック変換装置14を制御し、コーデック変換を実行できるようにする。
【0028】
制御部12は、一方のIP電話端末3−1からのパケットを、IP電話端末3−1を収容しているインタフェース部11−1及びスイッチ部13を介して、コーデック変換装置14に与える。そして、制御部12は、コーデック変換装置14を制御して、他方のIP電話端末3−2が適用しているコーデックに変換させ、コーデック変換装置14から出力されたパケットを、スイッチ部13、及び、IP電話端末3−2を収容しているインタフェース部11−2を介して、他方のIP電話端末3−2に送出できるように制御する。また、制御部12は、逆方向についても、コーデック変換を実行できるように制御する。
【0029】
コーデック変換が可能となったときに、制御部12は、SIPサーバ2に、コーデック変換開始OKを返信する。SIPサーバ2は、両電話端末3−1及び3−2に通話OKを通知する。
【0030】
これにより、通話が開始し、開始された通話に係るパケットは、コーデック変換装置14を介して対向するIP電話端末が適用しているコーデックのパケットに変換され、対向するIP電話端末に送出される。
【0031】
図1は、コーデック変換装置14の詳細な内部構成を示すブロック図である。図1において、コーデック変換装置14は、パケット受信部21、チャネル振分け制御部22、複数のソートバッファ23−1〜23−n(n:正の整数)、それぞれ対をなす複数のデコーダ24−1〜24−n及びエンコーダ25−1〜25−n、パケット送信部26、ソートバッファ制御部27を有する。
【0032】
なお、コーデック変換装置14は、例えば、CPU、RAM、ROM、EEPROM、入出力インタフェース部等を有して構成される装置である。コーデック変換装置14の機能は、CPUが、ROMに格納されるコーデック変換プログラムやバッファ制御プログラム等の処理プログラムを実行することにより実現されるものである。なお、処理プログラムはネットワークを通じてインストールされるものであってもよく、その場合でも、図1に示す機能構成を有する。
【0033】
コーデック変換装置14は、ある事業者網の符号化方式のデータを、他の事業者網の符号化方式のデータに変換するものである。コーデック変換装置14は、例えば、ITU−T G.711、ITU−T G.722、EVRC(Enhanced Variable Rate Codec)、AMR等の間で符号化方式の変換を行うことができる。
【0034】
例えば、コーデック変化装置14は、「G.711→EVRC」、「G.711→AMR」、「G.711→G.722」、「EVRC→G.711」、「AMR→G.711」、「G.722→G.711」のコーデック変換を行うことができる。なお、上記以外のコーデック変換として、コーデック変化装置14は、例えば「EVRC→AMR」等のようなコーデック変換を行うようにしてもよい。
【0035】
デコーダ24−N(Nは1〜n)は、入力された符号化音声データを復号して、原音に戻すものである。デコーダ24−Nは、原音の音声データを、対応するエンコーダ25−Nに与えるものである。
【0036】
エンコーダ25−Nは、原音の音声データを、自己について定まっている符号化方式(コーデック方式)に従って符号化し、符号化音声データをパケット送信部26に与えるものである。
【0037】
ここで、デコーダ24−Nとエンコーダ25−Nとは、対をなすものである。すなわち、デコーダ24−N及びエンコーダ25−Nの符号化方式の組み合わせによって、コーデック変換の内容が定まる。例えば、デコーダ24−1がG.711対応であり、エンコーダ25−1がEVRC対応であれば、この対は、「G.711→EVRC」へのコーデック変換に供するものである。
【0038】
例えば、デコーダ24−Nとエンコーダ25−Nとの対は、DSP(ディジタルシグナルプロセッサ)によって実現される。1個のDSPには、複数のチャネル(例えば200チャネル程度)用のデコーダ及びエンコーダの対が搭載されている。コーデック変換装置14は、このようなDSPを複数個(例えば150個)設けられている。
【0039】
パケット受信部21は、入力されたパケットを受信し、その受信されたパケットをチャネル振分け制御部22に与えるものである。
【0040】
チャネル振分け制御部22は、パケット受信部21からのパケットのチャネルを識別し、チャネル別のソートバッファ23−1〜23−nにパケットを与えるものである。
【0041】
チャネル振分け制御部22によるチャネル振分け方法は、例えば、特許文献1に記載の技術を用いて振り分けることができる。例えば、チャネル振分け制御部22は、デコーダ及びエンコーダの1対1の対を示す内部セッション番号を管理する内部セッション管理テーブルと、デコーダ及びエンコーダのコーデック変換種類と各コーデック変換を実行させるDSPとを対応付けたDSP管理テーブル等を有する。チャネル振分け制御部22は、IPパケットのRTPヘッダに含まれる情報(例えば、送信先IPアドレス、送信先ポート番号、送信元IPアドレス等)に基づいて、内部セッション番号テーブルから内部セッション番号を検索して、その検索した内部セッション番号に応じたデコーダ及びエンコーダの対に対応するソートバッファ23−1〜23−nに振り分ける。
【0042】
パケット送信部26は、エンコーダ25−1〜25−nにより符号化された符号化データを用いて送信パケットを形成し、その送信パケットを送出するものである。
【0043】
パケット送信部26によるパケットの形成方法は、種々の方法を適用することができるが、例えば、特許文献1に記載の方法を適用するようにしてもよい。例えば、チャネル振分け制御部22が、処理対象のデータに、デコーダ及びエンコーダの対を示す内部セッション番号を付与しておく。このとき、内部セッション管理テーブルには、内部セッション番号と、ヘッダ情報(例えば、送信先MACアドレス、送信元MACアドレス、送信先IPアドレス、送信元IPアドレス、送信先ポート番号、送信元ポート番号)とを対応付ける。そして、パケット送信部26が、符号化データに付与されている内部セッション番号に基づいて、対応するヘッダ情報を読み出し、このヘッダ情報を符号化データに付与してパケットを形成する方法を適用することができる。
【0044】
ソートバッファ23−1〜23−nは、対応するデコーダ24−1〜24−n及びエンコーダ25−1〜25−nの前段に設けられており、投入されたパケットの取り出し順序を変更することができるバッファ手段である。
【0045】
ソートバッファ23−1〜23−nは、ソートバッファ制御部27の制御により、チャネル振分け制御部22からのパケットの投入及び取り出しを行い、取り出したパケットを、対応するデコーダ24−1〜24−nに与えるものである。
【0046】
ソートバッファ制御部27は、ソートバッファ23−1〜23−nに投入されるパケットのバッファ制御を行うものである。なお、ソートバッファ制御部27によるバッファ制御処理については、動作の項で詳細に説明する。
【0047】
図4は、ソートバッファ制御部27のバッファ制御処理に係る変数を説明する説明図である。図5は、ソートバッファ制御処理を説明する説明図である。
【0048】
図4において、ソートバッファ制御部27は、バッファ制御処理に係る変数として「sort_buf_num」、RTPパケットのシーケンス番号を示す「sn」、受信したRTPパケットのシーケンス番号を示す「sn_recv」、ソートバッファに存在する最大シーケンス番号を示す「sn_biggest」、ソートバッファに入り得る最小シーケンス番号を示す「sn_min」、ソートバッファに入り得る最大シーケンス番号を示す「sn_max」、Transcodeを実施するか否かを示す「trs_ctl」を用いる。
【0049】
「sort_buf_num」は、各ソートバッファ23−N(Nは1〜n)内のバッファの個数である。「sort_buf_num」は、1つのソートバッファ23−Nが受け入れることができるパケットデータの個数である。
【0050】
「sort_buf_num」を設定することで、パケットデータの順序を入れ替えできる個数を設定することができる。つまり、「sort_buf_num」を設定は、「(sort_buf_num)−2」個のRTPパケットデータの入れ替えができる。例えば、「(sort_buf_num)=4」に設定すると、「(sort_buf_num)−2=2個」のRTPパケットデータの入れ替えができる。すなわち、この場合、2個のパケットデータの順序を元通りに並べ替えることができる。
【0051】
ソートバッファ制御部27は、受信したRTPパケットのシーケンス番号(sn)に基づいて、ソートバッファ23−Nへの投入及び当該ソートバッファからの取り出し処理を制御する。
【0052】
ソートバッファ制御部27は、ソートバッファ23−Nにパケットデータを投入した時点で、図4に示した変数に基づいて、Transcodeを実施するかを判断し、Transcodeを実施する場合には、「trs_ctl」フラグを「Enable」とし、そうでない場合には「trs_ctl」フラグを「Disable」に設定する。
【0053】
つまり、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭位置又は最終位置に、パケットデータが投入されると、「trs_ctl」フラグを「Enable」とする。
【0054】
「trs_ctl」フラグが「Enable」となったら、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nからパケットデータを取り出す。これにより、ソートバッファ23−Nからのパケットデータは、デコーダ24−N及びエンコーダ25−Nに与えられるために、Transcodeを実行させることができる。
【0055】
また、ソートバッファ制御部27は、ソートバッファ23−Nからパケットデータを取り出す時点でも、継続してTranscodeを実施するかを判断し、上記と同様に、「trs_ctl」フラグを「Enable」又は「Disable」に設定する。
【0056】
すなわち、パケットデータを取り出した時点で、引き続き、有効なデータ(すなわち、正しく取り出すべきデータ)があった場合には、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」のままとして、次のデータをソートバッファ23−Nから取り出し、デコード及びエンコード処理を実行させる。有効なデータが無い場合、ソートバッファ制御部27は、「trs_ctl」フラグを「Disable」に設定する。
【0057】
また、ソートバッファ制御部27は、受信したRTPパケットデータのシーケンス番号が「sn_recv」<「sn_min」である場合、ソートバッファ制御部27は、受信したパケットデータを廃棄する。また、「sn_recv」<「sn_max」である場合、ソートバッファ制御部27は、すきまを空けずパケットデータを投入する。
【0058】
(A−2)第1の実施形態の動作
第1の実施形態のセッションボーダーコントローラ1の動作説明は省略する。以下では、第1の実施形態のコーデック変化装置14におけるバッファ制御処理の動作を、図面を参照しながら詳細に説明する。
【0059】
なお、以下では、各ソートバッファ23−Nの「sort_buf_num」が「4」に設定されている場合を例示する。
【0060】
図6は、ソートバッファ制御部27による通常の投入動作を説明する説明図である。図7は、ソートバッファ制御部27による通常の取出動作を説明する説明図である。
【0061】
図6(A)において、ソートバッファ23−Nに入り得る最小シーケンス番号が「sn_min=12」であるとする。このとき、ソートバッファ23−Nには、パケットデータが存在していないので、「sn_biggest=−(なし)」である。
【0062】
また、「sort_buf_num=4」であるから、ソートバッファ23−Nは4個のパケットデータを受け入れることができるので、ソートバッファ23−Nに入り得る最大シーケンス番号は「sn_max=15」である。さらに、有効なデータがないので、ソートバッファ制御部27は、「trs_ctl」フラグを「Disable」に設定する。
【0063】
この状態で、シーケンス番号「sn_=12」のRTPパケットデータが、シーケンス番号の順序通り受信されると、ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=12」に設定する(図6(A)参照)。
【0064】
そして、「sn_min=12」であるから、ソートバッファ制御部27は、当該受信されたパケットデータをソートバッファ23−Nの先頭の取出し位置に投入し、「trs_ctl」フラグを「Enable」に設定する。また、「sn=12」のパケットデータが投入されたので、ソートバッファ制御部27は「sn_biggest=12」に設定する。
【0065】
図7(A)において、上記の状態で、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=12」パケットデータを取り出し、デコーダ24−Nに与える。
【0066】
このとき、図7(B)に示すように、ソートバッファ制御部27は、「sn_min=13」、「sn_max=16」、「sn_biggest=−」に更新すると共に、「trs_ctl」フラグを「Disable」に書き換える。
【0067】
次に、図8及び図9を用いて、パケット順序が入れ替って、パケットデータがソートバッファに投入されたときの投入動作及び取り出し動作を説明する。
【0068】
図8は、順序が入れ替わって投入されたときのソートバッファ制御部27による投入動作を説明する説明図である。図9は、順序が入れ替わって投入されたときのソートバッファ制御部27による取出動作を説明する説明図である。
【0069】
以下では、シーケンス番号「sn=12」のRTPパケットデータの前に、「sn=13」のRTPパケットデータが受信された場合の動作を例示する。
【0070】
図8(A)の状態は、図6(A)の状態と同じである。この状態で、「sn=13」のRTPパケットデータが受信されると、ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=13」に設定する(図8(A)参照)。
【0071】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から2番目の位置に、当該受信されたパケットデータを投入する。「trs_ctl」フラグは「Disable」のままとする。また、ソートバッファ制御部27は「sn_biggest=13」に更新する(図8(B)参照)。
【0072】
引き続き、シーケンス番号「sn=12」のRTPパケットが受信されると、ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=12」に設定する(図8(C)参照)。
【0073】
そして、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭の位置に、当該受信されたパケットデータを投入する。また、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」に設定する。
【0074】
図9(A)において、上記状態において、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=12」パケットデータを取り出し、デコーダ24−Nに与える(図9(B)参照)。
【0075】
このとき、ソートバッファ制御部27は、「sn_min=13」、「sn_max=16」に更新する。また、次に、取り出すべき「sn=13」のパケットデータがあるので、「trs_ctl」フラグは「Enable」のままである。
【0076】
そして、引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=13」パケットデータを取り出す。
【0077】
このとき、ソートバッファ制御部27は、「sn_min=14」、「sn_max=17」に更新すると共に、「trs_ctl」フラグを「Disable」に書き換える。
【0078】
次に、図10及び図11を用いて、パケットロス発生時のソートバッファ23−Nへの投入動作及び取出動作を説明する。
【0079】
図10は、パケットロス発生時のソートバッファ制御部27による投入動作を説明する説明図である。図11は、パケットロス発生時のソートバッファ制御部27による取出動作を説明する説明図である。
【0080】
以下では、送信側端末からコーデック変換装置14までのネットワーク上で、シーケンス番号「sn=12」のRTPパケットが失われた場合の動作を例示する。
【0081】
図10(A)の状態は、図6(A)の状態と同じである。この状態で、シーケンス番号「sn=13」のRTPパケットが受信されたものとする。
【0082】
ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=13」に設定する(図10(A)参照)。
【0083】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から2番目の位置に、当該受信されたパケットデータを投入する。「trs_ctl」フラグは「Disable」のままとする。また、ソートバッファ制御部27は「sn_biggest=13」に更新する(図10(B)参照)。
【0084】
引き続き、シーケンス番号「sn=14」のRTPパケットが受信される。ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=14」に設定する(図10(B)参照)。
【0085】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から3番目の位置に、当該受信されたパケットデータを投入する。「trs_ctl」フラグは「Disable」のままとする(図10(B)参照)。また、ソートバッファ制御部27は「sn_biggest=14」に更新する(図10(C)参照)。
【0086】
次に、引き続き、シーケンス番号「sn=15」のRTPパケットが受信される。ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=15」に設定する(図10(C)参照)。
【0087】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から4番目の位置に、当該受信されたパケットデータを投入する。
【0088】
ここで、ソートバッファの取出位置の最後の位置にパケットデータが投入されたので、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」に書き換え、
「sn_biggest=15」に更新する(図10(D)参照)。
【0089】
図11(A)において、上記の状態で、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nからの取出し処理を行う。
【0090】
このとき、ソートバッファ23−Nの先頭取出し位置にあるのは、「empty(データ無し)」であるから、デコーダ24−Nは、パケットロス補償を実行し、エンコード処理も実行する(図11(B)参照)。
【0091】
また、このとき、ソートバッファ制御部27は、「sn_min=13」に更新をする(図11(B)参照)。
【0092】
そして、引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=13」パケットデータを取り出す(図11(C)参照)。
【0093】
このとき、ソートバッファ制御部27は、「sn_min=14」及び「sn_max=17」に更新をする(図11(C)参照)。
【0094】
引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=14」のパケットデータを取り出す。ソートバッファ制御部27は、「sn_min=15」及び「sn_max=18」に更新をする(図11(C)参照)。
【0095】
さらに、引き続き、「trs_ctl」フラグが「Enable」であるから、ソートバッファ制御部27は、直ちに、ソートバッファ23−Nの先頭取出し位置にある、「sn=15」のパケットデータを取り出す。ソートバッファ制御部27は、「sn_min=16」、「sn_max=19」及び「sn_biggest=−」に更新をすると共に、「trs_ctl」フラグが「Disable」に書き換える(図11(D)参照)。
【0096】
(A−3)第1の実施形態の効果
以上のように、第1の実施形態によれば、ソートバッファ制御部は、パケット受信した時点で、ソートバッファにパケットデータを投入し、Transcodeを実施するかを判断する。そして、Transcodeの実施可能な条件となれば、直ちにデータを取出し、エンコードおよびデコード処理を実行するようにしたので、パケットの順序入れ替わりやパケットロスが発生しても、必要最小限の遅延で、パケットの順序入れ替えやパケットロス補償を実行し、音質の劣化を防止することができる。
【0097】
(B)第2の実施形態
次に、本発明の本発明のバッファ制御装置、バッファ制御プログラム及び通信装置の第2の実施形態を、図面を参照しながら説明する。
【0098】
(B−1)第2の実施形態の構成
第2の実施形態が、第1の実施形態と異なる点は、ソートバッファ制御部が、タイマ処理を行う点である。
【0099】
それ以外の第2の実施形態の構成及び動作は、第1の実施形態の構成及び動作と同じであるので、第2の実施形態でも、図1及び図3を用いながら、第2の実施形態の特徴的な構成及び動作を中心に説明する。
【0100】
第2の実施形態のソートバッファ制御部27は、タイマ処理機能を有する。ソートバッファ制御部27は、パケットデータがソートバッファ23−Nの取出し位置の先頭又は最終位置以外に投入されると、所定のタイマ時間を計時するものである。また、ソートバッファ制御部27は、タイマ時間が満了になると、「trs_ctl」フラグを「Enable」に書き換えるものである。なお、タイマ時間が満了する前に、次のパケットが受信された場合、ソートバッファ制御部27はタイマをリセットする。
【0101】
(B−2)第2の実施形態の動作
図12は、第2の実施形態のソートバッファ制御部27のバッファ制御処理を説明する説明図である。
【0102】
図12(A)の状態は、図6(A)の状態と同じである。この状態で、シーケンス番号「sn=13」のRTPパケットが受信されたものとする。
【0103】
ソートバッファ制御部27は、受信されたRTPパケットのシーケンス番号に基づいて「sn_recv=13」に設定する(図12(A)参照)。
【0104】
このとき、「sn_min=12」であるから、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置から2番目の位置に、当該受信されたパケットデータを投入する。
【0105】
ここで、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭又は最終位置以外に、パケットデータが投入されたので、タイマを起動する。タイマ時間は、特に限定されるものではないが、例えば20msとする。
【0106】
なお、ソートバッファ制御部27は、「trs_ctl」フラグは「Disable」のままとする。また、ソートバッファ制御部27は「sn_biggest=13」に更新する(図12(B)参照)。
【0107】
その後、タイマを起動してから、次に到着すべきRTPパケットが受信しないものとする。
【0108】
タイマ時間が満了すると、図12(C)に示すように、ソートバッファ制御部27は、「trs_ctl」フラグを「Enable」に書き換えを行う。
【0109】
このとき、図12(D)に示すように、ソートバッファ23−Nの取出し位置の先頭位置は「Empty(データ無し)」であるから、ソートバッファ制御部27は、「Empty」を取り出し、対応するデコーダ24−Nによるパケットロス補償を行い、エンコード処理を行う。
【0110】
次に、図12(E)に示すように、ソートバッファ制御部27は、ソートバッファ23−Nの取出し位置の先頭位置にある、シーケンス番号「sn=13」のパケットデータを取り出すようにする。
【0111】
そして、ソートバッファ制御部27は、「trs_ctl」フラグを「Disable」に書き換え、又内部の変数の更新も行う。
【0112】
(B−3)第2の実施形態の効果
以上のように、第2の実施形態によれば、第1の実施形態の効果に加えて、パケットロス発生時のソートバッファでの遅延時間を、タイマ満了時間以下となるようにしたので、パケットロス発生時は更に遅延を低減することができる。但し、タイマ満了時間を短くし過ぎると、パケット入れ替わりに対応できないケースも生じるので、注意が必要である。
【0113】
(C)他の実施形態
上述した第1及び第2の実施形態では、デコーダ及びエンコーダが複数ある場合を例示したが、1個の場合であってもよい。
【0114】
また、上述した第1及び第2の実施形態では、コーデック変換装置に、本発明のバッファ制御処理を適用する場合を説明したが、コーデック変換装置のバッファ制御処理に限定されるものでない。例えば、コーデック変換処理が無くても、RTPパケットを中継する通信装置が、受信パケットをバッファリングする制御処理に、本発明を適用することができる。
【0115】
上述した第1及び第2の実施形態では、パケットロス発生時に、パケットロス補償を行うようにしたが、パケットロス時のデコード/エンコード処理を省略し、パケットロス補償を受信側の端末に委ねるようにしても良い。
【符号の説明】
【0116】
1…セッションボーダーコントローラ、14…コーデック変換装置、
21…パケット受信部、22…チャネル振分け制御部、
23−1〜23−n…ソートバッファ、24−1〜24−n…デコーダ、
25−1〜25−n…エンコーダ、26…パケット送信部、
27…ソートバッファ制御部。
【特許請求の範囲】
【請求項1】
ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段と、
上記バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段と、
少なくとも、上記入力されたパケットのシーケンス番号に基づき、上記バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、データの上記バッファ手段への投入時又は上記バッファ手段からのデータ取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段と
を備えることを特徴とするバッファ制御装置。
【請求項2】
上記バッファ制御手段が、上記入力されたパケットのデータを、上記バッファ手段の取出し位置の先頭に投入する時、コーデック変換処理を実行すると判定するものであることを特徴とする請求項1に記載のバッファ制御装置。
【請求項3】
上記バッファ制御手段が、上記入力されたパケットのデータを、上記バッファ手段の取出し位置の最終位置に投入する時、コーデック変換処理を実行すると判定するものであることを特徴とする請求項1に記載のバッファ制御装置。
【請求項4】
上記バッファ制御手段が、上記バッファ手段の取出し位置の先頭からデータを取り出し、次に取り出すべきデータが残存するとき、コーデック変換処理を実行すると判定し、次に取り出すべきデータがないとき、コーデック変換処理を実行しないと判定するものであることを特徴とする請求項2に記載のバッファ制御装置。
【請求項5】
上記バッファ制御手段が、上記バッファ手段の取出し位置の先頭又は最終位置以外の位置にデータがある場合には、コーデック変換処理を実行させるためのタイマ処理を行うものであることを特徴とする請求項1〜4のいずれかに記載のバッファ制御装置。
【請求項6】
コンピュータを、
ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段、
上記バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段、
少なくとも、上記入力されたパケットのシーケンス番号に基づき、上記バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、上記パケットのデータの上記バッファ手段への投入時又は上記バッファ手段からの取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段
として機能させるものであることを特徴とするバッファ制御プログラム。
【請求項7】
それぞれ異なるネットワークに接続する通信装置において、
上記各ネットワークにおけるコーデックの相違を吸収する請求項1〜5のいずれかに記載のバッファ制御装置を有することを特徴とする通信装置。
【請求項1】
ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段と、
上記バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段と、
少なくとも、上記入力されたパケットのシーケンス番号に基づき、上記バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、データの上記バッファ手段への投入時又は上記バッファ手段からのデータ取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段と
を備えることを特徴とするバッファ制御装置。
【請求項2】
上記バッファ制御手段が、上記入力されたパケットのデータを、上記バッファ手段の取出し位置の先頭に投入する時、コーデック変換処理を実行すると判定するものであることを特徴とする請求項1に記載のバッファ制御装置。
【請求項3】
上記バッファ制御手段が、上記入力されたパケットのデータを、上記バッファ手段の取出し位置の最終位置に投入する時、コーデック変換処理を実行すると判定するものであることを特徴とする請求項1に記載のバッファ制御装置。
【請求項4】
上記バッファ制御手段が、上記バッファ手段の取出し位置の先頭からデータを取り出し、次に取り出すべきデータが残存するとき、コーデック変換処理を実行すると判定し、次に取り出すべきデータがないとき、コーデック変換処理を実行しないと判定するものであることを特徴とする請求項2に記載のバッファ制御装置。
【請求項5】
上記バッファ制御手段が、上記バッファ手段の取出し位置の先頭又は最終位置以外の位置にデータがある場合には、コーデック変換処理を実行させるためのタイマ処理を行うものであることを特徴とする請求項1〜4のいずれかに記載のバッファ制御装置。
【請求項6】
コンピュータを、
ネットワークから入力されたパケットに含まれるデータを複数蓄積するバッファ手段、
上記バッファ手段から出力されたデータについてコーデック変換処理を行うコーデック変換手段、
少なくとも、上記入力されたパケットのシーケンス番号に基づき、上記バッファ手段においてシーケンス番号順となる位置に当該パケットのデータを格納させるものであって、上記パケットのデータの上記バッファ手段への投入時又は上記バッファ手段からの取出時に、コーデック変換処理を実行するか否かを決定するバッファ制御手段
として機能させるものであることを特徴とするバッファ制御プログラム。
【請求項7】
それぞれ異なるネットワークに接続する通信装置において、
上記各ネットワークにおけるコーデックの相違を吸収する請求項1〜5のいずれかに記載のバッファ制御装置を有することを特徴とする通信装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2013−74419(P2013−74419A)
【公開日】平成25年4月22日(2013.4.22)
【国際特許分類】
【出願番号】特願2011−211252(P2011−211252)
【出願日】平成23年9月27日(2011.9.27)
【出願人】(000000295)沖電気工業株式会社 (6,645)
【出願人】(591089556)株式会社 沖情報システムズ (276)
【Fターム(参考)】
【公開日】平成25年4月22日(2013.4.22)
【国際特許分類】
【出願日】平成23年9月27日(2011.9.27)
【出願人】(000000295)沖電気工業株式会社 (6,645)
【出願人】(591089556)株式会社 沖情報システムズ (276)
【Fターム(参考)】
[ Back to top ]