以下に、本発明をその好適な実施例に基づいて詳細に説明する。なお、以下の実施例において示す構成は一例に過ぎず、本発明は、図示された構成に限定されるものではない。また、以下の実施例におけるコマンドは、例えばOpen Network Video Interface Forum(以下ONVIFと称する場合がある)規格に基づいて定められているものとする。
さらに、後述するVideoEncoderConfiguration2などのデータを定義するためには、ONVIF規格で用いられる、XML Schema Difinition言語(以下、XSDと称することがある)を用いるものとする。
(実施例1)
図1は、本実施例における、送信装置に相当する監視カメラ1000を含む撮像システムのシステム構成図である。2000及び2010は、本実施例における、受信装置に相当するクライアント装置である。監視カメラ1000とクライアント装置2000及び2010とは、IPネットワーク網1500を介して(ネットワーク経由で)相互に通信可能な状態に接続されている。
なお、本実施例における撮像システムは、送受信システムの一例である。また、本実施例における監視カメラ1000は、動画像を撮像する撮像装置であり、より詳細には、監視に用いられるネットワークカメラであるものとする。
また、IPネットワーク網1500は、例えばEthernet(登録商標)等の通信規格を満足する複数のルータ、スイッチ、ケーブル等から構成されるものとする。しかしながら、本実施例においては、監視カメラ1000とクライアント装置2000及び2010との間の通信を行うことができるものであれば、その通信規格、規模、構成を問わない。
例えば、IPネットワーク網1500は、インターネットや有線LAN(Local Area Network)、無線LAN(Wireless LAN)、WAN(Wide Area Network)等により構成されていても良い。なお、本実施例における監視カメラ1000は、例えば、PoE(Power Over Ethernet(登録商標))に対応していても良く、LANケーブルを介して電力を供給されても良い。
クライアント装置2000及び2010は、監視カメラ1000に対して、後述する撮像パラメータ変更や雲台駆動、映像ストリーミング開始等の各種コマンドを送信する。監視カメラ1000は、それらのコマンドに対するレスポンスや映像ストリーミングをクライアント装置2000及び2010に送信する。
なお、図1では、監視カメラ1000が1台、クライアント装置2000及び2010が2台、IPネットワーク網1500に接続されている例を示したが、これに限られるものではない。例えば、監視カメラは2台以上であってもよく、クライアント装置も3台以上であってもよい。
続いて、図2は、本実施例における、監視カメラ1000の内部構成を示すブロック図である。図2において、1001は、制御部であり、監視カメラ1000の全体の制御を行う。制御部1001は、例えばCPU(Central Processing Unit)で構成される。
1002は、記憶部である。記憶部1002は、主に制御部1001が実行するプログラム格納領域、プログラム実行中のワーク領域、後述する撮像部1003が生成する撮像画像の格納領域等、様々なデータの格納領域として使用される。
1003は、撮像部である。撮像部1003は、監視カメラ1000の撮像光学系により結像された被写体の像を撮像して取得したアナログ信号をデジタルデータに変換し、撮像画像として記憶部1002に出力する。1004は、圧縮符号化部である。なお、本実施例における撮像部1003は、CCDやCMOSなどの撮像センサ(撮像素子)を含む。
圧縮符号化部1004は、撮像部1003が出力した撮像画像に対して、クライアント装置2000又は2010から指定される符号化方式に基づいて圧縮符号化処理を行うことにより、画像データを生成し、生成した画像データを記憶部1002に出力する。このとき、圧縮符号化部1004は、制御部1001に対してVIDEO送信トリガを発生させ、配信可能な画像データが記憶部1002に出力されたことを通知する。
ここで、本実施例における監視カメラ1000の圧縮符号化部1004には、JPEG、H.264、及びH.265の3種類の符号化方式が実装されているものとする。
更に、この圧縮符号化部1004は、H.264ProgressiveHighProfileにも対応しているものとする。
従って、本実施例における監視カメラ1000は、JPEG,H.264と言った既存の符号化方式設定に対応するSetVideoEncoderConfigurationコマンド(以下、SetVECコマンドと称することがある)に対応する。なお、SetVECコマンドは、第1の符号化方式設定コマンドに相当する。
さらに、本実施例における監視カメラ1000は、SetVideoEncoderConfiguration2コマンド(以下、SetVEC2コマンドと称することがある)にも対応している。このSetVEC2コマンドは、JPEG,MPEG,H.264以外のH.265や、H.264ProgressiveHighProfile(以下、H.264PHPと称することがある)などの符号化方式に対応する。
また、このSetVEC2コマンドは、JPEG,MPEG,H.264にも対応するものとする。なお、SetVEC2コマンドは、第2の符号化方式設定コマンドに相当する。
また、監視カメラ1000は、GetVideoEncoderConfigurationコマンド(以下、GetVECと称することがある)に対応している。さらに、監視カメラ1000は、GetVideoEncoderConfiguration2(以下、GetVEC2と称することがある)コマンドにも対応している。
また、監視カメラ1000は、GetVideoEncoderConfigurationsコマンド(以下、GetVECsと称することがある)に対応している。さらに、監視カメラ1000は、GetVideoEncoderConfigurations2(以下、GetVECs2と称することがある)コマンドにも対応している。
また、監視カメラ1000は、GetCompatibleVideoEncoderConfigurationsコマンド(以下、GetCVECsと称することがある)に対応している。さらに、監視カメラ1000は、GetCompatibleVideoEncoderConfigurations2(以下、GetCVECs2と称することがある)コマンドにも対応している。
また、監視カメラ1000は、GetVideoEncoderConfigurationOptionsコマンド(以下、GetVECOsと称することがある)に対応している。さらに、監視カメラ1000は、GetVideoEncoderConfigurationOptions2(以下、GetVECOs2と称することがある)コマンドにも対応している。
また、監視カメラ1000は、GetGuaranteedNumberOfEncoderConfigurationコマンド(以下、GetGNOVECと称することがある)に対応している。さらに、監視カメラ1000は、GetGuaranteedNumberOfEncoderConfiguration2コマンド(以下、GetGNOVECと称することがある)の両方に対応している。
ここで、JPEG,MPEG−4、やH.264といった符号化方式を含む設定情報(符号化方式情報)であるVideoEncoderConfigurationを便宜的に、以下、VEC1と称することがある。また、既存の符号化方式以外の、H.264ProgressiveHighProfile、H.265などの新規な符号化方式の情報を含むことができる設定情報を便宜的に、以下、VEC2と称することがある。
なお、VEC2には、SetVEC2コマンドで設定したJPEG,MPEG−4,H.264も含むことができる。また、以下、VECとは、VEC1、及びVEC2の総称を指すものとする。また、VEC1,及びVEC2のToken(つまり、VECのConfigurationToken)を、vec0,vec1というように小文字で示すものとする。
ここで、本実施例におけるVECのCofigurationTokenは、VECを識別するための識別情報に相当する。
1005は、通信部である。通信部1005は、各制御コマンドを外部機器から受信する場合、また各制御コマンドに対するレスポンスや画像データを含むストリームをこの外部機器へ送信する場合に使用される。なお、本実施例における、クライアント装置2000及び2010は、外部機器の一例である。また、本実施例における通信部1005は、圧縮符号化部1004から出力された画像データを配信する配信部に相当する。
1006は、撮像制御部である。撮像制御部1006は、制御部1001が入力するパン角度、チルト角度、ズーム倍率の値に従って、チルト機構、パン機構、及びズーム機構を制御するために使用される。又、撮像制御部1006は、定期的に、現在のパン角度値、チルト角度値、ズーム倍率値をPTZ Position情報として、PTZPosition送信フラグをセットすることにより、制御部1001に提供する。
また、撮像制御部1006は、現在のパン、チルト、及びズーム機構(不図示)の稼働状況をPTZ Status情報として、PTZStatus送信フラグをセットすることにより、制御部1001に提供する。
なお、本実施例において、圧縮符号化部1004及び撮像制御部1006のそれぞれは、例えば、サブCPUで構成される。又、本実施例において、パン機構、チルト機構、及びズーム機構のそれぞれは、ステッピングモータやギヤ等を含むものとする。又、パン機構、チルト機構、及びズーム機構のそれぞれは、撮像部1003の位置を変更する変更部の一例である。
続いて、図3は、本実施例における、クライアント装置2000の内部構成を示すブロック図である。図3において、2001は、制御部である。制御部2001は、例えばCPUで構成され、クライアント装置2000の全体の制御を行う。2002は、記憶部である。記憶部2002は、主に制御部2001が実行するプログラム格納領域、プログラム実行中のワーク領域等、様々なデータの格納領域として使用される。
2003は、表示部である。表示部2003は、例えばLCD、有機ELディスプレイなどで構成され、クライアント装置2000の使用者に対して、様々な設定画面や、監視カメラ1000から受信する映像のビューワ、各種メッセージ等を表示する。この様々な設定画面には、後述のVideoEncoder設定ウィンドウが含まれる。
2004は、入力部である。入力部2004は、例えばボタン、十字キー、タッチパネル、マウスなどで構成され、使用者による画面操作の内容を制御部2001に通知する。2005は、復号部である。復号部2005は、通信部2006を介して受信された圧縮符号化されている画像データを復号化し、復号化した画像データを記憶部2002に展開する。
本実施例におけるクライアント装置2000の復号部2005には、画像復号方式として、JPEG及びH.264が実装されているものとする。従って、本実施例におけるクライアント装置2000は、JPEG及びH.264などの既存の符号化方式に対応するSetVECコマンドにしか対応しておらず、SetVEC2コマンドには対応していない。
2006は、通信部である。通信部2006は、各制御コマンドを監視カメラ1000に対して送信する場合、また各制御コマンドに対するレスポンスや、画像データを含むストリームを監視カメラ1000から受信する場合に使用される。なお、本実施例において、復号部2005は、例えば、サブCPUで構成される。
続いて、図4は、本実施例における、クライアント装置2010の内部構成を示すブロック図である。ここで、図4に示すように、クライアント装置2010の処理ブロックは、復号部2015を除き、図3に示したクライアント装置2000と同様である。
即ち、制御部2011は、制御部2001と同様であり、記憶部2012は、記憶部2002と同様である。また、表示部2013は、表示部2003と同様であり、入力部2004は、入力部2014と同様である。さらに、通信部2016は、通信部2006と同様である。
図4における2015は、復号部である。復号部2015は、通信部2016を介して受信された圧縮符号化されている画像データを復号化し、復号化した画像データを記憶部2012に展開する。
本実施例における復号部2015は、画像復号方式として、JPEG、H.264、及びH.264PHP、H.265が実装されているものとする。従って、本実施例におけるクライアント装置2010は、SetVECコマンド及びSetVEC2コマンドの両方に対応している。
さらに、クライアント装置2010は、GetVEC、GetVEC2、GetVECs、GetVECs2、GetVECOs、GetVECOs2、GetCVEC、GetCVEC2、GetGNOVEC、GetGNOVEC2にも対応している。
以上、図1乃至4を参照し、監視カメラ1000とクライアント装置2000及び2010との内部構成について説明したが、図2に示す処理ブロックは、本発明における監視カメラ、クライアント装置の好適な実施例を説明したものであり、この限りではない。例えば、監視カメラ及びクライアント装置は、音声入力部、或いは音声出力部を備える等、本発明の要旨の範囲内で、種々の変形及び変更が可能である。
続いて、図5を参照し、本実施例にて使用するコマンド、パラメータ等の名称と内容を以下に説明する。ここで、図5は、本実施例において、監視カメラ1000(の記憶部1002)が保持するパラメータの構造を図示している。
図5において、MediaProfile3000、3001、及び3002は、監視カメラ1000の各種設定項目を関連づけて記憶するためのパラメータセットである。なお、以下、MediaProfileをMPと省略することがある。MP3000、3001、及び3002のそれぞれは、MPのIDであるProfileTokenを保持する。
また、MP3000、3001、及び3002のそれぞれは、各種設定項目へのリンクを保持する。この各種設定項目には、後述のVideoSourceConfiguration3011、VideoEncoderConfiguration3020、3021、3031が含まれる。なお、以下、VideoSourceConfigurationをVSCと省略することがある。
図5におけるVideoSource3010は、監視カメラ1000が備える1つの撮像部1003の性能を示すパラメータの集合体である。なお、以下、VideoSourceをVSと称することがある。また、本実施例におけるVSは、撮像素子の設定に関する撮像素子設定情報に相当する。
ここで、VS3010は、VS3010のIDであるVideoSourceTokenや、撮像部1003が出力可能な撮像画像の解像度を示すResolutionなどのパラメータを含む。
VSC3011は、VS3010のVideoSourceTokenなどを含む。これにより、VSC3011は、監視カメラ1000が備えるVS3010をMP3000、3001、及び3002に関連付けるためのパラメータの集合体であると言える。
ここで、VSC3011は、撮像部1003が出力可能な撮像画像の解像度を示すResolutionを含む。さらに、VSC3011は、撮像部1003から出力される撮像画像のうち、どの部分を切り出してクライアント装置2000などに配信するかを指定するためのBoundsを含む。
VEC3020、3021、及び3031は、画像データの圧縮符号化に関するエンコーダ設定をMPに関連付けるためのパラメータの集合体である。
監視カメラ1000は、VS、及びVSCの内容に基づいて撮像部1003から出力される撮像画像を、VECに基づいて圧縮符号化し、画像データとして通信部1005を介してクライアント装置2000及び2010に配信する。具体的には、圧縮符号化部1004は、この撮像画像を、VECにより設定される符号化方式、フレームレート、或いは解像度等のパラメータに従って符号化することで、画像データを生成する。
なお、圧縮符号化部1004に実装されている符号化方式のうち、JPEG及びH.264は、記憶部1002のVEC1とVEC2のどちらでも、そのパラメータを保持することができる。これに対し、この符号化方式のうち、H.265は、VEC2のみで保持される。
VECは、VECのIDであるConfigurationToken、圧縮符号化方式を指定するEncoding、出力画像の解像度を指定するResolutionを含む。さらに、VECは、圧縮符号化品質を指定するQuality、出力画像の最大フレームレートを指定するFramerateLimit、及び最大ビットレートを指定するBitrateLimitも含む。
3040は、VEC1の記憶領域、3041は、VEC2の記憶領域を模式的に示すものであり、後述する図15に示されるようにVEC2は、ProfileExtension2に定義されている。また、後述する図16に示されるように、VEC2のEncodingProfileは、string形式で指定できるので拡張性が高くなっている。
続いて、図6は、監視カメラ1000とクライアント装置2010との間において、映像を配信するために必要なMediaProfileを設定するための典型的なコマンドシーケンスを示している。ここでトランザクションとは、クライアント装置2010から監視カメラ1000へ送信されるコマンドと、それに対して監視カメラ1000がクライアント装置2010へ返送するレスポンスのペアのことを指している。
ここで、クライアント装置2010は、前述の通りH.265の復号器に相当する復号部2015を備えている。さらに、クライアント装置2010は、SetVEC及びSetVEC2の両方に対応している。そして、クライアント装置2010の記憶部2012は、VEC1を記憶するための第1の記憶領域3040とVEC2を記憶するための第2の記憶領域3041とを備えている。
4002は、GetProfilesトランザクションである。このトランザクションは、配信プロファイルに相当するMediaProfileのリストを取得するためのトランザクションである。ここで、MediaProfileとは、監視カメラ1000の各種設定項目を関連づけて記憶するためのパラメータセットである。
この各種設定項目は、このMediaProfileのIDであるProfileTokenと、VSC、VECのほか、音声のエンコーダ等を含む。そして、MediaProfileは、これら各種設定項目へのリンクを保持する。したがって、MediaProfileは、配信設定情報に相当する。
クライアント装置2010は、GetProfilesコマンドを監視カメラ1000に送信する。そして、GetProfilesコマンドを受信した監視カメラ1000は、MediaProfileのリストをクライアント装置2010に送信する。このリストは、図5における、MP3000、3001、及び3002に相当する。
これにより、クライアント装置2010は、MediaProfileを識別するための配信プロファイルIDに相当するProfileTokenとともに、監視カメラ1000で現在使用可能なMediaProfileのリストを取得する。なお、クライアント装置2010は、監視カメラ1000内に存在する配信可能な配信プロファイル設定であるMediaProfileを、配信プロファイルIDで識別している。
4003は、GetVideoSourcesコマンドのトランザクションである。このコマンドにより、クライアント装置2010は、監視カメラ1000が保持するVideoSourceのリストを取得する。
ここで、VideoSourceとは、監視カメラ1000が備える1つの撮像部1003の性能を示すパラメータの集合体である。また、VideoSourceは、VideoSourceのIDであるVideoSourceTokenと、撮像部1003が出力可能な撮像画像の解像度を示すResolutionを含む。
クライアント装置2010は、GetVideoSourcesコマンドを監視カメラ1000に送信する。そして、GetVideoSourcesコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
4004は、GetVideoSourceConfigurationsトランザクションである。このトランザクションは、監視カメラ1000の保持するVideoSourceConfigurationのリストを取得するためのトランザクションである。
クライアント装置2010は、GetVideoSourceConfigurationsコマンドを監視カメラ1000に送信する。そして、GetVideoSourceConfigurationsコマンドを受信した監視カメラ1000は、監視カメラ1000が保持するVSCのIDを含むリストをクライアント装置2010に返送する。
4055は、GetVECs2のトランザクションである。クライアント装置2010がGetVECs2コマンドリクエストを送信した場合、監視カメラ1000から返送されるそのレスポンスには、符号化方式の設定情報として、JPEG、H.264、及びH.265が含まれる。また、このレスポンスは、監視カメラ1000が保持する全てのVECのリストを含む。
なお、監視カメラ1000は、GetVECs2のコマンドを受信することにより、クライアント装置2010が新しいコマンドセットを備えたクライアント装置であると認識できる。
一方、クライアント装置2010が、GetVECなど、既存の体系のコマンドを使用した場合を想定する。このような想定の下では、監視カメラ1000は、そのクライアント装置2010が古いコマンドセットを備えたクライアント装置なのか、それとも新しいコマンドセット(コマンド体系)を備えたクライアント装置なのかを区別することができない。
4056は、GetVideoEncoderConfigurationOptions2トランザクションである。このトランザクションにより、クライアント装置2010は、IDによって指定されたVEC2に関し、監視カメラ1000が受け付け可能な各パラメータの選択肢や設定値の範囲を取得することができる。
クライアント装置2010は、GetVideoEncoderConfigurationOptions2コマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このトランザクションにより、クライアント装置2010は、記憶部1002に記憶されている圧縮符号化設定のIDを含むリストを監視カメラ1000から取得する。
次に、クライアント装置2010は、GetGNOVEC2トランザクション(不図示)を実行する。このトランザクションにより、クライアント装置は、IDによって指定されたVECに関し、ビデオ映像ごとに、配信を保証できる符号器の数を取得する。また、同時に配信できる映像ストリーム数が符号方式ごとに制限されるのであれば、その数の情報を取得する。
4007は、CreateProfileのトランザクションである。このトランザクションは、配信プロファイルの作成を要求するためのトランザクションである。クライアント装置2010は、CreateProfileコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このトランザクションにより、クライアント装置2010は、配信プロファイルを監視カメラ1000内に新たに作成し、作成した配信プロファイルのIDを得ることができる。又、監視カメラ1000は、この新たに作成された配信プロファイルを記憶する。
より詳細には、制御部1001は、通信部1005で受信されたCreateProfileコマンドに応じたMediaProfileを新たに作成し、作成したMediaProfileを記憶部1002に記憶させる記憶制御処理を実行する。
このトランザクションのコマンド処理後、監視カメラ1000は、MediaProfile変更通知イベントをクライアント装置2010に送信することで、MediaProfileに何らかの変更があったことをクライアント装置2010に通知する。
4008は、AddVideoSourceConfigurationのトランザクションである。このトランザクションは、VSCの追加を要求するためのトランザクションである。クライアント装置2010は、AddVideoSourceConfigurationのコマンドを監視カメラ1000に送信する。
なお、このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
このトランザクションにおいて、クライアント装置2010は、4007で取得した配信プロファイルIDと4004で取得したVSCのIDとを指定する。これにより、クライアント装置2010は、指定した配信プロファイルIDに対応するMediaProfileに対し、指定したVSCのIDに対応する所望のVSCを関連付けることができる
4059は、AddVideoEncoderConfigurationのトランザクションである。このトランザクションは、符号化情報(VEC)の追加を要求するためのトランザクションである。クライアント装置2010は、AddVECコマンドを監視カメラ1000に送信する。監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
このトランザクションにおいて、クライアント装置2010は、4007で取得した配信プロファイルIDと4055で取得したVECのIDとを指定する。これにより、クライアント装置2010は、指定した配信プロファイルIDに対応するMediaProfileに対し、指定したIDに対応するVECを関連付けることができる。
一方、監視カメラ1000は、クライアント装置2010により指定された配信プロファイルIDに対応するMediaProfileと、クライアント装置2010により指定されたVECのIDに対応するVEC設定と、を関連付けて記憶する。VEC1であれば、第1の記憶領域3040に記憶され、VEC2であれば、第2の記憶領域3041に記憶される。
なお、本実施例におけるAddVideoEncoderConfigurationコマンドは、MediaProfileにVECを追加するための追加コマンドに相当する。
4070は、RemoveVideoEncoderConfigurationのトランザクションである。このトランザクションは、符号化情報(VEC)の削除を要求するためのトランザクションである。クライアント装置2010は、RemoveVECコマンドを監視カメラ1000に送信する。監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
このトランザクションにおいて、クライアント装置2010は、4007で取得した配信プロファイルIDと4055で取得したVECのIDとを指定する。これにより、クライアント装置2010は、指定した配信プロファイルIDに対応するMediaProflieから、指定したIDに対応するVECを削除することができる。
一方、監視カメラ1000は、クライアント装置2010により指定された配信プロファイルIDに対応するMediaProfileから、クライアント装置2010により指定されたVECのIDに対応するVECを削除することができる。
なお、本実施例におけるRemoveVideoEncoderConfiguraitonコマンドは、MediaProfileからVECを削除するための削除コマンドに相当する。
4060は、SetVideoEncoderConfiguration2のトランザクションである。このトランザクションは、VEC2の各パラメータを設定するためのトランザクションである。クライアント装置2010は、SetVideoEncoderConfiguration2のコマンドを監視カメラ1000に送信する。
なお、本実施例におけるSetVideoEncoderConfiguration2は、第2の符号化方式設定コマンドに相当する。
このSetVEC2コマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このトランザクションにより、クライアント装置2010は、4055で取得したVEC2の内容を、4056で取得した選択肢に基づいて設定する。例えば、圧縮符号化方式や切出しサイズを変更する。監視カメラ1000は、設定された圧縮符号化設定等の内容を記憶する。
4011は、GetStreamUriのトランザクションである。このトランザクションは、配信アドレスの取得を要求するためのトランザクションである。このトランザクションにて、クライアント装置2010は、4007で取得した配信プロファイルIDを指定し、指定した配信プロファイルの設定に基づいてストリーミング配信される画像データ等を取得するためのアドレス(URI)を取得する。
監視カメラ1000は、クライアント装置2010により指定された配信プロファイルIDに関連付けられているVSC、及びVECの内容に対応する画像データをストリーミング配信するためのアドレスを、クライアント装置2010に返送する。
4012は、DESCRIBEのトランザクションである。このトランザクションは、配信情報の取得を要求するためのトランザクションである。クライアント装置2010は、DESCRIBEのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
このトランザクションにおいて、クライアント装置2010は、4011で取得したURIを使用してDESCRIBEコマンドを実行することにより、監視カメラ1000がストリーミング配信するコンテンツの情報を要求して取得する。
4013は、SETUPのトランザクションである。このトランザクションは、配信設定を要求するためのトランザクションである。クライアント装置2010は、SETUPのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
このトランザクションにおいて、クライアント装置2010は、4012で取得した配信情報に関する詳細データに基づき、監視カメラ1000に対してストリーミングの準備を行わせる。このコマンドを実行することにより、クライアント装置2010と監視カメラ1000との間で、セッション番号を含むストリームの伝送方法が共有される。
4014は、PLAYのトランザクションである。このトランザクションは、ストリーミング配信を開始させるためのトランザクションである。クライアント装置2010は、PLAYのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
クライアント装置2010は、PLAYのコマンドを監視カメラ1000に送信する際、4013で取得したセッション番号を用いることで、監視カメラ1000にストリーミングの開始を要求することができる。
4015は、監視カメラ1000からクライアント装置2010に配信されるストリームである。4014で開始を要求されたストリームを4013において共有された伝送方法によって配信する。
4016は、TEARDOWNのトランザクションである。このトランザクションは、配信を停止させるためのトランザクションである。クライアント装置2010は、TEARDOWNのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このトランザクションにおいて、クライアント装置2010は、4013にて取得したセッション番号を指定してTEADOWNコマンドを実行することにより、監視カメラ1000に対してストリーミングの停止を要求することができる。
以上のように、図1乃至6を用いることにより、H.265が実装されており、VECとVEC2の両方に対応した監視カメラ1000が、VEC2コマンドを受け取った場合の典型的なコマンドシーケンスについて説明した。
なお、図6では、クライアント装置2010と監視カメラ1000との間で、映像を配信するために必要なMediaProfileを設定するための典型的なコマンドシーケンスを示した。
ここで、このコマンドシーケンスと、クライアント装置2000と監視カメラ1000との間で、映像配信するために必要なMediaProfileを設定するための典型的なコマンドシーケンスとは、基本的に同じである。そこで、このコマンドシーケンスについては、図6を参照し、異なる部分を中心に説明し、重複する部分については、その説明を省略することがある。
このコマンドシーケンスでは、図6における4055のGetVEC2トランザクションは、GetVECトランザクションになる。このトランザクションにより、クライアント装置2000は、監視カメラ1000が保持するVEC1の全リストを取得する。クライアント装置2000は、GetVECコマンドを監視カメラ1000に送信する。
又、このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このレスポンスには、画像の圧縮方式のリストとして、JPEG、H.264が含まれることになる。一方、このレスポンスには、H.265が含まれない。また、このレスポンスには、記憶部1002に記憶されている符号化設定のIDを含むリストが含まれる。
このコマンドシーケンスでは、図6における4056のGetVECOs2トランザクションがGetVECOsトランザクションになる。このトランザクションにより、クライアント装置2000は、IDによって指定されたVEC1に関し、監視カメラ1000が受け付け可能な各パラメータの選択肢や設定値の範囲を取得することができる。
クライアント装置2000は、GetVECOsコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このトランザクションにより、クライアント装置2000は、記憶部1002に記憶されている符号化設定のIDを含むリストを監視カメラ1000から取得する。また、このレスポンスには、JPEG、及びH.264がレスポンスに含まれることになる。一方、このレスポンスには、H.265が含まれない。
このコマンドシーケンスでは、図6における4060のSetVEC2のトランザクションは、SetVECのトランザクションになる。このトランザクションは、VECの各パラメータを設定するためのトランザクションである。クライアント装置2000は、SetVECのコマンドを監視カメラ1000に送信する。
このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このトランザクションにより、クライアント装置2000は、GetVECトランザクションで取得したVECの内容を、GetVECOsトランザクションで取得した選択肢に基づいて設定する。例えば、圧縮符号化方式や切出しサイズを変更する。監視カメラ1000は、設定された圧縮符号化設定等の内容を記憶する。
このトランザクションの処理後、監視カメラ1000は、VEC変更通知イベントをクライアント装置2000に送信することにより、VECに何らかの変更があったことをクライアント装置2000に通知する。なお、本実施例におけるSetVECコマンドは、第1の符号化方式設定コマンドに相当する。
続いて、図11は、本実施例における、GetProfileコマンドの構成の一例を示す図である。図11において、<ProfileToken>タグには、profile0が対応付けられている。なお、値がprofile0の<ProfileToken>タグを含むGetProflieコマンドは、このタグの値に対応するMP3000を監視カメラ1000から取得するためのコマンドである。
続いて、図12は、本実施例における、GetProfileレスポンスの構成の一例を示す図である。図12に示すように、<tt:GetProfile Response>タグには、<trt:Proflie fixed=“false” token=“profile0”>タグが対応付けられている。このタグには、<tt:Extension>タグが対応付けられている。
更に、このタグには、<tt:Extension>タグが対応付けられている。そして、このタグには、図12の符号10000で示した<tt:VideoEncoderConfiguration2 token=“vec2”>タグが対応付けられている。なお、図12の符号10000で示したタグが対応付けられた<tt:Extension>タグの値は、MediaProfileの拡張領域の値に対応する。
続いて、図13は、本実施例における、AddVideoEncoderConfigurationのコマンドの構成の一例を示す図である。図13において、符号10001で示すように、<AddVideoEncoderConfiguration>タグには、<ProfileToken>タグ及び<ConfigurationToken>タグが対応付けられている。
そして、この<ProfileToken>タグに対応付けられた値は、profile0である。また、この<ConfigurationToken>タグに対応付けられた値は、vec2である。よって、図13のコマンドは、ProflieTokenの値がprofile0であるMP3000に対し、ConfigurationTokenの値がvec2である3030のVEC2を追加するためのコマンドである。
なお、AddVECコマンドの<ConfigurationToken>タグには、vec0及びvec1のようなVEC1のConfigurationTokenの値も対応づけることができる。
また、本実施例におけるConfigurationTokenは、VECを識別するための識別子に相当する。そして、本実施例におけるAddVECコマンドは、この識別子が記述される識別コマンドに相当する。
続いて、図15は、本実施例に係る、VideoEncoderConfiguration2の定義の一例を説明するための図である。図15に示すように、VEC2は、MPの拡張領域であるProfileExtension2に定義されている。
続いて、図16は、VideoEncoderConfiguration2の定義の一例を説明するための図である。図16に示すように、VEC2では、sequence指定子により、図16の要素が定義通りの順番で出現することを指定されている。
図16において、Encodingは、符号化方式を指定するためのパラメータである。Resolutionは、解像度を指定するためのパラメータであり、Width,及びHeightに指定されるパラメータのそれぞれにより、画面横画素数と画面縦画素数とが指定される。
Qualityは、画像品質を指定するためのパラメータである。また、RateControlは、フレームレートの設定を指定するためのパラメータである。このRateContorlに含まれるFrameRateLimitは、フレームレートの上限値を指定するパラメータである。
また、このRateControlに含まれるEncodingIntervalは、符号化と伝送間隔を指定するパラメータである。そして、このRateControlに含まれるBitrateLimitは、ストリーミング配信される画像データの上限ビットレートを指定するパラメータである。
Multicastは、ストリーミング配信される画像データのマルチキャストの数を指定するパラメータである。また、SessionTimeoutは、ストリーミング配信される画像データのタイムアウト指定のパラメータである。そして、GovLengthは、Iフレーム間隔を指定するためのパラメータである。
さらに、EncodingProfileは、符号化方式のプロファイルを指定するためのパラメータである。例えば、符号化方式がH.265である場合、このEncodingProfileには、Main、Main10、MainStillPictureなどが指定され得る。
続いて、図7は、本実施例に係る監視カメラ1000における、AddVideoEncoderConfigurationコマンド受信処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。また、制御部1001は、通信部1005によりAddVECコマンドが受信された場合に、この処理を開始する。
ステップS1500では、制御部1001は、通信部1005で受信されたAddVECコマンドの引き数として指定されたConfigurationTokenに対応するVECがVEC1であるのか、それともVEC2であるのかを判定する。例えば、本実施例では、制御部1001は、図14に示すようなテーブルに基づいて、この判定を行う。なお、図14に示すテーブルは、記憶部1002に記憶される。
ここで、図14に示すテーブルでは、VECのToken(ConfigurationToken)と、VECの種別情報と、が対応付けられている。このVECの種別情報は、VECがVEC1であるのか、それともVEC2であるのかを示す情報である。
例えば、図14に示すテーブルでは、値がvec0のVECのTokenと、値がVEC1のVECの種別と、が対応付けられている。これにより、ConfigurationTokenの値がvec0であるVECの種別は、VEC1であることが示される。
また、図14に示すテーブルでは、値がvec1のVECのTokenと、値がVEC1のVECの種別と、が対応付けられている。これにより、ConfigurationTokenの値がvec1のVECの種別は、VEC1であることが示される。
さらに、図14に示すテーブルでは、値がvec2のVECのTokenと、値がVEC2のVECの種別と、が対応付けられている。これにより、ConfigurationTokenの値がvec2のVECの種別は、VEC2であることが示される。
なおかつ、図14に示すテーブルでは、値がvec3のVECのTokenと、値がVEC2のVECの種別と、が対応付けられている。これにより、ConfigurationTokenの値がvec2のVECの種別は、VEC2であることが示される。
そして、制御部1001は、通信部1005で受信されたAddVECコマンドの引数として指定されたConfigurationTokenに対応付けられVECの種別を記憶部1002から読み出す。
次に、制御部1001は、読み出されたVECの種別がVEC1である場合は、この引数として指定されたConfigurationTokenに対応付けられたVECがVEC1であると判定する。一方、制御部1001は、読み出されたVECの種別がVEC2である場合は、この引数として指定されたConfigurationTokenに対応付けられたVECがVEC2であると判定する。
そして、制御部1001は、このVECがVEC1であると判定した場合には、ステップS1501に処理を進める。一方、制御部1001は、このVECがVEC2であると判定した場合には、ステップS1601に処理を進める。
なお、通信部1005で受信されたAddVECコマンドの引数として指定されたConfigurationTokenが、記憶部1002に記憶された図16のテーブルに存在しない場合も考えられる。このような場合、制御部1001は、通信部1005に指示し、通信部1005で受信されたAddVECコマンドのレスポンスとして、エラーである旨を示す情報をクライアント装置2000に送信させても良い。
ステップS1501では、制御部1001は、通信部1005で受信されたAddVECコマンドの引数として指定されたProfileTokenに対応するMPのVEC1を更新(記述)する。より詳細には、制御部1001は、このMPのVEC1を、このコマンドの引数として指定されたConfigurationTokenに対応するVEC1で更新する。
したがって、本実施例における制御部1001は、このMPにこのVEC1を記述する記述処理機能を備えると言える。
ステップS1601では、追加部の役割を果たす制御部1001は、通信部1005で受信されたAddVECコマンドの引数として指定されたProfileTokenに対応するMPに、VEC2を追加する。ここで、この追加するVEC2は、このコマンドの引数として指定されたConfigurationTokenに対応するVEC2である。
また、制御部1001は、図11を用いて後述するクライアント装置2010のGUI表示画面で、本当にVEC1の内容を消去して処理を次に進めるか否かを判定する判定処理を実行しても良い。
ステップS1602では、制御部1001は、通信部1005に指示し、MPに何らかの変更が加えられた旨をクライアント装置2000及び2010に通知させる。なお、このMPは、通信部1005で受信されたAddVECコマンドに引数として指定されたProfileTokenに対応するMPである。
例えば、制御部1001は、通信部1005に指示し、このMPに何らかの変更が加えられた旨を示すイベントを、クライアント装置2000及び2010に送信させる。
ステップS1603では、制御部1001は、通信部1005に指示し、通信部1005で受信されたAddVECコマンドのレスポンスとして、正常である旨を示す正常応答をクライアント装置2010に返送させる。
続いて、図8は、本実施例に係る監視カメラ1000における、RemoveVideoEncoderConfiguration受信処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。また、制御部1001は、通信部1005によりRemoveVECコマンドが受信された場合に、この処理を開始する。
ステップS1700では、制御部1001は、通信部1005で受信されたRemoveVECコマンドの引き数として指定されたConfigurationTokenに対応するVECがVEC1であるのか、それともVEC2であるのかを判定する。
そして、制御部1001は、通信部1005で受信されたRemoveVECコマンドの引数として指定されたConfigurationTokenに対応付けられVECの種別を記憶部1002から読み出す。
次に、制御部1001は、読み出されたVECの種別がVEC1である場合は。この引数として指定されたConfigurationTokenに対応付けられたVECがVEC1であると判定する。一方、制御部1001は、読み出されたVECの種別がVEC2である場合は、この引数として指定されたConfigurationTokenに対応付けられたVECがVEC2であると判定する。
そして、制御部1001は、このVECがVEC1であると判定した場合には、ステップS1701に処理を進める。一方、制御部1001は、このVECがVEC2であると判定した場合には、ステップS1801に処理を進める。
ステップS1701では、制御部1001は、通信部1005で受信されたRemoveVECコマンドの引数として指定されたProfileTokenに対応するMPから、VEC1を消去(除去)する。ここで、この消去されるVEC1は、このコマンドの引数として指定されたConfigurationTokenに対応するVEC1である。
したがって、本実施例における制御部1001は、このMPからこのVEC1を削除する削除処理機能を備えると言える。
ステップS1702では、制御部1001は、通信部1005で受信されたRemoveVECコマンドの引数として指定されたProfileTokenに対応するMPから、VEC2を消去(除去)する。ここで、この消去されるVEC2は、このコマンドの引数として指定されたConfigurationTokenに対応するVEC2である。
ステップS1802では、制御部1001は、通信部1005に指示し、MPに何らかの変更が加えられた旨をクライアント装置2000及び2010に通知させる。なお、このMPは、通信部1005で受信されたRemoveVECコマンドに引数として指定されたProfileTokenに対応するMPである。
例えば、制御部1001は、通信部1005に指示し、このMPに何らかの変更が加えられた旨を示すイベントを、クライアント装置2000及び2010に送信させる。
ステップS1803では、制御部1001は、通信部1005に指示し、通信部1005で受信されたRemoveVECコマンドのレスポンスとして、正常である旨を示す正常応答をクライアント装置2010に返送させる。
続いて、図9及び10は、本実施例のクライアント装置2010において、監視カメラ1000のVECの設定を行わせるためのユーザーインターフェースであるところの、VideoEncoder設定ウィンドウを示す図である。
図9における7000は、LiveViewエリアである。クライアント装置2010は、このウィンドウが開かれた場合に前述の図6に示すシーケンスを実行することにより、トランザクション4015で得られる映像ストリームに対応する画像を、LiveViewウィンドウ7000に表示させる。
さらに、クライアント装置2010は、GetVECs2コマンドを監視カメラ1000に送信することにより、VECの全てのリストを監視カメラ1000から取得する。そして、クライアント装置2010は、得られた結果(取得したリスト)を用いることにより、図9の画面におけるVideoEncoder設定タブ7001、7002、及び7003を表示する。
なお、MP3001は、VideoEncoder設定タブ7001に対応し、MP3002は、VideoEncoder設定タブ7002に、MP3003は、VideoEncoder設定タブ7003に対応する。
また、クライアント装置2010は、GetVECOsコマンド及びGetVECOs2コマンドを送信することにより、VECの各パラメータの選択肢や設定範囲を取得する。そして、クライアント装置2010は、得られた結果(取得した選択肢や設定範囲)を用いることにより、図9の画面におけるVideoEncoderの各パラメータの選択肢や設定範囲を、7045に表示する。
これにより、クライアント装置2010は、VECの設定値の選択肢や設定範囲を、表示部2013に表示させることで、ユーザに提供することが可能となる。なお、7045は、VideoEncoderSettingエリアである。
また、VideoEncoder設定タブ7001、VideoEncoder設定タブ7002、及びVideoEncoder設定タブ7003は、VideoEncoder設定画面を切り換えるためのタブである。
例えば、ユーザによりVideoEncoder設定タブ7001が押下された場合には、図9のVideoEncoder設定ウィンドウにおいて、VideoEncoder1設定画面が表示される。この画面は、MP3001に関連付けられたVEC3021をユーザに変更させるための画面である。
つまり、VideoEncoder1(設定画面)、VideoEncoder2(設定画面)、及びVideoEncoder3(設定画面)は、監視カメラ1000に作成されたMPのパラメータ(を設定するための画面)に相当する。
ここで、このMediaProflieは、クライアント装置2000及び2010などの外部装置から送信されたCreateProfileコマンドにより、監視カメラ1000に作成されたものである。
なお、図9では、MP3000、MP3001、及びMP3002の3つが監視カメラ1000に作成されており、作成されたMPに対応するパラメータがクライアント装置2010の設定画面に表示されている。
ここで、MP3000のProfileTokenの値は、profile0である。また、MP3001のProfileTokenの値は、Profile1である。そして、MP3002のProfileTokenの値は、Profile2である。
7050は、各VECの圧縮符号化方式をユーザに選択させるEncoderTypeエリアである。このエリアには、図9の画面が開かれた場合に、GetVECOptions2コマンドを送信することにより得られる圧縮符号化方式(Encording)の選択肢が表示される。
なお、本実施例では、このエリアには、クライアント装置2010においてユーザが現在選択することができる圧縮符号化方式として、JPEG、H.264、及びH.265が表示されている。
ラジオボタン7051、ラジオボタン7052、及びラジオボタン7053は、JPEG、H.264、及びH.265のいずれか1つを択一的に選択するためのラジオボタンである。ここで、ラジオボタン7051が押下された場合には、JPEGが選択され、ラジオボタン7052が押下された場合には、H.264が選択され、ラジオボタン7053が押下された場合には、H.265が選択される。
なお、図9では、JPEG及びH.265は、ともに未選択となっている。
例えば、MP3001のVEC1には、H.264が設定されている。このため、図9の表示画面では、H.264に対応するラジオボタン7052が押下されており、このラジオボタン7052に黒丸が表示されている。
7020は、VEC3021に含まれるFramerateLimit、BitrateLimit、及びQualityのパラメータをユーザに選択させるためのDetailエリアである。7021、7022、及び7023で示された各パラメータの設定範囲は、図9の画面が開かれた場合に、GetVECOsコマンドを実行することにより得られるそれぞれのパラメータの設定範囲の内容が表示される。
7030は、解像度(Resolution)を選択するためのEncoderResolutionエリアである。7031のドロップダウンリストには、図9の画面が開かれた場合に、GetVECOsコマンドを実行することにより得られた、VEC3021の解像度のパラメータの選択肢の内容が表示される。
7033は、Encoder Profileを選択するための選択エリアである。選択エリア7033における塗りつぶし▽ボタンをマウスなどでクリックすると、ドロップダウンメニューが表示される。この選択エリア7033のドロップダウンメニューには、ユーザが選択可能なEncoderProfileのリストが表示される。
例えば、図9におけるドロップダウンメニューでは、H.264HighProfileが選択されている。これにより、LiveViewウィンドウ7000に表示されるライブ映像は、H.264HighProfileで圧縮符号化された画像データが(クライアント装置2010の)復号部2015により復号化されたものである。
続いて、図10は、本実施例に係るクライアント装置2010において、ユーザによりラジオボタン7053が押下された状態のVideoEncoder設定ウィンドウを示す。ここで、図10の画面で、ユーザにより設定ボタン7040が押下された場合を想定する。
このような想定の下では、まず、クライアント装置2010は、AddVECコマンドを監視カメラ1000に送信する。このAddVECコマンドの引数として指定されたProfileTokenは、MP3001に対応するものである。また、このコマンドの引数として指定されたConfigurationToken(=vec2)は、VEC3030に対応するものである。
一方、このAddVECコマンドを受信した監視カメラ1000は、AddVEC受信処理を実行する。以下、このような想定の下でのAddVEC受信処理の具体例を、上述の図7を用いて説明する。
ステップS1500では、制御部1001は、通信部1005で受信されたAddVECコマンドの引き数として指定されたConfigurationTokenに対応するVECがVEC2であると判定する。そして、制御部1001は、ステップS1601に処理を進める。
ステップS1601では、制御部1001は、記憶部1002に記憶されたMP3001に対し、ConfigurationTokenの値がvec2のVEC2を追加する。この場合、H.265MainProfileに対応するVEC2がMP3001に追加される。
ステップS1602では、制御部1001は、通信部1005に指示し、MP3001に何らかの変更が加えられた旨の情報をクライアント装置2000及び2010に通知させる。例えば、この情報は、H.264に対応するストリーミング配信が停止され、H.265に対応するストリーミング配信が開始されることを示す情報である。
ステップS1603では、制御部1001は、通信部1005に指示し、クライアント装置2010からのAddVECコマンドのレスポンスとして、正常応答をクライアント装置2010に送信させる。
以上、本実施例における監視カメラ1000は、VECのConfigurationTokenとVECの種別とが対応付けられたテーブルを記憶する。
また、監視カメラ1000は、通信部1005で受信されたAddVECコマンドにて引数として指定されたConfigurationTokenに対応するVECを、このテーブルから読み出す。さらに、監視カメラ1000は、読み出したVECを記憶部1002に記憶されたMediaProfileに記述する。
これにより、AddVEC2のコマンド及びレスポンス、RemoveVEC2のコマンド及びレスポンスというような新たなコマンドを追加することなく、既存のOnvifコマンドでサポートされていない符号化方式に対応することできる。この結果、より少ないコマンド数で、既存のOnvifコマンドでサポートされていない符号化方式に対応することができる。
なお、上述の実施例では、画像の符号化方式を例に説明したが、音声(Audio)の符号化方式に対しても本実施例を適用することができる。
また、このような音声の符号化方式に関するコマンドとしては、SetAudioEncoderConfiguraition2、GetAudioEncoderConfiguration2が想定される。さらに、このようなコマンドとしては、GetAudiuoDecoderConfiguration2,GetAudioCompatibleOutputConfiguration2などが想定される。
また、本実施例によれば、以下に述べるような課題を解決することができる。つまり、現在、ONVIFで定義されている符号化方式は、JPEG、MPEG4とH.264だけであり、JPEG2000、やH.265などには対応していない。従って、このような未定義の符号化方式を設定するコマンドを新たに設ける必要が出てくる。
例えば、このような符号化方式に相当する設定情報VideoEncoderConfigurationに変更を加える現在のOnvifコマンドは、SetVideoEncoderConfigurationである。しかしながら、新しい符号化方式を設定するコマンドとしては、例えば、SetVideoEncoderConfiguration2といった新しいコマンドが必要となる。
さらに、新しいSetVideoEncoderConfiguration2コマンドのConfigurationTokenのIDで関連付けられる符号化方式設定情報は、第2に記憶部に割り付けられる。ここで、この第2の記憶部は、既存のSetVideoEncoderConfigurationコマンドで割りつけられる第1の記憶部と異なる。
同様に、GetVideoEncoderConfiguration2といったコマンドなども必要となる。ここで、新規に追加するコマンドを極力少なくするために、流用可能なコマンドは、あえて追加せず流用するケースが考えられる。ところが、既存のコマンドは、新しい符号化方式に対応しておらず、流用すると、実装上不整合を生じることがある。
既存のコマンドを流用する例としては、AddVideoEncoderConfigurationコマンドとRemoveVideoEncoderConfigurationコマンドとが考えられる。このAddVideoEncoderConfigurationコマンドは、MediaProfileにVideoEncoderConfigurationを追加するためのコマンドである。
また、RemoveVideoEncoderConfigurationコマンドは、MediaProfileからVideoEncoderConfigurationを消去するためのコマンドである。
ところが、このようなコマンドを流用すると、このようなコマンドで追加(又は消去)されるVideoEncoderConfigurationを判別することが困難になる。例えば、この追加等されるVideoEncoderConfigurationは、SetVideoEncoderConfigurationコマンドで設定されたものであるのか否か判別することができなくなってしまう。
同様に、この追加等されるVideoEncoderConfigurationは、SetVideoEncoderConfiguration2で設定されたものであるのか否か判別することができなくなってしまう。このような課題が、本実施例によって解決される。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。