以下、添付図面を参照して本発明を実施するための最良の形態を詳細に説明する。
本発明の実施の形態は、ネットワークカメラサーバに音声配送機能を追加した機能に関するものである。なお、ネットワークカメラサーバとは、接続されたカメラから映像を取得し、デジタル画像データに変換し、通信回線網を用いて遠隔地にあるデジタル画像再生装置によって映像を閲覧することが可能なカメラを指す。
図1は、本実施の形態におけるシステム全体の構成を示す概略図である。
図1において、ネットワーク200はデジタル化された画像データを搬送するデジタル回線網などの回線やネットワークで、インターネットに代表されるインターネット網やイントラネット網等がある。ネットワーク200の物理媒体としては、イーサネット(登録商標)や無線LAN、光ファイバーなどを用いることが可能であるが、論理的接続が可能であれば、無線、有線などの種類は特に問わない。また、本実施の形態ではTCP/IPを用いるものとして説明するが、同様の目的を果たすことが可能なプロトコルであれば、どのようなプロトコルを用いても構わない。
100はネットワークに直接もしくは間接的に接続されたカメラサーバであって、ここではカメラを含む構成であるものとする。勿論、外部カメラと接続するように構成することも可能である。また、本実施の形態においては、パン・チルト・ズーム等が可能なカメラを仮定するが、固定単焦点のカメラを用いることもできる。カメラサーバ100からネットワーク200への物理接続形態は特に決められたもので無くても良く、論理的に接続されていれば問題無い。
また、カメラサーバ100は音声入力端子と音声出力端子を有し、それぞれマイク101とスピーカー102が接続されている。特に、カメラがパン・チルト・ズーム等が可能なカメラである場合、マイク101として指向性の高いマイクを用いて、カメラのパン・チルト・ズームと連動させるようにしてもよい。また、マイク101及びスピーカー102は、カメラサーバ100に内蔵されていても良く、複数であっても良い。更に、マイク101やスピーカー102は、カメラサーバ100に対して音声信号の入力や音声信号の出力が可能な装置であれば、どのような装置でも構わない。例えば、マイク101の代わりにCDプレイヤーなどの音声信号出力装置を接続したり、スピーカー102の代わりに、MDプレイヤー等の音声信号録音装置を接続してもよい。
300、400、500は閲覧装置であるクライアント装置(以下、単に「クライアント」と呼ぶ。)である。図1では3台のクライアントを図示しているが、1台であっても、4台以上であっても良く、本発明はクライアントの数に制限されるものではない。クライアント300〜500として、ネットワーク200に論理的に接続された情報処理装置を用いることができる。図中では、このクライアント300〜500に映像出力装置301、401、501や、マウスやキーボードなどの操作入力装置302、402、502が接続されており、カメラサーバ100の操作及び配信画像の閲覧を可能にしている。
更に、クライアント300〜500には、それぞれマイク303、403、503及びスピーカー304、404、504が接続されている。マイク303、403、503及びスピーカー304、404、504により、カメラサーバ100から配信された音声を聴いたり、カメラサーバ100へ音声を送信することが可能になる。
なお、映像出力装置、操作入力装置、マイク、スピーカーは、その一部または全部がクライアント装置と一体的に構成されていても良い。
次に、図1を参照しながら、本実施の形態における音声配送処理の概要を説明する。まず、カメラサーバ100からクライアント300〜500に音声を送信する場合について説明する。
カメラサーバ100の1つの機能として、カメラにより撮影した画像を多数のクライアントに同時に閲覧させることを可能とする機能がある。これと同様の機能を音声に関しても可能にするものである。
カメラサーバ100は、マイク101から音声を入力し、これをサンプリングして、音声データを生成する。この際、キャプチャされた音声信号は、カメラサーバ100内でデジタル音声データになるばかりでなく、圧縮処理やデジタル音声フィルタ処理、無音検出(Voice Activity Detection:VAD)処理など、様々なデジタル音声信号処理が行われる。このような動作の詳細は後述する。
上述したようにして生成された音声データは、ネットワーク200を通して接続する各クライアント300〜500に配信される。これにより、各クライアント300〜500は、音声データを受信することが可能となる。
各クライアント300〜500では、受信した音声データを処理し、スピーカー304、404、504から音声を出力する。この際、各クライアント300〜500は、音声データに対して解凍処理やVAD処理、CNG(Comfort Noise Generator)処理、その他の音声フィルタ処理を行って音声を出力する。
音声データは、多くのクライアントへ出力するために、接続するクライアントの数にあわせてコピーを送信する。そのため、各クライアントでは、ほぼ同時にカメラサーバ100で録音される音声を再生することが可能になる。ただし、音声データの処理時間や配信時間などによって遅延時間が発生する場合があるが、本実施の形態では特に問題にはならない。
次に、本実施の形態において、クライアント300〜500からカメラサーバ100に音声を送信する場合について説明する。
この機能で重要な点は、カメラサーバ100の音声出力端子を、複数のクライアント300〜500で共有するという点である。つまり、カメラサーバ100からクライアント300〜500への音声配信に関しては、基本的に音声データのコピーを全接続クライアントに送信するだけで良く、これによって複数のクライアント300〜500が同時にカメラサーバ100から配信される音声を聞くことができる。これに対し、逆方向のクライアント300〜500からカメラサーバ100への音声送信処理では、サーバに接続している全クライアントがサーバの音声出力端子を共有しなければならない。なお、本実施の形態では音声出力端子が1つであるものとして説明するが、音声出力端子は、1端子のみであることは必須ではなく、複数の音声出力端子があっても良い。この場合は、音声出力端子の占有化が各端子毎に行われる。
前述した問題を解決する手法の1つとして、クライアント300〜500からカメラサーバ100への音声送信に関しては、排他制御をカメラサーバ100で行う方法がある。このようにすることで、スピーカー102の競合を防ぐことが可能になる。
例えば、クライアント300及び400が同時にカメラサーバ100に対して、音声データを送信したとする。この場合、カメラサーバ100では、例えば、クライアント300からの音声データを優先的に受け入れ、受け入れた音声データの圧縮データの解凍や音声フィルタ処理を行った後に、スピーカー102から音声として出力する。これにより、クライアント300から配送された音声のみを聞くことができる。
カメラサーバ100における音声の再生制御に関しては、上記に限るものではなく、別方式を採用しても良い。例えば、カメラサーバ100は、クライアント300及び400から同時に配送された音声データを両方とも受け入れ、受け入れた音声データを合成して合成音声データを生成し、生成した合成音声データを再生してもよい。つまり、2つの音声データをミキシングして再生する。これにより、スピーカー102からは、2つのクライアント300及び400からの音声のミキシング音声が再生されるため、両方のクライアントから送信された音声を同時に聞くことが可能になる。
なお、上記例では、2つのクライアントから配送された音声データの合成に関して説明したが、クライアント数は2台に限るものでは無く、任意の数のクライアントに対して同様の処理を行うことができる。
ただし、あまりに多くのクライアントがカメラサーバ100に対して同時に音声を配信すると、再生された音声がはっきりと聞き取れないものになってしまう恐れがある。そこで、カメラサーバ100は、排他制御と音声のミキシングを組み合わせて実施するようにすることも可能である。
例えば、音声を配信したクライアント数が5台未満の場合には音声のミキシングを行い、5台以上の場合には排他制御を実施し、ミキシングする音声の音源が常に5台以下になるようにする、といった制御を行うことも可能である。なお、具体的な台数はこれに限るものではない。
上述したような各設定は、カメラサーバ100が制御プログラムを保持することで可能となる。
このように、カメラサーバ100に接続されたスピーカー102の占有などのアルゴリズムは重要な要素であり、他の排他制御方法も合わせて後述する。
図2は、カメラサーバ100のハードウェア構成を示すブロック図である。
カメラサーバ100は基本的に一般のコンピュータと同一の構成を有し、具体的には、中央演算部(CPU)110、主記憶部111、ハードディスクやフラッシュメモリ等の外部記憶部112、ネットワーク接続部113、カメラ部114、画像入力部115、雲台部116、音声入力部117、音声出力部118を含む。これら各部はバスラインで接続されており、連帯して動作することが可能である。
主記憶部111はプログラムや情報を一時記憶する。CPU110は、主記憶部111に記憶されたプログラムを実行し、全体の装置を制御し、画像データ及び音声データの配送を行う。外部記憶部112は、プログラムや蓄積画像情報、蓄積音声情報などをファイルとして記憶する。ネットワーク接続部113は、ネットワーク200に接続するために用いられる。
画像入力部115は、カメラ部114からの画像情報をデジタル化する。画像入力部115により、CPU110でカメラ部114から入力されたデジタル画像データをカメラサーバ100で処理することが可能となる。
カメラ部114は、光学系カメラの画像を電気信号に変換する装置である。カメラ部114と画像入力部115として用いる方式としてはいくつかの方式が存在する。例えばCCDのように直接光学画像を電気信号に変換することが可能でかつデジタル信号で読み出せる場合もあるし、一度、アナログ電気信号による画像信号に変換したあとにデジタル化を行う場合もある。なお、カメラ部114はカメラサーバ100に内蔵されている必要は無く、外部に接続されていても良い。
雲台部116は、カメラ部114のパン・チルト動作を行う装置である。雲台部116によって、CPU110からのカメラのパン・チルト情報を用いてカメラ部115の方向を自由にコントロールすることが可能となる。
音声入力部117には、外部マイク101が接続される。上述したように、マイク101は、空気振動を電気信号に変えるマイクであっても良いし、CDレコーダーのような音声信号発生装置でも構わない。これらのマイク101が、音声入力部に接続されることで、音声信号をデジタル化することが可能となり、CPU110がデジタル化された音声データの処理を行う。
音声出力部118には、外部スピーカー102が接続される。音声出力部118は、デジタル化された音声データをアナログ電気信号に変換し、スピーカー102に出力することで、音声の再生を可能とする。なお、上述したように、スピーカー102は、電気信号を空気振動に変換する装置であっても良いし、音声信号を録音するMDレコーダのような音声録音装置を接続してもよい。
次に、図3を参照してクライアント300のハードウェア構成を説明する。なお、ここでは代表的としてクライアント300の構成を説明するが、他のクライアント400及び500も同様の構成を有する。
クライアント300は基本的にパーソナルコンピュータ(PC)により構成され、具体的には、中央演算処理部(CPU)310、主記憶部311、ハードディスクやフラッシュメモリ等の外部記憶部312、ネットワーク接続部313、画像出力部314、入力部315、音声入力部316、音声出力部317を含む。これら各部はバスラインで接続されており、連帯して動作することが可能である。
主記憶部311はプログラムや演算結果を一時的に記憶し、CPU310は主記憶部311からプログラムを読み出して実行し、その結果を各構成に送ることで装置全体を制御している。同様に、各構成からの情報を読み取り演算することで、各構成の状態を把握することができる。外部記憶部312には、ファイルやソフトウェアなどの情報が記録される。ネットワーク接続部313は、ネットワーク200と接続するために用いられる。
画像出力部314は、ビデオRAMを搭載しているメモリ空間とそのメモリ空間から画像信号情報を作成する。映像出力装置301に接続することで、クライアント300で得られた画像を実際に画像信号を目に見える状態にすることができる。入力部315は、主にオペレータの指示を入力するための操作入力部302に接続するための構成であり、例えば、キーボードやマウス、タッチパネル等が接続される。音声入力部316にはマイク303が接続され、入力する音声をデジタル化してデジタル音声データを作成する装置である。音声出力部317は、デジタル音声データをアナログ音声信号に変換する。この音声出力部317にスピーカー304を接続することで、デジタル音声データがオペレータの耳に聞こえる音声となる。
なお、外部装置301〜304は、クライアント300と一体化されている場合がある。その例として、ノート型パソコンや携帯電話などが挙げられる。このように、本実施の形態ではクライアント300の形態を特に問うものではなく、どのような構成や形状であっても同様の動作を行うのであれば構わない。
図4は、カメラサーバ100のソフトウェア構成を示すブロック図である。
カメラサーバ100とクライアント300、400、500の音声部分のハードウェア構成は殆ど同一である。これは双方向に音声を送受信する必要性があるため、当然ながら似ている。ソフトウェア構成に関しても同様に、カメラサーバ100とクライアント300、400、500で類似していると言える。
カメラサーバ100の音声配信に関連するソフトウェアの構成は、大きくわけて2つの音声データの流れに対応するものに分かれる。1つは音声を送信する音声データの流れに対応するもので、もう1つは音声を受信する音声データの流れに対応するものである。
まず、音声の送信に関するソフトウェア構成について説明する。
音声信号は、マイク101によってアナログ音声データ601としてカメラサーバ100に取り込まれる。アナログ音声データ601は、音声入力部117によってデジタル化され、デジタル音声データ602に変換される。その後、VAD判定部130によって有音か静音かが判定され、静音であれば、音声波形データから音声パワー値を計算し、データ量の削減を図る。有音データであれば圧縮部131によってデジタル音声データ602を圧縮し、圧縮音声データ603に変換する。なお、音声コーデックの種類によっては、VAD判定部130などの処理が音声コーデックに組み込まれている場合もあるが、圧縮コーデックにVAD機能が組み込まれていたとしても特に問題にはならない。
このようにしてアナログ音声データ601は、圧縮音声データ603として送信可能な状態にデータが変換される。
実際の音声データの送信は、クライアント300、400、500が接続された場合に行われる。ネットワーク200を介してクライアント300、400、500が接続すると、送信部132はクライアント300、400、500からの音声送信要求を受け、これに対して圧縮音声データ603をクライアント300、400、500へ送信することが可能となる。
次に、音声を受信するソフトウェア構成に関して説明する。音声の受信は、ネットワーク200を介してクライアント300、400、500が接続し、音声を受信部133で受けることで開始される。
カメラサーバ100は、接続してきたクライアント300、400、500からの音声データの受信の許可不許可をスピーカー占有権管理部134によって判断する。このとき、スピーカー占有権管理部134はスピーカー占有権データ612に状態を保持することでスピーカー102への音声出力を制御する。
このような処理によって許可を受けたクライアント300、400、500から圧縮音声データ611を受信する。受信した圧縮音声データ611は、解凍部135によってデコード処理が行われる。このような処理の過程で静音データは、CNG発声部136によって音波形データであるデジタル音声データ613に変換される。
このように生成されたデジタル音声データ613は、一次蓄積部137に蓄積される。この一次蓄積部137は、キュー構造(FIFO)のデータの蓄積が可能であり、音声データの再生スピードと、通信によって得られる音声データの受信スピードの揺らぎを調整するためのバッファである。
また、複数のクライアントからの音声受信を許可しているのであれば、この時点でミキシング部138によって音声のミキシングを行う。最終的に、音声出力部118によってデジタル音声データ613が、アナログ音声データ614に変換され、スピーカー102に出力される。
図5は、クライアントのソフトウェア構成に関して説明をした図である。図3と同様に、ここでは便宜上クライアント300に関して説明するが、クライアント400及び500も同様の構成を有する。
クライアント300の音声送信に関連するソフトウェアの構成は、カメラサーバ100と同様に、大きくわけて2つの音声データの流れに対応するものに分かれる。1つは音声を送信する音声データの流れに対応するもので、もう1つは音声を受信する音声データの流れに対応するものである。
まず、音声の送信に関するソフトウェア構成に関して説明する。
音声信号は、マイク303によってアナログ音声データ701としてクライアント300に取り込まれる。アナログ音声データ701は、音声入力部316によってデジタル化され、デジタル音声データ702に変換される。その後、VAD判定部330によって有音か静音かが判定され、静音であれば、音声波形データから音声パワー値を計算し、データ量の削減を図る。有音データであれば圧縮部331によってデジタル音声データ702を圧縮し、圧縮音声データ703に変換する。なお、音声コーデックの種類によっては、VAD判定部330などの処理が音声コーデックに組み込まれている場合もあるが、圧縮コーデックにVAD機能が取り込まれていたとしても特に問題にはならない。
このようにしてアナログ音声データ701は、圧縮音声データ703として送信可能な状態にデータが変換される。
実際の音声データの送信は、カメラサーバ100に接続した場合に行われ、スピーカー占有権取得部332によって、接続後にカメラサーバ100のスピーカー占有権取得を促し、スピーカー占有権取得要求の送受信や音声送信を行う。
クライアント300からカメラサーバ100への音声送信では、カメラサーバ100の1つのスピーカー102を他のクライアント装置と共同して使用する必要が生じる。このときのカメラサーバ100が管理するスピーカー102を使用する権利をカメラサーバ100から取得する必要がある。このためにスピーカー占有権取得を判断するソフトウェアとしてスピーカー占有権取得部332を設け、圧縮音声データ703の送信の可否を判断する。スピーカー占有権取得部332はカメラサーバ100のスピーカー占有権の状態等をスピーカー制御権データ704として保持することでこれを可能としている。
なお、クライアント300における音声を受信するためのソフトウェア構成は、図4に示すカメラサーバ100のものと同様であるため説明を省略する。ただし、クライアント300においては、ミキシング部338は無くても構わない。
以上のようなソフトウェア構成によって、カメラサーバ100とクライアント300、400、500間で音声データの送受信が行われる。
次に、図6を参照して、クライアント300〜500上で表示されるソフトウェアグラフィカルユーザーインターフス(GUI)について説明する。なお、以下の説明では、クライアント300として説明するが、クライアント400、500においても同様のGUIが用いられる。
図6において、900はGUI画面であり、カメラサーバ100から配信された画像を表示するための表示窓901、パン制御スライドバー902、チルト制御スライドバー903、ズーム制御スライドバー904、カメラ制御権取得ボタン905を含む。
これらの構成要素はカメラ制御を行う目的で配置されており、パン制御スライドバー902、チルト制御スライドバー903、ズーム制御スライドバー904を操作することで、カメラサーバ100のカメラ部114の方向の制御を行うことができる。
また、カメラ制御権取得ボタン905を操作することによって、カメラ部114のパン・チルト・ズーム動作の制御を占有する権利を取得することができる。この制御権取得ボタン905は、1つのカメラサーバ100のカメラ制御のリソースを多数のクライアントから同時にアクセスされる場合に、カメラ制御の混乱を避け、特定の1クライアントのみに制御を許可する仕組みである。なお、図6に示す例では、このカメラ制御権取得ボタン905をスピーカー占有権を取得するためのボタンとしても用いる場合を示しており、このような構成では、カメラ制御権を取得したクライアント装置に対して、スピーカー占有権を与えるようにしても良い。
更に、音声用GUIの構成要素として、音声出力レベルゲージ906、音声入力レベルゲージ907、クライアント300の音声入力を中止するミュートボタン908、クライアント300のスピーカー304への音声出力を中止するミュートボタン909がある。音声出力レベルゲージ906、音声入力レベルゲージ907のゲージによって音声の入出力状態を確認することができる。なお、これらのゲージは、特にゲージの形で表示する必要はなく、例えば、音声の大きさを示すアイコンやアニメーション、文字情報などを用いて表現しても良い。
図7は、クライアント装置のソフトウェアのグラフィカルユーザーインターフェース(GUI)の別の例を示す。なお、図6と同様の構成には同じ参照番号を付し、説明を省略する。
図6に示すGUIとの差異点は、スピーカー占有権ボタン920が追加されている点にある。つまり、カメラサーバ100が、カメラ制御権とスピーカー占有権を別々に設定することが可能な場合のGUIである。このようなスピーカー占有権ボタン920の追加によって、カメラ制御に関する占有クライアントとスピーカーに関する占有クライアントを別々に運用することが可能になる。
図8は、クライアント装置のソフトウェアGUIのダイアログ1001を示している。
ダイアログ1001は、図6や図7のウィンドウからメニューなどを通して使用することが可能になる。しかしながら、図6及び図7に示すGUIと別ウィンドウになっていなくても良い。
ダイアログ1001は主に、音声再生や音声録音の強さを調整すると同時に、VAD機能(無音検出機能)のための設定を行うGUIを提供している。
図8において、1002はクライアント300の音声再生音量を制御する再生音量制御スライドバー、1003はカメラサーバ100からの音声の入力音量を調整する入力音量制御スライドバーである。各スライドバーの隣には、音量の大きさを示すレベルゲージが表示される。
また、1004及び1005は、VAD機能に関するパラメータでVADの判定の強弱を示す値を設定する場合に用いるスライドバーである。VADの判定では、強弱に関しては閾値以下の音声出力で、かつ所定時間以上継続した場合無音と判定するので、スライドバー1004は閾値を、スライドバー1005は継続時間を調節するために用いる。
図9は、クライアント300のソフトウェアGUIのダイアログ1011を示す図である。ダイアログ1011も図8のダイアログと同様に、図6や図7のウィンドウからメニューを通して使用することが可能になる。しかしながら、図6及び図7に示すGUIと別ウィンドウになっている必要はなく、同一ウィンドウ上に表示しても構わない。
このダイアログ1011は主に、ネットワーク帯域の制限に関わる値を設定することを目的としている。1013は画像帯域調整を行うためのスライドバー、1012はその画像通信で使用している使用帯域を示すゲージ及び数値である。また、1015は音声帯域調整を行うためのスライドバー、1014はその音声通信で使用している使用帯域を示すゲージ及び数値である。
このように画像と音声に関しては、使用帯域を変動させることが可能である。特に、画像通信用の使用帯域は容量が多いため、帯域を使い切ってしまうと音声配信に影響が出てしまう。そのため、これらの調整機能によって、その問題を解決することができる。
図10は、クライアント300のソフトウェアGUIのダイアログ1021を示している。このダイアログ1021は、音声監視機能によるGUIであり、VAD機能を用いて実現可能である。
VAD機能の閾値の与え方で、静音を判断することが可能であると同時に、ある一定以上の音量の判断を行うことも可能である。そこで、ある一定以上の音量が音声入力部316に入力された場合に、異常を通知するダイアログ1021を表示させるようにすることができる。この機能は、カメラサーバ100の入力音声音量や、クライアント装置の出力音量がミュートの状態であっても表示される。この機能によって、オペレータは、ある一定以上の音量の発生を視覚的に監視することが可能となる。
図11は、クライアント装置のソフトウェアのGUIの音声情報表示機能に関して説明する図である。なお、図6と同様の構成には同じ参照番号を付し、説明を省略する。
音声情報表示機能とは、カメラサーバ100に入力している音量や、出力している音量についての情報をGUI画面上に表示する機能である。図11では、文字列1031がその情報を表示している。カメラサーバ100の音声出力は、カメラサーバ100が遠隔地にあり、実際に出力している音が聞こえないため、仮に大音量であってもクライアント装置を操作するオペレータには分からない場合がある。
また、カメラサーバ100からの音声入力をされていても、ミュートボタン909によりクライアント300でスピーカー304による音声出力がミュートされている場合には、クライアント300を操作するオペレータには、カメラサーバ100の音声入力がミュートになっているのか、クライアント300の音声出力がミュートになっているのか、瞬間の判断が難しい。
そこで、カメラサーバ100の音声の入力や再生状態を表示させることによって、クライアント300を操作するオペレータが視覚的に認識できるようにすることができる。
図12〜図15は、スピーカー占有権の付与の仕方の方式について、その方式の動作シーケンスを示す図である。
スピーカー占有権とは、上述したように、カメラサーバ100に接続されるスピーカー102の占有権のことを示している。複数のクライアント300〜500からの音声データを同時に再生すると、音声再生の競合が発生してしまう。場合によってはミキシングを許可することも有効であるが、逆に、これが不都合になってしまう場合もある。
そのため、本実施の形態ではスピーカー占有権という概念を導入し、カメラサーバ100に接続されるスピーカー102の占有関係をクリアにし、多数のクライアント装置からの音声データを排他的に再生する方式について説明する。
スピーカー占有権は、様々な方式を取ることができ、本実施の形態のシステムを使う人のニーズによって切り替えることが可能である。ここでは例として、4方式を説明をする。
図12はA方式の動作シーケンスを示す図で、早いもの勝ちでスピーカー占有権を取得する方式を示す。カメラサーバ100にクライアント300、400、500が接続を行う場合に、最初にスピーカー占有権を要求したクライアントにスピーカー占有権が付与される。
クライアント300がスピーカー占有権を要求した時(S1)、スピーカー占有権が他のクライアントに付与されていなければ、カメラサーバ100はクライアント300にスピーカー占有権を付与する(S2)。これにより、クライアント300がスピーカー占有権を保有することになるが、クライアント300がスピーカー占有権を保有している間にクライアント400がスピーカー占有権を要求すると(S3)、まだクライアント300にスピーカー占有権が付与されている状態であるために、カメラサーバ100はクライアント400に対してスピーカーの占有権の要求の失敗を通知する(S4)。
次に、クライアント300がスピーカー占有権の終了を要求し(S5)、カメラサーバ100はこれを受け付けて、スピーカー占有権の終了を通知する(S6)。これにより、スピーカー占有権がどのクライアントにも付与されていない状態となる。このタイミングでクライアント500がスピーカー占有権の取得を要求すると(S7)、カメラサーバ100はクライアント500にスピーカー占有権を付与する(S8)。以下、新たにスピーカー占有権が要求される度に、同様の制御を行う。
図13はB方式の動作シーケンスを示す図で、最後にスピーカー占有権を要求したクライアント装置にスピーカー占有権を付与する方式を示している。
まず、クライアント300がカメラサーバ100にスピーカー占有権を要求する(S11)。スピーカー占有権が他のクライアントに付与されていなければ、カメラサーバ100は、すぐにスピーカー占有権をクライアント装置300に付与する(S12)。
しかし、この後で、クライアント400がスピーカー占有権をカメラサーバ100に要求すると(S13)、カメラサーバ100は、スピーカー占有権の終了をクライアント装置300に通知し(S14)、クライアント400にスピーカー占有権を与える(S15)。この後、更にクライアント500がスピーカー占有権を要求すると(S16)、同様にしてカメラサーバ100はスピーカー占有権の終了をクライアント装置400に通知し(S17)、クライアント500にスピーカー占有権を与える(S18)。以下、新たにスピーカー占有権が要求される度に、同様の制御を行う。
図14はC方式の動作シーケンスを示す図で、ユーザーレベルによってスピーカー占有権を取得する方式を示している。なお、基本的な動作はA方式と同様で、先にスピーカー占有権を要求したクライアントにスピーカー占有権が付与されるものとする。
まず、低レベルのクライアント300がカメラサーバ100にスピーカー占有権を要求する(S21)。スピーカー占有権が他のクライアントに付与されていなければ、カメラサーバ100は、すぐにスピーカー占有権をクライアント装置300に付与する(S22)。
クライアント300にスピーカー占有権を付与後、クライアント300と同じ低レベルのクライアント400がスピーカー占有権の要求をした場合(S23)、スピーカー占有権の取得を拒否する(S24)。しかし、クライアント300よりもレベルが高いクライアント500がスピーカー占有権を要求すると(S25)、クライアント300へのスピーカー占有権の付与を終了し(S26)、クライアント500に対してスピーカー占有権を付与する(S27)。
このようにユーザーレベルの高いクライアント装置に優先的にスピーカー占有権を与える方式も実施することが可能である。
図15はD方式の動作シーケンスを示す図で、一定の時間によってスピーカー占有権を終了する方式である。A方式の場合、他のクライントがスピーカー占有権を保有していると、新たにスピーカー占有権を要求したクライアントはスピーカー占有権を取得できずエラーとなるが、D方式は、このような要求をキューに貯め、一定時間後に、スピーカー占有権を次にスピーカー占有権を要求したクライアント装置に付与する。
まず、クライアント300がカメラサーバ100にスピーカー占有権を要求する(S31)。スピーカー占有権が他のクライアントに付与されていなければ、カメラサーバ100は、すぐにスピーカー占有権をクライアント装置300に付与する(S32)。
次に、クライアント400がカメラサーバ100にスピーカー占有権を要求すると(S33)、カメラサーバ100はスピーカー占有権が他のクライアントに付与されているかどうかを判断する。この場合はクライアント300に付与されているので、クライアント400をスピーカー占有権待ちのキューに追加する(S34)。その後、クライアント500がスピーカー占有権を要求した場合にも(S35)、同様にキューに追加する(S36)。
そして、クライアント300にスピーカー占有権を付与してから所定時間が経過すると、カメラサーバ100はクライアント300にスピーカー占有権の終了を通知し(S37)、クライアント400にスピーカー占有権を付与し(S38)、クライアント400をスピーカー占有権待ちのキューから削除する(S39)。同様に、クライアント400にスピーカー占有権を付与してから所定時間経過するとスピーカー占有権の終了を通知し(S40)、クライアント500にスピーカー占有権を付与し(S41)、クライアント400をスピーカー占有権待ちのキューから削除する(S42)。そして、所定時間経過後に、クライアント500のスピーカー占有権を終了する(S43)。
このように一定の時間によってスピーカー占有権の付与先を変更することによって、複数のクライアント装置が競合することなくスピーカーの使用が可能になる。
なお、本実施の形態では、スピーカー占有権を1つのクライアントに付与する場合について説明をしたが、これに限るものではなく所定数の複数のスピーカー占有権を用意し、複数のクライアント装置に同時に付与しても構わない。このような場合、同時に発生された音声データをミキシングしたり、カメラサーバ100に複数のスピーカーを接続できる構成にして、それぞれのクライアントから受信した音声をそれぞれ再生するようにすることも可能である。
更に、スピーカー占有権の付与方法は、上記A方式、B方式、C方式、D方式を組み合わせた方法であっても構わない。例えば、基本的にD方式でスピーカー占有権を制御し、ユーザーレベルが高いクライアント装置が接続した場合はC方式に従って付与するというように制御したり、スピーカー占有権を有するクライアント装置が所定時間経過前にスピーカー占有権の終了を要求した場合に、キューの次のクライアント装置にスピーカー占有権を付与するというように、組み合わせて制御することができる。
図16は、画像データと音声データの同期に関して説明した図である。
カメラサーバ100は、映像と音声のデジタル化を行って、画像データと音声データをネットワーク200に配信している。一方、クライアント300〜500は、配信されたデータを受信している。本実施の形態では、このデータの送受信に関して2つの論理的接続を行っている。1つが画像データの送信を行う論理的接続であり、もう1つが音声データの送受信を行う論理的接続である。この際に、2種類のデータである画像データと音声データは、フレーム毎のタイムスタンプによって時間の同期性を保証している。
なお、本実施の形態では2つの論理的接続によって説明をしているが、1つの論理的接続で画像データと音声データの送受信を行っても構わない。
図16において、(a)は画像データを各フレーム(一定時間)毎に概念的に示す図、また(b)は音声データを映像の各フレーム(一定時間)毎に概念的に示す図である。画像データ及び音声データいずれにも、最初のフレームにはタイムスタンプ00:00が付与されており、これを受信したクライアント300〜500は、この時間情報を元にして画像データと音声データの同期をとって再生を行う。
図17は、音声送信用パケットの詳細構成図である。
この通信パケットは、カメラサーバ100からクライアント300〜500への音声通信や、クライアント300〜500からカメラサーバ100への音声通信などに使用することができる。全てのパケットは、パケットの長さのフィールド(Packet Size)とパケットの種類を示すフィールド(id)を共通して有する。
図17において、通信結果通知パケットは、それぞれの通信処理を行っている際に発生するエラーなどの状態を送信するためのパケット、有音パケットは有音音声データであって、圧縮された音声データである。有音パケットにはタイムスタンプも付加されている。静音パケットは静音音声データであって、音声の強さを示す値とタイムスタンプが付加されている。以下、有音パケット及び静音パケットであって、種類を区別しない場合には、音声パケットと呼ぶ。基準時間通知パケットは、有音パケット及び静音パケットの基準時間を示すパケットである。基準時間からの差異情報だけを有音パケット及び静音パケットが扱うことによって通信負荷を低減させている。
また、コーデック情報パケットは、音声パケットで使用される音声コーデックを示している。使用可能コーデックパケットは、音声コーデックが複数使用できる場合、その情報を伝えるためのパケットである。コネクションID通知パケットは、HTTPの通信におけるセッションを維持する目的で使用される値であり、この値の継続性で、ステートレスなHTTPにセッション管理機能を与える。なお、この動作に関しては後述する。プロトコルバージョン通知パケットは、将来プロトコルが変更になった場合にそれを判断するためのパケットである。
上述した音声送受信用パケットを用いて実際に音声の配信を可能としている。
図18は、音声操作用のパケットの詳細説明図である。図17のパケットと図18のパケットは組み合わせて動作する。
図18において、サーバスピーカーコントロールパケットは、カメラサーバ100の音声出力レベルを調整するためのパケット、サーバマイクコントロールパケットは、カメラサーバ100の音声入力レベルを調整するためのパケット、VAD機能on-off機能パケットは、VAD機能自体を使用せず、全て有音パケットとして音声を配信したい場合に使用するパケットである。また、VADの強さ設定パケットは、無音判定に用いる音声出力の閾値を設定するためのパケット、VADの継続時間パケットは無音判定に用いる無音の継続時間の閾値を設定するためのパケット、プリセット音声再生パケットは予め蓄積された音声データの出力を指示するためのパケットである。
カメラサーバ100とクライアント300〜500装置は、これらの通信パケットを相互に通信することで、音声の送受信を実現している。
図19は、カメラサーバ100からクライアント300へのHTTPによる音声配信方式について説明するためのシーケンス図、図20は、クライアント300からカメラサーバ100へのHTTPによる音声配送方式について説明するためのシーケンス図である。なお、代表的にクライアント300を例として説明するが、他のクライアントについても同様に実施される。
この両者の違いは、カメラサーバ100→クライアント300方向の通信であるか、クライアント300→カメラサーバ100方向の通信であるかの差であるが、HTTPで音声再生をするには、二つの通信方式を導入する必要がある。
カメラサーバ100→クライアント300方向の通信は、図19に示すように1回のGETを行うことによって可能となる。まず、クライアント300からGETメソッドが送信される(S101)。このメソッドをカメラサーバ100が受信し、このメソッドの返答としてリザルトコードを返信する(S102)。その後、HTTPの返答のペイロード部分(S103)にて、音声配送にかかわる基準時間通知パケットや音声パケットの送信を連続して行う。
クライアント300は、リザルトコードを受信すると、以降、HTTPのペイロード部分に含まれる音声パケットを受信し、再生を続ける。
このような動作によって、カメラサーバ100→クライアント300方向の音声配送が可能となる。
一方、クライアント300→カメラサーバ100の通信は、複雑であり、複数回のPOSTによって行われる。クライアント300からPOSTメソッドが送られる(S110)。そして、POSTメソッドのアップロードするペイロード部分に、音声関連パケット(基準時間通知パケット、音声パケット)などを付加してPOSTメソッドを実行する(S111)。
これによって、カメラサーバ100は、POSTメソッドを受信し、以降、音声関連パケットをPOSTメソッドのペイロード部分として受け取る。
もし、このクライアント300からの音声配送が正常で、且つ、クライアント300がスピーカー占有権を取得できたのであれば、これらの音声パケットは、カメラサーバ100で再生される。
そして、POSTメソッドのリザルトコードが送信される(S112)と同時に、ペイロード部分にて、コネクションIDパケットがクライアントに送信される(S113)。
クライアント300は送信されたリザルトコードを受信し、正常にスピーカー占有権の取得ができ、音声配送が正常であることが確認できると、受信されたコネクションIDパケットを次のPOSTメソッドに付加し(S114)、更に、音声パケットをペイロード部分に入れてカメラサーバ100にアップロードする(S115)。
このコネクションIDは、一連の音声ストリーム配信の流れで常に同じである必要はない。S113で送信されるコネクションIDと、S117で送信されるコネクションIDは、異なる値でもよい。その場合、クライアント300は、直前のリザルトコードで通知されたコネクションIDを次のHTTPメソッドコールで用いる必要がある。こうしたコネクションIDを用いて、音声ストリームをクライアント300からカメラサーバ100へ送信する他の方法としては、接続するクライアントごとにコネクションIDを発行し、クライアントは一連の音声ストリーム送信中は常に同じコネクションIDを用いる方法がある。この方法では、カメラサーバ100で接続クライアントの数分のコネクションIDを管理する必要があるのに比べ、本実施の形態の方法では、カメラサーバ100は最後に発行した最新のIDを1つだけ管理すればよいため、カメラサーバ100における処理の負担が軽くなる。
カメラサーバ100は、S114で送られたPOSTメソッドを受信し、そのペイロード部分で、音声パケットを受信し(S115)、音声を再生する。
このような動作が、以降繰り返されることによって、クライアント300→カメラサーバ100方向の音声通信が行われる。
このような通信は、HTTPのPOSTのペイロードの大きさを後述するように400msec程度にしているためであり、1回のPOSTの応答時間よりも短ければ、問題なく音声再生を行うことができる。また、最初のPOSTメソッド(S110)にて音声パケットを付加して送っている(S111)。
このPOSTメソッドを受信後、カメラサーバ100は、正当に接続可能なクライアントであるかどうか、スピーカー占有権の取得が可能かを判断する。そのため、場合によっては、S111で送られた音声パケットは再生されず廃棄されてしまう可能性がある。にもかかわらず、最初のメソッドで音声パケットを付加して送るのは、音声配送にかかわる通信量の低減が図れるためである。これ以外の方法として、最初に音声配信を行う正当性を判断するためのいくつかのHTTPメソッドをカメラサーバ100とクライアント300の間でやりとりし、正当性の確認後、音声配信を開始する方法が考えられる。しかし、正当性判断のやりとりの分(実測では約10msec程度)音声を再生するまでの時間がかかってしまう。そのため最低限度HTTPの通信によって認証と音声配信を可能とする方法を両立した結果が本実施の形態の方式となる。
また、本実施の形態ではペイロードサイズを400[msec]程度としている。これは、上述のように認証を行う上で、捨てられてしまう音声パケットが発生することがあるが、もしS111で送る音声パケットが非常に大きい場合に、その音声パケットを送りきった後のリザルトコード(S112)でしか、クライアント装置の認証結果が分からないためである。
さらに、HTTP/1.0の規約に従えば、クライアント300からの送信の途中にカメラサーバ100がリザルトコードを送信することができず、また、途中で切断することもできない。逆に、もしこの音声パケットが非常に小さいと、音声パケットを付加したPOSTメソッドを何回も送らねばならず、HTTPのヘッダ情報等を含め、通信量が多くなってしまう。
以上のような動作によって、HTTPを用いて、カメラサーバ100→クライアント300方向とクライアント100→カメラサーバ300方向の音声通信を実現している。
図21は、クライアント300の音声バッファの制御に関して説明した図である。このような動作は、他のクライアント400、500及びカメラサーバ100でも同様に行われるが、本実施の形態では、クライアント300の内部動作についてのみ説明する。
受信された音声データは、図21(a)に示すように音声バッファ(図5の一次蓄積部337)にFIFO構造で受信される。再生速度に対して、データ送信量が非常に大きいと、音声再生スピードがデータ通信スピードに追いつかず、この音声バッファに音声データがバッファリングされることによって、音声再生されるまでに遅延が生じてしまう。この状態が、図21(b)に示される状態である。
これを避ける為に、ある程度のバッファ許容量閾値を超えて音声データがバッファリングされた場合、音声バッファの音声パケットの縮小化を行う動作を実施する。
このとき、音声バッファに溜まっている音声データの内、静音データは、比較的人間の耳には、小さい音である場合が多く、これを省いても違和感が比較的少ない。そこで、バッファ許容量閾値を超えた場合は、静音パケットの削除を行う。こうして、音声バッファを更新したものが図21(c)に示されている。
このような動作によって音声バッファ量は常に削減され、人間の耳にとって意味のある有音パケットを優先的に再生することが可能になる。
図22は、カメラサーバ100において実施される音声のミキシングの動作について説明した図である。音声のミキシング動作は、音声バッファ(例えば、図2の外部記憶部112を利用)によって行われている。
ここでは音声バッファの初期状態は、図22(a)に示す状態であるものとする。この状態で、図22(b)に示すように別のクライアントから送信された音声データを受信した場合、有音パケットや静音パケットに記録されているタイムスタンプを元にして、受信した時点で音声バッファに存在している音声パケットの音声とのミキシングを行う。
このような処理によって図22(c)に示すように、音声バッファは、追加された有音パケットや静音パケットが合成された形で、音声バッファに記録される。
このような動作を実施することで、複数のクライアントからの音声をミキシングし、再生することが可能となる。
次に、図23〜図30のフローチャートを参照して、カメラサーバ100のソフトウェアの処理について説明する。
図23は、カメラサーバ100の全体の処理の流れを示すフローチャートである。
カメラサーバ100の電源がONするなどして処理が開始されると、カメラサーバ100のソフトウエア全体の初期化を行う(ステップS1001)。次に、音声関連のスレッドの起動を行う(ステップS1002)。この音声関連のスレッドは、音声入力部117及び音声出力部118において実施される。なお、これらの音声関連スレッドの処理の詳細については後述する。
次に、ネットワーク接続を待つ(ステップS1003)。ネットワーク200からの接続があれば(ステップS1004でYES)、通信スレッドを立ち上げる(ステップS1005)。通信スレッドは、ネットワーク接続1回につき1回立ち上げる。通信スレッドの処理の詳細については後述する。
着信が無い場合には(ステップS1005でNO)、ユーザーが終了を指示するなどによりカメラサーバ100の処理を終了するのかどうかを判定し(ステップS1006)、終了しないのであればステップS1003へ戻って再び接続を待つ。
また、終了するのであれば、終了処理(通信の切断、他スレッドへの終了の指示、他スレッドの動作の停止を待つ処理、リソースやメモリの開放など)を行った後に(ステップS1007)、カメラサーバ100の処理を終了する。
次に、ステップS1002で音声スレッドが立ち上げられた後に音声入力部117及び音声出力部118で行う処理について、図24及び図25をそれぞれ参照して説明する。
図24において、音声入力部117が起動すると(ステップS1010)、まず、音声入力部117の初期化を行う(ステップS1011)。この処理により音声のデジタル化ができる状態になる。そして、ステップS1012〜S1014の音声入力ループが行われる。
音声入力ループは、カメラサーバ100が停止の指示を受けるまで続けられ、音声の入力をフレーム単位で行って音声バッファ(例えば、図2の外部記憶部112を利用)に音声データを格納する。このループでは、まず、音声データのキャプチャを行う(ステップS1012)。キャプチャ単位は、本実施の形態では10[msec]を1フレーム単位としているが、可変サイズであっても構わない。次にこのフレーム毎に入力された音声データを音声録音バッファに格納する(ステップS1013)。
音声バッファは、1つの装置に2つ存在している。1つは音声録音バッファであり、入力した音声を一時的に蓄積するFIFOバッファである。もう一つは音声再生バッファであり、出力する音声を一時的に蓄積するFIFOバッファである。
このようにして、音声入力ループは、ステップS1014でユーザーの終了指示があったと判定されるまで続けられる。そして、ユーザーの終了指示をステップS1014で検知すると、ステップS1015で音声入力部117を停止するなどの必要な終了処理を行ってから、実際に処理を終了する。
一方、図25において、音声出力部118が起動すると(ステップS1020)、まず、音声出力部118の初期化を行う(ステップS1021)。この初期化では、音声が直ぐに再生できるように外部記憶部112の設定を行う。そして、ステップS1022〜S1028の音声出力ループが行われる。
まず、音声のミキシングを行うかどうかを判断する(ステップS1022)。ミキシングを行うのであれば(ステップS1022でYES)、ステップS1023で音声再生バッファ(例えば、図2の外部記憶部112を利用)に溜まった音声データのミキシング処理を実施する。ここでは、図22を参照して上述した方法で実施される。
次に音声再生バッファ量が一定量を超えているかを判断する(ステップS1024)。音声再生バッファ量が一定量を超えている場合は(ステップS1024でYES)、ステップS1025で静音データの削減を実施してバッファ量を減らす。ここでは、図21を参照して上述した方法で実施される。
そして、ステップS1026にて音声再生バッファから再生すべき音声データを1フレーム分取り出す。なお、本実施の形態では、1フレームあたり10[msec]として処理をしているが、このサイズは可変であっても構わない。そして、ステップS1027にて、取り出した音声データの再生を行う。音声データの再生は、音声出力部118に音声データを渡すことで、スピーカー102により実施される。
そして、ステップS1028にて、ユーザーが終了を指示しているかどうかを判定し、終了を指示していなければ(ステップS1028でNO)、ステップS1022へ戻り、ユーザーが終了を指示していれば(ステップS1028でYES)、ステップS1029で終了処理を行う。この終了処理では、音声出力部118の終了処理などを実施する。
次に、図23のステップS1005で立ち上げれられた通信スレッドの処理について、図26を参照して説明する。なお起動された送信部132及び受信部133は、HTTP通信を処理するために実行される。
ステップS1031にてHTTPメソッドの受信を待つ。そして、クライアントからのHTTPメソッドを受信すると、ステップS1032においてHTTPパスによるコマンドの分析を行う。クライアントからの音声送信要求であれば、ステップS1033に進んで音声送信処理を行い、音声受信要求であれば、ステップS1034で音声受信処理を行う。ステップS1033及びS1034で行う処理については、図27、図28を参照して後述する。
ステップS1033またはステップS1034の処理が終了したのちに、ステップS1035で通信の終了、もしくは、ユーザーの終了の指示があるかどうかを判断し、通信続行と判断された場合は(ステップS1035でNO)、ステップS1031に戻って再びHTTPのメソッドの受信を待ち、終了であれば、ステップS1036にて通信終了処理を行ってから、処理を終了させる。
次に、図26のステップS1033で行う音声送信処理について図27を参照して説明する。
図26のステップS1032で受信したコマンドが音声送信要求であると判断されると、ステップS1033で図27に示すサブルーチンがコールされる。
ステップS1041においてHTTPのリザルトコードをクライアントに送信し、ステップS1042において音声録音バッファから1フレーム分の音声データを読み込む。そして、VAD判定処理を行い(ステップS1043)、このVAD判定処理の結果を判断する(ステップS1044)。
VAD判定結果、有音の場合には音声データを圧縮し(ステップS1046)、有音パケットを作成する(ステップS1047)。一方、静音であると判定された場合、静音パケットを作成する(ステップS1045)。そして、このようにして作成された有音パケットもしくは静音パケットを、ネットワーク200へ送信する(ステップS1048)。
更に、カメラサーバ100の内部ステータス(時間など)をチェックし、クライアントが必要とした情報が存在する場合は(ステップS1049でYES)、クライアントへのデータ送信パケットを作成し(ステップS1050)、ネットワーク200へ情報パケットを送信する(ステップS1051)。
ステップS1052では、ユーザーからの終了指示があるかどうかを判断し、無ければ(ステップS1052でNO)、ステップS1042に戻って上述した音声送信処理を続ける。一方、ユーザーからの終了指示がある場合は(ステップS1052でYES)、このサブルーチンを終了し、図26の処理に戻る。
次に、図26のステップS1034で行う音声受信処理について図28を参照して説明する。
図26のステップS1032で受信したコマンドが音声受信要求であると判断されると、ステップS1034で図28に示すサブルーチンがコールされる。
ステップS1061においてHTTPのリザルトコードをクライアントに送信し、ステップS1062において、スピーカー占有権管理部134を呼び出し、図12〜図15を参照して上述したスピーカー占有権管理処理を実施して、接続したクライアントがスピーカー占有権を保持しているかどうか判断を行う(ステップS1063)。
音声受信要求を送信したクライアントがスピーカー占有権を保持していない、または付与できない場合は、ステップS1070でスピーカー占有権の保持ができなかったことを伝えるパケットを作成し、ステップS1071でクライアントへ送信し、図26の処理に戻る。
一方、スピーカー占有権を保持しるか、または付与可能である場合、ステップS1064で音声パケットの受信を待ち、クライアントから音声データを受信する。音声データを受信すると、受信した音声パケットの種類を判断する(ステップS1065)。有音パケットであればステップS1066で圧縮音声データを解凍し、音声再生バッファに音声データを格納する(ステップS1067)。
一方、静音パケットであればステップS1068でCNG波形作成を行い、この擬似音声波形のCNG波形データを音声再生バッファに格納する(ステップS1069)。
ステップS1072では、ユーザーからの終了指示があるかどうかを判断し、無ければ(ステップS1072でNO)、ステップS1062に戻って上述した音声受信処理を続ける。一方、ユーザーからの終了指示がある場合は(ステップS1072でYES)、このサブルーチンを終了し、図26の処理に戻る。
次に、スピーカー占有権管理部134で行われる処理について、図29及び図30のフローチャートを参照して説明する。この処理は、図28のステップS1062において呼び出される処理である。
上述したように、本実施の形態では2種類のスピーカー占有権制御方式を想定しており、1つはスピーカー占有権を単独で管理する場合、もう一つはスピーカー占有権がカメラ制御権と連動している場合である。
図29はスピーカー占有権が独立している場合に行われ、ステップS1081〜S1085の処理で、スピーカー占有権の権利付与の条件を確認する。
具体的には、ステップS1081においてミキシングを行うか、ステップS1082ではスピーカー占有権を既に他のクライアントに付与していないか、ステップS1083ではスピーカー占有権を持っているクライアントか、ステップS1084では他のクライアントのスピーカー占有権保持期間が、一定時間以上経っているか、また、ステップS1085では現在スピーカー占有権を有しているクライアントよりも高いレベルのクライアントか、をそれぞれ判断する。いずれかでYESであればスピーカー占有権保持可能と判断し、ステップS1087の処理に移り、呼び出したクライアントにスピーカー占有権に与えるか、またはすでに保有している場合にはそのままスピーカー占有権を有効とし、更に、新たにスピーカー占有権を与えた場合には、スピーカ占有権の取得時間を記憶する。
また、ステップS1081でいずれもNOであれば、スピーカー占有権を付与できないと判断し、ステップS1086でスピーカー占有権失敗を通知する。
上記処理終了後、サブルーチンを終了し、図28の処理に戻る。
次に、スピーカー占有権とカメラ制御権が連動している場合について、図30のフローチャートを参照して説明する。
ステップS1091にて、この処理を呼び出したクライアントがカメラ制御権を保持しているかどうかを判定し、カメラ制御権を保持しているのであれば、ステップS1093でスピーカー占有権を要求したクライアントに与える。逆に、カメラ制御権を保持していないのであれば、ステップS1092で、スピーカー占有権を要求したクライアントにスピーカー占有権取得失敗を通知する。
上記処理後、サブルーチンを終了し、図28の処理に戻る。
次に、図31〜図35のフローチャートを参照して、クライアント300〜500のソフトウェアの処理について説明する。
図31は、クライアントの全体の流れを示すフローチャートである。クライアントの電源がONされたり、ビューワが起動されるなどして処理が開始されると、クライアントのソフトウェア全体の初期化を行う(ステップS1101)。次に、接続先を指定するユーザーからの入力に基づいて、接続先を決定する(ステップS1102)。そして、音声関連のスレッドを起動する(ステップS1103)。この音声関連のスレッドは、それぞれ音声入力部316及び音声出力部317において実施される。なお、これらの音声関連スレッドの処理の詳細については後述する。
次に通信スレッドを立ち上げる(ステップS1104)。クライアントは、音声送信処理及び音声受信処理それぞれに対して通信スレッドを立ち上げる。なお、音声送信処理及び音声受信処理については、後述する。
そして、ステップS1105でユーザーの終了指示を待ち、終了が選択されると(ステップS1106でYES)、ステップS1107で終了処理(通信の切断、他スレッドへの終了の指示、他スレッドの動作の停止を待つ処理、リソースやメモリの開放など)を行った後に、処理を終了する。
次に、ステップS1103で音声スレッドが立ち上げられた後に音声入力部316及び音声出力部317で行う処理について説明する。
図32において、音声入力部316が起動すると(ステップS1110)、まず、音声入力部316の初期化を行う(ステップS1111)。この処理により音声のデジタル化ができる状態になる。そして、ステップS1112〜S1114の音声入力ループが行われる。
音声入力ループは、クライアントが停止の指示を受けるまで続けられ、音声の入力をフレーム単位で行って音声バッファ(例えば、図3の外部記憶部312を利用)に音声データを格納する。このループでは、まず、音声データのキャプチャを行う(ステップS1112)。キャプチャ単位は、本実施の形態では10[msec]を1フレーム単位としているが、可変サイズであっても構わない。次にこのフレーム毎に分けて入力された音声データを音声録音バッファに格納する(ステップS1113)。
音声バッファは、カメラサーバ100と同様に1つの装置に2つ存在している。1つは音声録音バッファであり、入力した音声を一時的に蓄積するFIFOバッファである。もう一つは音声再生バッファであり、出力する音声を一時的に蓄積するFIFOバッファである。
このようにして、音声入力ループは、ステップS1114でユーザーの終了指示があったと判定されるまで続けられる。そして、ユーザーの終了指示をステップS1114で検知すると、ステップS1115で音声入力部316を停止するなどの必要な終了処理を行ってから、実際に処理を終了する。
一方、図33において、音声出力部317が起動すると(ステップS1120)、まず、音声出力部317の初期化を行う(ステップS1121)。この初期化では、音声が直ぐに再生できるようにハードウェア装置の設定を行う。そして、ステップS1122〜S1126の音声出力ループが行われる。
まず、音声再生バッファ量が一定量を超えているかを判断する(ステップS1122)。音声再生バッファ量が一定量を超えている場合は(ステップS1122でYES)、ステップS1123で静音データの削減を実施してバッファ量を減らす。ここでは、図21を参照して上述した方法で実施される。
そして、ステップS1124にて音声再生バッファから再生すべき音声データを1フレーム分取り出す。なお、本実施の形態では、1フレームあたり10[msec]として処理をしているが、このサイズは可変であっても構わない。そして、ステップS1125にてこの音声データの再生を行う。音声データの再生は、音声出力部317に音声データを渡すことで、スピーカー304により実施される。
そして、ステップS1126にて、ユーザーが終了を指示しているかどうかを判定し、終了を指示していなければ(ステップS1126でNO)、ステップS1122へ戻り、ユーザーが終了を指示していれば(ステップS1126でYES)、ステップS1127で終了処理を行う。この終了処理では、音声出力部317の終了処理などを実施する。
次に、図31のステップS1104で立ち上げれられた通信スレッドの処理について、音声送信処理を図34、音声受信処理を図35を参照して説明する。
まず、図34を参照して、音声送信要求処理について説明する。なお、ステップS1136〜ステップS1146はカメラサーバ100側の処理である。
ステップS1131において接続処理を行って、カメラサーバ100と接続する。ステップS1132でこの接続が正常かどうかの判定を行い、接続の失敗であれば、ステップS1149に進んで終了処理を行う。一方、成功であれば、ステップS1133に進んで音声送信要求としてHTTPのPOSTメソッドを送信する。このメソッドの送信に問題があれば(ステップS1134でYES)、ステップS1149に進んで終了処理を行う。問題なければ(ステップS1134でNO)、ステップS1135でカメラサーバ100からの応答からスピーカー占有権の確保ができたかどうかを判断する。確保できなければ、ステップS1131に戻ってもう1度スピーカー占有権の確保を行う。
一方、スピーカー占有権の確保が確認されると(ステップS1135でYES)、音声録音バッファから1フレーム分の音声信号を読み出す(ステップS1136)、そして、VAD判定処理を行い(ステップS1137)このVAD判定処理の結果を判断する(ステップS1138)。
VAD判定結果、有音の場合には音声データを圧縮し(ステップS1140)、有音パケットを作成する(ステップS1141)。一方、静音であると判定された場合、静音パケットを作成する(ステップS1139)。そして、このようにして作成された有音パケットもしくは静音パケットを、ネットワーク200へ送信する(ステップS1142)。
更に、カメラサーバ100の内部ステータス(時間など)をチェックし、クライアントが必要とした情報が存在する場合は(ステップS1143でYES)、クライアントへのデータ送信パケットを作成し(ステップS1144)、ネットワーク200へ情報パケットを送信する(ステップS1145)。
次に、ステップS1146において、送信した音声情報パケットが一定以上のパケットサイズになったかどうかを判断する。HTTPのPOSTメソッドの長さを有限にする必要があるため、10パケット程度を1つのPOSTメソッドで処理するために行うループ処理である。このような段階を経て、音声データは、HTTPのPOSTメソッドによって送信される。一定以上のパケットサイズになると、POSTメソッドの返信として、ステップS1147でコネクションIDを受信し、次の接続のときにこのパラメータを使用する。
ステップS1148では、ユーザーからの終了指示があるかどうかを判断し、無ければ(ステップS1148でNO)、ステップS1131に戻って上述した音声送信処理を続ける。一方、ユーザーからの終了指示がある場合は(ステップS1148でYES)、ステップS1149で修了処理を行ってから、処理を終了する。
次に、図35を参照して音声受信処理について説明する。
まず、ステップS1151において接続処理を行って、カメラサーバ100に接続する。ステップS1152でこの接続が成功かどうかの判断を行い、接続の失敗であれば、ステップS1162に進んで終了処理を行う。一方、成功であれば、ステップS1153に進んで音声受信要求の送信を行う。この要求はHTTPのGETメソッドを用いて呼び出される。ステップS1154でこの呼び出しが成功したかどうかを判断する。HTTPでエラーが発生しているのであれば、ステップS1162に進んで終了処理を行う。
一方、成功であれば、ステップS1155で音声パケットを受信する。音声データを受信すると、受信した音声パケットの内容を判断する(ステップS1156)。有音パケットであればステップS1157で圧縮音声データを解凍し、音声再生バッファに音声データを格納する(ステップS1158)。
一方、静音パケットであればステップS1159でCNG波形作成を行い、この擬似音声波形のCNG波形データを音声再生バッファに格納する(ステップS1160)。
ステップS1161では、ユーザーからの終了指示があるかどうかを判断し、無ければ(ステップS1161でNO)、ステップS1152に戻って上述した音声受信処理を続ける。一方、ユーザーからの終了指示がある場合は(ステップS1161でYES)、ステップS1162で終了処理を行ってからこのサブルーチンを終了する。
通常、ファイヤーウォールでは、インターネットとの通信のためにHTTPに関しては最も優先度が高く透過が可能となっているので、本実施の形態によれば、ネットワークカメラの音声の配送をHTTPベースによって双方向に音声のやりとりを行うことを可能とし、ファイヤーウォールが存在したとしても、簡単に双方向通話が可能になる。
<変形例1>
図36は、本発明の実施の形態の変形例1におけるカメラサーバ100の音声情報を中継するサーバを用いた場合のシステムの概略全体構成を示すブロック図である。なお、図36において、図1と同様の構成には同じ参照番号を付し、詳細説明は省略する。また、図36において、カメラサーバ100及びクライアント300〜500の周辺装置(マイク、スピーカーなど)は省略している。
上記実施の形態の音声配送は、HTTPプロトコルがベースになっているため、図36に示すようにHTTPプロキシサーバ600を介して音声データの配信を行うことができる。
カメラサーバ100は、接続されているマイク101からの音声データをネットワーク200を通して、プロキシサーバ600を通してクライアント300へ送信することが可能である。そして、音声データをクライアント300がスピーカ304を使用して再生を行う。このようにしてクライアント300はプロキシサーバ600を介してカメラサーバ100の音声を再生することが可能になる。
また、クライアント300〜500からカメラサーバ100への音声配送もプロキシサーバ600を介して行うことが可能である。
クライアント300〜500は、接続されたマイクから音声データを入力し、プロキシーサーバ600を通してカメラサーバ100に接続することで入力した音声データの送信が可能となる。こうして、カメラサーバ100はクライアント300〜500からの音声データをスピーカーから再生することが可能となる。
このような仕組みによって、ファイヤーウォールの設置されているネットワークでHTTPプロキシーサーバが設置されているネットワークの場合でも、ファイヤウォールを透過して音声の送信と受信が可能となる。
<変形例2>
図37は、本発明の実施の形態の変形例2におけるカメラサーバ100の音声配送を中継サーバ700を用いて行う場合のシステムの概略全体構成を示すブロック図である。なお、図37において、図1と同様の構成には同じ参照番号を付し、詳細説明は省略する。また、図37において、カメラサーバ100及びクライアント300〜500の周辺装置(マイク、スピーカーなど)は省略している。
図36で示されるプロキシーサーバ600と非常に類似しているが相違点がある。それは中継サーバ700が、音声データのコピーを作成し、各クライアント300〜500に配信する点である。ネットワークプロトコル上では、クライアント300〜500からは、中継サーバ700は、カメラサーバ100とほぼ同一のプロトコルを使用する。このことからクライアント300〜500は、中継サーバ700に接続しているのか、カメラサーバ100に接続しているのかを意識せずに動作することが可能である。
中継サーバ700にクライアントが接続すると、その要求によって中継サーバ700は、カメラサーバ100へ接続をする。
逆に、ネットワークプロトコル上では、カメラサーバ100からは、中継サーバ700は、クライアントとほぼ同一のプロトコルを使用している。このことからカメラサーバ100は、クライアントか中継サーバ700かを意識せず、音声データを中継サーバ700に配信することができる。中継サーバ700は、その時点で接続しているクライアント全てに音声データをコピーして送信を行う。このような仕組みによって、中継サーバ700に接続する全てのクライアントに対して音声データを配送することが可能になる。
逆に、クライアントからカメラサーバ100への音声配送は、中継サーバ700を介しても、そのままカメラサーバ100に対して送信を行ってもよい。これは、カメラサーバ100からクライアントへのデータ量に対して、クライアントからカメラサーバ100のデータ量の方が低いため特にデータの変更はせずに送信することができるからである。
このような仕組みを導入することで、カメラサーバ100のCPU110やネットワーク接続部113のデータ送出能力などが低く、大量の音声データの配送ができない場合でも、中継サーバ700に高性能なコンピュータを配置することで、非常に多くのクライアントに対して、音声情報の送信が可能となる。
<変形例3>
図38は、本発明の実施の形態の変形例3における画像音声蓄積サーバ800を用いて画像データと音声データの記録を行う場合のシステムの概略全体構成を示すブロック図である。なお、図38において、図1と同様の構成には同じ参照番号を付し、詳細説明は省略する。また、図38において、カメラサーバ及びクライアント300〜500の周辺装置(マイク、スピーカーなど)は省略している。
図38で示されるネットワーク200には、2台のカメラサーバ装置100a、100bと、画像音声蓄積サーバ800が接続されている。
画像音声蓄積サーバ800は、クライアントとしてカメラサーバ100a、100bに接続を行い、それぞれから画像データと音声データとを取り込む。このように、画像音声蓄積サーバ800は、複数台のカメラサーバ100a、100bからの画像データと音声データを随時取得し、蓄積を行う。なお、図38では便宜上2台のカメラサーバを示しているが、3台以上のカメラサーバと接続することも勿論可能である。
これらの蓄積されたデータは、ネットワークを介してクライアント300〜500によって閲覧が可能である。
次に、クライアントにおけるソフトウェアGUIに関して図39を参照して説明する。
図39は、画像音声蓄積サーバ用のクライアントソフトウェアGUIの一構成例を示す図である。
画像音声蓄積サーバ800は、カメラサーバ100a、100bを含む複数のカメラサーバに接続することが可能である。そのため、クライアントソフトGUIも複数のカメラサーバから得られた複数の画像がカメラサーバ毎に表示される。表示された画像の1つを選択することで(図39では810)、操作対象のカメラサーバを選択することができる。なお、図39では、選択したカメラサーバの画像をウィンドウ811に大きく表示するようになっている。
音声の出力に関しても選択したカメラサーバの蓄積音声が再生される。
また、蓄積した画像や音声の時間方向の状況に関しては、801が示すようなタイムゲージと音声の出力状態を同時に表示したGUIを備えることで、視覚的に把握することができる。
タイムゲージの時間を選ぶことで、その瞬間の動画と音声を瞬時に再生することも可能になる。