以下に、本発明をその好適な実施例に基づいて詳細に説明する。なお、以下の実施例において示す構成は一例に過ぎず、本発明は、図示された構成に限定されるものではない。
(実施例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種類の符号化方式が実装されているものとする。従って、本実施例における監視カメラ1000は、JPEG,H.264と言った既存の符号化方式設定に対応するSetVideoEncoderConfigurationコマンド(以下、SetVECコマンドと称することがある)に対応する。
さらに、本実施例における監視カメラ1000は、JPEG,MPEG,H.264以外のH.265などの符号化方式にも対応するSetVideoEncoderConfiguration2コマンドにも対応している。つまり、このSetVideoEncoderConfiguration2コマンド(SetVEC2コマンド)は、H.265のみならず、JPEG,MPEG,H.264にも対応する。
1005は、通信部である。通信部1005は、各制御コマンドを外部機器から受信する場合、また各制御コマンドに対するレスポンスや画像データを含むストリームをこの外部機器へ送信する場合に使用される。なお、本実施例における、クライアント装置2000及び2010は、外部機器の一例である。
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コマンドには対応していない。
同様に、本実施例におけるクライアント装置2000は、JPEG及びH.264などの既存の符号化方式に対応するGetVideoEncoderConfigurationコマンドのみに対応している。つまり、本実施例におけるクライアント装置2000は、GetVideoEncoderConfiguration2コマンドには対応していない。
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.265が実装されているものとする。従って、本実施例におけるクライアント装置2010は、SetVECコマンド及びSetVEC2コマンドの両方に対応している。
同様に、本実施例におけるクライアント装置2010は、GetVideoEncoderConfigurationコマンド及びGetVideoEncoderConfiguration2コマンドの両方に対応している。
以上、図1乃至4を参照し、監視カメラ1000とクライアント装置2000及び2010との内部構成について説明したが、図2に示す処理ブロックは、本発明における監視カメラ、クライアント装置の好適な実施例を説明したものであり、この限りではない。例えば、監視カメラ及びクライアント装置は、音声入力部、或いは音声出力部を備える等、本発明の要旨の範囲内で、種々の変形及び変更が可能である。
続いて、図5を参照し、本実施例にて使用するコマンド、パラメータ等の名称と内容を以下に説明する。ここで、図3は、本実施例において、監視カメラ1000(の記憶部1002)が保持するパラメータの構造を図示している。
図5において、MediaProfile3000、3001、及び3002は、監視カメラ1000の各種設定項目を関連づけて記憶するためのパラメータセットである。MediaProfile3000、3001、及び3002のそれぞれは、MediaProfileのIDであるProfileTokenを保持する。
また、MediaProfile3000、3001、及び3002のそれぞれは、各種設定項目へのリンクを保持する。この各種設定項目には、後述のVideoSourceConfiguration3011、VideoEncoderConfiguration3020、3021が含まれる。さらに、この各種設定項目には、VideoEncoderConfiguration2の3030、3031、3032などが含まれる。
図5におけるVideoSource3010は、監視カメラ1000が備える1つの撮像部1003の性能を示すパラメータの集合体である。ここで、VideoSource3010は、VideoSource3010のIDであるVideoSourceTokenや、撮像部1003が出力可能な撮像画像の解像度を示すResolutionなどのパラメータを含む。
なお、以後、VideoSourceをVSと省略することがある。また、本実施例におけるVSは、撮像素子の設定に関する撮像素子設定情報に相当する。
VideoSourceConfiguration3011は、VS3010のVideoSourceTokenなどを含む。これにより、VideoSourceConfiguration3011は、監視カメラ1000が備えるVS3010をMediaProfile3000、3001、及び3002に関連付けるためのパラメータの集合体であると言える。
ここで、VideoSourceConfiguration3011は、撮像部1003が出力可能な撮像画像の解像度を示すResolutionを含む。さらに、VideoSourceConfiguration3011は、撮像部1003から出力される撮像画像のうち、どの部分を切り出してクライアント装置2000などに配信するかを指定するためのBoundsを含む。
なお、以後、VideoSourceConfigurationをVSCと省略することがある。
VideoEncoderConfiguration3020、3021は、画像データの圧縮符号化に関するエンコーダ設定をMediaProfileに関連付けるパラメータの集合体である。また、VideoEncoderConfiguration23030、3031、3032も、画像データの圧縮符号化に関するエンコーダ設定をMediaProfileに関連付けるパラメータの集合体である。
なお、以後、VideoEncoderConfigurationをVEC、VideoEncoderConfiguration2をVEC2と省略することがある。
監視カメラ1000は、VS、及びVSCの内容に基づいて撮像部1003から出力される撮像画像を、VEC、及びVEC2に基づいて圧縮符号化し、画像データとして通信部1005を介してクライアント装置2000及び2010に配信する。
ここで、圧縮符号化部1004は、この撮像画像を、VEC及びVEC2により設定される符号化方式(例えばJPEG、H.264やH.265)、フレームレート、或いは解像度等のパラメータに従って符号化することで、画像データを生成する。
VECは、VECのIDであるVECToken、圧縮符号化方式を指定するEncoding、出力画像の解像度を指定するResolutionを含む。さらに、VECは、圧縮符号化品質を指定するQuality、出力画像の最大フレームレートを指定するFramerateLimit、及び最大ビットレートを指定するBitrateLimitも含む。
VEC2は、VEC2のIDであるVEC2Token、圧縮符号化方式を指定するEncodingのストリング(テキスト情報)、出力画像の解像度を指定するResolutionを含む。さらに、VEC2は、圧縮符号化品質を指定するQuality、出力画像の最大フレームレートを指定するFramerateLimit、及び最大ビットレートを指定するBitrateLimitも含む。
ここで、圧縮符号化部1004に実装されている符号化方式のうち、JPEG及びH.264は、記憶部1002のVECとVEC2のどちらでも、そのパラメータを保持できる。これに対し、この符号化方式のうち、H.265は、VEC2のみで保持される。
続いて、図6は、監視カメラ1000とクライアント装置2000との間において、映像を配信するために必要なMediaProfileを設定するための典型的なコマンドシーケンスを示している。ここでトランザクションとは、クライアント装置2000から監視カメラ1000へ送信されるコマンドと、それに対して監視カメラ1000がクライアント装置2000へ返送するレスポンスのペアのことを指している。
図6における4000は、ネットワーク機器接続のトランザクションである。クライアント装置2000は、ネットワーク機器を接続するためのProbeコマンドをユニキャスト、或いはマルチキャストでIPネットワーク網1500に送信する。このIPネットワーク網1500に接続されている監視カメラ1000は、コマンド受け付け可能となったことを示すProbeMatchレスポンスをクライアント装置2000へ返送する。
4001は、Subscribeのトランザクションである。このトランザクションにより、クライアント装置2000は、監視カメラ1000に対し、イベント配信を行うよう指示することができる。
4002は、GetProfilesトランザクションである。このトランザクションは、配信プロファイルに相当するMediaProfileを取得するためのトランザクションである。ここで、MediaProfileとは、監視カメラ1000の各種設定項目を関連づけて記憶するためのパラメータセットである。
この各種設定項目は、このMediaProfileのIDであるProfileTokenと、VSC、VECのほか、音声のエンコーダ等を含む。そして、MediaProfileは、これら各種設定項目へのリンクを保持する。
クライアント装置2000は、GetProfilesコマンドを監視カメラ1000に送信する。そして、GetProfilesコマンドを受信した監視カメラ1000は、MediaProfileのリストをクライアント装置2000に送信する。
これにより、クライアント装置2000は、MediaProfileを識別するための配信プロファイルIDに相当するProfileTokenとともに、監視カメラ1000で現在使用可能なMediaProfileのリストを取得する。なお、クライアント装置2000は、監視カメラ1000内に存在する配信可能な配信プロファイル設定であるMediaProfileを、配信プロファイルIDで識別している。
4003は、GetVideoSourcesコマンドのトランザクションである。このコマンドにより、クライアント装置2000は、監視カメラ1000が保持するVideoSourceのリストを取得する。
ここで、VideoSourceとは、監視カメラ1000が備える1つの撮像部1003の性能を示すパラメータの集合体である。また、VideoSourceは、VideoSourceのIDであるVideoSourceTokenと、撮像部1003が出力可能な撮像画像の解像度を示すResolutionを含む。
クライアント装置2000は、GetVideoSourcesコマンドを監視カメラ1000に送信する。そして、GetVideoSourcesコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2000に返送する。
4004は、GetVideoSourceConfigurationsトランザクションである。このトランザクションは、監視カメラ1000の保持するVideoSourceConfigurationのリストを取得するためのトランザクションである。
クライアント装置2000は、GetVideoSourceConfigurationsコマンドを監視カメラ1000に送信する。そして、GetVideoSourceConfigurationsコマンドを受信した監視カメラ1000は、監視カメラ1000が保持するVSCのIDを含むリストをクライアント装置2000に返送する。
4005は、GetVideoEncoderConfigurationsトランザクションである。このトランザクションにより、クライアント装置2000は、監視カメラ1000が保持するVideoEncoderConfigurationのリストを取得する。
クライアント装置2000は、GetVideoEncoderConfigurationsコマンドを監視カメラ1000に送信する。又、このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このレスポンスには、画像の圧縮方式のリストとして、JPEG、H.264が含まれることになる。一方、このレスポンスには、H.265が含まれない。また、このレスポンスには、記憶部1002に記憶されている符号化設定のIDを含むリストが含まれる。
4006は、GetVideoEncoderConfigurationOptionsトランザクションである。このトランザクションにより、クライアント装置2000は、IDによって指定されたVECに関し、監視カメラ1000が受け付け可能な各パラメータの選択肢や設定値の範囲を取得することができる。
クライアント装置2000は、GetVideoEncoderConfigurationOptionsコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このトランザクションにより、クライアント装置2000は、記憶部1002に記憶されている符号化設定のIDを含むリストを監視カメラ1000から取得する。また、このレスポンスには、JPEG、及びH.264がレスポンスに含まれることになる。一方、このレスポンスには、H.265が含まれない。
4007は、CreateProfileのトランザクションである。このトランザクションは、配信プロファイルの作成を要求するためのトランザクションである。クライアント装置2000は、CreateProfileコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このトランザクションにより、クライアント装置2000は、配信プロファイルを監視カメラ1000内に新たに作成し、作成した配信プロファイルのIDを得ることができる。又、監視カメラ1000は、この新たに作成された配信プロファイルを記憶する。
より詳細には、制御部1001は、通信部1005で受信されたCreateProfileコマンドに応じたMediaProfileを新たに作成し、作成したMediaProfileを記憶部1002に記憶させる記憶制御処理を実行する。
このトランザクションのコマンド処理後、監視カメラ1000は、MediaProfile変更通知イベントをクライアント装置2000に送信することで、MediaProfileに何らかの変更があったことをクライアント装置2000に通知する。
4008は、AddVideoSourceConfigurationのトランザクションである。このトランザクションは、VSCの追加を要求するためのトランザクションである。クライアント装置2000は、AddVideoSourceConfigurationのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2000に返送する。
このトランザクションにおいて、クライアント装置2000は、4007で取得した配信プロファイルIDと4004で取得したVSCのIDとを指定する。これにより、クライアント装置2000は、指定した配信プロファイルIDに対応するMediaProfileに対し、指定したVSCのIDに対応する所望のVSCを関連付けることができる。
一方、監視カメラ1000は、クライアント装置2000により指定された配信プロファイルIDに対応するMediaProfileと、クライアント装置2000により指定されたVSCのIDに対応する所望のVSCと、を関連付けて記憶する。
4009は、AddVideoEncoderConfigurationのトランザクションである。このトランザクションは、VECの追加を要求するためのトランザクションである。クライアント装置2000は、AddVideoEncoderConfigurationのコマンドを監視カメラ1000に送信する。監視カメラ1000は、このコマンドのレスポンスをクライアント装置2000に返送する。
このトランザクションにおいて、クライアント装置2000は、4007で取得した配信プロファイルIDと4005で取得したVECのIDとを指定する。これにより、クライアント装置2000は、指定した配信プロファイルIDに対応するMediaProfileに対し、指定したVECのIDに対応するVECを関連付けることができる。
一方、監視カメラ1000は、クライアント装置2000により指定された配信プロファイルIDに対応するMediaProfileと、クライアント装置2000により指定されたVECのIDに対応する所望のVECと、を関連付けて記憶する。
4008、4009のトランザクションの処理後、監視カメラ1000は、MediaProfile変更通知イベントをクライアント装置2000に送信することで、MediaProfileに何らかの変更があったことをクライアント装置2000に通知する。
4010は、SetVideoEncoderConfigurationのトランザクションである。このトランザクションは、VECの各パラメータを設定するためのトランザクションである。クライアント装置2000は、SetVideoEncoderConfigurationのコマンドを監視カメラ1000に送信する。
このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このトランザクションにより、クライアント装置2000は、4005で取得したVECの内容を、4006で取得した選択肢に基づいて設定する。例えば、圧縮符号化方式や切出しサイズを変更する。監視カメラ1000は、設定された圧縮符号化設定等の内容を記憶する。
このトランザクションの処理後、監視カメラ1000は、VEC変更通知イベントをクライアント装置2000に送信することにより、VECに何らかの変更があったことをクライアント装置2000に通知する。なお、本実施例におけるSetVideoEncoderConfigurationコマンドは、第1の符号化方式設定コマンドに相当する。
4011は、GetStreamUriのトランザクションである。このトランザクションは、配信アドレスの取得を要求するためのトランザクションである。このトランザクションにて、クライアント装置2000は、4007で取得した配信プロファイルIDを指定し、指定した配信プロファイルの設定に基づいてストリーミング配信される画像データ等を取得するためのアドレス(URI)を取得する。
監視カメラ1000は、クライアント装置2000により指定された配信プロファイルIDに関連付けられているVSC、及びVECの内容に対応する画像データをストリーミング配信するためのアドレスを、クライアント装置2000に返送する。
4012は、DESCRIBEのトランザクションである。このトランザクションは、配信情報の取得を要求するためのトランザクションである。クライアント装置2000は、DESCRIBEのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2000に返送する。
このトランザクションにおいて、クライアント装置2000は、4011で取得したURIを使用してDESCRIBEコマンドを実行することにより、監視カメラ1000がストリーミング配信するコンテンツの情報を要求して取得する。
4013は、SETUPのトランザクションである。このトランザクションは、配信設定を要求するためのトランザクションである。クライアント装置2000は、SETUPのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2000に返送する。
このトランザクションにおいて、クライアント装置2000は、4012で取得した配信情報に関する詳細データに基づき、監視カメラ1000に対してストリーミングの準備を行わせる。このコマンドを実行することにより、クライアント装置2000と監視カメラ1000との間で、セッション番号を含むストリームの伝送方法が共有される。
4014は、PLAYのトランザクションである。このトランザクションは、ストリーミング配信を開始させるためのトランザクションである。クライアント装置2000は、PLAYのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスをクライアント装置2000に返送する。
クライアント装置2000は、PLAYのコマンドを監視カメラ1000に送信する際、4013で取得したセッション番号を用いることで、監視カメラ1000にストリーミングの開始を要求することができる。
4015は、監視カメラ1000からクライアント装置2000に配信されるストリームである。4014で開始を要求されたストリームを4013において共有された伝送方法によって配信する。
4016は、TEARDOWNのトランザクションである。このトランザクションは、配信を停止させるためのトランザクションである。クライアント装置2000は、TEARDOWNのコマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。
このトランザクションにおいて、クライアント装置2000は、4013にて取得したセッション番号を指定してTEADOWNコマンドを実行することにより、監視カメラ1000に対してストリーミングの停止を要求することができる。
続いて、図7は、監視カメラ1000とクライアント装置2010の間において、映像を配信するために必要なMediaProfileを設定するための典型的なコマンドシーケンスを示している。ここでトランザクションとは、クライアント装置2010から監視カメラ1000へ送信されるコマンドと、それに対して監視カメラ1000がクライアント装置2010へ返送するレスポンスのペアのことを指している。
ここで、クライアント装置2010は、前述の通りH.265の復号器に相当する復号部2015を備えており、VEC及びVEC2の両方に対応している。なお、図7の説明において、図6と同一のトランザクションについては説明を省略し、同一符号を付すものとする。
4055は、GetVEC2のトランザクションである。ここで、図7では、GetVECs2コマンドを使用する場合について説明するが、クライアント装置2010は、GetVECs、または、GetVECs2のどちらでも使用可能である。
クライアント装置2010がGetVECsコマンドリクエストを送信した場合、監視カメラ1000から返送されるそのレスポンスには、設定可能な符号化方式として、JPEGとH.264が含まれる。一方、クライアント装置2010がGetVECs2コマンドリクエストを送信した場合、監視カメラ1000から返送されるそのレスポンスには、設定可能な符号化方式として、JPEG、H.264、及びH.265が含まれる。
なお、監視カメラ1000は、後述するGetVECs2等のコマンドを受信することにより、クライアント装置2010が新しいコマンドセットを備えたクライアント装置であると認識できる。一方、仮にクライアント装置2010が、GetVideoEncoderConfigurationなど、既存の体系のコマンドを使用した場合は、監視カメラ1000は、古いか新しいかの判別はできない。
4056は、GetVideoEncoderConfigurationOptions2トランザクションである。このトランザクションにより、クライアント装置2010は、IDによって指定されたVEC2に関し、監視カメラ1000が受け付け可能な各パラメータの選択肢や設定値の範囲を取得することができる。
クライアント装置2010は、GetVideoEncoderConfigurationOptions2コマンドを監視カメラ1000に送信する。このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このトランザクションにより、クライアント装置2010は、記憶部1002に記憶されている圧縮符号化設定のIDを含むリストを監視カメラ1000から取得する。
4059は、AddVideoEncoderConfiguration2のトランザクションである。このトランザクションは、VEC2の追加を要求するためのトランザクションである。クライアント装置2010は、AddVideoEncoderConfiguration2のコマンドを監視カメラ1000に送信する。監視カメラ1000は、このコマンドのレスポンスをクライアント装置2010に返送する。
このトランザクションにおいて、クライアント装置2010は、4007で取得した配信プロファイルIDと4055で取得したVEC2のIDとを指定する。これにより、クライアント装置2010は、指定した配信プロファイルIDに対応するMediaProfileに対し、指定したVEC2のIDに対応するVEC2を関連付けることができる。
一方、監視カメラ1000は、クライアント装置2010により指定された配信プロファイルIDに対応するMediaProfileと、クライアント装置2010により指定されたVEC2のIDに対応する所望のVEC2と、を関連付けて記憶する。
4060は、SetVideoEncoderConfiguration2のトランザクションである。このトランザクションは、VEC2の各パラメータを設定するためのトランザクションである。クライアント装置2010は、SetVideoEncoderConfiguration2のコマンドを監視カメラ1000に送信する。
なお、本実施例におけるSetVideoEncoderConfiguration2は、第2の符号化方式設定コマンドに相当する。
このコマンドを受信した監視カメラ1000は、このコマンドのレスポンスを返送する。このトランザクションにより、クライアント装置2010は、4055で取得したVEC2の内容を、4056で取得した選択肢に基づいて設定する。例えば、圧縮符号化方式や切出しサイズを変更する。監視カメラ1000は、設定された圧縮符号化設定等の内容を記憶する。
以上のように、図1乃至7を用いることにより、H.265が実装されており、VECとVEC2の両方に対応した監視カメラ1000が、VEC及びVEC2コマンドを受け取った場合の典型的なコマンドシーケンスについて説明した。
続いて、図23は、本実施例における、VideoEncoderConfiguration2の定義の一例を説明するための図である。なお、本実施例では、このVideoEncoderConfiguration2を定義するために、ONVIF規格で用いられる、XML Schema Difinition言語(以下、XSDと称することがある)を用いるものとする。
図23(a)は、VideoEncoderConfiguration2を、ProfileExtension2に定義していることを示している。
図23(b)は、VideoEncoderConfiguration2の内容を示す。図23(b)では、sequence指定子により、図23(b)の要素の順番が定義通りに出現することを指定している。
図23(b)において、Encodingは、符号化方式を指定するためのパラメータである。Resolutionは、解像度を指定するためのパラメータであり、Width,及びHeightに指定されるパラメータのそれぞれにより画面横画素数と画面縦画素数とを指定する。
Qualityは、画像品質を指定するためのパラメータである。RateControlは、フレームレートの設定を指定するためのパラメータである。このRateContorlに含まれるFrameRateLimitは、フレームレートの上限値を指定するパラメータである。
また、このRateControleに含まれるEncodingIntervalは、符号化と伝送間隔を指定するパラメータである。そして、このRateControlに含まれるBitratelimitは、映像ストリームの上限ビットレートを指定するパラメータである。
Multicastは、映像ストリームのマルチキャストの数を指定するパラメータである。また、SessionTimeoutは、映像ストリームのタイムアウト指定のパラメータである。そして、GovLengthは、Iフレーム間隔を指定するためのパラメータである。
さらに、EncodingProfileは、符号化方式のプロファイルを指定するためのパラメータである。例えば、符号化方式H.265では、このプロファイルとして、Main、Main10、MainStillPictureなどが指定される。
これから、実際の監視カメラネットワークシステムにおいて発生する事象に対する実施例の説明を加える。まず、最初に、監視カメラ1000は、クライアント装置2010からの符号化方式リクエストにより、MediaProfile3000に設定されたVEC2に従って符号化された映像ストリームを、クライアント装置2010に配信しているものとする。この映像ストリームは、例えば、H.265で符号化されたものとする。
続いて、図8を参照し、監視カメラ1000がクライアント装置2000から符号化方式のリクエストを受信した場合の処理について説明する。ここで、図8は、監視カメラ1000が前述のGetVECOptionsコマンドをクライアント装置2000から受信した場合の処理を示している。なお、この処理は、制御部1001により実行されるものとする。
ステップS1500では、制御部1001は、記憶部1002に記憶されている圧縮方式のうち、VECがサポートしている圧縮方式のリストを取得する。即ち、本実施例では、制御部1001は、H.265を除く、JPEGとH.264を、記憶部1002から読み出す。
ステップS1501では、制御部1001は、記憶部1002に記憶されているサポートしている出力解像度のリストを取得する。本リストには、例えば、1280x960、1024x768、640x480、320x240などが含まれる。
ステップS1502では、制御部1001は、設定可能なFramerateのレンジ、画像品質Qualityのレンジ、Bitrateのレンジ、及びEncodingIntervalを、記憶部1002から取得する。例えば、制御部1001は、FramerateLimitとして1〜30fps、Qualityのレンジとして1〜5、Bitrateのレンジとして64〜16384bpsを記憶部1002から読み出す。
ステップS1503では、制御部1001は、ステップS1500からステップS1502において取得した選択肢や設定範囲を、正常レスポンスに含めて、通信部1005を介してクライアント装置2000へ返送する。
続いて、図9は、監視カメラ1000が前述のSetVECコマンドをクライアント装置2000から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ここで、クライアント装置2000は、VEC2の内容を読めない。このため、クライアント装置2000は、例えば、監視カメラ1000がクライアント装置2010にH.265で符号化された映像ストリームを配信中であることを、知ることができない。
より詳細には、クライアント装置2000は、図6のGetProfilesのトランザクション4002が実行された場合にレスポンスとして取得される、MediaProfileに含まれるVEC2のパラメータの存在を知ることができない。つまり、クライアント装置2000からは、VEC2を除くVSC,図示しないAudioEncoderConfigurationなどのパラメータだけが保持されているように見える。
そこで、クライアント装置2000が、SetVideoEncoderConfigurationコマンドによりMediaProfile3000のVEC3020の符号化方式として、例えばH.264を設定してきた場合の処理を、図9により説明する。
ステップS1600では、制御部1001は、配信設定情報に相当するMediaProfile3000にVEC2が設定されているか否かを判定する。
そして、制御部1001は、MediaProfile3000にVEC2が設定されていると判定した場合には、ステップS1611に処理を進める。一方、制御部1001は、MediaProfile3000にVEC2が設定されていないと判定した場合には、ステップS1601に処理を進める。
ステップS1601では、制御部1001は、SetVECコマンドの引数で指定されているFramerate、Quality、Bitrate、EncodingIntervalの各設定値を、記憶部1002のVECに記憶させる。
ステップS1602では、制御部1001は、SetVECコマンドの引数で指定されている出力解像度(Resolution)をサポートしているかどうかを判定する。
具体的には、制御部1001は、ステップS1501にて取得された出力解像度のリストに、SetVECコマンドの引数で指定されている出力解像度(Resolution)が含まれるか否かを判定する。
次に、制御部1001は、このリストにSetVECコマンドの引数で指定されている出力解像度が含まれていると判定した場合には、この出力解像度をサポートしていないと判定する。一方、制御部1001は、このリストにSetVECコマンドの引数で指定されている出力解像度が含まれていないと判定した場合には、この出力解像度をサポートしていないと判定する。
そして、制御部1001は、SetVECコマンドの引数で指定されている出力解像度をサポートしていると判定した場合には、ステップS1603に処理を進める。一方、制御部1001は、SetVECコマンドの引数で指定されている出力解像度をサポートしていないと判定した場合には、ステップS1610に処理を進める。
ステップS1603では、制御部1001は、SetVECコマンドの引数で指定されている出力解像度(Resolution)を記憶部1002のVECに記憶させる。
ステップS1604では、制御部1001は、SetVECコマンドの引数で指定されている圧縮方式(Encording)をサポートしているかどうかを判定する。
具体的には、制御部1001は、ステップS1500にて取得された圧縮方式のリストに、SetVECコマンドの引数で指定されている圧縮方式(Encording)が含まれるか否かを判定する。
次に、制御部1001は、このリストにSetVECコマンドの引数で指定されている圧縮方式が含まれていると判定した場合には、ステップS1605に処理を進める。一方、制御部1001は、このリストにSetVECコマンドの引数で指定されている圧縮方式が含まれていないと判定した場合には、ステップS1610に処理を進める。
ステップS1605では、制御部1001は、SetVECコマンドの引数で指定されている圧縮方式(Encording)を記憶部1002のVECに記憶させる。
ステップS1606では、制御部1001は、正常レスポンスを、通信部1005を介してクライアント装置2000へ返送する。そして、制御部1001は、本処理を終了する。
ステップS1610では、制御部1001は、エラーレスポンスを、通信部1005を介してクライアント装置2000へ返送する。そして、制御部1001は、本処理を終了する。
ステップS1611では、制御部1001は、SetVECコマンドの引数で指定されているFramerate、Quality、Bitrate、EncodingIntervalの各設定値を、記憶部1002のVEC及びVEC2に記憶させる。
これにより、同じMediaProfile(例えばMediaProfile3000の)に関連付けられたVEC及びVEC2に、SetVECコマンドの引数で指定されている同じパラメータが設定され保持されることになる。
ステップS1612では、制御部1001は、SetVECコマンドの引数で指定されている出力解像度(Resolution)をサポートしているかどうかを判定する。
具体的には、制御部1001は、ステップS1501にて取得された出力解像度のリストに、SetVECコマンドの引数で指定されている出力解像度(Resolution)が含まれるか否かを判定する。
次に、制御部1001は、このリストにSetVECコマンドの引数で指定されている出力解像度が含まれていると判定した場合には、この出力解像度をサポートしていないと判定する。一方、制御部1001は、このリストにSetVECコマンドの引数で指定されている出力解像度が含まれていないと判定した場合には、この出力解像度をサポートしていないと判定する。
そして、制御部1001は、SetVECコマンドの引数で指定されている出力解像度をサポートしていると判定した場合には、ステップS1613に処理を進める。一方、制御部1001は、SetVECコマンドの引数で指定されている出力解像度をサポートしていないと判定した場合には、ステップS1610に処理を進める。
ステップS1613では、制御部1001は、SetVECコマンドの引数で指定されている出力解像度(Resolution)を、記憶部1002のVEC及びVEC2に記憶させる。
ステップS1604では、制御部1001は、SetVECコマンドの引数で指定されている圧縮方式(Encording)をサポートしているかどうかを判定する。
具体的には、制御部1001は、ステップS1500にて取得された圧縮方式のリストに、SetVECコマンドの引数で指定されている圧縮方式(Encording)が含まれるか否かを判定する。
次に、制御部1001は、このリストにSetVECコマンドの引数で指定されている圧縮方式が含まれていると判定した場合には、ステップS1615に処理を進める。一方、制御部1001は、このリストにSetVECコマンドの引数で指定されている圧縮方式が含まれていないと判定した場合には、ステップS1610に処理を進める。
ステップS1615では、制御部1001は、SetVECコマンドの引数で指定されている圧縮方式Encordingを、記憶部1002のVEC及びVEC2に記憶させる。
ステップS1616は、ステップS1606と同様であるので、その説明を省略する。
以上のような処理により、一つの配信設定情報であるMediaProfile(例えば、MediaProfile3000)に、一種類の符号化方式のみ設定可能なようになる。
これらのコマンド処理後、監視カメラ1000は、MediaProfileに何らかの変更があったことをネットワーク上のクライアント装置2000及び2010に通知するべく、MediaProfile変更通知イベントを送信する。
この処理により、それまで、H.265方式で符号化された映像ストリームをクライアント装置2010に配信していた監視カメラ1000は、MediaProfile変更通知イベントを送信した後、この映像ストリームの送信を停止する。
次に、監視カメラ1000は、H.264で符号化された映像ストリームの送信を開始する。なお、クライアント装置2010のH.265の復号器に相当する復号部2015は、後方互換性を持つので、この映像ストリームの受信及び復号化が可能である。
続いて、図10は、本実施例のクライアント装置2000において、監視カメラ1000のVECの設定を行わせるためのユーザーインターフェースであるところの、VideoEncoder設定ウィンドウを示した図である。
図10における7000は、LiveViewエリアである。クライアント装置2000は、このウィンドウが開かれた場合に前述の図6に示すシーケンスを実行することにより、トランザクション4015で得られる映像ストリームに対応する画像を、LiveViewウィンドウ7000に表示させる。
さらに、クライアント装置2000は、GetVECsコマンドを監視カメラ1000に送信することにより、VECの全てのリストを監視カメラ1000から取得する。そして、クライアント装置2000は、得られた結果(取得したリスト)を用いることにより、図10の画面におけるVideoEncoderタブ7001及び7002を表示する。
また、クライアント装置2000は、GetVECOptionsコマンドを送信することにより、VECの各パラメータの選択肢や設定範囲を取得する。そして、クライアント装置2000は、得られた結果(取得した選択肢や設定範囲)を用いることにより、図10の画面におけるVideoEncoderの各パラメータの選択肢や設定範囲を更新する。
これにより、クライアント装置2000は、VECの設定値の選択肢や設定範囲を、表示部2003に表示させることで、ユーザに提供することが可能となる。
VideoEncoderタブ7001、及びVideoEncoderタブ7002は、VideoEncoder設定画面を切り換えるためのタブである。
例えば、ユーザによりVideoEncoderタブ7001が押下された場合には、図10のVideoEncoder設定ウィンドウにおいて、VideoEncoder1設定画面が表示される。この画面は、MediaProfile3001に関連付けられたVEC3021をユーザに変更させるための画面である。
一方、ユーザによりVideoEncoderタブ7002が押下された場合には、図10のVideoEncoder設定ウィンドウにおいて、VideoEncoder2設定画面が表示される。この画面は、MediaProfile3002に関連付けられたVEC3021をユーザに変更させるための画面である。
つまり、VideoEncoder1(設定画面)及びVideoEncoder2(設定画面)は、監視カメラ1000に作成されたMediaProfileのパラメータ(を設定するための画面)に相当する。ここで、このMediaProfileは、クライアント装置2000及び2010などの外部装置から送信されたCreateProfileコマンドにより、監視カメラ1000に作成されたものである。
なお、図10では、MediaProfile3001及び3002の2つが監視カメラ1000に作成されており、作成されたMediaProfileに対応するパラメータがクライアント装置2000の設定画面に表示されている。
ここで、このMediaProfile3001のProfileTokenの値は、profile1である。また、このMediaProfile3002のProfileTokenの値は、profile2である。
7010は、各VECの圧縮符号化方式をユーザに選択させるEncoderTypeエリアである。このエリアには、図10の画面が開かれた場合に、GetVECOptionsコマンドを送信することにより得られる圧縮符号化方式(Encording)の選択肢が表示される。
なお、本実施例では、このエリアには、クライアント装置2000においてユーザが現在選択することができる圧縮符号化方式として、JPEG及びH.264が表示されている。
ラジオボタン7011及びラジオボタン7012は、JPEG及びH.264のうちいずれか1つを選択するためのボタンである。ここで、ラジオボタン7011が押下された場合には、JPEGが選択され、ラジオボタン7012が押下された場合には、H.264が選択される。なお、図10では、JPEG及びH.264とも未選択となっている。
この未選択の状態で、ユーザによりラジオボタン7012が押下されることでH.264が選択された場合、図6におけるトランザクション4010が実行される。この実行により、Encodingタイプが設定され、図9のステップS1600の処理に進む。ここで、図11は、H.264が選択した状態のクライアント装置2000の表示設定画面の例を示す図である。
なお、図11の画面では、マウス操作による画面クリックまたはキーボード入力によりラジオボタン7012が押下されており、EncoderTypeとしてH.264が選択され、ラジオボタン7012に黒丸が表示されている。
7020は、VEC3021に含まれるFramerateLimit、BitrateLimit、及びQualityのパラメータをユーザに選択させるためのDetailエリアである。7021、7022、及び7023で示された各パラメータの設定範囲は、図10の画面が開かれた場合に、GetVECOptionsコマンドを実行することにより得られるそれぞれのパラメータの設定範囲の内容が反映される。
7030は、VEC3021の解像度(Resolution)を選択するためのEncoderResolutionエリアである。7031のドロップダウンリストには、図10の画面が開かれた場合に、GetVECOptionsコマンドを実行することにより得られた、VEC3021の解像度のパラメータの選択肢の内容が表示される。
7040は、設定ボタンである。ユーザにより設定ボタン7040が押下された場合に、クライアント装置2000は、SetVECを監視カメラ1000に対して送信する。これにより、EncoderTypeエリア7010、Detailエリア7020、及びEncoderResolutionエリア7030にて選択されたパラメータが監視カメラ1000の圧縮符号化部1004に反映される。
この送信によるトランザクション4010の処理後、監視カメラ1000は、VEC変更通知イベントをクライアント装置2000及び2010に送信することにより、VECに何らかの変更があったことをクライアント装置2000及び2010に通知する。なお、監視カメラ1000は、SetVECコマンドを受信した場合、図9のフローチャートに従って処理を進める。
続いて、図12は、本実施例のクライアント装置2010において、監視カメラ1000のVECの設定を行わせるためのユーザーインターフェースであるところの、VideoEncoder設定ウィンドウを示した図である。
より詳細には、図12の画面は、クライアント装置2000のVideoEncoder設定画面でH.264が選択される前の状態における、クライアント装置2010のVideoEncoder設定画面である。なお、図12において、図10と同一の構成要素については、同一の符号を付し、その説明を省略することがある。
図12の画面は、監視カメラ1000のEncording、FramerateLimit、BitrateLimit、Quality、及びResolutionのパラメータの設定、選択肢、及び設定範囲などの内容が表示されている。
これらパラメータの設定、選択肢、及び設定範囲などは、クライアント装置2010からGetVECs2コマンド及びGetVECOptions2コマンドが送信されることにより、監視カメラ1000から取得されたものである。
図12のEncoderTypeエリア7050において、ユーザによりラジオボタン7053が押下されており、H.265が選択された状態である。これにより、監視カメラ1000は、H.265で符号化された画像データを、クライアント装置2010にストリーミング配信中である。
LiveViewウィンドウ7000には、復号部2015で復号された画像データに対応する画像が表示される。この際、通信部2016は、H.265で符号化された画像データを受信する。また、復号部2015は、通信部2016で受信された画像データを復号する。
一方、クライアント装置2000は、H.265に対応していないため、クライアント装置2000のVideoEncoder設定画面には、図10に示すように、H.265を選択するためのラジオボタンは表示されていない。
そして、前述したように、クライアント装置2000のVideoEncoder設定画面においてユーザがラジオボタン7012を押下することでH.264が選択され、VEC3021にH.264が設定された場合を想定する。このような想定の場合、監視カメラ1000は、VEC3021に関連付けられたMediaProfileに変更が加えられたことをクライアント装置2000及び2010に通知する。
この際、監視カメラ1000において、図9のステップS1611乃至1616が実行され、VEC及びVEC2のパラメータの書き換えが実行される。この書き換えが実行された状態で、クライアント装置2010のVideoEncoder設定画面の表示が更新されると、図13に示されるように、ラジオボタン7052が押下され且つH.264が選択された状態のこの設定画面が表示される。
さらに、図13の画面におけるLiveViewウィンドウ7000には、H.264で符号化された画像データが復号部2015で復号化されることにより、復号化された画像データに対応する画像が表示される。
以上、本実施例の監視カメラ1000は、通信部1005によりSetVECコマンドが受信した場合であって、この受信したコマンドに対応するMediaProfileに関連付けられたVEC2をこの受信したコマンドの内容で重ね書きする。
本実施例における監視カメラ1000は、1つのMediaProfileによりクライアント装置2000又は2010に配信することができる画像データは、1つだけである。
ここで、クライアント装置2000から送信されたSetVECコマンドにより、VEC2が関連付けられたMediaProfileにVECが関連付けられてしまった場合を想定する。このような想定の下では、このMediaProfileによりクライアント装置2000又は2010に配信することができる画像データは、この関連付けられたVECに対応する画像データ1つだけになってしまう。
このため、この関連付けられたVEC2に対応する画像データを受信していたクライアント装置2010は、このMediaProfileにVECが関連付けられることにより、この画像データの受信を継続できなくなってしまうことがある。
そこで、本実施例によれば、この関連付けられたVECに対応する画像データとこの関連付けられたVEC2に対応する画像データとを同じにすることができる。この結果、1つのMediaProfileにより配信することができる画像データが1つだけであっても、クライアント装置2000及び2010の両方とも画像データを継続的に受信することができる。
(実施例2)
実施例1では、MediaProfileに関連付けられたVECのパラメータを更新するためのSetVECコマンドをクライアント装置2000から監視カメラ1000が受信した場合について述べた。ここで、このMediaProfileには、VEC2のパラメータが既に関連付けられているものとする。
さらに、この監視カメラ1000は、この受信したSetVECコマンドにより更新されたVECの内容で、このMediaProfileに関連付けられたVEC2のパラメータを重ね書きするものである。
これに対し、実施例2における監視カメラ1000は、このようなSetVECコマンドを受信した場合に、このようなVEC2のパラメータの重ね書きを行うことなく、クライアント装置2000にエラーレスポンスを返すものである。以上のような点を考慮した本発明の実施例2を、図14を参照しながら、以下に説明する。なお、本実施例では、上述の実施例1と同一の構成要素には同一の符号を付し、その説明を省略することがある。
続いて、図14は、本実施例における、監視カメラ1000がSetVECコマンドをクライアント装置2000から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ステップS1600では、制御部1001は、配信設定情報に相当するMediaProfile3000にVEC2が設定されているか否かを判定する。
そして、制御部1001は、MediaProfile3000にVEC2が設定されていると判定した場合には、ステップS1610に処理を進める。一方、制御部1001は、MediaProfile3000にVEC2が設定されていないと判定した場合には、ステップS1601に処理を進める。
以上、本実施例の監視カメラ1000は、通信部1005でクライアント装置2000からのSetVECコマンドが受信され且つMediaProfileにVEC2が関連付けられている場合、エラーレスポンスをクライアント装置2000に送信する。
これにより、VEC2が関連付けられたMediaProfileに対し、VEC2に対応するクライアント装置2010の意図しない符号化方式などが関連付けられてしまうことを防止することができる。
(実施例3)
実施例2では、VECのパラメータを更新するためのSetVECコマンドをクライアント装置2000から監視カメラ1000が受信した場合について述べた。ここで、監視カメラ1000のMediaProfileは、VEC2のパラメータが既に関連付けられているものとする。そして、この監視カメラ1000は、このSetVECコマンドを受信した場合に、クライアント装置2000にエラーレスポンスを返すものである。
これに対し、実施例3では、VEC2のパラメータを更新するためのSetVEC2コマンドを監視カメラ1000がクライアント装置2010から受信した場合について述べる。ここで、監視カメラ1000のMediaProfileは、VECのパラメータが関連付けられているものとする。
そして、この監視カメラ1000は、このSetVEC2コマンドを受信した場合に、クライアント装置2010にエラーレスポンスを返すものである。以上のような点を考慮した本発明の実施例3を、図15を参照しながら、以下に説明する。なお、本実施例では、上述の実施例1と同一の構成要素については同一の符号を付し、その説明を省略することがある。
続いて、図15は、本実施例における、監視カメラ1000がSetVEC2コマンドをクライアント装置2010から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ステップS1620では、制御部1001は、配信設定情報に相当するMediaProfile3000にVECが設定されているか否かを判定する。
そして、制御部1001は、MediaProfile3000にVECが設定されていると判定した場合には、ステップS1627に処理を進める。一方、制御部1001は、MediaProfile3000にVECが設定されていないと判定した場合には、ステップS1621に処理を進める。
ステップS1621では、制御部1001は、SetVEC2コマンドの引数で指定されているFramerate、Quality、Bitrate、EncodingIntervalの各設定値を、記憶部1002のVEC2に記憶させる。
ステップS1622では、制御部1001は、SetVEC2コマンドの引数で指定されている出力解像度(Resolution)をサポートしているかどうかを判定する。
具体的には、まず、制御部1001は、記憶部1002に記憶されている出力解像度のうち、VEC2がサポートしている出力解像度のリストを取得する。次に、制御部1001は、この取得したリストにSetVEC2コマンドの引数で指定されている出力解像度(Resolution)が含まれるか否かを判定する。
そして、制御部1001は、この取得したリストにSetVEC2コマンドの引数で指定されている出力解像度が含まれていると判定した場合には、この出力解像度をサポートしていないと判定する。一方、制御部1001は、この取得したリストにSetVEC2コマンドの引数で指定されている出力解像度が含まれていないと判定した場合には、この出力解像度をサポートしていないと判定する。
そして、制御部1001は、SetVEC2コマンドの引数で指定されている出力解像度をサポートしていると判定した場合には、ステップS1623に処理を進める。一方、制御部1001は、SetVEC2コマンドの引数で指定されている出力解像度をサポートしていないと判定した場合には、ステップS1627に処理を進める。
ステップS1623では、制御部1001は、SetVEC2コマンドの引数で指定されている出力解像度(Resolution)を記憶部1002のVECに記憶させる。
ステップS1624では、制御部1001は、SetVEC2コマンドの引数で指定されている符号化方式(Encording)をサポートしているかどうかを判定する。
具体的には、まず、制御部1001は、記憶部1002に記憶されている符号化方式のうち、VEC2がサポートしている符号化方式のリストを取得する。次に、制御部1001は、この取得したリストにSetVEC2コマンドの引数で指定されている符号化方式が含まれているか否かを判定する。
そして、制御部1001は、このリストにSetVEC2コマンドの引数で指定されている符号化方式が含まれていると判定した場合には、ステップS1625に処理を進める。一方、制御部1001は、このリストにSetVEC2コマンドの引数で指定されている符号化方式が含まれていないと判定した場合には、ステップS1627に処理を進める。
ステップS1625では、制御部1001は、SetVEC2コマンドの引数で指定されている符号化方式(Encording)を記憶部1002のVEC2に記憶させる。
ステップS1626では、制御部1001は、正常レスポンスを、通信部1005を介してクライアント装置2010へ返送する。そして、制御部1001は、本処理を終了する。
ステップS1627では、制御部1001は、エラーレスポンスを、通信部1005を介してクライアント装置2010へ返送する。そして、制御部1001は、本処理を終了する。
以上、本実施例の監視カメラ1000は、通信部1005でクライアント装置2010からのSetVEC2コマンドが受信され且つMediaProfileにVECが設定されている場合に、エラーレスポンスをクライアント装置2010に送信する。
ここで、本実施例における監視カメラ1000のMediaProfileには、VEC及びVEC2の両方を関連付けることができる。そして、VECが既に関連付けられたMediaProfileにVEC2が新たに関連付けられてしまう場合を想定する。
このような想定の下では、クライアント装置2000は、VEC2が新たに関連付けられたMediaProfileに対応する画像データを受信しても、この受信した画像データを復号化することができるとは限らない。例えば、このMediaProfileに対応する画像データがH.265で符号化された画像データである場合、クライアント装置2000は、この画像データを復号化することができない。
これに対し、本実施例の監視カメラ1000によれば、VECが関連付けられたMediaProfileに対し、クライアント装置2000が復号化できない符号化方式などが関連付けられてしまうことを防止することができる。
(実施例4)
実施例1乃至3では、1つのMediaProfileで1つの映像ストリームしか配信することができない監視カメラ1000について説明した。これに対し、実施例4では、1つのMediaProfileで複数の映像ストリームを配信することができる監視カメラ1000について説明する。
以上のような点を考慮した本発明の実施例4を、図16及び17を参照しながら、以下に説明する。なお、本実施例では、上述の実施例と同一の構成要素には同一の符号を付し、その説明を省略することがある。
続いて、図16は、本実施例のクライアント装置2010において、監視カメラ1000のVECの設定を行わせるためのユーザーインターフェースであるところの、VideoEncoder設定ウィンドウを示した図である。
このウィンドウは、H.264に対応するEncodingが設定されたVECとH.265に対応するEncodingが設定されたVEC2とが同一のMediaProfileに関連付けられた場合の、VideoEncoder設定ウィンドウである。
なお、このVECのEncodingは、クライアント装置2000におけるEncoderTypeエリア7010でH.264が選択されることで送信されたSetVECにより、設定されたものである。また、このVEC2のEncodingは、クライアント装置2010におけるEncoderTypeエリア7050でH.265が選択されることで送信されたSetVEC2により、設定されたものである。
図16におけるEncoderTypeエリア7050では、ラジオボタン7052が押下されており、EncoderTypeとしてH.264が選択され、ラジオボタン7052に黒丸が表示されている。さらに、EncoderTypeエリア7050では、ラジオボタン7053が押下されており、EncoderTypeとしてH.265が選択され、ラジオボタン7053に黒丸が表示されている。
また、このような場合では、クライアント装置2010におけるVideoEncoder設定ウィンドウでは、図11に示すように、EncoderTypeエリア7010におけるラジオボタン7012が押下されている。さらに、このEncoderTypeエリア7010では、ラジオボタン7012に黒丸が表示されている。
このように、本実施例の記憶部1002においては、図5に示すように、1つのMediaProfileにVEC及びVEC2のそれぞれのTokenが記憶される。つまり、本実施例では、1つのMediaProfileにVEC及びVEC2が関連付けられている。
さらに、本実施例の監視カメラ1000は、このMediaProfileに関連付けられたVECに対応する画像データを、クライアント装置2000にストリーミング配信する。その上、このMediaProfileに関連付けられたVEC2に対応する画像データも、クライアント装置2010にストリーミング配信する。
続いて、図17は、本実施例における、監視カメラ1000がPlayコマンドをクライアント装置2000又は2010から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ステップS1200では、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileに関連付けられたVECに設定された符号化方式を記憶部1002から読み出す。そして、制御部1001は、読み出した符号化方式を記憶部1002に一時的に記憶させる。ここで、本実施例では、例えば、制御部1001は、H.264を記憶部1002に一時的に記憶させる。
ステップS1202では、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileにVECが関連付けられているか否かを判定する。
そして、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileにVECが関連付けられていると判定された場合には、ステップS1203に処理を進める。一方、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileにVECが関連付けられていないと判定された場合には、ステップS1204に処理を進める。
本実施例では、例えば、制御部1001は、ステップS1203に処理を進める。
ステップS1203では、制御部1001は、撮像部1003から出力された撮像画像を、通信部1005が受信したPlayコマンドに対応するMediaProfileに関連付けられたVECの符号化方式で、圧縮符号化部1004に圧縮符号化させる。そして、制御部1001は、通信部1005に指示し、この圧縮符号化させた撮像画像に対応する画像データを外部に送信させる。
本実施例では、例えば、制御部1001は、通信部1005に指示し、H.264で圧縮符号化された画像データを外部に送信させる。
ステップS1204では、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileにVEC2が関連付けられているか否かを判定する。
そして、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileにVEC2が関連付けられていると判定された場合には、ステップS1205に処理を進める。一方、制御部1001は、通信部1005で受信されたPlayコマンドに対応するMediaProfileにVECが関連付けられていないと判定された場合には、ステップS1206に処理を進める。
本実施例では、例えば、制御部1001は、ステップS1205に処理を進める。
ステップS1205では、制御部1001は、撮像部1003から出力された撮像画像を、通信部1005が受信したPlayコマンドに対応するMediaProfileに関連付けられたVEC2の符号化方式で、圧縮符号化部1004に圧縮符号化させる。そして、制御部1001は、通信部1005に指示し、この圧縮符号化させた撮像画像に対応する画像データを外部に送信させる。
本実施例では、例えば、制御部1001は、通信部1005に指示し、H.265で圧縮符号化された画像データを外部に送信させる。
ステップS1206では、制御部1001は、通信部1005によりTeardownコマンドが受信されたか否かを判定する。そして、制御部1001は、通信部1005によりTeardonwコマンドが受信されたと判定した場合には、図17の処理を終了する。一方、制御部1001は、通信部1005によりTeardownコマンドが受信されていないと判定した場合には、ステップS1200に処理を戻す。
以上、本実施例における圧縮符号化部1004は、撮像部1003から出力された撮像画像を、記憶部1002に記憶されたMediaProfileに関連付けられたVECに対応する符号化方式で符号化する。さらに、本実施例における圧縮符号化部1004は、この撮像画像を、このMediaProfileに関連付けられたVEC2に対応する符号化方式で符号化する。
これにより、クライアント装置2000及び2010が同一のMediaProfileを用いる場合でも、クライアント装置2000は、所望の符号化方式で符号化された画像データを受信することができる。その上、クライアント装置2010も、所望の符号化方式で符号化された画像データを受信することができる。
なお、本実施例における圧縮符号化部1004は、例えば、撮像部1003から出力された撮像画像に対し、別個のプロセッサにより、H.264の符号化及びH.265の符号化のそれぞれを並列して実行するように構成されていても良い。
また、本実施例における圧縮符号化部1004は、撮像部1003から出力された撮像画像に対し、同一のプロセッサにより、H.264の符号化及びH.265の符号化を時分割処理するように構成されていても良い。
また、本実施例において、H.264で符号化された画像データ及びH.265で符号化された画像データは、それぞれ別々のストリームとして配信されても良く、それぞれが時分割多重された1本のストリームとして配信されても良い。
(実施例5)
実施例2では、VECのパラメータを更新するためのSetVECコマンドをクライアント装置2000から監視カメラ1000が受信した場合について述べた。ここで、監視カメラ1000のMediaProfileは、VEC2のパラメータが既に関連付けられているものとする。そして、この監視カメラ1000は、このSetVECコマンドを受信した場合に、クライアント装置2000にエラーレスポンスを返すものである。
これに対し、実施例5における監視カメラ1000は、このようなSetVECコマンドを受信した場合に、クライアント装置2000にエラーレスポンスを返すことなく、新たなMediaProfileを作成するものである。以上のような点を考慮した本発明の実施例5を、図18乃至20を参照しながら、以下に説明する。なお、本実施例では、上述の実施例2と同一の構成要素には同一の符号を付し、その説明を省略することがある。
続いて、図18は、本実施例における、監視カメラ1000がSetVECコマンドをクライアント装置2000から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ステップS1630では、制御部1001は、通信部1005で受信されたSetVECコマンドで指定されたMediaProfileとは異なるMediaProfileを新たに生成し、生成したMediaProfileを記憶部1002に記憶させる。
ここで、図19は、本実施例における、この生成したMediaProfileが記憶部1002に記憶される前の、監視カメラ1000(の記憶部1002)が保持するパラメータの構造を図示している。
図19において、MediaProfile3040、3041、3042、及び3043は、監視カメラ1000の各種設定項目を関連付けて記憶するためのパラメータセットである。MediaProfile3040、3041、3042、及び3043のそれぞれは、MediaProfileのIDであるProfileTokenを保持する。
MediaProfile3040は、VideoSourceConfiguration3011、及びVEC23030などの各種設定項目へのリンクを保持する。また、MediaProfile3041は、VideoSourceConfiguration3011、及びVEC23031などの各種設定項目へのリンクを保持する。
さらに、MediaProfile3042は、VideoSourceConfiguration3011、及びVEC23032などの各種設定項目へのリンクを保持する。そして、MediaProfile3043は、VideoSourceConfiguration3011、及びVEC3020などの各種設定項目へのリンクを保持する。
続いて、図20は、本実施における、この生成したMediaProfileが記憶部1002に記憶された後の、監視カメラ1000(の記憶部1002)が保持するパラメータの構造を図示している。
図20において、MediaProfile3044は、ステップS1630で生成されたMediaProfileであり、監視カメラ1000の各種設定項目を関連付けて記憶するためのパラメータセットである。このMediaProfile3044は、値が「profile3」のProfileTokenを保持する。
なお、MediaProfile3044は、VSC3011、及びVEC3021などの各種設定項目へのリンクを保持する。
ステップS1631は、ステップS1600にてVEC2が設定されてないと判定された場合には、ステップS1601の処理と同様である。一方、ステップS1631では、ステップS1600にてVEC2が設定されていると判定された場合には、制御部1001は、SetVECコマンドの引数で指定されている各設定値を、ステップS1630で記憶させたMediaProfileに記憶させる。
なお、この各設定項目は、Framerate、Quality、Bitrate、EncodingIntervalである。
ステップS1633は、ステップS1600にてVEC2が設定されていないと判定された場合には、ステップS1603の場合と同様である。一方、ステップS1633では、ステップS1600にてVEC2が設定されていると判定された場合には、制御部1001は、SetVECコマンドの引数で指定されている出力解像度を、ステップS1630で記憶させたMediaProfileに記憶させる。
ステップS1635は、ステップS1600にてVEC2が設定されていないと判定された場合には、ステップS1605と同様である。一方、ステップS1635では、ステップS1600にてVEC2が設定されていると判定された場合には、制御部1001は、SetVECコマンドの引数で指定された符号化方式を、ステップS1630で記憶させたMediaProfileに記憶させる。
以上、本実施例の監視カメラ1000は、通信部1005でSetVECコマンドが受信され且つこの受信されたSetVECコマンドに対応するMediaProfileにVEC2が関連付けられている場合、新たなMediaProfileを自動で生成する。そして、この生成したMediaProfileにこの受信されたSetVECコマンドに対応するVECを関連付ける。
これにより、例えば、このような場合に、CreateProfileコマンドをクライアント装置2000が送信するなどという、監視カメラ1000とクライアント装置2000との間の煩雑なやり取りを防止することができる。
(実施例6)
実施例3では、VEC2のパラメータを更新するためのSetVEC2コマンドを監視カメラ1000がクライアント装置2010から受信した場合について述べた。ここで、監視カメラ1000のMediaProfileは、VECのパラメータが関連付けられているものである。そして、この監視カメラ1000は、このSetVEC2コマンドを受信した場合に、クライアント装置2010にエラーレスポンスを返すものである。
これに対し、実施例6では、このような場合に、クライアント装置2010から受信したSetVEC2で指定された符号化方式に応じ、記憶部1002に記憶されたVEC2のみ、又はVEC及びVEC2の両方を更新する監視カメラ1000について述べる。以上のような点を考慮した本発明の実施例6を、図21を参照しながら、以下に説明する。
なお、本実施例では、上述の実施例と同一の構成要素については同一の符号を付し、その説明を省略することがある。
続いて、図21は、本実施例における、監視カメラ1000がSetVEC2コマンドをクライアント装置2010から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ステップS1650では、制御部1001は、通信部1005で受信されたSetVEC2コマンドで指定された符号化方式がJPEG,MPEG,H.264のいずれか1つであるか否かを判定する。 そして、制御部1001は、通信部1005で受信されたSetVEC2コマンドで指定された符号化方式がJPEG,MPEG,H.264のいずれか1つであると判定した場合には、ステップS1660に処理を進める。
一方、制御部1001は、通信部1005で受信されたSetVEC2コマンドで指定された符号化方式がJPEG,MPEG,H.264のいずれか1つでないと判定した場合には、ステップS1651に処理を進める。なお、本実施例におけるJPEG,MPEG,H.264は、所定の符号化方式に相当する。
ステップS1651乃至S1656は、ステップS1621乃至S1626と同様であるので、その説明を省略する。
ステップS1660では、SetVEC2コマンドの引数で指定されているFramerate,Quality,Bitrate,EncordingIntervalの各設定値を、記憶部1002のVEC及びVEC2に記憶させる。
例えば、制御部1001は、SetVEC2の符号化方式がH.264であった場合、配信設定情報であるMediaProfileのVEC及びVEC2それぞれの符号化方式として、H.264が設定されることになる。
ステップS1661は、ステップS1622と同様であるので、その説明を省略する。
ステップS1662では、制御部1001は、SetVEC2コマンドの引数で指定されている出力解像度を、記憶部1002のVEC及びVEC2に記憶させる。
ステップS1663は、ステップS1624と同様であるので、その説明を省略する。
ステップS1664では、制御部1001は、SetVECコマンドの引数で指定されている符号化方式を、記憶部1002のVEC及びVEC2に記憶させる。
ステップS1655は、ステップS1626と同様であるので、その説明を省略する。
以上、本実施例の監視カメラ1000は、通信部1005で受信されたSetVEC2コマンドで指定された符号化方式がJPEG,MPEG,H.264であるか否かを判定する。そして、監視カメラ1000は、JPEG,MPEG,H.264であると判定された場合に、このコマンドに対応するMediaProfileに関連付けられたVEC及びVEC2の両方の符号化方式を、このコマンドに対応する符号化方式にする。
通常、VEC2に対応していないクライアント装置2000は、SetVEC2コマンドでMediaProfileに設定された符号化方式を把握することはできない。
しかしながら、本実施例の監視カメラ1000によれば、クライアント装置2000及び2010の両方とも、SetVEC2コマンドでMediaProfileに設定された符号化方式を把握することができる。
(実施例7)
実施例1では、MediaProfileに関連付けられたVECのパラメータを更新するためのSetVECコマンドをクライアント装置2000から監視カメラ1000が受信した場合について述べた。ここで、このMediaProfileには、VEC2のパラメータが既に関連付けられているものとする。
さらに、この監視カメラ1000は、この受信したSetVECコマンドにより更新されたVECの内容で、このMediaProfileに関連付けられたVEC2のパラメータを重ね書きするものである。
これに対し、実施例7では、SetVECコマンドを送信したクライアント装置の数とSetVEC2コマンドを送信したクライアント装置の数とを比較し、この比較の結果、この重ね書きを実行するか否かを判定する。以上のような点を考慮した本発明の実施例7を、図22を参照しながら、以下に説明する。なお、本実施例では、上述の実施例1と同一の構成要素については同一の符号を付し、その説明を省略することがある。
続いて、図22は、監視カメラ1000がSetVECコマンドをクライアント装置2000から受信した場合の処理を説明するためのフローチャートである。なお、この処理は、制御部1001により実行される。
ステップS1670では、制御部1001は、過去にSetVECコマンドを送信したクライアント装置の数よりも、過去にSetVECコマンドを送信したクライアント装置の数が多いか否かを判定する。
そして、制御部1001は、過去にSetVECコマンドを送信したクライアント装置の数よりも、過去にSetVEC2コマンドを送信したクライアント装置の数の方が多いと判定した場合には、ステップS1610に処理を進める。
一方、制御部1001は、過去にSetVECコマンドを送信したクライアント装置の数よりも、過去にSetVEC2コマンドを送信したクライアント装置の数の方が多くはないと判定した場合には、ステップS1611に処理を進める。
以上、本実施例の監視カメラ1000は、通信部1005でSetVECコマンドが受信された場合に、過去にSetVECコマンドを送信したクライアント装置の数よりも、過去にSetVECコマンドを送信したクライアント装置の数が多いか否かを判定する。
そして、監視カメラ1000は、この数が多くないと判定した場合に、このコマンドに対応するMediaProfileに関連付けられたVEC及びVEC2の両方の符号化方式を、このコマンドに対応する符号化方式にする。
これにより、MediaProfileに関連付けられたVEC2の符号化方式をSetVECコマンドでより効果的に設定することができる。
なお、ステップS1670では、SetVECコマンドを送信したクライアント装置の数と、SetVEC2コマンドを送信したクライアント装置の数を比較して処理を分岐したが、他の方法で分岐判断を行っても良い。例えば、ステップS1670では、クライアント装置からのイベント送信をトリガとして分岐判定を行っても良く、また、クライアント装置ごとに重み係数を設定し、その総和の比較により分岐判定しても良い。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。