本発明を実施するための実施形態について、図面を用いて説明する。本発明は、以下に記載の構成に限定されるものではなく、同一の技術的思想において種々の構成を採用することができる。例えば、以下に示す構成の一部は、省略し又は他の構成等に置換してもよい。他の構成を含むようにしてもよい。
<遠隔会議システム>
遠隔会議システム10の概略について、図1及び図2を参照して説明する。遠隔会議システム10は、ネットワーク90に接続された2台以上の端末装置を含む。換言すれば、遠隔会議システム10におけるネットワーク90を介した遠隔会議は、遠隔会議に参加する最低2台の端末装置によって実施される。図1では、3台の端末装置21,22,23が図示されている。実施形態では、図1に図示された端末装置21,22によるP2P(Peer to Peer)方式の遠隔会議を例として説明する。但し、端末装置23は、所定の手順を経た場合、端末装置21,22によって実施されているP2P方式の遠隔会議に参加することが可能である。遠隔会議システム10における遠隔会議において、端末装置の台数は、実施される遠隔会議のシチュエーションに応じて変化する。遠隔会議システム10における遠隔会議は、会議IDによって識別される。即ち、端末装置21,22による遠隔会議は、会議IDによって、遠隔会議システム10で実施される他の遠隔会議と識別される。会議IDによって識別される遠隔会議において、端末装置21,22は、端末IDにより識別される。実施形態では、端末装置21の端末IDは、「USER21」とする。端末装置22の端末IDは、「USER22」とする。実施形態の例示とは異なり、端末装置23が端末装置21,22と共に遠隔会議に参加したと仮定した場合における端末装置23の端末IDは、「USER23」とする。
ネットワーク90は、例えば、インターネット又はローカルエリアネットワーク(LAN)のようなネットワークである。端末装置21,22は、同一の遠隔会議に出席しているユーザによってそれぞれ操作される。端末装置21,22は、ネットワーク90を介した通信機能を有する情報処理装置である。端末装置21,22としては、パーソナルコンピュータ、スマートフォン又はタブレット端末が例示される。実施形態では、端末装置21,22として、パーソナルコンピュータが例示されている(図1参照)。
P2P方式の遠隔会議では、例えば、端末装置21のマイク42で集音された音の音フレームから生成された音データが、端末装置21から端末装置22に送信され、端末装置22で受信される。端末装置22のマイクで集音された音の音フレームから生成された音データが、端末装置22から端末装置21に送信され、端末装置21で受信される。音データには、送信元の端末装置の端末IDが含められる。音データを受信した端末装置では、音データに含まれる端末IDによって、送信元の端末装置が特定される。音フレームは、集音された音を、所定のサンプリング周波数(例えば16kHz)でA/D変換して生成された所定時間のデジタルデータである。実施形態において「音」は、空気の振動による物理的な音と、この物理的な音をアナログ信号によって電気的に示した音を含む。即ち、実施形態では、物理的な音と電気的な音を区別することなく、単に「音」という。音フレームの長さは、例えば、20msec/フレームとされる。A/D変換の方式としては、PCM(Pulse Code Modulation)が例示される。音データは、1フレーム分の音フレームをエンコードして生成されたデータである。エンコードの方式としては、G.722.1とSpeexとOPUSが例示される。
例えば、端末装置22から端末装置21に音データが送信されるとする。音フレームの長さは、20msec/フレームとする。この場合、端末装置22では、マイクで集音された音がA/D変換され、音フレームが生成される。音フレームは、送信バッファに記憶される。端末装置22では、20msec分の音フレームが送信バッファに記憶された場合、20msec分の音フレームがエンコードされて音データが生成される。端末装置22では、生成された音フレームが端末装置21に送信され、端末装置21では、この音データが受信される。音データの送信周期は、1フレーム分の音フレームと同じ、20msecとされる。端末装置21では、受信された音データがデコードされて音フレームが取得され、取得された音フレームが、ジッタバッファに記憶される。端末装置21では、ジッタバッファに記憶された音フレームが、ジッタバッファに対して設定された受信バッファ量以上となった場合、ジッタバッファから20msec分の音フレームが、端末装置21にインストールされたOSによるプロセスに20msec間隔で周期的に出力される。端末装置21では、このOSのプロセスによって、音フレームがD/A変換され、D/A変換によって得られた音がスピーカ36から出力される。
P2P方式の遠隔会議では、端末装置21,22でそれぞれ撮影された撮影画像51に対応する映像データが、端末装置21,22の間を送受信される。映像データには、送信元の端末装置の端末IDが含められる。映像データを受信した端末装置では、映像データに含まれる端末IDによって送信元の端末装置が特定される。端末装置21,22では、遠隔会議の実施中、遠隔会議画面50が表示される(図2参照)。遠隔会議画面50は、撮影画像51と、終了ボタン52を含む。遠隔会議画面50では、撮影画像51の表示又は非表示を設定することができる。撮影画像51の表示又は非表示は、端末装置21,22の各撮影画像51に対して個別に設定することができる。図2に示す遠隔会議画面50に基づけば、端末装置21,22の撮影画像51は、共に表示に設定されている。自装置の撮影画像51は、自装置での撮影に応じて取得される映像データに従い表示される。遠隔会議の相手先となる端末装置の撮影画像51は、受信された相手先の端末装置からの映像データに従い表示される。
終了ボタン52は、遠隔会議の終了に対応する操作ボタンである。例えば、端末装置21のユーザは、遠隔会議を終了する場合、終了ボタン52を押下する。この場合、遠隔会議は終了し、端末装置22との接続は、切断される。遠隔会議画面50には、資料画像53が表示される。遠隔会議システム10では、端末装置21,22の間で同一の資料データに対応する資料画像53が共有された状態で、遠隔会議を進行することができる。資料データは、例えば、遠隔会議の実施中に、端末装置21,22のうちの一方から他方に送信される。例えば、資料データの送信元の端末装置が端末装置21である場合、端末装置21では、自装置に記憶されている端末装置22に送信された資料データに従い、資料画像53が表示される。端末装置22では、受信された資料データに従い、資料画像53が表示される。
実施形態では、端末装置21,22の間の音データの送受信に関する動作を中心に説明する。従って、映像データと資料データの送受信に関する説明は、適宜省略する。端末装置21,22の間の映像データと資料データの送受信は、公知の遠隔会議システムと同様に行われる。
<端末装置>
端末装置21について、図1を参照して説明する。端末装置21は、CPU31と、記憶装置32と、RAM33と、表示部34と、操作部35と、スピーカ36と、通信部37と、計時部38と、接続インターフェース39を備える。CPU31と記憶装置32とRAM33と表示部34と操作部35とスピーカ36と通信部37と接続インターフェース39は、バス40に接続される。実施形態では、接続インターフェース39を「接続I/F39」と記載する。接続I/F39には、カメラ41とマイク42が接続される。
CPU31は、演算処理を実行する。記憶装置32は、コンピュータが読み取り可能な記憶媒体である。記憶装置32としては、ハードディスク及び/又はフラッシュメモリが例示される。この他、記憶装置32は、ROMを含むものであってもよい。記憶装置32には、各種のプログラムが記憶される。例えば、OSと各種のアプリケーションが記憶装置32に記憶される。記憶装置32に記憶されるアプリケーションには、遠隔会議用のプログラムが含まれる。遠隔会議用のプログラムには、後述する各処理(図2〜図7と、図8,図9又は図10,図11と、図12参照)のプログラムが含まれる。遠隔会議用のプログラムによれば、所定の端末装置を、遠隔会議システム10における端末装置21,22として動作させることができる。
遠隔会議用のプログラムは、記憶装置32に事前にインストールされていてもよい。事前のインストールは、例えば、半導体メモリ等のコンピュータが読み取り可能な記憶媒体に記憶された遠隔会議用のプログラムが、端末装置21の読取部(不図示)により読み取られることで行われる。端末装置21が、例えば、光学ドライブ(不図示)を備えている場合、事前のインストールは、光学メディアに記憶されたプログラムが、光学ドライブにより読み取られることで行われるようにしてもよい。この他、事前のインストールは、ネットワーク90に接続されたサーバ装置70のハードディスク等のコンピュータが読み取り可能な記憶媒体に記憶された遠隔会議用のプログラムが、通信部37で伝送信号として受信されることで行われるようにしてもよい。サーバ装置70は、例えば、遠隔会議システム10を運用する事業者によって、ネットワーク90上に設けられる。遠隔会議用のプログラムは、遠隔会議の相手先となる端末装置22とのP2P方式での接続に先立ち、端末装置21がサーバ装置70にアクセスした場合に、サーバ装置70からネットワーク90を介して伝送信号として端末装置21に送信されてもよい。遠隔会議用のプログラムは、そのタイミングで、記憶装置32にインストールされるようにしてもよい。この場合、遠隔会議用のプログラムは、RAM33に記憶されてもよい。記憶装置32又はRAM33への遠隔会議用のプログラムのインストールについて、上述した何れの形態とするかは、諸事情を考慮して適宜決定される。コンピュータが読み取り可能な記憶媒体は、一時的な記憶媒体(例えば、伝送信号)を含まない、非一時的な記憶媒体であってもよい。非一時的な記憶媒体は、情報を記憶する期間に関わらず、情報を記憶可能な記憶媒体であればよい。
RAM33は、CPU31が各種のプログラムを実行する際に利用される記憶領域となる。RAM33には、処理の実行途中に、処理で利用される所定のデータ及び情報が所定の領域に記憶される。RAM33には、例えば、送信バッファとジッタバッファと第一領域と第二領域が確保される。送信バッファは、端末装置22に送信される音データが記憶されるRAM33の所定の領域である。ジッタバッファは、遠隔会議の相手先となる端末装置毎に確保される。端末装置毎のジッタバッファは、各端末装置の端末IDに関連付けられる。実施形態では、RAM33に、端末装置22の端末ID「USER22」に関連付けられたジッタバッファが確保される。端末ID「USER22」に関連付けられたジッタバッファには、端末装置22からの音データをデコードして得られる音フレームが記憶される。第一領域は、後述する図9のS149又は図11のS197でジッタ値が記憶されるRAM33の所定の領域である。第二領域は、後述する図12のS213でジッタ値が記憶されるRAM33の所定の領域である。端末装置21では、CPU31が記憶装置32に記憶されたOSと遠隔会議用のプログラムを実行する等して、端末装置21を制御する。これにより、端末装置21では、各種の処理が実行される。
表示部34は、例えば液晶ディスプレイである。表示部34には、各種の情報が表示される。表示部34には、遠隔会議画面50が表示される。操作部35は、端末装置21に対する各種の指示等の入力を受け付ける。操作部35は、キーボード及びマウスを含む。詳細は省略するが、キーボード及びマウスへの各操作に対応する入力情報を生成する処理は、公知のパーソナルコンピュータで採用されている技術であり、端末装置21でも採用される。スピーカ36は、音を出力する音出力部である。スピーカ36での出力対象は、例えば、端末装置22からの音データに対応する音フレームの音である。通信部37は、端末装置21をネットワーク90に接続し、ネットワーク90を介したデータ通信を行う。通信部37は、例えば、イーサネット(登録商標)規格に適合するインターフェース回路である。通信部37によるネットワーク90への接続は、無線接続又は有線接続の何れであってもよい。計時部38は、カレンダ機能及び時計機能等を有し、時間の経過を計測する。計時部38は、OSが有する時計機能により構成されてもよい。
接続I/F39は、端末装置21に所定の装置を接続するインターフェースである。接続I/F39は、例えば、USB(Universal Serial Bus)ポートを含むインターフェースである。接続I/F39は、無線通信モジュールを含むものであってもよい。無線通信モジュールとしては、Bluetooth(登録商標)に対応した通信モジュールが例示される。接続I/F39に接続されたカメラ41は、外界像を撮影する。端末装置21は、カメラを内蔵する構成であってもよい。接続I/F39に接続されたマイク42は、外界音を集音する集音部である。例えば、マイク42は、端末装置21のユーザが発した音声を集音する。
端末装置21は、遠隔会議用のプログラムが記憶装置32又はRAM33に記憶されている点が、公知の端末装置と相違する。但し、端末装置21は、ハードウェア的には、公知の端末装置と同じである。従って、端末装置21は、更に、公知の端末装置が備える構成を備える。端末装置22は、端末装置21と同一又は同種の情報処理装置であって、端末装置21と同様の構成を備える。従って、端末装置22に関する説明は、省略する。
<端末装置で実行される処理>
端末装置21,22による遠隔会議が実施される場合に、端末装置21で実行される各処理について、説明する。以下に説明する各処理のうち、送信処理(図3参照)と第一ジッタ処理(図6参照)と第二ジッタ処理(図7参照)と第一算出処理(図8参照)と第三算出処理(図10参照)は、端末装置21が音データの送信側の端末装置となる場合に実行される処理である。受信処理(図4参照)と再生処理(図5参照)と第二算出処理(図9参照)と第四算出処理(図11参照)と第三ジッタ処理(図12参照)は、端末装置21が音データの受信側の端末装置となる場合に実行される処理である。
端末装置21では、送信処理と受信処理と再生処理と第一ジッタ処理と第二ジッタ処理と第三ジッタ処理が、遠隔会議の相手先となる端末装置22とネットワーク90を介して接続されたタイミングで開始される。更に、端末装置21では、第一算出処理と第二算出処理、又は第三算出処理と第四算出処理が、前述したタイミングで開始される。端末装置22でも、図3〜図12に示す各処理が、端末装置21と同様、遠隔会議の相手先となる端末装置21とネットワーク90を介して接続されたタイミングで開始される。
遠隔会議システム10では、P2P方式の遠隔会議が実施される公知の遠隔会議システムと同様、所定のユーザによって、事前に遠隔会議の開催が予約される。予約は、サーバ装置70によって提供される所定のサイトに登録される。予約の際、例えば、遠隔会議の開催を、出席者に通知することができる。この通知は、例えば、電子メールを用いて行われる。即ち、電子メールの本文には、遠隔会議の開催日時と、今回の遠隔会議が特定されたURLが含められる。遠隔会議を特定する情報としては、会議IDが例示される。前述のURLには、会議IDを含めるようにしてもよい。
端末装置21では、操作部35を介して、上記のURLを対象とした操作が入力される。この操作が入力された場合、CPU31は、遠隔会議用のプログラムを起動する。これに伴い、端末装置21は、サーバ装置70と通信可能な状態となる。端末装置22でも同様の操作が行われ、遠隔会議用のプログラムが起動される。これに伴い、端末装置22は、サーバ装置70と通信可能な状態となる。遠隔会議システム10では、端末装置21,22がサーバ装置70とそれぞれ通信可能な状態で、端末装置21,22を通信可能とするための所定の手順が実行される。端末装置21,22は、このような手順等を経て、直接通信可能な状態となる。遠隔会議システム10で、端末装置21,22を直接通信可能な状態とするために実行される手順としては、P2P方式の通信が行われる公知のシステムで採用されている公知の手順を採用することができる。前述の公知のシステムには、P2P方式の遠隔会議が実施可能な公知の遠隔会議システムが含まれる。従って、これに関する説明は、省略する。
<送信処理>
送信処理について、図3を参照して説明する。CPU31は、音フレームが取得されたかを判断する(S11)。CPU31が取得する音フレームは、上述した通り、マイク42で集音された音を所定のサンプリング周波数(例えば16kHz)でA/D変換した、所定時間分(例えば、20msec)の波形データである。音フレームが取得されていない場合(S11:No)、CPU31は、処理をS23に移行する。音フレームが取得された場合(S11:Yes)、CPU31は、取得された音フレームが無音状態であるかを判断する(S13)。
音フレームが無音状態であるかの判断は、例えば、音フレームのボリューム(dB)を検出し、検出された音フレームのボリュームと、予め決定された閾値とを比較して行われる。ボリュームの検出は、例えば、S11で取得された音フレームの波形のレベルを検出して行われる。S11で取得された音フレームは複数のサンプリング点を含むため、例えば、所定時間内に含まれる複数のサンプリング点の平均レベルが音フレームのボリュームとして検出される。複数のサンプリング点の最大レベルを音フレームのボリュームとして検出してもよい。判断基準となる前述の閾値は、遠隔会議システム10で開催される遠隔会議に出席しているユーザが、遠隔会議において発言したと判断できる場合の音声のボリュームを考慮して予め決定される。音フレームのボリュームが閾値未満である場合、無音状態と判断される。音フレームのボリュームが閾値より大きい場合、無音状態ではない有音状態と判断される。音フレームのボリュームが閾値と等しい場合、無音状態又は有音状態とするかは、諸条件を考慮して適宜設定される。閾値は、例えば、送信処理のプログラムに関連付けて記憶装置32又はRAM33に記憶される。閾値は、例えば背景のノイズレベル等に応じて、適宜変更されてもよい。
この他、音フレームが無音状態であるかの判断は、周波数解析等、公知の音処理技術によって行われてもよい。例えば、音フレームをフーリエ変換することで複数のピーク周波数を特定し、特定された複数のピーク周波数のパターンが人間の声のパターンに対応するかを判断することで、音フレームが無音状態であるかの判断が行われてもよい。
音フレームが無音状態でない場合(S13:No)、CPU31は、音フラグをONにセットする(S15)。音フラグは、取得された音フレームが、有音状態(音フラグ:ON)であるか、無音状態(音フラグ:OFF)であるかを示す情報である。音フラグは、RAM33の所定の領域に記憶される。続けて、CPU31は、取得された音フレームをエンコードして音データを生成する(S17)。CPU31は、生成された音データを送信させる(S19)。音データの送信先は、遠隔会議の相手先となる端末装置22とされる。CPU31は、音データの送信指令を通信部37に出力する。送信指令に従い、音データが、通信部37から端末装置22へと送信される。送信処理では、音データの生成及び送信の周期は、1フレーム分の音フレームの長さ(例えば、20msec)と同じとされる。実施形態の例示とは異なり、遠隔会議が、端末装置21,22,23の3台の端末装置で実施されている場合、又は3台以上の端末装置で実施されている場合、S17でCPU31は、音データを、自装置と通信可能に接続された各端末装置に順次送信する。その後、CPU31は、処理をS23に移行する。音フレームが無音状態である場合(S13:Yes)、CPU31は、音フラグをOFFにセットする(S21)。その後、CPU31は、処理をS23に移行する。
S23でCPU31は、終了指示を取得したかを判断する。遠隔会議を終了させる場合、端末装置21のユーザは、操作部35を操作し、終了ボタン52を押下する。CPU31は、終了ボタン52の押下が操作部35で受け付けられた場合、終了指示を取得する。終了指示が取得されていない場合(S23:No)、CPU31は、処理をS11に戻す。その後、CPU31は、再度、S11以降の処理を実行する。終了指示が取得された場合(S23:Yes)、CPU31は、送信処理を終了する。この場合、CPU31は、遠隔会議の相手先である端末装置22との間の接続を切断する。これに伴い、端末装置21での遠隔会議は、終了する。
<受信処理>
受信処理について、図4を参照して説明する。CPU31は、開始させた受信処理の対象となる、遠隔会議の相手先となる端末装置を識別する(S31)。実施形態では、端末装置22が識別され、実行中の受信処理は、端末ID「USER22」に対応させて実行される。実施形態の例示とは異なり、遠隔会議が、3台以上の端末装置で実施されている場合、端末装置21では、遠隔会議の相手先となる端末装置の数だけ、受信処理が開始され、S31で、各受信処理の対象となる端末装置が識別される。例えば、遠隔会議が、端末装置21,22,23の3台で実施されている場合、端末装置21では、2個の受信処理が開始される。2個の受信処理のうちの1個の受信処理では、端末装置22が識別され、この受信処理は、端末ID「USER22」に対応させて実行される。2個の受信処理のうちの他の1個の受信処理では、端末装置23が識別され、この受信処理は、端末ID「USER23」に対応させて実行される。
CPU31は、受信処理が対応する端末IDを含む音データが取得されたかを判断する(S33)。音データは、端末装置22で実行中の図3のS17で、端末装置22から端末装置21に送信される。端末装置21では、端末装置22からの音データが、通信部37で受信される。CPU31は、通信部37を介して音データを取得する。受信処理が対応する端末IDを含む音データが取得されていない場合(S33:No)、CPU31は、処理をS39に移行する。受信処理が対応する端末IDを含む音データが取得された場合(S33:Yes)、CPU31は、取得された音データをデコードする(S35)。CPU31は、デコードによって取得された音フレームを、受信処理が対応する端末IDに関連付けられたジッタバッファに記憶させる(S37)。その後、CPU31は、処理をS39に移行する。
S39でCPU31は、終了指示が取得されたかを判断する。S39は、図3のS23と同じ処理である。従って、S39に関する説明は、省略する。終了指示が取得されていない場合(S39:No)、CPU31は、処理をS33に戻す。その後、CPU31は、再度、S33以降の処理を実行する。終了指示が取得された場合(S39:Yes)、CPU31は、受信処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<再生処理>
再生処理について、図5を参照して説明する。CPU31は、開始させた再生処理の対象となる、遠隔会議の相手先となる端末装置を識別する(S41)。実施形態では、端末装置22が識別され、再生処理は、端末ID「USER22」に対応させて実行される。実施形態の例示とは異なり、例えば、遠隔会議が端末装置21,22,23の3台の端末装置で実施されている場合、端末装置21では、端末ID「USER22」と「USER23」にそれぞれ対応させた2個の再生処理が実行される。この点については、上述した受信処理と同様である。
次に、CPU31は、再生処理が対応する端末IDに関連付けられた計時部38でのカウントが第一サイクル時間を経過したかを判断する(S43)。第一サイクル時間は、1フレーム分の音フレームの長さ(例えば、20msec)とされる。CPU31は、S41を実行した後、計時部38での第一サイクル時間のカウントを開始させる。計時部38では、再生処理が対応する端末IDに関連付けて第一サイクル時間がカウントされる。CPU31は、再生処理が対応する端末IDに関連付けられた計時部38によるカウントが第一サイクル時間を経過した場合(S43:Yes)、計時部38によるカウントを、再始動させる。即ち、端末装置21では、第一サイクル時間のカウントが繰り返される。再生処理が対応する端末IDに関連付けられた計時部38によるカウントが第一サイクル時間を経過していない場合(S43:No)、CPU31は、処理をS59に移行する。前述の計時部38によるカウントが第一サイクル時間を経過した場合(S43:Yes)、CPU31は、再生処理が対応する端末IDに関連付けられた再生フラグがONであるかを判断する(S45)。再生フラグは、再生処理が対応する端末IDに関連付けられたジッタバッファに記憶された音フレームの再生が実行中(再生フラグ:ON)であるか、前述の音フレームの再生が未実行(再生フラグ:OFF)であるかを示す情報である。再生フラグは、S49又はS57でセットされ、RAM33の所定の領域に、再生処理が対応する端末IDに関連付けられた状態で記憶される。
再生処理が対応する端末IDに関連付けられた再生フラグがONである場合(S45:Yes)、CPU31は、再生処理が対応する端末IDに関連付けられたジッタバッファに、OSのプロセスに出力可能な音フレームが記憶されているかを判断する(S47)。前述のOSのプロセスは、音フレームをD/A変換し、D/A変換によって得られた音をスピーカ36から出力させるプロセスである。前述のジッタバッファにOSのプロセスに出力可能な音フレームが記憶されていない場合(S47:No)、CPU31は、再生処理が対応する端末IDに関連付けられた再生フラグをOFFにセットする(S49)。これに伴い、前述の再生フラグは、ONからOFFに更新される。その後、CPU31は、処理をS59に移行する。前述のジッタバッファにOSのプロセスに出力可能な音フレームが記憶されている場合(S47:Yes)、CPU31は、このジッタバッファから1フレーム分の音フレームを取得し、OSのプロセスに、取得された1フレーム分の音フレームを出力する(S51)。これに伴い、OSのプロセスは、この音フレームをD/A変換し、D/A変換によって得られた音をスピーカ36から出力させる。その後、CPU31は、処理をS59に移行する。
再生処理が対応する端末IDに関連付けられた再生フラグがONでない場合(S45:No)、CPU31は、再生処理が対応する端末IDに関連付けられたジッタバッファに記憶された音フレームのデータ量が、このジッタバッファの受信バッファ量以上であるかを判断する(S53)。なお、S53の判断条件は、「音フレームのデータ量>受信バッファ量」としてもよい。受信バッファ量は、ジッタバッファに記憶された音フレームを、ジッタバッファからOSのプロセスに出力する場合の基準となるバッファ量である。即ち、端末装置21では、ジッタバッファに記憶された音フレームのデータ量と、このジッタバッファの受信バッファ量が比較され、その結果に応じて、ジッタバッファに記憶された音フレームの出力又は未出力が決定される。受信バッファ量は、後述するように、遠隔会議の相手先となる端末装置22との間のデータ通信におけるジッタ値に対応する設定情報に従い設定される。
再生処理が対応する端末IDに関連付けられたジッタバッファに記憶された音フレームのデータ量が、このジッタバッファの受信バッファ量以上である場合(S53:Yes)、CPU31は、再生処理が対応する端末IDに関連付けられた再生フラグをONにセットする(S55)。前述の再生フラグがOFFである場合、この再生フラグは、OFFからONに更新される。続けて、CPU31は、前述のジッタバッファから1フレーム分の音フレームを取得し、OSのプロセスに、取得された1フレーム分の音フレームを出力する(S57)。これに伴い、OSのプロセスは、この音フレームをD/A変換し、D/A変換によって得られた音をスピーカ36から出力させる。再生処理が対応する端末IDに関連付けられたジッタバッファに記憶された音フレームのデータ量が、このジッタバッファの受信バッファ量以上でない場合(S53:No)又はS57を実行した後、CPU31は、処理を図5のS59に移行する。
S59でCPU31は、終了指示が取得されたかを判断する。S59は、図3のS23と同じ処理である。従って、S59に関する説明は、省略する。終了指示が取得されていない場合(S59:No)、CPU31は、処理をS43に戻す。その後、CPU31は、再度、S43以降の処理を実行する。終了指示が取得された場合(S59:Yes)、CPU31は、再生処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<第一ジッタ処理>
第一ジッタ処理について、図6を参照して説明する。CPU31は、遠隔会議の相手先となる端末装置の1台を選択する(S71)。実施形態では、遠隔会議の相手先となる端末装置は、端末装置22、1台であるため、S61では、端末装置22が選択される。実施形態の例示とは異なり、例えば、遠隔会議が端末装置21,22,23の3台の端末装置で実施されている場合、第一ジッタ処理を開始後、遠隔会議が終了するまでの間、端末装置22と端末装置23が交互に選択される。即ち、S71では、遠隔会議の相手先となる端末装置が1台である場合、その端末装置が繰り返して選択される一方、遠隔会議の相手先となる端末装置が複数である場合、複数の端末装置の中から、各端末装置が一定の順序で繰り返して選択される。
次に、CPU31は、音フラグがOFFであるかを判断する(S73)。音フラグは、図3のS15又はS21でRAM33に記憶される。音フラグがOFFでない場合(S73:No)、CPU31は、第一ジッタフラグがOFFであるかを判断する(S75)。第一ジッタフラグは、ジッタ値の算出に関連した処理(図8又は図10参照)の実行(第一ジッタフラグ:ON)又は未実行(第一ジッタフラグ:OFF)を指示する情報である。S75〜S81の対象とされる第一ジッタフラグは、S71で選択された端末装置の端末IDに関連付けられた第一ジッタフラグとされる。第一ジッタフラグは、S71で選択された端末装置の端末IDに関連付けられた状態で、RAM33の所定の領域に記憶される。第一ジッタ処理の説明では、S71で選択された端末装置の端末IDに関連付けられた第一ジッタフラグを、「処理対象の第一ジッタフラグ」という(但し、図6では、単に「第一ジッタフラグ」と記載)。実施形態では、処理対象の第一ジッタフラグは、端末ID「USER22」に関連付けられた第一ジッタフラグである。処理対象の第一ジッタフラグがOFFである場合(S75:Yes)、CPU31は、処理対象の第一ジッタフラグをONにセットする(S77)。これに伴い、処理対象の第一ジッタフラグは、OFFからONに更新される。その後、CPU31は、処理をS89に移行する。
音フラグがOFFである場合(S73:Yes)、CPU31は、処理対象の第一ジッタフラグがONであるかを判断する(S79)。処理対象の第一ジッタフラグがONである場合(S79:Yes)、CPU31は、処理対象の第一ジッタフラグをOFFにセットする(S81)。これに伴い、処理対象の第一ジッタフラグは、ONからOFFに更新される。処理対象の第一ジッタフラグがONでない場合(S79:No)又はS81を実行した後、CPU31は、自装置において、ネットワーク90を介した遠隔会議におけるデータ通信の通信状況が変化したかを判断する(S83)。
通信状況は、例えば、遠隔会議が端末装置21,22の2台の端末装置で実施されている状態で、端末装置23がこの遠隔会議に参加した場合に変化する。この場合、端末装置21,22,23の各端末装置は、P2P方式で接続される。端末装置21における音データの送信先は、1台の端末装置22から、2台の端末装置22,23へと変化する。端末装置21で受信される音データの送信元は、1台の端末装置22から、2台の端末装置22,23へと変化する。通信状況は、遠隔会議システム10における遠隔会議において実現される各種の機能のうち、未使用の機能を新たに開始(例えば、資料画像53が共有されていない状態において、資料画像53の共有が開始)された場合に変化する。例えば、資料画像53の共有が開始された場合、端末装置21,22の間を、資料画像53に対応する資料データが送受信される。この他、通信状況は、端末装置21におけるデータ通信の通信帯域が切り替わった場合に変化する。通信状況が変化した場合は、前述したような場合の他、諸条件を考慮して予め定められる。端末装置21では、通信状況の変化が適宜検出される。
通信状況が変化していない場合(S83:No)、CPU31は、ジッタリクエストが取得されたかを判断する(S85)。ジッタリクエストは、ジッタ値の算出の開始を指示する開始要求である。ジッタリクエストは、遠隔会議の相手先となる端末装置22で実行される図12のS221で、端末装置22から端末装置21に送信される。端末装置21では、ジッタリクエストが、通信部37で受信される。CPU31は、通信部37を介してジッタリクエストを取得する。通信状況が変化した場合(S83:Yes)又はジッタリクエストが取得された場合(S85:Yes)、CPU31は、第二ジッタフラグをONにセットする(S87)。第二ジッタフラグは、音フラグがOFFの状態において、ジッタ値の算出に関連した処理の実行(第二ジッタフラグ:ON)又は未実行(第二ジッタフラグ:OFF)を指示する情報である。第二ジッタフラグは、RAM33の所定の領域に記憶される。ジッタリクエストは、送信元の端末装置22の端末ID「USER22」を含む。第二ジッタフラグは、ジッタリクエストに含まれる端末IDに関連付けられた状態で記憶される。ジッタリクエストが取得されていない場合(S85:No)又はS87を実行した後、CPU31は、処理をS89に移行する。
S89でCPU31は、終了指示が取得されたかを判断する。S89は、図3のS23と同じ処理である。従って、S89に関する説明は、省略する。終了指示が取得されていない場合(S89:No)、CPU31は、処理をS71に戻す。その後、CPU31は、S71で、遠隔会議の相手先となる端末装置の1台を、上述したように選択し、再度、S73以降の処理を実行する。終了指示が取得された場合(S85:Yes)、CPU31は、第一ジッタ処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<第二ジッタ処理>
第二ジッタ処理について、図7を参照して説明する。第二ジッタ処理は、遠隔会議の相手先となる端末装置毎に実行される。実施形態では、第二ジッタ処理は、端末装置22の端末ID「USER22」に対応させて実行される。実施形態の例示とは異なり、例えば、遠隔会議が端末装置21,22,23の3台の端末装置で実施されている場合、端末装置21では、端末ID「USER22」と「USER23」にそれぞれ対応させた2個の第二ジッタ処理が実行される。
CPU31は、第二ジッタ処理が対応する端末IDに関連付けてRAM33に記憶された第二ジッタフラグがONであるかを判断する(S91)。第二ジッタ処理の説明では、第二ジッタ処理が対応する端末IDに関連付けられた第二ジッタフラグを、「処理対象の第二ジッタフラグ」という(但し、図7では、単に「第二ジッタフラグ」と記載)。実施形態では、処理対象の第二ジッタフラグは、端末ID「USER22」に関連付けられた第二ジッタフラグである。処理対象の第二ジッタフラグがONでない場合(S91:No)、CPU31は、処理をS109に移行する。処理対象の第二ジッタフラグがONである場合(S91:Yes)、CPU31は、第二ジッタ処理が対応する端末IDに関連付けてRAM33に記憶された第一ジッタフラグをONにセットする(S93)。第二ジッタ処理の説明では、第二ジッタ処理が対応する端末IDに関連付けられた第一ジッタフラグを、「処理対象の第一ジッタフラグ」という(但し、図7では、単に「第一ジッタフラグ」と記載)。これに伴い、処理対象の第一ジッタフラグは、OFFからONに更新される。実施形態では、処理対象の第一ジッタフラグは、端末ID「USER22」に関連付けられた第一ジッタフラグである。
続けて、CPU31は、ダミーデータを生成する。生成されたダミーデータは、RAM33の所定の領域に記憶される。ダミーデータは、何れの形式のデータであってもよい。ダミーデータのデータ量は、一定量とされる。例えば、ダミーデータは、任意の音の音フレームをエンコードして生成された音データとされる。ダミーデータとしての音データの元となる音フレームは、図3の送信処理で取得される音フレーム(図3のS11:Yes参照)と、同じサンプリング周波数で且つ同じ時間分(例えば、20msec)の音フレームとされる。この場合、ダミーデータの元となる音フレームは、例えば、第二ジッタ処理のプログラムに関連付けて記憶装置32又はRAM33に記憶される。ダミーデータを、予め第二ジッタ処理のプログラムに関連付けて記憶装置32又はRAM33に記憶するようにしてもよい。この場合、S95では、予め第二ジッタ処理のプログラムに関連付けて記憶装置32又はRAM33に記憶されたダミーデータが、前述したRAM33の所定の領域に読み出される。
S95を実行した後、CPU31は、計時部38での、第二サイクル時間のカウントと、S95の実行後の継続時間のカウントを開始させる。第二サイクル時間は、図5のS43の第一サイクル時間と同様、1フレーム分の音フレームの長さ(例えば、20msec)とされる。第二ジッタ処理の説明では、計時部38での第二サイクル時間のカウントを、「第一カウント」といい、計時部38でのS95の実行後の継続時間のカウントを、「第二カウント」という。第一カウントと第二カウントは、第二ジッタ処理が対応する端末IDに関連付けられた状態で実行される。CPU31は、第二ジッタ処理が対応する端末IDに関連付けられた第一カウントが第二サイクル時間を経過したかを判断する(S97)。第二ジッタ処理が対応する端末IDに関連付けられた第一カウントが第二サイクル時間を経過していない場合(S97:No)、CPU31は、S97を繰り返して実行する。第二ジッタ処理が対応する端末IDに関連付けられた第一カウントが第二サイクル時間を経過した場合(S97:Yes)、CPU31は、ダミーデータを送信させる(S99)。ダミーデータの送信先は、第二ジッタ処理が対応する端末IDの端末装置22とされる。CPU31は、ダミーデータの送信指令を通信部37に出力する。送信指令に従い、ダミーデータが、通信部37から端末装置22へと送信される。S91が肯定(S91:Yes)された後の最初のS95の実行後については、S97は、省略するようにしてもよい。
S99を実行した後、CPU31は、RAM33に記憶された音フラグがONであるかを判断する(S101)。音フラグがONでない場合(S101:No)、CPU31は、第二ジッタ処理が対応する端末IDに関連付けられた第二カウントが継続時間を経過したかを判断する(S103)。継続時間が経過していない場合(S103:No)、CPU31は、処理をS97に戻す。その後、再度、S97以降の処理を実行する。即ち、第二ジッタ処理では、S95を実行した後、継続時間が経過するまでの間、S99でダミーデータが、第二サイクル時間毎に繰り返して送信される。換言すれば、第二ジッタ処理では、S95を実行した後、継続時間が経過するまでの間、S99でダミーデータが、図3のS19で音データが送信される時間間隔と同じ時間間隔で、繰り返して送信される。
継続時間は、第二サイクル時間毎のダミーデータの送信を継続させ、後述する図9のS145又は図10のS173で、図9のS147又は図10のS175の判断基準とされる基準数以上の第一差分情報又は第二差分情報が取得できる期間を考慮して適宜決定される。継続時間が経過した場合(S103:Yes)、CPU31は、処理対象の第一ジッタフラグをOFFにセットする(S105)。音フラグがONである場合(S101:Yes)又はS105を実行した後、CPU31は、処理対象の第二ジッタフラグをOFFにセットする(S107)。その後、CPU31は、処理をS109に移行する。
S109でCPU31は、終了指示が取得されたかを判断する。S109は、図3のS23と同じ処理である。従って、S109に関する説明は、省略する。終了指示が取得されていない場合(S109:No)、CPU31は、処理をS91に戻す。その後、CPU31は、再度、S91以降の処理を実行する。終了指示が取得された場合(S109:Yes)、CPU31は、第二ジッタ処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<算出処理>
算出処理について、2つの実施例を説明する。第一実施例における、第一算出処理(図8参照)と第二算出処理(図9参照)は、端末装置21と端末装置22の間の一方向のデータ通信におけるジッタに関連する処理である。第二実施例における、第三算出処理(図10参照)と第四算出処理(図11参照)は、端末装置21と端末装置22の間を往復するデータ通信におけるジッタに関連する処理である。遠隔会議システム10では、図3〜図7と図12の各処理と共に、第一実施例の第一算出処理及び第二算出処理又は第二実施例の第三算出処理及び第四算出処理が、遠隔会議に参加する端末装置21,22で実行される。
第一算出処理と第二算出処理と第三算出処理と第四算出処理の各算出処理は、遠隔会議の相手先となる端末装置毎に実行される。実施形態では、各算出処理は、端末装置22の端末ID「USER22」に対応させて実行される。実施形態の例示とは異なり、例えば、遠隔会議が端末装置21,22,23の3台の端末装置で実施されている場合、端末装置21では、端末ID「USER22」と「USER23」にそれぞれ対応させた2個の各算出処理が実行される。
<第一実施例>
<第一算出処理>
第一算出処理について、図8を参照して説明する。CPU31は、第一算出処理の開始に合わせ、計時部38での繰り返し時間のカウントを開始させる。計時部38での繰り返し時間のカウントは、第一算出処理が対応する端末IDに関連付けられた状態で実行される。繰り返し時間は、後述するS127で送信される算出データの送信間隔として予め設定されている。繰り返し時間は、数秒〜数十秒程度の時間とされる。例えば、繰り返し時間は、2秒とされる。繰り返し時間は、第一算出処理のプログラムに関連付けて記憶装置32又はRAM33に記憶される。
CPU31は、第一算出処理が対応する端末IDに関連付けてRAM33に記憶された第一ジッタフラグがONであるかを判断する(S121)。第一算出処理の説明では、第一算出処理が対応する端末IDに関連付けられた第一ジッタフラグを、「処理対象の第一ジッタフラグ」という(但し、図8では、単に「第一ジッタフラグ」と記載)。処理対象の第一ジッタフラグがONでない場合(S121:No)、CPU31は、処理をS129に移行する。処理対象の第一ジッタフラグがONである場合(S121:Yes)、CPU31は、第一算出処理が対応する端末IDに関連付けられた計時部38でのカウントが繰り返し時間を経過したかを判断する(S123)。前述の計時部38によるカウントが繰り返し時間を経過していない場合(S123:No)、CPU31は、処理をS129に移行する。
第一算出処理が対応する端末IDに関連付けられた計時部38でのカウントが繰り返し時間を経過した場合(S123:Yes)、CPU31は、第一時間情報を取得し(S125)、算出データを送信させる(S127)。第一時間情報は、S127が実行されるタイミングを示す情報である。第一時間情報は、例えば、S125実行時の時刻とされる。S125とS127は、連続して実行される。従って、S125実行時の時刻は、S127実行時の時刻とみなすことができる。CPU31は、第一時間情報として、計時部38で計測されている現在時刻を取得する。実施形態では、第一時間情報と後述する第三時間情報(図9のS143参照)は、計時部38で計測されている現在時刻とする。算出データは、ジッタ値の算出に用いられるデータである。算出データは、第一時間情報と、算出データの送信元の端末装置21の端末ID「USER21」を含む。実施形態では、算出データの送信先は、第一算出処理が対応する端末IDの端末装置22とされる。CPU31は、第一時間情報の送信指令を通信部37に出力する。送信指令に従い、第一時間情報が、通信部37から端末装置22へと送信される。その後、CPU31は、処理をS129に移行する。
S129でCPU31は、終了指示が取得されたかを判断する。S129は、図3のS23と同じ処理である。従って、S129に関する説明は、省略する。終了指示が取得されていない場合(S129:No)、CPU31は、処理をS121に戻す。その後、CPU31は、再度、S121以降の処理を実行する。終了指示が取得された場合(S121:Yes)、CPU31は、第一算出処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<第二算出処理>
第二算出処理について、図9を参照して説明する。CPU31は、第二算出処理が対応する端末IDを含む算出データが取得されたかを判断する(S141)。このような算出データは、遠隔会議の相手先となる端末装置22で実行される図8のS127で、端末装置22から端末装置21に送信される。端末装置21では、算出データが、通信部37で受信される。CPU31は、通信部37を介して算出データを取得する。前述の算出データが取得されていない場合(S141:No)、CPU31は、処理をS151に移行する。
第二算出処理が対応する端末IDを含む算出データが取得された場合(S141:Yes)、CPU31は、計時部38から第三時間情報を取得する(S143)。第三時間情報は、上述した通り、現在時刻である。CPU31は、取得された第三時間情報から、取得された算出データに含まれる第一時間情報を差し引いた値を取得する(S145)。実施形態では、第三時間情報と第一時間情報の差分となる時間情報を、「第一差分情報」という。第一差分情報は、第二算出処理が対応する端末IDに関連付けてRAM33の所定の領域に記憶される。
次に、CPU31は、第二算出処理が対応する端末IDに関連付けてRAM33に記憶された第一差分情報の数(第一差分情報数)が基準数以上であるかを判断する(S147)。基準数は、複数の第一差分情報からジッタ値を算出するに際し、ジッタ値の精度等を考慮して適宜設定される。なお、S145の判断条件は、「第一差分情報数>基準数」としてもよい。第一差分情報数が基準数以上である場合(S147:Yes)、CPU31は、第二算出処理が対応する端末IDに関連付けてRAM33に記憶された基準数以上の第一差分情報からジッタ値を算出し、算出されたジッタ値を記憶させる(S149)。ジッタ値は、複数の第一差分情報の標準偏差に対応する。今回算出されたジッタ値は、第二算出処理が対応する端末IDに関連付けられた状態で、RAM33の第一領域に記憶される。既に、第二算出処理が対応する端末IDに関連付けられたジッタ値がRAM33の第一領域に記憶されている場合、ジッタ値は、新たに算出されたジッタ値に更新される。CPU31は、ジッタ値の算出後、第二算出処理が対応する端末IDに関連付けてRAM33に記憶された複数の第一差分情報を消去する。第一差分情報数が基準数以上でない場合(S147:No)又はS149を実行した後、CPU31は、処理をS151に移行する。
S151でCPU31は、終了指示が取得されたかを判断する。S151は、図3のS23と同じ処理である。従って、S151に関する説明は、省略する。終了指示が取得されていない場合(S151:No)、CPU31は、処理をS141に戻す。その後、CPU31は、再度、S141以降の処理を実行する。終了指示が取得された場合(S151:Yes)、CPU31は、第二算出処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<第二実施例>
<第三算出処理>
第三算出処理について、図10を参照して説明する。CPU31は、第三算出処理を開始後、S161〜S167を実行する。CPU31は、S161が否定された場合(S161:No)、処理をS181に移行する。CPU31は、S163が否定された場合(S163:No)、処理をS169に移行する。S161〜S167は、図8のS121〜S127と同じ処理である。従って、S161〜S167に関するこの他の説明は、省略する。S169でCPU31は、第三算出処理が対応する端末IDを含む応答データが取得されたかを判断する。このような応答データは、遠隔会議の相手先となる端末装置22で実行される図11のS193で、端末装置22から端末装置21に送信される。応答データは、第一時間情報と、応答データの送信元の端末装置22の端末ID「USER22」を含む。端末装置21では、応答データが、通信部37で受信される。CPU31は、通信部37を介して応答データを取得する。
第三算出処理が対応する端末IDを含む応答データが取得されていない場合(S169:No)、CPU31は、処理をS181に移行する。前述の応答データが取得された場合(S169:Yes)、CPU31は、計時部38から第二時間情報を取得する(S171)。第二時間情報は、応答データが取得されたタイミングを示す、第一時間情報に対応する情報である。実施形態では、第二時間情報は、図8のS125(S127)実行時の時刻に対応させ、S171実行時の時刻とされる。CPU31は、取得された第二時間情報から、取得された応答データに含まれる第一時間情報を差し引いた値を取得する(S173)。実施形態では、第二時間情報と第一時間情報の差分となる時間情報を、「第二差分情報」という。第二差分情報は、第三算出処理が対応する端末IDに関連付けてRAM33の所定の領域に記憶される。
次に、CPU31は、第三算出処理が対応する端末IDに関連付けてRAM33に記憶された第二差分情報の数(第二差分情報数)が基準数以上であるかを判断する(S175)。基準数は、図9のS147における基準数と同様、複数の第二差分情報からジッタ値を算出するに際し、ジッタ値の精度等を考慮して適宜設定される。なお、S175の判断条件は、「第二差分情報数>基準数」としてもよい。第二差分情報数が基準数以上である場合(S175:Yes)、CPU31は、第三算出処理が対応する端末IDに関連付けてRAM33に記憶された基準数以上の第二差分情報数からジッタ値を算出する(S177)。ジッタ値は、複数の第二差分情報の標準偏差に対応する。なお、ジッタ値として、複数の第二差分情報をそれぞれ2で割った値の標準偏差が用いられてもよい。CPU31は、ジッタ値を算出後、第三算出処理が対応する端末IDに関連付けてRAM33に記憶された複数の第二差分情報を消去する。続けて、CPU31は、設定データを送信させる(S179)。設定データには、算出されたジッタ値に対応する設定情報と、送信元の端末装置21の端末ID「USER21」が含められる。ジッタ値に対応する設定情報は、ジッタ値自体であってもよい。設定情報は、S217で用いられる受信バッファ量自体であってもよい。即ち、設定情報は、ジッタ値を基に算出された所定の値であってもよい。設定データの送信先は、第三算出処理が対応する端末IDの端末装置22とされる。CPU31は、設定データの送信指令を通信部37に出力する。送信指令に従い、設定データが、通信部37から端末装置22へと送信される。第二差分情報数が基準数以上でない場合(S175:No)又はS179を実行した後、CPU31は、処理をS181に移行する。
S181でCPU31は、終了指示が取得されたかを判断する。S181は、図3のS23と同じ処理である。従って、S181に関する説明は、省略する。終了指示が取得されていない場合(S181:No)、CPU31は、処理をS161に戻す。その後、CPU31は、再度、S161以降の処理を実行する。終了指示が取得された場合(S181:Yes)、CPU31は、第三算出処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<第四算出処理>
第四算出処理について、図11を参照して説明する。CPU31は、第四算出処理が対応する端末IDを含む算出データが取得されたかを判断する(S191)。このような算出データは、遠隔会議の相手先となる端末装置22で実行される図10のS167で、端末装置22から端末装置21に送信される。端末装置21では、算出データが、通信部37で受信される。CPU31は、通信部37を介して算出データを取得する。前述の算出データが取得されていない場合(S191:No)、CPU31は、処理をS199に移行する。
第四算出処理が対応する端末IDを含む算出データが取得された場合(S191:Yes)、CPU31は、応答データを送信させる(S193)。応答データの送信先は、第四算出処理が対応する端末ID(算出データに含まれる端末ID)の端末装置22とされる。CPU31は、取得された算出データから、これに含まれる第一時間情報を特定する。応答データには、特定された第一時間情報と、自装置の端末IDが含められる。CPU31は、生成された応答データの送信指令を通信部37に出力する。送信指令に従い、応答データが、通信部37から端末装置22へと送信される。
次に、CPU31は、第四算出処理が対応する端末IDを含む設定データが取得されたかを判断する(S195)。このような設定データは、遠隔会議の相手先となる端末装置22で実行される図10のS179で、端末装置22から端末装置21に送信される。端末装置21では、設定データが、通信部37で受信される。CPU31は、通信部37を介して設定データを取得する。続けて、CPU31は、取得された設定データに含まれる設定情報から特定されるジッタ値を記憶させる(S197)。特定されたジッタ値は、第四算出処理が対応する端末IDに関連付けられた状態で、RAM33の第一領域に記憶される。既に、第四算出処理が対応する端末IDに関連付けられたジッタ値がRAM33の第一領域に記憶されている場合、ジッタ値は、新たに特定されたジッタ値に更新される。設定データが取得されていない場合(S195:No)又はS197を実行した後、CPU31は、処理をS199に移行する。
S199でCPU31は、終了指示が取得されたかを判断する。S199は、図3のS23と同じ処理である。従って、S199に関する説明は、省略する。終了指示が取得されていない場合(S199:No)、CPU31は、処理をS191に戻す。その後、CPU31は、再度、S191以降の処理を実行する。終了指示が取得された場合(S199:Yes)、CPU31は、第四算出処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<第三ジッタ処理>
第三ジッタ処理について、図12を参照して説明する。CPU31は、同じ端末IDに関連付けてRAM33の第一領域と第二領域にそれぞれ記憶された2個のジッタ値が異なっているかを判断する(S211)。RAM33の第一領域のジッタ値は、図9のS149又は図11のS197で記憶される。RAM33の第二領域のジッタ値は、次のS213で記憶される。端末装置22と接続された直後においては、RAM33の第二領域に、RAM33の第一領域のジッタ値と同じ端末IDに関連付けられたジッタ値が記憶されていない。RAM33の第二領域にジッタ値が記憶されていない場合、S211では、2個のジッタ値は異なっていると判断される。第三ジッタ処理の説明では、S211で比較対象とされる2個のジッタ値が関連付けられた端末IDを、「処理対象の端末ID」という。
処理対象の端末IDに関連付けられた2個のジッタ値が異なっていない場合(S211:No)、CPU31は、処理をS219に移行する。前述の2個のジッタ値が異なっている場合(S211:Yes)、CPU31は、処理対象の端末IDに関連付けてRAM33の第一領域に記憶されたジッタ値を、RAM33の第二領域に記憶させる。処理対象の端末IDに関連付けてRAM33の第二領域にジッタ値が記憶されていた場合、そのジッタ値は、RAM33の第一領域のジッタ値に更新される。
次に、CPU31は、処理対象の端末IDに関連付けられたジッタバッファに対する受信バッファ量を決定する(S215)。前述の受信バッファ量は、RAM33の第一領域に記憶されたジッタ値に対応する設定情報に従った値に決定される。続けて、CPU31は、処理対象の端末IDに関連付けられたジッタバッファに対して、決定された受信バッファ量を設定する(S217)。既に、処理対象の端末IDに関連付けられたジッタバッファに対して受信バッファ量が設定されていた場合、そのジッタバッファに対する受信バッファ量は、S215で新たに決定された受信バッファ量に更新される。
S217を実行した後、CPU31は、自装置において、ネットワーク90を介した遠隔会議におけるデータ通信の通信状況が変化したかを判断する(S219)。S219は、図6のS83と同じ処理である。従って、S219に関する説明は、省略する。通信状況が変化した場合(S219:Yes)、CPU31は、ジッタリクエストを送信させる(S221)。ジッタリクエストには、送信元の端末装置21の端末ID「USER21」が含められる。ジッタリクエストの送信先は、遠隔会議の相手先となる端末装置22とされる。CPU31は、ジッタリクエストの送信指令を通信部37に出力する。送信指令に従い、ジッタリクエストが、通信部37から端末装置22へと送信される。通信状況が変化していない場合(S219:No)又はS221を実行した後、CPU31は、処理をS223に移行する。
S223でCPU31は、終了指示が取得されたかを判断する。S223は、図3のS23と同じ処理である。従って、S223に関する説明は、省略する。終了指示が取得されていない場合(S223:No)、CPU31は、処理をS211に戻す。その後、CPU31は、再度、S211以降の処理を実行する。終了指示が取得された場合(S223:Yes)、CPU31は、第三ジッタ処理を終了する。この場合、端末装置21での遠隔会議は、終了する。
<実施形態の効果>
実施形態によれば、次のような効果を得ることができる。
(1)遠隔会議システム10では、音データの送信元である端末装置21で集音された音の音フレームが無音状態でない場合、音フラグがONにセットされる(図3のS13:No,S15参照)。この場合、無音状態でない音フレーム(有音状態の音フレーム)からは音データが生成され、有音状態の音フレームに対応する音データが、遠隔会議の相手先となる端末装置22に送信される(図3のS17,S19参照)。端末装置21では、音フラグがONである場合、第一ジッタフラグがONとされる(図6のS73:No,S77参照)。端末装置21では、第一ジッタフラグがONである場合、算出データが送信される(図8のS121:Yes,S127又は図10のS161:Yes,S167参照)。その結果、音フラグがONである場合、ジッタ値が新たに算出され、ジッタ値に対応する設定情報に従い、ジッタバッファの受信バッファ量が設定(更新)される(図9のS141:Yes,S149又は図10のS161:Yes,S177及び図11のS191:Yes,S193,S197、図12のS211:Yes,S217参照)。
これに対して、音データの送信元である端末装置21で集音された音の音フレームが無音状態である場合、音フラグがOFFにセットされる(図3のS13:Yes,S21参照)。この場合、無音状態の音フレームからは音データは生成されず、無音状態の音フレームに対応する音データは、遠隔会議の相手先となる端末装置22に送信されない(図3のS17,S19共に未実行参照)。端末装置21では、音フラグがOFFである場合、第一ジッタフラグがOFFとされる(図6のS73:Yes,S81参照)。端末装置21では、第一ジッタフラグがOFFである場合、算出データが送信されない(図8のS121:No,S127未実行又は図10のS161:No,S167未実行参照)。その結果、音フラグがOFFである場合、ジッタ値は算出されず、ジッタ値に対応する設定情報に従い、ジッタバッファの受信バッファ量が設定(更新)されることがない(図9のS141:No,S149未実行又は図10のS161:No,S177未実行及び図11のS191:No,S193,S197共に未実行、図12のS211:No,S217未実行参照)。
そのため、音データの状態に応じて、端末装置22に設定されるジッタバッファの受信バッファ量を更新させ、又は受信バッファ量の更新を回避することができる。遠隔会議に出席しているユーザが発した音声が途切れることなくスムーズに出力される、遠隔会議を実現することが可能となる。
(2)遠隔会議システム10では、音データの送信元である端末装置21では、音フラグがOFFである状態で、通信状況が変化したと判断された場合、第二ジッタフラグがONにセットされる(図6のS73:Yes,S83:Yes,S87参照)。遠隔会議の相手先となる端末装置22では、通信状況が変化したと判断された場合、ジッタリクエストが送信される(図12のS219:Yes,S221参照)。端末装置21では、ジッタリクエストが取得された場合、第二ジッタフラグがONにセットされる(図6のS85:Yes,S87参照)。端末装置21では、第二ジッタフラグがONである場合、第一ジッタフラグがONにセットされ、生成されたダミーデータが、音データと同じ周期で繰り返して送信される(図7のS91:Yes,S93,S95,S97:Yes,S99,S103:No参照)。ダミーデータが送信されている状態で、音フラグがONに変化した場合、第二ジッタフラグは、OFFにセットされる(図7のS99,S101:Yes,S107参照)。第二ジッタフラグがOFFである場合、ダミーデータは送信されない(図7のS91:No,S99未実行参照)。
そのため、音データが送信されておらず、その結果、ネットワーク90に対する負荷が低い状態であっても、通信状況が変化した場合、ネットワーク90に対する負荷を、音データが送信されている場合に近づけることができる。このような状態で、変化した通信状況に応じたジッタ値を算出することができる。端末装置22では、算出されたジッタ値に対応する設定情報に従い、受信バッファ量を設定(更新)することができる。端末装置21で集音された音の音フレームが無音状態から有音状態へと変化した場合、端末装置22では、受信バッファ量が、変化したタイミングにおける通信状況に合った値に設定されたジッタバッファに、端末装置21からの音データをデコードして取得された音フレームを記憶させることができる。音データの送信の開始に合わせ、ダミーデータの送信を停止させることができる。
<変形例>
実施形態は、次のようにすることもできる。以下に示す変形例のうちの幾つかの構成は、適宜組み合わせて採用することもできる。以下では、上記とは異なる点を説明することとし、同様の点についての説明は、適宜省略する。
(1)上記では、遠隔会議システム10で実施される遠隔会議を、遠隔会議に参加する端末装置21,22が直接通信するP2P方式とした。遠隔会議システムは、遠隔会議に参加する端末装置21,22がサーバ装置70を介して通信する構成としてもよい。このような構成の遠隔会議システムでは、例えば、端末装置21で集音された音の音フレームから生成された音データは、端末装置21からサーバ装置70に送信される。サーバ装置70は、端末装置21からの音データを受信後、この音データを、端末装置22に送信する。端末装置22で集音された音の音フレームから生成された音データは、端末装置22からサーバ装置70に送信される。サーバ装置70は、端末装置22からの音データを受信後、この音データを、端末装置21に送信する。
サーバ装置70は、サーバ装置70と通信可能に接続中の端末装置の端末IDが登録された接続リストを記憶する。接続リストは、会議IDに関連付けて記憶される。従って、所定の会議IDに関連付けられた接続リストには、その会議IDによって識別された遠隔会議に参加中の端末装置の端末IDが登録される。サーバ装置70は、この接続リストに従い、音データの送信元の端末装置以外の端末装置に、受信された音データを送信する。所定の端末装置において、サーバ装置70との接続が切断された場合、その端末装置の端末IDは、接続リストから消去される。
図3〜図12に示す各処理によって、端末装置21,22のうち、音データの送信先となる端末装置で、ジッタバッファの受信バッファ量を、上記同様に設定する構成は、遠隔会議がサーバ装置70を介して実施される遠隔会議システムに採用することもできる。この場合、図3〜図12に示す各処理において、端末装置21,22のうちの一方の端末装置から送信される各種のデータ等(図3のS19、図7のS99、図8のS127、図10のS167,S179、図11のS193、図12のS221参照)は、サーバ装置70を介して他方の端末装置に送信される。このような構成では、サーバ装置70は、各種のデータ等を中継するだけである。従って、サーバ装置70の処理負荷が高くなることを抑制することができる。
この他、端末装置21,22がサーバ装置70を介して通信する遠隔会議システムでは、第一算出処理及び第二算出処理(図8及び図9参照)又は第三算出処理及び第四算出処理(図10及び図11参照)によるジッタ値の算出は、次に記載の第一態様又は第二態様のように行うようにしてもよい。第一態様は、第一算出処理及び第二算出処理(図8及び図9参照)に対応する。第二態様は、第三算出処理及び第四算出処理(図10及び図11参照)に対応する。第一態様と第二態様の説明では、端末装置21を音データの送信元の端末装置とし、端末装置22を音データの送信先の端末装置とする。
第一態様では、端末装置21は、第一算出処理を実行し、図8のS127で算出データをサーバ装置70に送信する。サーバ装置70は、端末装置21からの算出データを受信し、第二算出処理を実行する。この場合、図9のS149では、ジッタ値が算出されると、サーバ装置70では、算出されたジッタ値に対応する設定情報が、端末装置22に送信される。図9のS151に対応する判断は、上述した接続リストに従い行われる。即ち、サーバ装置70では、接続リストに少なくとも1個の端末IDが登録されている場合、S151に対応する判断は、否定される(図9のS151:No参照)。一方、接続リストに端末IDが登録されていない場合、S151に対応する判断は、肯定される(図9のS151:Yes参照)。端末装置22では、サーバ装置70からの設定情報が受信される。サーバ装置70は、第二算出処理を実行しつつ、第一算出処理を実行する。サーバ装置70では、図8のS121に対応する判断は、端末装置21からの算出データがサーバ装置70の通信部を介して取得されているかに従い行われる。即ち、サーバ装置70では、端末装置21からの算出データが取得されている間、S121に対応する判断は、肯定される(図8のS121:Yes参照)。一方、サーバ装置70では、端末装置21からの算出データが取得されなくなった場合、S121に対応する判断は、否定される(図8のS121:No参照)。図8のS129に対応する処理は、図9のS151に関連して前述したように行われる。端末装置22は、第一算出処理を実行中のサーバ装置70から送信される算出データを受信しつつ、第二算出処理を実行する。端末装置22では、サーバ装置70からの設定情報から特定されるジッタ値と、自装置で算出されたジッタ値が合成されてジッタ値が算出される。合成されたジッタ値は、RAM33の第一領域に相当する端末装置22のRAMの所定領域に記憶される(図9のS149参照)。端末装置22では、図12に示す第三ジッタ処理が、上記同様に実行される。ジッタ値に対応する設定情報については、図10のS179に関連して説明した通りである。
第二態様では、端末装置21は、第三算出処理を実行し、図10のS167で算出データをサーバ装置70に送信する。サーバ装置70は、端末装置21からの算出データを受信し、第四算出処理を実行する。この場合、図11のS197では、取得された設定データが端末装置22に送信される。図11のS199に対応する処理は、図9のS151に関連して上述したように行われる。端末装置22では、サーバ装置70からの設定データが受信される。サーバ装置70は、第四算出処理を実行しつつ、第三算出処理を実行する。サーバ装置70では、図10のS161に対応する判断は、端末装置21からの算出データがサーバ装置70の通信部を介して取得されているかに従い行われる。即ち、サーバ装置70では、端末装置21からの算出データが取得されている間、S161に対応する判断は、肯定される(図10のS161:Yes参照)。一方、サーバ装置70では、端末装置21からの算出データが取得されなくなった場合、S161に対応する判断は、否定される(図10のS161:No参照)。図10のS181に対応する処理は、図9のS151に関連して上述したように行われる。端末装置22は、第三算出処理を実行中のサーバ装置70から送信される算出データと設定データを受信しつつ、第四算出処理を実行する。端末装置22では、サーバ装置70からの設定データに含まれる設定情報から特定されるジッタ値と、自装置で算出されたジッタ値が合成されてジッタ値が算出される。合成されたジッタ値は、RAM33の第一領域に相当する端末装置22のRAMの所定領域に記憶される(図11のS197参照)。端末装置22では、図12に示す第三ジッタ処理が、上記同様に実行される。
第一態様又は第二態様が採用される場合において、例えば、端末装置22とサーバ装置70の間の通信状況が変化することなく、端末装置21とサーバ装置70の間の通信状況が変化することも想定される。このような場合、端末装置21とサーバ装置70の間では、上述した第一態様又は第二態様の処理が行われる一方、サーバ装置70と端末装置22の間では、上述した第一態様又は第二態様の処理は行わないようにしてもよい。この場合、端末装置22では、自装置で実行された第二算出処理又は第四算出処理によって記憶されたジッタ値が、合成後も継続して記憶される。端末装置22では、端末装置21とサーバ装置70の間で、新たに実行された第一態様又は第二態様の処理におけるジッタ値と、自装置に記憶された前述のジッタ値を、再度合成してジッタ値が算出される。このような構成によれば、サーバ装置70と端末装置22の間を送受信されるデータの通信量を抑制することができる。
(2)上記では、第一ジッタ処理(図6参照)のS83で通信状況が変化したかを判断した。S83は、省略するようにしてもよい。第三ジッタ処理(図12参照)のS219で通信状況が変化したかを判断し、通信状況が変化した場合(図12のS219:Yes参照)、S221でジッタリクエストが送信される。S219とS221は、省略するようにしてもよい。この場合、図6のS85も、省略される。S83の判断が否定された場合(図6のS83:No)、処理は、S89に移行される。