図1を参照して、この実施例の監視カメラシステム10は、サーバ16と、端末60とで構成される。サーバ16には、カメラ12およびモニタ14が接続される。カメラ12は、被写界を撮影し、サーバ16に画像信号を出力する。モニタ14は、サーバ16から画像信号を受け、カメラ12で撮影された被写界を画面に表示する。
サーバ16にはさらに、アンプ50を介してマイク52が、アンプ54を介してスピーカ56がそれぞれ接続される。マイク52は、被写界で発生した音波を捕捉し、アンプ50に音声信号を出力する。アンプ50は、マイク52からの音声信号を増幅し、増幅された音声信号をサーバ16に出力する。アンプ54は、サーバ16からの音声信号を受け、この信号でスピーカ56を駆動する。これによりスピーカ56から、マイク52で捕捉された音波が出力される。
サーバ16と端末60とは、ネットワーク58を介して接続される。カメラ12からサーバ16に入力された画像信号およびマイク52からアンプ50を通じてサーバ16に入力された音声信号はまた、ネットワーク58を通じて端末60へも伝送される。
端末60には、モニタ90が接続される。モニタ90は、端末60から画像信号を受け、カメラ12で撮影された被写界を画面に表示する。端末60にはさらに、アンプ92を介してスピーカ94が接続される。アンプ92は、サーバ16から音声信号を受け、この信号でスピーカ94を駆動する。これによりスピーカ94から、マイク52で捕捉された音波が出力される。
次に、サーバ16の構成について説明する。サーバ16は、2本のデータバス46および48を含む。データバス46にはJPEGコーデック18が接続され、データバス48にはCPU42およびフラッシュメモリ32が接続される。
データバス46にはさらに、IDE−I/F回路24を介してHDD26が、D1−I/F(IN)回路20を介してカメラ12が、D1−I/F(OUT)回路22を介してモニタ14が、SDRAMコントローラ28を介してSDRAM30が、音声I/F回路40を介して音声A/Dコンバータ36および音声D/Aコンバータ38が、それぞれ接続される。
データバス48にはさらに、SDRAMコントローラ28を介してSDRAM30が接続される。また、データバス48には、拡張バスI/F回路34を介してネットワークコントローラ44が接続される。
なお、サーバ16では、CPU42が接続されているデータバス48とは別のデータバス46にJPEGコーデック18,音声A/Dコンバータ36および音声D/Aコンバータ38を接続することにより、画像・音声処理の速度の向上を図っている。データバス46側のハードウエアとデータバス48側のハードウエアとは、SDRAMコントローラ28を通じて互いにデータのやり取りをすることができる。
次に、端末60の構成について説明する。端末60は、データバス88を含む。データバス88には、JPEGコーデック62,ネットワークコントローラ64,フラッシュメモリ66,操作パネル84およびCPU86が接続される。
データバス88にはさらに、IDE−I/F回路76を介してHDD78が、D1−I/F回路70を介してモニタ90が、SDRAMコントローラ80を介してSDRAM82が、音声I/F回路72を介して音声D/Aコンバータ74が、それぞれ接続される。
次に、サーバ16を構成する1つ1つの要素について説明する。D1−I/F(IN)回路20は、カメラ12からの画像信号をデータバス46に適合する信号に変換する。D1−I/F(OUT)回路22は、データバス46からの画像信号をモニタ14に適合する信号に変換する。
IDE−I/F回路24は、CPU42の指示を受け、HDD26を制御する。HDD26は、IDE−I/F回路24の制御に応じてデータバス46からの画像信号(JPEGファイル)や音声信号(WAVEファイル)をHD26aに記録し、かつHD26aから画像信号や音声信号を読み出してデータバス46に出力する。
音声A/Dコンバータ36は、アンプ50からの音声信号をA/D変換する。音声I/F回路40は、音声A/Dコンバータ36からの音声信号をデータバス46に適合する信号に変換する。音声I/F回路40はまた、データバス46からの音声信号を音声D/Aコンバータ38に適合する信号に変換する。音声D/Aコンバータ38は、音声I/F回路40からの音声信号をD/A変換する。
SDRAM30は、複数の記憶領域(バンク)を含んでおり、これら複数の記憶領域に音声信号,画像信号等がそれぞれ保持される。なお、SDRAM30の詳細については、後述する。
SDRAMコントローラ28は、CPU42の指示を受けて、データバス46からの画像信号や音声信号をSDRAM30に書き込み、かつSDRAM30から画像信号や音声信号を読み出してデータバス46またはデータバス48に出力する。
JPEGコーデック18は、データバス46から入力される画像信号をJPEG方式に従って符号化し、符号化して得られた画像信号をデータバスに出力する。また、データバス46から入力される符号化画像信号をJPEG方式に従って復号化し、復号化して得られた画像信号をデータバス46に出力する。
ここで、符号化処理および復号化処理について簡単に説明しておく。画像信号は、次のような手順で符号化される。JPEGコーデック18は、最初、画像信号をブロック化する。次に、ブロックの各々にDCT変換を施し、これにより得られたDCT係数の各々を量子化する。次に、量子化されたDCT係数の各々をエントロピー符号化する。そして、エントロピー符号化されたデータを所定の順序に並べ、さらにヘッダ等の付加情報を添付することによってJPEGファイルを形成する。こうして形成される1つのJPEGファイルは、1枚の画像フレームと対応する。符号化画像信号を復号化する際には、JPEGコーデック18は、上記の符号化とは逆の処理を行う。
なお、この実施例ではJPEG方式を採用しているが、JPEG2000方式やその他の符号化方式を用いても構わない。いずれの場合も、符号化画像信号のヘッダないしは付加情報領域に記録時刻56aが埋め込まれる。
再びサーバ16の構成要素の説明に戻る。拡張バスI/F回路34は、ネットワークコントローラ44とデータバス48との間のデータのやり取りを仲介する。ネットワークコントローラ44は、端末60が発した要求信号をネットワーク58から受信する。また、CPU42の指示を受け、SDRAM30に保持されている画像信号や音声信号をネットワーク58に送出する。
フラッシュメモリ32には、CPU42の処理手順を記述したプログラムが格納されている。CPU42は、フラッシュメモリ32内のプログラムに従い、上記の各構成要素を制御する。これにより、サーバ16において、録画や再生、JPEGファイルやWAVEファイルの送信といった様々な処理が実現される。
次に、端末60を構成する1つ1つの要素について説明する。D1−I/F回路70は、データバス88からの画像信号をモニタ90に適合する信号に変換する。IDE−I/F回路76は、CPU86の指示を受け、HDD78を制御する。HDD78は、IDE−I/F回路76の制御に応じてデータバス88からの画像信号(JPEGファイル)や音声信号(WAVEファイル)をHD78aに記録し、かつHD78aから画像信号や音声信号を読み出してデータバス88に出力する。
音声I/F回路72は、データバス88からの音声信号を音声D/Aコンバータ74に適合する信号に変換する。音声D/Aコンバータ74は、音声I/F回路72からの音声信号をD/A変換し、変換後の音声信号をアンプ92に出力する。
SDRAM82は、複数の記憶領域(バンク)を含んでおり、これら複数の記憶領域に音声信号,画像信号等がそれぞれ保持される。なお、SDRAM82の詳細については、後述する。
SDRAMコントローラ80は、CPU86の指示を受けて、データバス88からの画像信号や音声信号をSDRAM82に書き込み、かつSDRAM82から画像信号や音声信号を読み出してデータバス88に出力する。
JPEGコーデック62は、データバス88から入力される画像信号をJPEG方式に従って符号化し、符号化して得られた画像信号をデータバス88に出力する。また、データバス88から入力される符号化画像信号をJPEG方式に従って復号化し、復号化して得られた画像信号をデータバス88に出力する。ここでの符号化処理および復号化処理は、JPEGコーデック18によるものと同様である。
ネットワークコントローラ64は、CPU86の指示を受けてサーバ16にネットワーク58経由で要求信号を送信する。そして、サーバ16からネットワーク58経由で画像信号や音声信号を受信し、受信信号をデータバス88に出力する。
操作パネル84は、Playキー84aと、Stopキー84bと、テンキー84cとを備えている。テンキー48cは、10個の数字キーといくつかの記号キーとを含む。操作パネル84上のいずれかのキーが押されると、押されたキーに対応する信号が操作パネル84からCPU86に送信される。
フラッシュメモリ66には、再生リスト(LIST)68が格納されている。なお、再生リスト68については後述する。
フラッシュメモリ66にはさらに、CPU86の処理手順を記述したプログラムも格納されている。CPU86は、操作パネル84からの信号に応じ、かつフラッシュメモリ66内のプログラムに従い、上記の各構成要素を制御する。これにより、端末60において、サーバ16からのJPEGファイルやWAVEファイルの取得、取得ファイルの記録や再生といった様々な処理が実現される。
次に、サーバ16内のSDRAM30について説明する。図2を参照して、SDRAM30は、音声バッファ30aと、画像バッファ30bとを含む。音声バッファ30aおよび画像バッファ30bには、D1−I/F(IN)回路20および音声A/Dコンバータ36からの音声信号および画像信号がそれぞれ蓄積される。音声バッファ30aおよび画像バッファ30b内の音声信号および画像信号は、CPU42の指示に従い、D1−I/F(OUT)回路22および音声D/Aコンバータ38にそれぞれ読み出される。その結果、モニタ14にライブ画像が表示され、スピーカ56からはライブ音声が出力される。
また、端末60からのWAVE要求があれば、その時点で音声バッファ30aに蓄積されている全ての音声信号がネットワークコントローラ44に読み出され、この音声信号を含むWAVEファイルが生成される。生成されたWAVEファイルは、ネットワークコントローラ44によってネットワーク58に送出される。
ただし、音声バッファ30aには第1閾値が設定されており、音声バッファ30aの蓄積量が第1閾値を越えていなければ音声バッファ30aからの読み出しは行われず、蓄積量が第1閾値を越えた時点でこれが実行される。なお、音声バッファ30aからネットワークコントローラ44側への音声信号読み出し処理の詳細については後述する。
さらにまた、端末60からのJPEG要求があれば、画像バッファ30bから、現在D1−I/F(OUT)回路22に出力中のフレームと対応する画像信号がJPEGコーデック18に読み出される。JPEGコーデック18では画像信号が符号化され、さらに符号化された画像信号を含むJPEGファイルが生成される。生成されたJPEGファイルは、ネットワークコントローラ44を通じてネットワーク58に送出される。
次に、端末60内のSDRAM82について説明する。図3を参照して、SDRAM82は、音声バッファ82aと、画像バッファ82bとを含む。音声バッファ82aおよび画像バッファ82bには、ネットワークコントローラ64によってネットワーク58から受信されたJPEGファイルの画像信号,および同様に受信されたWAVEファイルの音声信号がそれぞれ格納される。
音声バッファ82aおよび画像バッファ82bに蓄積された音声信号および画像信号は、フラッシュメモリ66内の再生リスト68(後述)に従って順次読み出され、再生される。
ただし、音声バッファ82aには、第2閾値および第3閾値が設定されている。音声バッファ82aの蓄積量が第2閾値を越えていなければ音声バッファ82aからの読み出しは行われず、第2閾値を越えた時点でこれが実行される。また、JPEG要求の送信タイミングにおいて音声バッファ82aの蓄積量が第3閾値を下回っているとき、このJPEG要求はスキップされ、代わりにWAVE要求が送信される。
なお、第3閾値が大きいほど音声が途切れにくくなり、小さいほど画像のコマ落ちが発生しにくくなる。この実施例では、音声および画像の品質バランスを考慮して、第3閾値は例えば第2閾値の0.8倍に設定される。
次に、音声バッファ30aからネットワークコントローラ44側への音声信号読み出し処理について説明する。図4を参照して、音声バッファ30aに音声信号が書き込まれるのに伴い、書き込みポインタ(点線矢印)が音声バッファ30a上を移動していく。また、音声バッファ30aから音声信号が読み出されるのに伴い、読み出しポインタ(audio_adr;実線矢印)が書き込みポインタの後を追って移動する。その時々の音声バッファ30aの蓄積量Dは、書き込みポインタと読み出しポインタとの差分で与えられる。
より具体的には、時間t=2のとき、書き込みポインタは“2”の位置に、読み出しポインタは“0”の位置にある。従って、蓄積量Dは“2”であり、この直後、音声バッファ30aから2秒分の音声信号が読み出される。
t=3では、t=2〜3の1秒間に1秒分の音声信号が書き込まれた結果、書き込みポインタは“3”の位置まで移動している。一方、読み出しポインタは、t=2〜3の1秒間に2秒分の音声信号が読み出された結果、“2”の位置まで移動している。従って、蓄積量Dは“1”であり、この直後、音声バッファ30aから1秒分の音声信号が読み出される。
t=4では、t=3〜4の1秒間に1秒分の音声信号が書き込まれた結果、書き込みポインタは“4”の位置まで移動している。一方、読み出しポインタは、t=3〜4の1秒間に1秒分の音声信号が読み出された結果、“3”の位置まで移動している。従って、蓄積量Dは“1”であり、この直後、音声バッファ30aから1秒分の音声信号が読み出される。
次に、再生リスト68について説明する。図5を参照して、再生リスト68は、JPEG欄68a,WAVE欄68bおよびリスト番号欄68cによって構成される。リスト番号欄68cには、リスト番号list[1],list[2],…が付与されている。JPEGファイルまたはWAVEファイルがSDRAM82に格納されたとき、そのファイルの識別子が格納順にリスト番号list[1],list[2],…に割り当てられる。
例えば、JPEGファイル(識別子:0001.jpg),WAVEファイル(識別子:0001.wav),WAVEファイル(識別子:0002.wav),WAVEファイル(識別子:0003.wav),…がこの順序で受信され、かつSDRAM82内の該当バッファに格納されたとする。この場合、まずリスト番号list[1]にファイル識別子0001.jpgが登録され、次いでリスト番号list[2]にファイル識別子0001.wavが登録され、さらにリスト番号list[3]にファイル識別子0002.wavが登録され、そしてリスト番号list[4]にファイル識別子0003.wavが登録される。
図中に矢印で示された再生ポインタlist[n]は、リスト番号list[1],list[2],…のいずれか1つを指す。再生ポインタlist[n]の指すリスト番号に割り当てられているファイルが、次の再生対象ファイルとなる。
以上のように構成された監視カメラシステム10の動作を、図1の全体構成図,図6〜図8に示されたサーバCPU42の処理フロー図,図9〜図12に示された端末CPU86の処理フロー図,および図13のタイミングチャート図に基づき以下に説明する。
図1を参照して、この監視カメラシステム10は、例えばオフィスビルや集合住宅などで用いられる。カメラ12は、例えば玄関や通路に設置され、サーバ16およびモニタ14は、例えば管理室に設けられる。なお、カメラ12は1台とは限らない。複数のカメラ12を設置する場合、各カメラ12,12,…は、図示しないマルチプレクサを介してD1−I/F(IN)回路20に接続される。
ネットワーク58は、例えばイントラネットやインターネットであり、端末60は、ネットワーク58に接続可能な任意の場所に設置される。従って、ユーザは、管理室内でだけでなく、端末60を通じて任意の場所で監視画像を閲覧することができる。
サーバ16では、リアルタイム再生モードや記録再生モードなど、複数の動作モードが準備されており、いずれかのモードが選択される。リアルタイム再生モードが選択された場合、カメラ12によって撮影された監視画像およびマイク52により捕捉された音声は、一旦バッファに蓄積された後再生され、モニタ14およびスピーカ56を通じてリアルタイム的に表示および出力される。
記録再生モードでは、監視画像および音声は、上記のようにしてリアルタイム的に表示および出力されると同時に、必要に応じて圧縮および/または符号化処理が施され、HD26aに記録される。HD26aに記録された監視画像および音声は、必要なときに読み出され、再生される。以下の説明では、サーバ16はリアルタイム再生モードで動作しているとする。
監視画像および音声をリアルタイム再生しているサーバ16に対し、端末60は、現在再生中の監視画像および音声の閲覧要求を発行する。閲覧要求は、1秒間隔で送信される複数のファイル要求で構成される。サーバ16は、要求されたファイルを端末60に送信する。
ファイル要求には、JPEG要求およびWAVE要求の2種類があり、端末60は、基本的には、JPEG要求およびWAVE要求を交互に送信する。ただし、ネットワーク58の伝送帯域幅が狭くなって、要求されたファイルの一部しか伝送できない状況が生じると、予定されたJPEG要求はスキップされ、代わりにWAVE要求が送信される。これにより、狭帯域状況下では、サーバ16からJPEGファイルよりもWAVEファイルが優先的に送信される。その結果、端末60では、監視画像のコマ落ちは生じるものの、音声を途切れさせることなく再生し続けることができる。
具体的には、サーバ16のCPU42は、以下のような処理を行う。図6を参照して、サーバ16が起動されると、ステップS1でCPU42は、初期処理を実行する。初期処理には、例えばSDRAMコントローラ28にSDRAM30の初期化を指示したり、ネットワークコントローラ44にネットワーク58との接続確立を指示したり、再生モードを選択したり、といった処理が含まれる。この実施例では、リアルタイム再生モードが選択される。
ステップS3でCPU42は、D1−I/F(IN)回路20から画像信号が入力されたか否かを判定する。判定結果が肯定的であればステップS5に、否定的であればステップS7に進む。ステップS5でCPU42は、SDRAMコントローラ28を通じ、画像信号をSDRAM30内の画像バッファ30bに格納する。その後、ステップS7に進む。
ステップS7でCPU42は、音声I/F回路40から音声データが入力されたか否かを判定する。判定結果が肯定的であればステップS9に、否定的であればステップS11に進む。ステップS9でCPU42は、SDRAMコントローラ28を通じ、音声データをSDRAM30内の音声バッファ30aに格納する。その後、ステップS11に進む。
ステップS11でCPU42は、SDRAMコントローラ28に命じて、画像バッファ30bに蓄積されている画像信号をD1−I/F(OUT)回路22からモニタ14へ、音声バッファ30aに蓄積されている音声データを音声I/F回路40を通じて音声D/Aコンバータ38へ、それぞれ出力させる。こうして、モニタ14に監視画像が表示され、同時にスピーカ56から音声が出力される。
ステップS13でCPU42は、ネットワークコントローラ44が端末60からJPEG要求を受信したか否かを判定する。判定結果が肯定的であればステップS15に、否定的であればステップS17に進む。ステップS15では、端末60にJPEGファイルを送信する。その後、ステップS17に進む。なお、JPEGファイル送信処理の詳細については後述する。
ステップS17でCPU42は、ネットワークコントローラ44が端末60からWAVE要求を受信したか否かを判定する。判定結果が肯定的であればステップS19に、否定的であればステップS21に進む。ステップS19では、端末60にWAVEファイルを送信する。その後、ステップS21に進む。なお、WAVEファイル送信処理の詳細については後述する。
ステップS21でCPU42は、処理を継続するか否かを判断する。判断結果が肯定的であれば、ステップS3に戻って上記と同様の処理を繰り返し、否定的であれば、処理を終了する。
次に、上記ステップS15のJPEGファイル送信処理について説明する。図7を参照して、ステップS41でCPU42は、JPEGコーデック18に対し、現在モニタ14側へ出力中のフレームと対応する画像信号の符号化を実行するように指示する。応じてJPEGコーデック18は、SDRAMコントローラ28を通じてSDRAM30から該当画像信号を読み出し、読み出された画像信号をJPEG方式に従って符号化する。符号化画像信号は、SDRAM30に一時保持される。
ステップS43でCPU42は、符号化画像信号をもとにJPEGファイルを生成する。その際、符号化画像信号の末尾にタイムスタンプ(wave_time)が添付される。
ここでタイムスタンプは、端末60側で再生処理を行うとき画像と音声との同期を取るのに用いられる。具体的には、端末60には、画像および音声をリアルタイムで再生するモードや、画像および音声をリアルタイムで再生しつつ記録し、後で記録画像および記録音声を再生するモードなど複数のモードが準備されている。どのモードで再生を行う場合も、端末60は、画像信号の末尾に添付されたタイムスタンプに基づいて画像信号の出力タイミングを検出し、画像信号を音声信号に同期させて出力する。
ステップS45でCPU42は、ネットワークコントローラ44を通じ、ネットワーク58経由で端末60にJPEGファイルを送信する。そして、上位階層のルーチンに復帰する。
次に、上記ステップS19のWAVEファイル送信処理について説明する。図8を参照して、ステップS61でCPU42は、ネットワークコントローラ44によって受信されたWAVE要求が初期要求か否かを判定する。なお、1回目のWAVE要求にはフラグが添付されおり、判定は、このフラグを検知することにより行われる。ステップS61の判定結果が肯定的であればステップS63に、否定的であればステップS65に進む。
ステップS63でCPU42は、変数wav_timeおよび変数audio_adrの各々に“0”をセットする。なお、wav_time,audio_adr等の変数の値は、例えばCPU42内のレジスタに保持される。その後、ステップS65に進む。
ステップS65でCPU42は、音声バッファ30aの蓄積量Dを算出する。蓄積量Dは、書き込みポインタと読み出しポインタ(audio_adr)との差分で与えられる(図4参照)。
ステップS67でCPU42は、算出された蓄積量Dが第1閾値よりも大きいか否かを判定する。判定結果が肯定的であればステップS69に進み、否定的であればステップS65に戻る。
ステップS69でCPU42は、変数audio_adrに{(audio_adr)+D}をセットする。ステップS71では、SDRAMコントローラ28を通じ、音声バッファ30aから全ての音声データを読み出す。ステップS73では、読み出された音声データの時間長Tを算出する。時間長Tは、読み出された音声データの量Dをその音声データのビットレートで除算することにより得られる。
ステップS75でCPU42は、変数wav_timeに{(wav_time)+T}をセットする。ステップS77では、ステップS71で読み出された音声データにタイムスタンプ(wav_time)等の付加情報を添付することにより、WAVEファイルを生成する。ステップS79では、ネットワークコントローラ44を通じ、ネットワーク58経由で端末60にWAVEファイルを送信する。その後、上位階層のルーチンに復帰する。
一方、端末60のCPU86は、以下のような処理を行う。なお、端末60にもいくつかの再生モードが準備されているが、この実施例ではリアルタイム再生を行う場合のみを説明する。
図9を参照して、端末60が起動されると、ステップS91でCPU86は、初期処理を実行する。初期処理には、例えばSDRAMコントローラ80にSDRAM82の初期化を指示したり、ネットワークコントローラ64にネットワーク58との接続確立を指示したり、といった処理が含まれる。
ステップS93でCPU86は、Playキー84aが押下されたか否かを判定する。判定結果が肯定的であればステップS95に、否定的であればステップS99に進む。ステップS95では、ファイル取得タスクを起動する。ステップS97では、再生タスクを起動する。その後、ステップS99に進む。なお、ファイル取得タスクおよび再生タスクについては後述する。
ステップS99でCPU86は、他の処理を実行する。ステップS101では、ファイル取得タスクおよび再生タスクが実行中か否かを判定する。判定結果が否定的、すなわち少なくとも一方のタスクが終了されていれば、ステップS93に戻る。判定結果が肯定的、すなわち両タスクがまだ実行中であれば、ステップS99に戻る。
次に、上記のファイル取得タスクについて説明する。図10を参照して、ステップS111でCPU86は、変数num,変数wav_nおよび変数jpg_nの各々に“1”をセットする。ステップS113では、変数jpg_nに対応するJPEGファイルを要求する。ステップS115では、変数jpg_nに{(jpg_n)+1}をセットする。ステップS117では、ネットワークコントローラ64によるファイル取得が完了したか否かを判定する。判定結果が否定的であればステップS119に、肯定的であればステップS121に進む。
ステップS119でCPU86は、Stopキー84bが押下されたか否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS117に戻る。
ステップS121でCPU86は、ネットワークコントローラ64が取得したJPEGファイルから画像信号を抽出し、抽出された画像信号を画像バッファ82bに格納する。ステップS123では、変数numに{num+1}をセットする。ステップS125では、画像バッファ82bに格納したものと同じ画像信号をHD78aに保存する。
ステップS127でCPU86は、再生リスト68(図5参照)のリスト番号list[num]に該当ファイルの識別子{(jpg_n).jpg}を登録する。ステップS129では、Stopキー84bが押下されたか否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS131に進む。
図11を参照して、ステップS131でCPU86は、変数wav_nの値が“1”であるか否かを判定する。判定結果が肯定的であればステップS133に、否定的であればステップS135に進む。ステップS133では、初期WAVE要求を送信し、その後ステップS135に進む。初期WAVE要求には、1回目のWAVE要求であることを示すフラグが添付される。
ステップS135では、前回の要求送信から1秒経過したが否かを判定する。判定結果が肯定的であればステップS137に進み、否定的であれば待機する。
ステップS137では、変数wav_nに対応するWAVEファイルつまり{(wav_n).wav}を要求する。その後、ステップS139に進む。ステップS139では、変数wav_nに{(wav_n)+1}をセットする。ステップS141では、ネットワークコントローラ64によるファイル取得が完了したか否かを判定する。判定結果が否定的であればステップS143に、肯定的であればステップS145に進む。
ステップS143でCPU86は、Stopキー84bが押下されたか否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS141に戻る。
ステップS145でCPU86は、ネットワークコントローラ64が取得したWAVEファイルから音声データを抽出し、抽出された音声データを音声バッファ82aに格納する。ステップS147では、変数numに{num+1}をセットする。ステップS149では、音声バッファ82aに格納したものと同じ音声データをHD78aに保存する。
ステップS151でCPU86は、再生リスト68のリスト番号list[num]に該当ファイルの識別子{(wav_n).wav}を登録する。ステップS153では、音声バッファ82aの蓄積量が第3閾値(図3参照)を超えたか否かが判定される。判定結果が肯定的であればステップS113に戻り、否定的であればステップS155に進む。
ステップS155でCPU86は、Stopキー84bが押下されたか否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS131に戻る。
次に、上記の再生タスクについて説明する。図12を参照して、ステップS181でCPU86は、再生ポインタlist[n]の変数nに1をセットする。再生ポインタlist[n]は、再生テーブル68(図5参照)中の複数のリスト番号68c(list[1],list[2],…)のいずれか1つを指す。
ステップS183でCPU86は、音声バッファ82aの蓄積量が第2閾値(図3参照)を超えているか否かを判定する。判定結果が肯定的であればステップS185に進み、否定的であれば待機する。
ステップS185では、再生ポインタlist[n]の指すリスト番号68cにJPEGファイルの識別子が登録されているか否かを判定する。判定結果が肯定的であればステップS187に、否定的であればステップS191に進む。
ステップS187でCPU86は、登録識別子に該当するJPEGファイルを画像バッファ82bから読み出す。ステップS189では、変数nに(n+1)をセットする。その後、ステップS191に進む。
ステップS191でCPU86は、再生ポインタlist[n]の指すリスト番号68cが空欄か否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS193に進む。
ステップS193でCPU86は、再生ポインタlist[n]の指すリスト番号68cの登録識別子に該当するWAVEファイルを音声バッファ82aから読み出す。ステップS195では、変数nに(n+1)をセットする。ステップS197では、Stopキー84bが押下されたか否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS199に進む。
ステップS199では、音声再生が完了したか否かを判定する。判定結果が肯定的であればステップS201に進み、否定的であればステップS197に戻る。ステップS201では、再生ポインタlist[n]の指すリスト番号68cが空欄か否かを判定する。判定結果が肯定的であれば本タスクを終了し、否定的であればステップS185に戻る。
上記フロー図による説明から明らかなように、基本動作として端末60は、ユーザによる再生指示すなわちPlayキー84a押下があると、最初JPEG要求を送信し、続いて1秒後にWAVE要求を送信する。以降、再生対象ファイルを取得し終えるまで、JPEG要求およびWAVE要求を1秒間隔で交互に送信し続ける。
サーバ16は、JPEG要求を受信したときJPEGファイルを、WAVE要求を受信したときWAVEファイルを、ネットワーク58経由で端末60に送信する。送信されるJPEGファイルには、そのとき再生中の画像信号が格納される。送信されるWAVEファイルには、そのとき音声バッファ30aに蓄積されている全音声データが格納される。
端末60は、JPEGファイルを受信すると、受信されたJPEGファイルから画像信号を取り出し、取り出された画像信号を画像バッファ82bに格納する。WAVEファイルを受信すると、受信されたWAVEファイルから音声データを取り出し、取り出された音声データを音声バッファ82aに格納する。
音声バッファ82aの蓄積量が第2閾値に達すると、端末60は、画像バッファ82bおよび音声バッファ82aに格納されている画像信号および音声データを読み出して再生する処理を開始する。再生処理では、端末60は、画像信号の末尾に付されたタイムスタンプ(wave_time)に基づき、再生画像の出力タイミングを再生音声のそれに同期させる。
特徴的な動作として端末60は、上記のようなファイル取得処理および再生処理作を行う際、2回目以降のJPEG要求の送信タイミングにおいてもし音声バッファ82aの蓄積量が第3閾値(これを第2閾値の8割とする)に達していなければ、このJPEG要求をスキップする。従って、最初のJPEG要求が送信されてから音声バッファ82aの蓄積量が第3閾値に達するまでの期間は、複数のWAVE要求を立て続けに送信することとなる。
再生指示直後におけるJPEG要求およびWAVE要求の送信タイミング,音声バッファ82aの蓄積状況,および音声の出力状況が、図13のタイミングチャートに示されている。第2閾値は、5秒分の音声信号に相当する量に設定されている。なお、具体的には、WAVE音声のレートが7867byte/secであれば、{7867×5}byteが第2閾値である。簡単のため、以下では、音声バッファ82aへの蓄積量を“5秒分”のように記述する。第3閾値は、4秒分(=5×0.8)となる。
図13を参照して、端末60は、時間t=0のとき最初のJPEG要求を送信する。t=2のとき、1つ目のJPEGファイルの受信を完了し、これと同時に最初のWAVE要求を送信する。
t=3では、1つ目のWAVEファイルの受信を完了する。1つ目のWAVEファイルには2秒分の音声信号が含まれており、従って、この時点での音声バッファ82aの蓄積量は2秒分となる。これは第3閾値すなわち4秒分に満たないので、2回目のJPEG要求はスキップされ、代わりに2回目のWAVE要求が送信される。
t=3.5では、2つ目のWAVEファイルの受信を完了する。2つ目のWAVEファイルには、1秒分の音声信号が含まれている。なお、この時点では、前回の要求送信から0.5秒しか経過していないため、まだ3回目のWAVE要求は送信されない。
t=4では、音声バッファ82aの蓄積量は3秒分であり、まだ第3閾値に満たない。よって、2回目のJPEG要求はスキップされ、代わりに3回目のWAVE要求が送信される。
t=4.5では、3つ目のWAVEファイルの受信を完了する。3つ目のWAVEファイルには1秒分の音声信号が含まれており、この時点で音声バッファ82aの蓄積量は4秒分となる。すなわち、蓄積量が第3閾値に達したので、ここで2回目のJPEG要求が送信される。
t=6.5では、2つ目のJPEGファイルの受信を完了し、これと同時に4回目のWAVE要求を送信する。
t=8では、4つ目のWAVEファイルの受信を完了する。4つ目のWAVEファイルには2.5秒分の音声信号が含まれており、この時点で音声バッファ82aの蓄積量は6.5秒分となる。しかし、蓄積量が5秒分を越えた時点で、音声バッファ82aから1つ目のWAVEファイルと対応する2秒分の音声信号が読み出される。その結果、蓄積量は3.5秒分となる。これは第3閾値を下回っており、従って3回目のJPEG要求はスキップされ、代わりに5回目のWAVE要求が送信される。
t=8.5では、5つ目のWAVEファイルの受信を完了する。5つ目のWAVEファイルには1.5秒分の音声信号が含まれており、この時点で音声バッファ82aの蓄積量は5秒分となる。しかし、音声バッファ82aから2つ目のWAVEファイルと対応する1秒分の音声信号が読み出されるので、直後、蓄積量は4となる。これは第3閾値に達しており、従って3回目のJPEG要求が送信される。
続くt=8.5〜12.5の期間では、上記t=4.5〜8.5の期間で行われたものと同様の処理が繰り返される。以降も、音声バッファ82aの蓄積量が第2閾値の近傍で推移している限り、同様の処理が繰り返される。
ただし、ネットワーク58の帯域幅が狭くなるなどの原因で、音声バッファ82aの蓄積量が持続的に第2閾値を大きく下回る状況が生じると、上記t=0〜4.5の期間で行われたものと同様の処理、すなわちJPEG要求をスキップしてWAVE要求を立て続けに送信する処理が行われる。これにより、音声バッファ82aの蓄積量が速やかに第2閾値近傍まで押し上げられ、その結果、再生音声の途切れは回避される。
以上の説明から明らかなように、この実施例では、端末CPU86は、ネットワークコントローラ64を通じ、ネットワーク58経由でサーバ16から画像信号および音声信号をそれぞれ周期的に取得する。取得された画像信号よび音声信号は、SDRAM82の画像バッファ82bおよび音声バッファ82aにそれぞれ蓄積される。CPU86は、音声バッファ82aの蓄積量が第3閾値に満たないとき、ネットワークコントローラ64による画像信号の取得周期を長くする。
これにより、ネットワーク58の帯域幅が狭くなったとき端末60において再生音声の途切れが生じる可能性が低減される。この場合、画像の品質低下は生じるものの、音声が途切れたときよりもユーザの不快感は少ない。また、サーバ16は、ただ要求された信号を端末60に送信するだけなので、サーバ16の負担が増すこともない。
より具体的には、端末60は、サーバ16からネットワーク58経由でJPEGファイルおよびWAVEファイルをそれぞれ周期的に取得することにより動画像および音声のリアルタイム再生を行う。その際、端末60がJPEGファイルの取得周期を制御することにより音声の途切れを回避する。この場合、音声の途切れを回避するための制御処理をクライアント側が行うので、サーバ16は特別な制御処理を行う必要がなく、サーバ16として単なるHTTPサーバを用いることができる。
つまり、HTTPサーバおよびクライアントからなる一般的なシステムにおいて、HTTPサーバからクライアントへJPEGファイルおよびWAVEファイルを周期的に送信し、かつクライアント側がネットワークの帯域幅に応じてJPEG送信周期の制御を行うことにより、狭帯域時に生じる音声の途切れを回避しつつ動画像および音声のリアルタイム再生を行うことができる。