以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。本発明を、2以上の通話装置がインターネットを介してVoIPにより通話を行う通話装置としてのVoIPクライアント及びこれを備えた通話システムとしてのVoIPシステムに適用したものである。本実施の形態におけるVoIPクライアントは、BGMが付加されるような高音質な音声データであって音質を重視する場合と、通常の通話のように低遅延を重視する場合とをユーザ自身が選択することができるものである。
先ず、本実施の形態におけるVoIPを使用したネットワークコミュニケーションをオ行うVoIPシステムの概略について説明する。図1は、本実施の形態におけるVoIPシステムの一例を示す模式図である。本実施の形態におけるVoIPシステムでは、例えば2チャンネル以上で、且つユーザ間で、通話のみではなく様々な効果音及びBGM等も共有することができる高音質の音声コミュニケーションを実現するものである。なお、本実施の形態におけるVoIPシステムは、2つの通話装置(以下、VoIPクライアントという。)間で行なわれるものとするが、VoIPシステムを構成するVoIPクライアントは2つに限らず、従ってVoIPクライアントを介してネットワークコミュニケーションに参加可能な参加者は2以上であることは勿論である。
図1に示すように、VoIPシステム100は、例えばPC(Personal Computer)等のVoIPクライアント111と、これとインターネット130を介して接続されたVoIPクライアント121とを有する。
このVoIPシステム100においては、VoIPクライアント111のユーザ110と、VoIPクライアント121のユーザ120とは、自身のVoIPクライアント111、121に搭載される後述するVoIP用のアプリケーション(ソフト・フォン)等と、例えばマイクロフォンとヘッドフォンとからなるヘッドセット又はマイクロフォンと受話器とからなるハンドセットとを使用し、インターネット130を介して通信相手とコミュニケーションを行う。
インターネット130は、一般公衆回線等の通信回線や、情報通信ネットワークを複数接続することによって世界中に拡がったネットワーク環境である。現在、広帯域、高速な通信回線の普及によってブロードバンド伝送(Broadband Transmission)を可能としている。光ファイバー、非対称ディジタル加入者線、無線等を用い、500kbps以上の通信回線でネットワークを構成している。
このインターネット130には、VoIP通信を制御するVoIPサーバ131、及び音源データ132及びダウンロードユーザインフォメーション133等のデータを管理するウェブサーバ134等が接続されている。また、各VoIPクライアント111、121には、各VoIPクライアント111、121が有するウェブブラウザ112、122等によりウェブサーバ134からダウンロードするか、又は自身で購入若しくは編集した音源データ113、123が記憶されている。
ウェブサーバ134のデータベースに格納されている音源データ132、及びユーザがダウンロード等して所持している音源データ113、123は、例えばBGM(Back Ground Music)等に使用される音楽や、波の音・拍手の音・雷鳴・ベルの音等の各種効果音であり、これらの音源データは、ユーザ間のネットワークコミュニケーションにて使用することができる。
次に、このVoIPクライアントについて説明する。図2は、VoIPシステムを構成するVoIPクライアントの機能を示すブロック図である。図2に示すように、このようなインターネットコミュニケーションを行うためのVoIPクライアント20は、コミュニケーションに参加している参加者、即ち通話相手へデータを送信する送信手段21と、通話相手からのデータを受け取る受信手段41とを有する。
送信手段21は、マイクが接続され、外部(ユーザ)の音声をキャッチするマイクキャプチャ(MIC capture)22と、例えばMP3(MPEG(Moving Picture Experts Group)1オーディオLayer3)、又はMPEG4等に圧縮された各種効果音(Sound Effect:SE)の音源ファイルが記憶された効果音ファイル記憶部23と、同じく圧縮された各種BGMの音源ファイルが記憶されたBGMファイル記憶部24と、効果音ファイル及びBGMファイルを読み出しデコードする夫々デコーダ25及び26と、マイクによりキャプチャした音、効果音、及びBGMのゲインを制御して音量調整するゲイン調整部27〜29と、これらの3つの音を合成する合成部30と、合成した音を圧縮符号化するエンコーダ31と、圧縮符号化されたデータをデータパケットとしてのRTP(Real-Time Transport Protocol)パケットに格納するデータパケット生成手段としてのパケット化部(packetize)32aと、後述するデコーダ46にてデコードされたデータをバッファリングするPCMバッファ(図示せず)の容量を制御すると共に、RTCP(Real-Time Control Protocol)パケットに格納する各種制御情報及びRTPパケットをコントロールする管理情報等を管理する制御部34と、制御情報及び管理情報等をRTCPパケットに格納する制御パケット生成手段としてのRTCPパケット化部32bと、RTPパケット及びRTCPパケット等を送信する送信部33とを有する。送信部33から送られたRTPパケットがインターネット130を介して通信対象となる他のVoIPクライアントに送信される。
一方、インターネット130を介して通信相手の送信手段21から送られるデータを受信する受信手段41は、RTPパケット及びRTCPパケット等を受信する受信部42と、受信したRTPパケットをデパケッタイズするRTPデパケット化部(depacketize)43aと、RTCPパケットをデパケッタイズするRTCPデパケット化部(depacketize)43bと、RTPパケットの到着時間を補正するデジッタ部(de-jitter)44と、送られたRTPパケットのエラーが生じた部分又は伝送中に損失した部分等の欠落部分を補償するパケット補償部(packet loss compensator)45と、パケット補償部45からのデータを復号伸張するデコーダ46と、例えばMP3、MPEG4等に圧縮された着信音の音源ファイルが記憶された着信音ファイル(Ring Tone File)記憶部47と、着信音ファイルを読み出しデコードするデコーダ48と、デコーダ46及び48のゲイン調整をする夫々ゲイン調整部49及び50と、上述した送信手段21における合成部30にて合成された送信用のPCMデータ、即ち送信者側自身の音源のゲイン調整するゲイン調整部52と、ゲイン調整された送信用のデータ、通信相手から送信されてきたデータ、及び着信音データを合成する合成部53と、合成部53にて合成されたデータをヘッドフォン(HP)54へ出力する出力部と、合成部53へ出力される着信音とは別に着信音のゲインを調整するゲイン調整部51と、ゲイン調整された着信音を外部へ出力するスピーカ(SP)55とを有する。
次に、このVoIPクライアントのデータの送受信方法について説明する。先ず、送信側において、マイクキャプチャ22は、マイクにより入力されたユーザの音声をキャッチしてゲイン調整部27へ送る。ゲイン調整部27は、音声データに対し、ユーザの指示によるか又は自動的に、ゲイン係数k1を乗算し、所望の大きさにゲイン調整する。
効果音ファイル記憶部23及びBGMファイル記憶部24は、例えばMP3、MPEG4等の圧縮技術により予め圧縮された音源ファイルが記憶された、例えばハードディスクドライブ(HDD)、ROM(read only memory)又は光磁気ディスクからなり、デコーダ25及び26は、これらの圧縮符号化データを読み出し、読み出した圧縮符号化データをPCMデータに変換する。更に、デコーダ25、26は、変換したPCMデータを夫々ゲイン調整部28、29へ送り、ゲイン調整部28、29は、送られてきたデータに対し、ユーザの指示によるか又は自動的に、夫々ゲイン係数k2及びk3を乗算して、所望の大きさにゲイン調整する。
ゲイン調整部27〜29にてゲイン調整された音声、BGM及び効果音は、合成部30に供給され、合成部30はゲイン調整部27〜29の出力を飽和処理しつつ加算し、この加算結果をエンコーダ31に出力する。エンコーダ31は、この加算結果をネットワークにて送信するために、例えばMPEG4等にエンコードする。エンコードされたデータは、リアルタイム・トランスポート・プロトコル(Real-time Transport Protocol:RTP)に従ってデータをパケット化するRTPパケット化(packetize)部32aに供給される。
RTPパケット化部32aは、エンコードデータをRTPパケットにパケット化し、パケット化データは、送信部33からインターネット130を介して通信相手のVoIPクライアントへ送信される。
また、制御部34は、ユーザ操作に基づきデコーダ46の後段に設けられたPCMバッファの容量を制御するものである。そして、ユーザ操作によって変更されたPCMバッファの容量に応じて、伝送途中でエラーが生じたり又は失われたような欠落パケットの再送要求等の制御情報を生成する。また、このバッファ容量をRTCPパケットの拡張部分に格納させる。更に、本実施の形態におけるVoIPクライアントが送受信するRTCPパケットの拡張部分には、受信部42にて受信したパケットのジッタを相殺するための揺らぎ吸収バッファの容量等も記述することができる。なお、制御部34は、RTCPパケットのレポートブロック等に格納される各種管理情報を管理すると共に、RTCPパケットの拡張部分に格納される他の制御情報も生成することができる。他の制御情報としては、再生する前の無圧縮のPCMデータを格納しておくPCMバッファの容量通信相手となる他のVoIPクライアントが送信してくるRTPパケットに格納される実時間音響データの圧縮率を指定する例えばエンコード帯域及びサブバンド分割数等の情報等がある。
そして、RTCPパケット化部32bは、この制御情報及び管理情報をRTCPパケットにパケット化し、このパケット化データも送信部33からインターネット130を介して通信相手のVoIPクライアントへ送信される。
また、VoIPによる通話では、RTPパケットを送信する前に、制御部34がSIP等の呼制御プロトコルにより、送信部33を介して、通信対象となる他のVoIPクライアントに対し呼シグナリングを行う。そして、他のVoIPクライアントの間でRTP/RTCPセッションが確立された後、送信部33がRTPパケット及びRTCPパケットを送信することができる。RTP/RTCPパケットの詳細は後述する。
一方、受信側においては、受信部42がインターネット130を介して送られてくるRTPパケット及びRTCPパケット等を受信する。そして、RTCPデパケット化部43bは、受信したRTCPパケットを分解し、制御部34は、RTCPパケットの拡張部分に格納された上述のPCMバッファ情報を取り出し、これに応じて伝送レートを変更指せる等の処理をする。
また、受信部42が受信したRTPパケットをRTPデパケット化部43aが逆パケット化した後、デジッタ部44が例えばネットワークの状態等により受信が遅れる等して到着時刻が不均等になっているデータを補正し、等間隔化する。この補正は、逆パケット化されIP、UDP(User Datagram Protocol)から分解されたRTPのタイムスタンプ、シーケンシャルナンバーを基に行なわれる。その後、パケット補償部45がネットワークの送受信において欠落又は受信不能等となったパケットを保障する処理、具体的には、欠落したパケットの代わりにその前又は後のパケットと同じパケットを使用するようにしたり、欠落したパケットの再送要求をして改めて欠落パケットを受信するようにする等したりしてパケットの損失を補償する。こうして得られたMPEG4等の圧縮データはデコーダ46にてデコードされ、これをゲイン調整部49がユーザ指示又は自動的に、ゲイン係数k5を乗算してゲイン調整する。
デコーダ48は、他のVoIPクライアントから呼シグナリングされたとき、即ち電話がかかってきたときにユーザに通知するための呼び出し用の呼び出し音又は呼び出し用に使用する音楽等からなる着信音の音源ファイルを着信音ファイル記憶部47から読み出す。着信音ファイル記憶部47からの着信音データは、ユーザの所望によって予め選択されており、着信のタイミングに従って図示しないRAMに読み出されながらデコーダ48にてデコードされる。着信音の音源ファイルも、BGM等の音源ファイル等と同様にMP3、MPEG4等に圧縮されたものとなっており、ファイル単位の着信音データとして着信音ファイル記憶部47に複数ファイル分記憶されている。そして、デコーダ48は、読み出した音源ファイルをデコードし、デコードされた音源データをゲイン調整部50、51がユーザ指示又は自動的に、夫々ゲイン係数k6、k7を乗算することでゲイン調整する。
合成部53は、着信音及び通信相手から送信されゲイン調整部49にてゲイン調整された、通話相手から受け取った受信データと、ゲイン調整部52から出力される自身の送信データとを加算処理する。ゲイン調整部52は、送信される送信データを通話相手と共有するため、送信データにユーザが設定するループバック音量レベルであるゲイン係数k4を乗算するものである。
そして、合成部53にて合成されたデータは、ヘッドフォン54を介して出力されユーザに伝えられる。また、着信音ファイル記憶部47から読み出された着信音データは、ヘッドフォン54とは別にスピーカ55からも出力されるよう構成されている。
このようなVoIPクライアントにおいては、ユーザ操作に応じてPCMバッファの容量を可変に設定することができるので、ユーザニーズに応じて、BGM等を付加した高音質な実時間音響データをやり取りする際には、PCMバッファの容量を大きくして欠落パケット再送要求可能な時間を長く高音質を維持するようにし、音声のみの実時間音響データをやり取りする際には、例えばPCMバッファの容量をゼロにして応答性を重視するようにすることができる。
更に、一般の電話に比してダイナミックレンジを広くすることで、ステレオ等の高音質の音声とBGM及び効果音等からなる音響とが合成された合成音を送受信することができ、従ってBGM等を付加しても会話(音声)をマスキングすることがない。また、効果音及びBGM等の音源ファイルから読み出した音と、通信者自身が話した音声、即ちマイク音とを別々にゲイン調整することができるため、効果音及びBGMの音量を所望のレベルに調整することができ、ユーザは、通信相手へ例えば自身の気分を伝えたりすることができる。
また、着信音をヘッドフォン54とスピーカ55とで別々に出力することにより、例えばユーザがヘッドフォン54を使用してVoIPによる通信中に一時的にVoIPクライアント20から離れたり、通話が終了した後もヘッドフォン54をセットしたままにしておいたりした場合であっても、着信音がスピーカ55から外部に出力されるようにすることができる。
次に、このVoIPクライアントに使用されるソフトウェアについて説明する。図3は、一般的なPC向けVoIPクライアントアプリケーションを含むソフトウェアモジュールを示す図である。VoIPクライアントは、この図3に示す開放型システム間相互接続(Open System Interconnection:OSI)のアーキテクチャに基づく各階層のプロトコルに応じたソフトウェアモジュール1を実行することにより上述の図2に示した機能を達成する。
図3において下位層から上位層に向かって各階層を説明する。先ず、物理層2としての機能にはユニバーサル・シリアル・バス(Universal Serial Bus:USB)カメラドライバ2a、USBオーディオドライバ2b及び各種ドライバ2cがある。カメラドライバ2aからのビデオデータやオーディオドライバ2bからのオーディオデータの伝送条件の物理的条件を合わせるレイヤである。
次に、データリンク層としての機能には、オペレーティングシステム(Operating System:OS)3がある。隣接ノード間の誤りのないデータ伝送を実行するためのものである。
そして、ネットワーク層としての機能には、インターネットプロトコル(Internet Protocol:IP)制御部4がある。ネットワーク層は、データ送受信に使用する通信経路を選択し、フロー制御・品質制御などの通信制御を行うところである。信頼性を追求しないコネクションレス(Conectionless)パケット伝送プロトコルであるIPは、信頼性保証機能、フロー制御機能、エラー回復機能を上位階層(トランスポート層とアプリケーション層)に任せている。
トランスポート層としての機能には、トランスポート・コントロール・プロトコル(Transport Control Protocol:TCP)/ユーザ・データグラム・プロトコル(User Datagram Protocol:UDP)制御部5がある。
トランスポート層では、IPアドレスを使用してエンド・ツー・エンドの伝送を行う。ネットワークの種類に依存せず、要求される品質クラスに従ってフロー制御や順序制御を行う。TCPは信頼性保証機能を持ち、伝送したデータの各バイトにシーケンス番号を付け、受信側から受け取り通知(Acknowledgment:ACK(確認応答))が送られてこなければデータを再送する。UDPは、アプリケーション間のデータグラムの送信機能を提供する。IPネットワークを用いて、音声・動画像をストリーミング再生する場合、一般にエラー時に再送を行うTCPのようなトランスポート・プロトコルは使用できない。また、TCPは、1対1通信用のプロトコルであり、複数の相手に情報を送信することができない。そこで、このような用途には、UDPが用いられる。即ち、例えば再送制御を必要とする等、信頼性が高い通信を行う際にはTCP通信としてTCPパケットを生成し、音声及び映像データ、並びに後述するSIPを伝送する等、リアルタイム性が高い通信を行う際にはUDP通信としUDパケットを生成する。
UDPは、アプリケーションのプロセスがリモートマシン上の他のアプリケーションのプロセスへデータを伝送することを、最小のオーバーヘッドで行えるように設計されている。そのため、UDPのヘッダに入る情報は、送信元ポート番号、宛先ポート番号、データ長、チェックサムのみであり、TCPにあるパケットの順序を表す番号を入れるフィールドがないので、ネットワーク上で異なる経路を介して伝送されるなどによりパケットの順序が入れ替わってしまった場合に、その順序を正しい状態に戻す処理を行うことができない。また、送信時のタイムスタンプ等の時間情報を入れるフィールドは、TCPにもUDPにもない。
セッション層6としての機能には、セッション・イニシエーション・プロトコル(Session Initiation Protocol:SIP)制御部11、RTP/RTCP制御部12、コーデック(codec)13、通話音とBGM及び/又は効果音の合成処理ソフトウェアを構成する保留音制御部14、BGM合成部15、及び着信音制御部16がある。セッション層6は、情報の伝送制御を行う。アプリケーション間における対話モードを管理して会話単位の制御を行う。
SIP制御部11は、IPネットワーク上でマルチメディアセッションを確立・変更・終了するための、アプリケーション層6のシグナリングプロトコル(RFC3261で標準化)により呼制御を行う。
また、RTP/RTCP制御部12のうち、RTPは、音声データにBGM及び効果音等が合成され圧縮符号化された送信データを送信するためのプロトコルであり、送信データに時間情報及び順序情報を付与してネットワークを通じて音声データ送受信する機能を有する。また、RTCPは、RTPを制御する制御プロトコルであり、RTPのフロー制御、クロック同期及びデータの再生時刻の認識、情報源の認識等を行う機能を有する。
コーデック13は、送信音(伝送データ)を後述する高能率音響圧縮及び復号する機能を有する。
TCP/UDP制御部10は、例えば再送制御を必要とする等、信頼性が高い通信を行う際にはTCP通信としてTCPパケットを生成し、音声及び映像データ、並びに後述するSIPを伝送する等、リアルタイム性が高い通信を行う際にはUDP通信としUDパケットを生成し、IP制御部11は、TCPパケット又はUDPパケットをIPパケット化する機能を有する。
また、プレゼンテーション層としての機能には、VoIP通話制御7がある。プレゼンテーション層では、アプリケーションで送受信する情報の表現形式を管理して、データの変換や暗号化を行う。VoIP通話制御部7は、VoIP通話機能の全体をコントロールする制御部である。
最上層のアプリケーション層としての機能には、コンピュータを視覚的に操作するためのグラフィカルユーザインターフェース(Graphical User Interface:GUI)8がある。アプリケーション層は、ユーザプログラムで使用する通信機能の外部仕様を管理して、それに基づく情報のやり取りを行う層であり、GUI8は、ユーザ操作用のインターフェイスを提供し、ユーザの手入力情報をハンドリングする。
図4は、GUIの一例を示す模式図である。GUI8は、図4に示すように、VoIPクライアントアプリケーション1の終了処理を行うアプリケーション制御部61と、情報表示部62と、ダイヤル部63と、ヘッドセットボリューム部64aと、スピーカボリューム部64bと、サウンドエフェクト選択表示部65と、サウンドエフェクト制御部66と、BGM選択表示部67と、BGM制御部68、PCMバッファ調整部69とを有する。
情報表示部62は、ユーザが通信対象となる相手先の番号をダイヤルした場合のダイヤル番号や、通信相手が話し中か否か等の相手状態等を表示する。ダイヤル部63は、VoIP相手先をダイヤルするため等のテンキーからなる。また、ヘッドセットボリューム64aは、ヘッドセットから出力される音量を調節し、スピーカボリューム部64bは、スピーカから出力される音量を調節する。サウンドエフェクト選択部65は、ユーザが使用可能なサウンドエフェクト音源データファイルの表示するものであり、例えば銃声音、雷音、拍手の音、歓声音等を選択でき、サウンドエフェクト制御部66により、効果音の再生及び停止、並びに音量調節を行う。これにより、効果音の各種効果音でユーザが通話相手への気持ち等を表現することができる。
また、BGM選択表示部67は、ユーザが使用可能な例えばタヒチの波の音等のBGM音源データファイルを表示するものであり、更にBGM制御部68により、BGMの再生及び停止、並びにBGMの音量調節を行うことで、サウンドエフェクトと同様、ユーザ自身が選択し、調節した音量により、ユーザの気分やその場の雰囲気を通信相手へ伝えること等ができる。
PCMバッファ調整部69は、上述したように、デコード処理後であって、再生出力前のPCMデータをバッファリングするPCMバッファの容量をユーザが調節可能とするために設けられた操作部であって、例えば高音質実時間音響データをやり取りする際には、バッファ容量を大きくし、低遅延を目的とする実時間音響データをやり取りする場合には、バッファ容量は小さくする等の調整がなされる。
次に、ソフトウェアモジュール1を実行するVoIPクライアントのハードウェア構成について説明する。図5は、VoIPクライアントのハードウェア構成を示すブロック図である。図5に示すように、VoIPクライアント20において、CPU(Central Processing Unit)221は、ROM(Read Only Memory)222に記憶されている上記ソフトウェアモジュールを構成する各種プログラム、又は記憶部228からRAM(Random Access Memory)223にロードされた上述のソフトウェアモジュール1を構成する各種プログラムに従って各種の処理を実行する。また図示せぬタイマが計時動作を行い、時刻情報をCPU221に供給する。RAM223にはまた、CPU221が各種の処理を実行する上において必要なデータ等も適宜記憶される。
CPU221、ROM222及びRAM223は、バス224を介して相互に接続されている。このバス224にはまた、入出力インターフェイス225も接続されている。
入出力インターフェイス225には、キーボード、マウス等よりなる入力部226、CRT、LCD等よりなるディスプレイ、並びに、ヘッドフォンやスピーカ等よりなる出力部227、ハードディスク等より構成される記憶部228、モデム、ターミナルアダプタなどより構成される通信部229が接続されている。
通信部229は、図示せぬインターネットを介しての通信処理を行う。CPU221から提供されたデータを送信する。また通信部229は通信相手から受信したデータをCPU221、RAM223、記憶部228に出力する。記憶部228はCPU221との間でやり取りし、情報の保存・消去を行う。通信部229はまた、他のクライアントとの間で、アナログ信号またはディジタル信号の通信処理を行う。
入出力インターフェイス225にはまた、必要に応じてドライブ230が接続され、磁気ディスク241、光ディスク242、光磁気ディスク243、或いは半導体メモリ244等が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部228にインストールされる。
次に、このようなハードウェア構成のVoIPクライアントが上述の図2に示すソフトウェアモジュール1を構成する各種プログラムを実行することによりVoIP通話を実行する方法について説明する。
図6は、図3に示す一般的なPC向けソフトウェアモジュールのうち、VoIP通話制御部7が制御するRTP/RTCPパケットの送受信機能を説明する図である。図6に示すように、VoIP通話制御部7の制御は、スレッド1〜スレッド5に分けることができる。スレッド1は、送信者がRTPパケットを送信するまでの処理、即ち送信者が発話した音声を含むデータを格納したデータパケットを送信する処理であり、スレッド2、3は、送信されたRTPパケットを受信して再生するまでの処理、即ち上記送信者が通信対象となっている相手の音声を含むデータを聞くまでの処理である。
また、スレッド4は、オペレーティングシステム(OS)3に付随するスレッドライブラリにより自動生成される。スレッドライブラリは、プライオリティに応じてスレッド1、スレッド2及びスレッド3のメインプロセッサ(図5に示すCPU221)上での計算資源配分、即ちスケジューリングを行う。
また、スレッド5は、アプリケーションであるGUI8のメインスレッドであり、スレッド1、スレッド2及びスレッド3を生成したり破棄したりすると共に、プログラミングされたアルゴリズム或いはユーザ操作に応じてスレッド1、スレッド2及びスレッド3の制御を行う。
RTP/RTCPパケットの送信処理であるスレッド1においては、マイクからユーザの音声をキャプチャしてPCMデータを受け取り(Capture)、必要に応じて、BGM合成部5等により、キャプチャサンプル・フレーム毎に、効果音及びBGMと音声とを合成し(Effect or Mixing)、コーデック13は、そのデータを圧縮符号化する(encode)。そして、RTP/RTCP制御部12が圧縮符号化したデータをRTPパケット化し(packet)、送信する(send)。
また、RTPパケットの送信処理とは別に、通信対象の通話装置におけるコーデックの圧縮符号化方式を制御するための制御情報を格納したRTCPパケットの送信処理が行われる。
一方、RTPパケットの受信処理においては、VoIPクライアントの受信側に設けられたデコード処理前後の揺らぎ吸収バッファ、即ち、エンコードされたバイトストリームPCMを格納する揺らぎ吸収バッファ(Forward Jitter buffer)BF1と、デコード処理後に設けられ、デコードされ無圧縮のlinearPCMとされたデータを格納する揺らぎ吸収バッファ(Backward Jitter buffer)(以下、PCMバッファという。)BF2とを使用する。
ここで、揺らぎ吸収バッファBF1は、後述するように、通話相手との間のRTPパケットの受信状態に応じて、伝送の揺らぎを吸収するために必要な容量に自動調整されるものであり、無圧縮のデータを格納するためのPCMバッファBF2の容量は、ユーザが手入力できるようになされており、BGM等が付加されるような高音質なデータのやり取りの際には、ユーザがこれを操作し、PCMバッファBF2の容量を大きく設定しておくことができる。一方、通常の音声のみの通話を行う際等、低遅延で応答性を重視するような場合には、このPCMバッファBF2の容量を例えばゼロに設定することも可能である。
先ず、そして、RTP/RTCPパケットの受信機能のうち、スレッド2では、RTP/RTCP制御部12がRTPパケットを受信し(Receive)、ネットワーク上で発生したデータ損失及び転送パケットのデータエラー等の欠落パケットを補う処理、例えばパケットの再送要求等を行い(parse)、デコード処理前に設けられた揺らぎ吸収バッファBF1に格納する(push&pop)する。これをコーデック13が復号伸張し(decode)、デコード処理後に設けられるPCMバッファBF2に、無圧縮のデータとして格納する(push)。
そして、スレッド3においては、USBカメラドライバ2a、USBオーディオドライバ2b及び各種ドライバ2cが、PCMバッファBF2から無圧縮のデータを読み出し(pop)、この読み出したデータを再生する(sound device)。ここで、このPCMバッファBF2が大きければ、PCMバッファBF2にデータがバッファリングされてから読み出されるまでの時間が長くなる。即ち、受信したパケットの再生予定時刻にゆとりができ、欠落パケットの再送要求をし、これを再生予定時刻までに受信することができる時間的な幅が広がる。
また、スレッド1にて行うエフェクト効果及びBGMと音声との合成(Effect or Mixing)は、スレッド3において、PCMバッファBF2からデータを読み出した後であって、再生する前に行ってもよい。
ここで、デコード処理前に設けられた揺らぎ吸収バッファBF1の容量(バッファサイズ)は、以下のようにして求めることができる。図7は、RTPパケット送信者(RTPSender)としてのVoIPクライアントUASと、RTPパケット受信者(RTPReceiver)としてのVoIPクライアントUARとの間のRTPパケットのやり取りを示す図であって、RTCPを利用したRound Trip Timeの計算方法を示すシーケンス図である。
図7において、Si、Sjは、時刻i、jに送信側VoIPクライアントUASから送られるRTPパケットP(i)、P(j)の送信時刻(Si=10 Nov 1995 11:33:25.125、Sj=10 Nov 1995 11:33:25:145)を示し、Ri、Rjは、時刻i、jに受信側のVoIPクライアントUARが受け取るRTPパケットP(i)、P(j)の到着時刻(Ri=10 Nov 1995 11:37:23.235、Rj=10 Nov 1995 11:37:24.002)を示す。
そして、VoIP通話制御部7は、RTPパケットのタイムスタンプを使用し、RFC1889に記述された下記計算式から、2つのパケットP(i)、P(j)の送信時及び受信時における到着間隔の差Dを求め、これによりジッタJを算出することができる。
D(i,j)=(Rj−Ri)−(Sj−Si)=(Rj−Sj)−(Ri−Si)
J=J+(|D(i−1,i)|−J)/16
これにより、ミリ秒・マイクロ秒単位で、図6に示す、エンコードされた状態の受信データをバッファリングする揺らぎ吸収バッファBF1の容量を算出することができる。
そして、必要に応じて、揺らぎ吸収バッファBF1の容量を自動調整し、自動調整した揺らぎ吸収バッファBF1に対して、RTPパケットを、挿入及び取り出しの順で処理を実行する(スレッド2のpush&pop)。
そして、上述したように、揺らぎ吸収バッファBF1から取り出したバイトストリームをデコードし、必要ならばサウンドデバイスに書き込み再生を行う。ここで、必要に応じてサウンドデバイスに書き込む前に、デコードしたデータをPCMバッファBF2に挿入する。
次に、本実施の形態におけるVoIPシステムにおけるRTP/RTCPパケットについて更に具体的に説明する。
図3に示すSIP制御部11の呼制御により、RTP/RTCPパケットは、RTP/RTCPのセッションを確立した後、送受信が開始される。図8(a)及び(b)は、RTPパケットの夫々構成及びヘッダのフォーマットを示す図であり、図9(a)乃至(c)は、アプリケーションによって拡張可能なRTCP APPパケットの構成、そのヘッダ(RTCP APP Application-defined Header)、及び送信レポートのフォーマット例を示す図である。
RTPは、インターネット等のIPネットワークにおいて、リアルタイムに音声や動画を送信/受信するトランスポート・プロトコルであり、RFC1889で勧告されている。RTPは、トランスポート層に位置し、一般にUDP上でRTCPと共に用いられる。
そして、図8(a)に示すように、RTPパケットは、IPヘッダ、UDPヘッダ、RTPヘッダ及びRTPデータからなる。そして、RTPヘッダには、図8(b)に示すように、先頭から、バージョン情報格納部(V:version、例えばV=2)F1、パディング格納部(P:padding)F2、拡張ビット格納部(X:extension)F3、CSRC(contributing source)カウント格納部(CC)F4、マーカ情報(M:marker)格納部F4、マーカ・ビット格納部(M:maker)F5、ペイロード種別情報格納部(PT:payload type)F6、シーケンス番号情報格納部(sequence number)F7、タイムスタンプ格納部(time stamp)F8、SSRC識別子格納部(synchronization source identifier)F9、CSRC識別子格納部F10が設けられ、CSRC識別子格納部F10の後ろに実時間音響データが付加される。
バージョン情報格納部F1には、RTPのバージョンを示す情報が格納され、例えばRTP2を示すときには、その旨のバージョン情報が格納される。
カウント格納部F4は、ヘッダ中に示されるCSRC(寄与送信元識別子)の数を示す。
ペイロード種別情報格納部F6には、実時間音響データの種類を示す情報が格納され、例えば映像や音声を示す旨の情報等が格納される。
シーケンス番号情報格納部F7には、RTPセッションにおいて、RTPパケットを送受信する度にカウントアップされ、送受信するRTPパケットの順番を認識するためのシーケンス番号が格納される。
タイムスタンプ格納部F8には、実時間音響データを作成、更新した日時に関するタイムスタンプ情報が格納される。
SSRC識別子格納部F9及びCSRC識別子格納部F10には、RTPセッションにおいて、データ送信側のソースを識別するための情報が格納される。SSRC識別子は、同期送信元識別子であり、同一ユーザが組み合わせて扱うべき複数のストリームが同じ値を共有するように割り当てた識別子であり、CSRC識別子は、寄与送信元識別子であり、ストリーム源を示す。複数のストリームがミキシング処理され1つのストリームデータとして提供される場合等に使用される。
図3に示すRTP/RTCP制御部8は、RTPに従って実時間音響データを送信するに際して、上記各格納部に各種情報を格納すると共に、各格納部に格納された各種情報を認識して実時間音響データを抽出する処理をする。
上述のRTPが音声・動画像データそのものを送信/受信するプロトコルであるのに対し、RTCPは、周期的に、パケットロス、遅延ジッタ、ラウンドトリップ等の回線品質を評価し、その帯域に見合ったリアルタイム通信を実現するため情報を送信/受信するプロトコルである。
このRTCPを用いることにより、相手からフィードバックされてくる情報により、ネットワークの状態などを推測して送信レートを変更するなどの動的な処理を行うことができる。また、今誰がデータを送信していて、誰が受信しているかを示す情報もRTCPパケットで同時に送っているので、今現在の参加者の情報を知ることもできる。
図9(a)に示すように、RTCPパケットは、IPヘッダ、UDPヘッダ、RTCPヘッダ及びRTCPデータからなる。そして、拡張可能なRTCPパケットであるRTCP APPパケットのヘッダには、図9(b)に示すように、先頭から、バージョン情報格納部(V:version、例えばV=2)F11、パディング格納部(P:padding)F12、subtype格納部F13、マーカ情報(M:marker)格納部F14、パケットタイプ(PT:packet type)格納部F15、レポート長格納部(length)F16、SSRC/CSRC識別子格納部F17、アスキー(ASCII:American Standard Code for Information、情報交換用アメリカ標準コード)で記述されるName格納部F18が設けられ、この後に、アプリケーション独自のデータが格納されるデータ格納部(Application-Dependent Data)F19が付加される。
パケットタイプPT格納部F15には、RTCPパケットの種別が記録され、本実施の形態においては、このパケットタイプPT=APP(Application:アプリケーション固有情報)=204(パケットタイプ値)と記述される。APPは、RTCP規定外のアプリケーション固有の制御情報を通知するためのパケットであることを示す。
図3に示すRTP/RTCP制御部8は、RTCP APPパケットとして、上述したように、欠落パケットの再送要求をRTPパケットを受信した際のジッタを吸収するために使用するRTPパケット受信のための揺らぎ吸収バッファの容量をデータ格納部F19に記述して送信することができる。そして同時に、VoIP通話制御部3の指示により、通信相手が送信すべき送信データにおける圧縮する周波数成分の情報を記述して送信することができる。
ここで、RTCPパケットには、RTPデータの送信者から送られるタイプのRTCP SR(Sender Report、)パケットと、RTPデータの受信者から送られるタイプのRTCPパケットRTCP RR(Receiver Report、)パケットとがある。
SRパケットは、ストリームを送出している端末から他の端末に対して送出されるもので、自装置が送出したストリームに関する情報である送信情報(sender info)と、受信したストリーム各々についてストリームの受信状態(パケット破棄率、ジッタ等)を送信装置へ報告するためのレポートブロック(reception report block)とを含み、RRパケットは、他の通話装置から受信したスリームに関する情報を通知するためのもので、同じく受信したストリーム各々についてストリームの受信状態を送信装置へ報告するためのレポートブロックを含むものである。
このレポートブロックは、図9(c)に示すように、パケットの送信者の同期送信元(SSRC:Synchronization Source)識別子、RTP損失率、損失RTPパケット数、受信シーケンス番号、到着時間間隔のジッタの平均値、最後に受信したSRの送信時刻(LSR:Last SR timestamp)、最後にSRを受信した時刻からこのRRを送るまでの時間(DLSR:Delay since Last SR)を入れることになっている。
したがって、送信側においては、RTPデータの送信の際に、送信RTPパケット数及び送信RTPバイト数を管理しておき、また、受信側においては、RTPデータの受信の際に、受信RTPパケット数、損失RTPパケット数及び到着時間のジッタ等の管理情報を管理する。
図10は、本実施の形態におけるRTCP APPメッセージの交換時にやりとりされるメッセージを示す図である。RTPのSenderでもありReceiverでもあるUA1とUA2との間でやり取りされるSR(Sender Report)を含むRTCP APPパケット及びRR(Receiver Report)を含むRTCP APPパケットにおいては、図10に示すように、拡張データとして、エンコード帯域幅(Encode Bandwidth)、サブバンド分割ブロック数(sub band Numbers)、デコード処理部前後の揺らぎ吸収バッファ容量(Forward and Backward Jitter Buffer size)、上記吸収バッファにキューイングされているデータサイズ(Buffer queued size)、RTPパケットの再送リクエスト情報(Re-Request:sequence number)を記述することができる。RTPパケットの再送リクエストにはシーケンス番号を利用する。
なお、デコード処理前の揺らぎ吸収バッファBF1の容量及びデコード処理後の揺らぎ吸収バッファであるPCMバッファBF2、並びにこれらバッファにキューイングされているデータサイズは、時間に換算可能である。
ここで、上述したように、本実施の形態におけるVoIPクライアントは、PCMバッファBF2のバッファサイズ(バッファ容量)をユーザ操作に基づき変更することができる。PCMバッファBF2のバッファ容量を変更する場合は、例えば、図4に示すGUI8のバッファ調整部69を使用し、ユーザが必要に応じて適宜調整するようにすればよい。また、RTPパケットの受信側では、RTPパケットの受信ビットレートを常時又は定期的に計測(算出)することができ、算出した受信ビットレートに応じて、ユーザ自身がPCMバッファBF2の容量を調整するようにしてもよい。例えば、受信ビットレートをVoIPクライアントがユーザに通知し、ユーザはこの受信ビットレートを基にPCMバッファBF2の容量を変更してもよい。
そして、このRTCP APPパケットにより、調整したPCMバッファBF2のバッファ容量を通話相手となる他のVoIPクライアントへ通知することにより、他のVoIPクライアントがそのバッファ容量に応じて送信データの伝送レートを変更することができる。更に、吸収バッファにキューイングされているデータサイズ(揺らぎ吸収バッファBF1やPCMバッファBF2にバッファリングされているデータ占有量)から、バッファの空容量を正確に認識することができ、これに基づき伝送レートを変更することができる。
また、VoIPクライアントは、SR(Sender Report)ブロックを含むRTCPパケットを送信してからRR(Receiver Report)ブロックを含むRTCPパケットを受信するまでの時間からDLSR(Delay since Last Sender Report)を差し引いた結果算出するRTT(Round Trip Time)を測定し、これと自身の揺らぎ吸収バッファBF1又はPCMバッファBF2の容量とに基づき、欠落パケットの再送要求を行うことで、特にBGM等の欠落パケットの影響を受けやすいデータを送受信する場合の品質を維持することができる。
即ち、RTTにより、再送要求したパケットが再送されてくるまでの時間情報が得られるため、再送要求したパケットが到着する時刻よりそのパケットのデコードを開始予定時間又はデコードしたデータを再生する再生予定時間が遅いときは、欠落パケットの再送要求を行うことができる。
従って、PCMバッファBF2の容量をユーザ操作により可変とすることにより、パケットが届いてからそのパケットに格納されたデータが再生される再生予定時刻までの間、即ち再送要求できる期間を調整することができ、例えば、音声のみの通話を行うような場合、即ち多少の音質低下よりも遅延が少ないことが重要であるような、必ずしも再送要求する必要がない場合には、PCMバッファBF2の容量を小さく又はゼロに設定しておけばよい。
一方、BGM等の付加データを合成して送受信し合うような場合、即ち多少の遅延よりも高音質であることが重要であるような場合は、PCMバッファBF2の容量を大きくしておけば、欠落パケットの再送要求ができ、ユーザはエラー及び損失がないデータを再生出力させることができる。
また、揺らぎ吸収バッファBF2のバッファ容量の通知を受けた通信相手のVoIPクライアントは、このバッファBF2の容量に応じて、即ち、PCMバッファBF2の容量が大きいときは、伝送ビットレートを上げて高音質な送信データとし、PCMバッファBF2の容量が小さい場合には、例えばBGMを付加せず音声のみを送信することで伝送ビットレートを下げ低遅延を達成するように伝送レートを可変とすることができる。
なお、アプリケーション固有情報APPとして、デコード処理前後の揺らぎ吸収バッファBF1及びBF2のバッファ容量、この揺らぎ吸収バッファBF1及びBF2を占有しているデータ量の情報、欠落パケットの再送要求等の制御情報に加え、受信側のVoIPクライアンが送信側のVoIPクライアントの送信データのエンコード帯域幅及びサブバンド分割ブロック数等を指定する情報を記載することにより、通信相手の圧縮符号化方式を指定することで自身が受信するストリームの伝送レートを制御することも可能である。
本実施の形態においては、圧縮された音声データを復号するデコード処理部の前に、RTPパケットのヘッダを用いて算出したジッタ値分の容量を自動的に確保可能な揺らぎ吸収バッファBF1を用意し、デコード処理部の後に、ユーザが手入力した容量分のPCMバッファである揺らぎ吸収バッファBF2を用意することで、低遅延を望むユーザのニーズと高音質を臨むユーザのニーズとの両方満たすことができる。
即ち、低遅延を重視した自動調整バッファである揺らぎ吸収バッファBF1に加えて、ユーザの手入力で調整できるPCMバッファBF2を用意することで、欠落パケットの再送要求が有効になる時間軸上の幅が広がり、高音質な状態で録音をしたい場合等において、音質を重視した受信が可能になり、低遅延か高音質かのトレードオフをユーザ操作にゆだねることができる。
こうしてVoIPクライアントが受信側となる場合には、低遅延か高音質かの受信状態を選択することができ、送信側となる場合には、通信相手の揺らぎ吸収バッファBF1及びPCMバッファBF2のバッファ容量に応じて、通信相手のニーズに応じた伝送レートの送信データを送信することができる。
1 VoIPクライアントアプリケーション、21 送信手段、22 マイクキャプチャ、23 効果音ファイル読み込み部、24 BGMファイル読み込み部、25,26,31 デコーダ、27,28,29 ゲイン調整部、30 合成部、31 エンコーダ、32 パケット化部、33 送信部、41 受信手段、42 受信部、43 デパケッタイズ部、44 デジッタ部、45 パケット補償部、46 デコーダ、47 読み出し部、48 復号部、49,50,51,52 ゲイン調整部、53 合成部、54 出力部、55 スピーカ、100 VoIP通信システム、111、121 VoIPクライアント、110,120 ユーザ、112,122 ウェブブラウザ、134 ウェブサーバ、113、123 音源データ、130 インターネット