以下に、本発明の実施形態について、添付の図面を用いて詳細に説明する。
なお、以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されてもよい。
図1は、本実施形態の通信装置の一例であるデジタルカメラ100の構成例を示すブロック図である。ここでは、通信装置の一例としてデジタルカメラについて述べるが、通信装置はこれに限られない。例えば、通信装置は、携帯型のメディアプレーヤや、いわゆるタブレットデバイス、パーソナルコンピュータなどの情報処理装置であってもよい。
制御部101は、入力された信号や、後述のプログラムに従ってデジタルカメラ100の各部を制御する。なお、制御部101が装置全体を制御する代わりに、複数のハードウェアが処理を分担することで、装置全体を制御してもよい。
撮像部102は、例えば、光学レンズユニットと絞り・ズーム・フォーカスなど制御する光学系と、光学レンズユニットを経て導入された光(映像)を電気的な映像信号に変換するための撮像素子などで構成される。撮像素子としては、一般的には、CMOS(Complementary Metal Oxide Semiconductor)や、CCD(Charge Coupled Device)が利用される。撮像部102は、制御部101に制御されることにより、撮像部102に含まれるレンズで結像された被写体光を、撮像素子により電気信号に変換し、ノイズ低減処理などを行いデジタルデータを画像データとして出力する。本実施形態のデジタルカメラ100では、画像データは、DCF(Design Rule for Camera File system)の規格に従って、記録媒体110に記録される。
不揮発性メモリ103は、電気的に消去・記録可能な不揮発性のメモリであり、制御部101で実行される後述のプログラム等が格納される。
作業用メモリ104は、撮像部102で撮像された画像データを一時的に保持するバッファメモリや、表示部106の画像表示用メモリ、制御部101の作業領域等として使用される。
操作部105は、ユーザがデジタルカメラ100に対する指示をユーザから受け付けるために用いられる。操作部105は例えば、ユーザがデジタルカメラ100の電源のON/OFFを指示するための電源ボタンや、撮影を指示するためのレリーズスイッチ、画像データの再生を指示するための再生ボタンを含む。さらに、後述の接続部111を介して外部機器との通信を開始するための専用の接続ボタンなどの操作部材を含む。また、後述する表示部106に形成されるタッチパネルも操作部105に含まれる。
なお、レリーズスイッチは、SW1およびSW2を有する。レリーズスイッチが、いわゆる半押し状態となることにより、SW1がONとなる。これにより、AF(オートフォーカス)処理、AE(自動露出)処理、AWB(オートホワイトバランス)処理、EF(フラッシュプリ発光)処理等の撮影準備を行うための指示を受け付ける。また、レリーズスイッチが、いわゆる全押し状態となることにより、SW2がONとなる。これにより、撮影を行うための指示を受け付ける。
表示部106は、撮影の際のビューファインダー画像の表示、撮影した画像データの表示、対話的な操作のための文字表示などを行う。なお、表示部106は必ずしもデジタルカメラ100が内蔵する必要はない。デジタルカメラ100は内部又は外部の表示部106と接続することができ、表示部106の表示を制御する表示制御機能を少なくとも有していればよい。
記録媒体110は、撮像部102から出力された画像データを記録することができる。記録媒体110は、デジタルカメラ100に着脱可能なよう構成してもよいし、デジタルカメラ100に内蔵されていてもよい。すなわち、デジタルカメラ100は少なくとも記録媒体110にアクセスする手段を有していればよい。
接続部111は、外部装置と接続するためのインターフェースである。本実施形態のデジタルカメラ100は、接続部111を介して、外部装置とデータのやりとりを行うことができる。例えば、撮像部102で生成した画像データを、接続部111を介して外部装置に送信することができる。なお、本実施形態では、接続部111は外部装置とIEEE802.11の規格に従った、いわゆる無線LANで通信するためのインターフェースを含む。制御部101は、接続部111を制御することで外部装置との無線通信を実現する。なお、通信方式は無線LANに限定されるものではなく、例えば赤外通信方式も含む。接続部111は第1の無線通信手段の一例である。
近距離無線通信部112は、例えば無線通信のためのアンテナと無線信号を処理するため変復調回路や通信コントローラから構成される。近距離無線通信部112は、変調した無線信号をアンテナから出力し、またアンテナで受信した無線信号を復調することによりIEEE802.15の規格(いわゆるBluetooth(登録商標))に従った近距離無線通信を実現する。
本実施形態においてBluetooth(登録商標)通信は、低消費電力であるBluetooth(登録商標) Low Energyのバージョン4.0を採用する。このBluetooth(登録商標)通信は、無線LAN通信と比べて通信可能な範囲が狭い(つまり、通信可能な距離が短い)。また、Bluetooth(登録商標)通信は、無線LAN通信と比べて通信速度が遅い。その一方で、Bluetooth(登録商標)通信は、無線LAN通信と比べて消費電力が少ない。
本実施形態のデジタルカメラ100は、近距離無線通信部112を介して、外部装置とデータのやりとりを行うことができる。例えば外部装置から撮影の命令を受信した場合は撮像部102を制御し、撮影動作を行い、無線LAN通信によるデータの授受を行うための命令を受信した場合は接続部111を制御し、無線LAN通信を開始する。
近接無線通信部113は、例えば無線通信のためのアンテナと無線信号を処理するため変復調回路や通信コントローラから構成される。近接無線通信部113は、変調した無線信号をアンテナから出力し、またアンテナで受信した無線信号を復調することでISO/IEC 18092の規格(いわゆるNFC:Near Field Communication)に従った非接触近接通信を実現する。本実施形態の近接無線通信部113は、デジタルカメラ100の側部に配される。
外部装置とは、互いの近接無線通信部を近接させることにより通信を開始して接続される。なお、近接無線通信部を用いて接続させる場合、必ずしも近接無線通信部同士を接触させる必要はない。近接無線通信部は一定の距離だけ離れていても通信することができるため、互いの機器を接続するためには、近接無線通信可能な範囲まで近づければよい。以下の説明では、この近接無線通信可能な範囲まで近づけることを、近接させる、とも記載する。
また、互いの近接無線通信部が近接無線通信不可能な範囲にあれば、通信は開始されない。また、互いの近接無線通信部が近接無線通信可能な範囲にあって、デジタルカメラ100同士が通信接続されている際に、互いの近接無線通信部113が近接無線通信不可能な範囲に離れてしまった場合は、通信接続が解除される。なお、近接無線通信部113が実現する非接触近接通信はNFCに限られるものではなく、他の無線通信を採用してもよい。例えば、近接無線通信部113が実現する非接触近接通信として、ISO/IEC 14443の規格に従った非接触近接通信を採用してもよい。
本実施形態では、接続部111により実現される通信の通信速度は、後述の近接無線通信部113により実現される通信の通信速度よりも速い。また、接続部111により実現される通信は、近接無線通信部113による通信よりも、通信可能な範囲が広い。その代わり、近接無線通信部113による通信では、通信可能な範囲の狭さにより通信相手を限定することができるため、接続部111により実現される通信で必要な暗号鍵の交換等の処理を必要としない。すなわち、接続部111を用いるよりも手軽に通信することができる。
なお、本実施形態におけるデジタルカメラ100の接続部111は、インフラストラクチャモードにおけるアクセスポイントとして動作するAPモードと、インフラストラクチャモードにおけるクライアントとして動作するCLモードとを有している。そして、接続部111をCLモードで動作させることにより、本実施形態におけるデジタルカメラ100は、インフラストラクチャモードにおけるCL機器として動作することが可能である。
デジタルカメラ100がCL機器として動作する場合、周辺のAP機器に接続することで、AP機器が形成するネットワークに参加することが可能である。また、接続部111をAPモードで動作させることにより、本実施形態におけるデジタルカメラ100は、APの一種ではあるが、より機能が限定された簡易的なAP(以下、簡易AP)として動作することも可能である。
デジタルカメラ100が簡易APとして動作すると、デジタルカメラ100は自身でネットワークを形成する。デジタルカメラ100の周辺の装置は、デジタルカメラ100をAP機器と認識し、デジタルカメラ100が形成したネットワークに参加することが可能となる。上記のようにデジタルカメラ100を動作させるためのプログラムは不揮発性メモリ103に保持されているものとする。
なお、本実施形態におけるデジタルカメラ100はAPの一種であるものの、CL機器から受信したデータをインターネットプロバイダなどに転送するゲートウェイ機能は有していない簡易APである。したがって、自機が形成したネットワークに参加している他の装置からデータを受信しても、それをインターネットなどのネットワークに転送することはできない。
図2は、本実施形態の通信装置の一例であるスマートフォン200の構成例を示すブロック図である。ここでは、通信装置の一例としてスマートフォンについて述べるが、通信装置はこれに限られない。例えば、通信装置は携帯型のメディアプレーヤや、いわゆるタブレットデバイス、パーソナルコンピュータなどの情報処理装置であってもよい。
制御部201から近接無線通信部213の各構成に関しては、デジタルカメラ100の制御部101から近接無線通信部113と同等であるため説明は省略する。
公衆網通信部214は、公衆無線通信を行う際に用いられるインターフェースである。スマートフォン200は、公衆網通信部214を介して、他の機器と通話することができる。この際、制御部201はマイク215およびスピーカ216を介して音声信号の入力と出力を行うことで、通話を実現する。本実施形態では、公衆網通信部214はアンテナであり、制御部201は、アンテナを介して、公衆網に接続することができる。なお、通信部211および公衆網通信部214は、一つのアンテナで兼用することも可能である
図3は、外部装置からデジタルカメラ100を制御するためのアプリケーションプログラミングインターフェース(API)を示す図である。本実施形態では、デジタルカメラ100を、スマートフォン200などの外部装置から制御するためのAPIが公開されていることを前提としている。外部装置の設計者は、公開されたAPIを用いてデジタルカメラ100に要求を送信するように外部装置のアプリケーションを実装することで、APIを用いてデジタルカメラ100を制御し、デジタルカメラ100のデバイス情報やデジタルカメラ100が保持するコンテンツデータを取得することが可能となる。
デジタルカメラ100の不揮発性メモリ103にはAPIがプログラムとして予め保存されており、通信部111を介して外部装置との通信が確立すると、制御部101はAPIを作業用メモリ104に展開し、外部装置からAPIがリクエストされるのを待つ。制御部101は外部装置からAPIがリクエストされたことを検知すると、リクエストされたAPIに応じてデジタルカメラ100の各部を制御して処理を実行し、その結果をレスポンスとして外部装置に返送する。
なお、APIはデジタルカメラ100が規定した通信プロトコル上で実行され、外部装置は規定された通信プロトコルを用いてデジタルカメラ100と通信を行ってAPIをリクエストする。なお、本実施形態では、通信プロトコルとしてHTTP(Hypertext Transfer Protocol)を用いることを想定して説明するが、他の通信プロトコルを用いて実施することもできる。なお、HTTPは公知の通信プロトコルであるため、その詳細についての説明は割愛する。
HTTPを用いたAPIのリクエストは、HTTPリクエストボディにAPI名と必要な引数がテキストで記述され、これにGETメソッドやDELETEメソッド、POSTメソッド等のHTTPメソッドを組み合わせることで実現される。また、APIに対するレスポンスは、それぞれのAPIに対して規定されており、図3に示すようにHTTPレスポンスボディに情報を付加して実現される。本実施形態では、デジタルカメラ100が、スマートフォン200から送信されたAPIに従って動作し、レスポンスをスマートフォン200に返送する。
図3に示すAPIリスト300は、デジタルカメラ100を制御するために提供(公開)されたAPIの内容を示している。図3では、便宜上6種類のAPIを示しているが、APIの種類の数は6つに限定されない。また、図3に示すAPIリスト300は、デジタルカメラ100とスマートフォン200がHTTP通信する場合を想定した例であるが、他の通信プロトコルでも同様に実現することができる。
API301(http://xxx/deviceinfo)は、デジタルカメラ100の製品情報を外部装置が取得できるようにするためのAPIである。このAPI301をGETメソッドでデジタルカメラ100にリクエストすることにより、デジタルカメラ100の製品名やファームウェアバージョン、MACアドレス、シリアルナンバー等の製品情報をレスポンスとして取得できる。なお、製品名とはデジタルカメラ100の製品名、ファームウェアバージョンとは不揮発性メモリ103に保存されたデジタルカメラ100を制御するためのプログラムのバージョン番号である。シリアルナンバーとは、デジタルカメラ100の個体識別を可能とする一意の番号である。
API302(http://xxx/contents/sd)は、デジタルカメラ100の記録媒体110に保存されているコンテンツを操作するためのAPIのひとつで、SDカードの直下(以下、SD直下)に保存されているコンテンツの一覧を取得できるAPIである。ここでコンテンツとは、静止画ファイルや動画ファイルなどのファイル、あるいはこれらのファイルが属するディレクトリなどが含まれる。このAPI302をGETメソッドでデジタルカメラ100にリクエストすることにより、デジタルカメラ100はSD直下に保存されているコンテンツからそれぞれのコンテンツ情報を取得するためのAPI(URL)を含むレスポンスを生成し、まとめて返送する。
API303(http://xxx/contents/sd/100xxxxx)は、デジタルカメラ100の記録媒体110に保存されているコンテンツを操作するためのAPIのひとつで、SD直下のディレクトリ「100xxxxx」を操作できるAPIである。このAPIをGETメソッドでデジタルカメラ100にリクエストすることにより、デジタルカメラ100は「100xxxxx」直下に保存されているコンテンツからそれぞれのコンテンツ情報を操作するためのAPI(URL)を含むレスポンスを生成し、まとめて返送する。また、このAPI303をDELETEメソッドでリクエストすることにより、デジタルカメラ100は「100xxxxx」および「100xxxxx」に含まれるコンテンツをすべて削除する。コンテンツの削除に成功した場合は、「200 OK」をレスポンスとして返却する。
API304(http://xxx/contents/sd/100xxxxx/IMG_0001.JPG)は、デジタルカメラ100の記録媒体110に保存されているコンテンツを操作するためのAPIのひとつで、SD直下のフォルダ「100xxxxx」に保存されている「IMG_0001.JPG」のファイルデータを操作できるAPIである。GETメソッドでリクエストした場合、デジタルカメラ100は記録媒体110に保存されている「IMG_0001.JPG」のファイルデータを取り出し、外部機器にレスポンスとして返送する。DELETEメソッドでリクエストした場合、デジタルカメラ100は「IMG_0001.JPG」のファイルデータを削除し、「200 OK」をレスポンスとして返却する。
API305(http://xxx/event/monitoring)は、デジタルカメラ100の記録媒体110に保存されているコンテンツの追加や削除等の変化情報を取得するためのAPIである。後述するAPI306とはレスポンスの方式が異なり、API305はChunk送信と呼ばれる方式を採用している。Chunk送信はHTTP/1.1で定義されている方式である。この方式の特徴を簡単に説明すると、ヘッダーにはデータのサイズを指定する記述(Content-Length)は入れず、エンコード方式をChunkと指定する記述(Transfer-Encoding:chunked)を入れる。メッセージボディには、Chunkごとに、データサイズ、改行、実データ、改行、を繰り返し記述する。そしてChunkデータの最後は「0」のみからなる行と空行で示す、というものである。Chunk方式によると、複数のデータを1度に送信できるため、リクエストの回数は1度だけで済む。
デジタルカメラ100は、デジタルカメラが保持するコンテンツに変化(追加や削除など)が生じると、その変化に応じて変化情報を生成し、作業用メモリ104に保持する。デジタルカメラ100は、外部機器からAPI305のGETメソッドによりコンテンツの変化情報の取得要求を受けた場合、保持している変化情報を参照して、変化のあったコンテンツを操作するためのAPI(URL)を生成し、レスポンスとして返送する。そして、コンテンツの変化情報をレスポンスとして返送すると、デジタルカメラ100は作業用メモリ104で保持していたコンテンツの変化情報を削除する。なお、以下の説明において、コンテンツの変化として、追加と削除を主に用いて説明するが、これ以外の編集などによる変化であってもよい。
API305でリクエストされた場合は、CHUNK方式による返送を行うため、DELETEメソッドで取得の停止要求を受けるまで、デジタルカメラ100はレスポンスを繰り返し返送する。このとき、作業用メモリ104に保持しているコンテンツの変化情報が無い場合は、空のデータをレスポンスとして送る。
API306(http://xxx/event/polling)は、デジタルカメラ100の記録媒体110に保存されているコンテンツの追加や削除等の変化情報を取得するためのAPIである。上述したAPI305とはレスポンスの方式が異なり、API306はリクエストのあったタイミングで作業用メモリ104に保持しているコンテンツの変化情報のすべてを、ひとつのレスポンスで返却する。また、作業用メモリ104に保持しているコンテンツの変化情報が無い場合は、デジタルカメラ100は外部機器にすぐにレスポンスを返送しない。外部機器からのリクエストを保持したまま、コンテンツの変化を検知するまで待ち、コンテンツの変化を検知してから変化情報をレスポンスとして返送する。これは、Long Pollingと呼ばれるHTTPの手法の一種である。
API305またはAPI306により、デジタルカメラ100のコンテンツの変化情報を得た外部機器は、外部機器内で保持しているデジタルカメラ100のコンテンツ情報を更新することで、デジタルカメラ100で保持しているコンテンツの状態と同期することが可能となる。
デジタルカメラ100内のコンテンツ変化ついて説明する。
図4はデジタルカメラ100の記録媒体110が保持しているコンテンツを階層構造で示している。まず、図4(a)におけるデジタルカメラ100に保存されているコンテンツの状態について説明する。コンテンツ401はデジタルカメラ100の記録媒体110に該当する。コンテンツ402はSDカードに該当する。記録媒体110はSDカード等の外部ストレージであってデジタルカメラ100に着脱可能であり、SDカードが挿入されてSDカードの制御が可能となった状態を、図4(a)に示すようにコンテンツ401とコンテンツ402を線で繋いで表現する。
さらに、SDカードの直下にディレクトリ「100XXXXX」があることをコンテンツ403で表現し、ディレクトリ「100XXXXX」のなかに、ファイル「IMG_0001.JPG」から「IMG_0999.JPG」があることをコンテンツ404で表現している。
図4(a)の状態からディレクトリ「100XXXXX」内にファイル「IMG_1000.JPG」が追加されると図4(b)の状態になる。コンテンツ405がファイル「IMG_1000.JPG」に該当する。
同様に図4(c)は、ディレクトリ「100XXXXX」内にファイル「IMG_1001.JPG」が追加される場合に、SDカード内にディレクトリ「101XXXXX」が追加され、ディレクトリ「101XXXXX」内にファイル「IMG_0001.JPG」が追加された状態を示している。
デジタルカメラ100の制御部101は、このようにデジタルカメラ100が保持するコンテンツに生じた変化を検知し、後述するようなコンテンツの変化情報として保持する。
次に、デジタルカメラ100内のコンテンツ変化情報の保持ついて説明する。
図5はデジタルカメラ100がコンテンツの変化情報を保持している様子を示した図である。
図5(a)はコンテンツ変化が1回発生したときのコンテンツ変化情報を表している。コンテンツ変化情報には、追加や削除などの変化内容を示す情報(図5の例では「Event」)や、変化のあったコンテンツの保存場所を示す情報(図5の例では、「Storage」,「Directory」)、コンテンツのファイル名(図5の例では「File」)などが含まれる。
コンテンツ変化情報501は、ストレージ「SD」のディレクトリ「100XXXXX」に、ファイル名「IMG_0001.JPG」が追加「AddedContents」されたことを示している。コンテンツ変化があるたびに同様のコンテンツ変化情報が追加されて保持される。例えば、SDカードが空の状態から図4(a)の状態までコンテンツが変化した場合、コンテンツ変化情報は図5(b)のような状態になる。なお、変化が削除の場合は、「Event」として「DelletedContents」が示され、削除前に保存されていた保存場所を示す情報を含むように構成することができる。
図5のそれぞれのコンテンツ変化情報の左に添えられている数字は、保持されているコンテンツ変化情報の数を示しており、図5(b)は999個のコンテンツ変化情報を保持していることを示している。コンテンツの変化量が多いほど、保持しなければいけないコンテンツの変化情報量が増えていく。コンテンツの変化情報はデジタルカメラ100の作業用メモリ104で保持されるが、作業用メモリ104の容量は有限であり、コンテンツ変化量が一定量を超えると、コンテンツ変化情報を保持しきれなくなる。その対策として、本実施形態で実施するコンテンツの変化情報を圧縮する方法について説明する。
次に、コンテンツの変化情報の圧縮方法ついて説明する。
同一のディレクトリ内のコンテンツ変化が多い場合、そのディレクトリに変化があったとして、ディレクトリの変化情報を1つ追加し、コンテンツごとの変化情報を削除することで、保持しなければいけない変化情報の数を減らすことができる。つまり、変化が生じたそれぞれのコンテンツの変化情報をディレクトリ単位で纏めて圧縮することで変化情報の数を減らしている。
一例として、図5(b)の状態を圧縮する場合について説明する。図5(b)は、ストレージ「SD」のディレクトリ「100XXXXX」に、ファイルが追加「AddedContents」されたことを示すコンテンツ変化情報が999個保持されている。これらの変化情報は、変化内容(Event)と保存場所(Storage、Directory)が共通であり、ファイル名(File)を共通の文字列に置き換えてしまえば、すべて同一の変化情報となる。これら同一の情報をひとつに纏めると、図5(c)のような状態となる。こうすることで、保持されている変化情報の数はディレクトリ単位の1個となり、圧縮前に比べて998個の情報削減が可能となる。
この状態からさらにコンテンツ変化があった場合について説明する。例えば、図4(a)から図4(b)のように変化した場合、ディレクトリ「100XXXXX」にファイル「IMG_1000.JPG」が追加されたことを示す変化情報は、すでに保持されている変化情報503に内包される。よって、保持される変化情報は図5(c)のままとなる。さらに、図4(b)から図4(c)のようにコンテンツが変化した場合、追加されたファイル「IMG_1001.JPG」はすでに保持されているディレクトリ「100XXXXX」の変化情報に内包され、追加されたディレクトリ「101XXXXX」とファイル「IMG_0001.JPG」は、新たな変化情報504として保持される。その結果、保持される変化情報は図5(d)の状態となる。
コンテンツ変化情報の圧縮を行う条件ついて説明する。
上述したようにコンテンツ変化情報を圧縮することにより、保持するコンテンツ変化情報のデータ量は減らすことができる。しかし、複数のファイル単位の変化情報がディレクトリ単位の変化情報に纏められて情報が丸め込まれてしまうため、コンテンツ変化情報を受信する受信機側で詳細な変化情報を得ることができなくなってしまう。そこで、変化情報を送信する送信機器側の状態に応じ、圧縮を行う条件を適切なものにする必要がある。圧縮を行う条件として以下が挙げられる。
1つ目の条件は、保持する変化情報の数が一定量を超えたら情報を圧縮するケースである。上述したとおり、コンテンツ変化情報を保持する作業用メモリ104は有限であり、保持できるデータ量には限りがある。そこで、保持する変化情報の数に上限を設け、上限を越えたタイミングで圧縮を行う。コンテンツ変化が少量の場合は、詳細な変化情報を通知することができる。すなわち、変化が生じたコンテンツの数が所定数未満の場合と所定数以上の場合とで制御を異ならせる。
2つ目の条件は、コンテンツの変化内容に応じて圧縮するか否かを決定するケースである。具体的には、変化内容が削除の場合に変化情報を圧縮する。
デジタルカメラにおいて、一度の操作で変化するコンテンツの数は追加よりも削除のほうが多い。コンテンツの追加は主に撮影である。一度の撮影操作で増えるコンテンツはせいぜい数個である。それに対し削除は、複数枚指定して削除、フォルダごと削除、SDカード内の全削除など、一度の操作で変化するコンテンツの数が多い。そこで、削除によるコンテンツ変化を検出した場合には、コンテンツのファイル単位で変化情報を保持するのではなく、あらかじめディレクトリ単位もしくはストレージ単位で保持することで、効率的に情報を保持することができる。
また、受信機側も追加に比べ削除に関しては、コンテンツの変化に関して詳細な情報が必要ないこともある。例えば、受信機側が保持しているコンテンツ情報を更新する際、変化情報にある削除されたコンテンツを逐次的に検索し該当する情報を更新していくよりも、削除があったディレクトリに保存されているファイル情報を取得しなおして一括で更新したほうが処理が早い。その場合は、受信機側は、変化のあったディレクトリの情報を取得するだけで十分である。
3つ目の条件は、撮影モードが連写だったら情報を圧縮するケースである。
デジタルカメラには写真を1枚ずつ撮影する単写モードと、複数枚連続して撮影する連写モードがある。連写モードでは一度に大量のコンテンツが追加されることが予想されるため、連写モードに設定されている場合は、連写で取得されるコンテンツをディレクトリ単位に纏めて保持してあげることで、効率的に情報を保持することができる。
4つ目の条件は、APIのレスポンスのデータ形式に応じて圧縮するか否かを決定するケースである。具体的には、レスポンスのデータ形式がCHUNK形式だったら情報を圧縮しない。
上述したとおり、CHUNK形式は一度のリクエストでデータを送り続けることができる。そのため、コンテンツ変化情報も複数回にわたって受信機側に送り続けることができ、送信の度に保持する変化情報を削除するので、保持しなければいけない変化情報の数は少量ですむ。API305などCHUNK形式でリクエストを受けた場合は、ファイル単位で情報を保持することで、詳細な変化情報を受信機側に通知することができる。また、API306のようなLong Pollingと呼ばれる形式(POLLING形式)でレスポンスが要求された場合は、変化情報を大量に送る場合があるので、ディレクトリ単位に変化情報を圧縮して送信する。
以上、コンテンツの変化情報をディレクトリ単位に圧縮するかどうかを決定する条件として4つの条件を例示したが、これ以外の条件に従ってもよい。また、上記4つの条件のいずれかのみを使用してもよいし、複数の条件を組み合わせて使用してもよい。
図6は本実施形態におけるデジタルカメラ100の処理を取り出して示したフローチャートである。
図6(a)はコンテンツの変化を検知して、コンテンツの変化情報を保持するまでの処理、図6(b)は受信機器からのコンテンツの変化情報の取得要求を受けてからレスポンスを返すまでの処理を示している。
図6(a)のS601aにおいて、制御部101は、コンテンツの追加や削除等のコンテンツの変化を検知をする。検知をした場合、S602aにおいてコンテンツの変化情報を生成する。コンテンツの変化情報の生成に必要な情報は、記録媒体110や作業用メモリ104から収集する。
S603aにおいて、上述したコンテンツの変化情報の圧縮の条件に基づき、コンテンツの変化情報の圧縮が必要か否かの判定する。コンテンツの変化情報の圧縮が必要と判断された場合、S604aにおいてコンテンツの変化情報の圧縮を行う。
最後に、S605aにおいて、コンテンツの変化情報を保持し、S601aに戻り、処理繰り返す。
図6(b)のS601bにおいて、制御部101は、通信部111を通じてスマートフォン200からコンテンツ変化情報の取得要求を受信する。取得要求は、上述したAPI305のGETメソッド、またはAPI306のGETメソッドが該当する。取得要求を受信した場合、S602bへ進む。
S602bにおいて、スマートフォン200からの取得要求に対するレスポンスのデータ形式がChunk形式であるか否かを判定する。API306で要求されている場合には、Chunk形式での応答とならないため、S603bへ進む。API305で要求されている場合は、Chunk形式での応答となるため、S607bへ進む。
S603bにおいて、制御部101は保持しているコンテンツ変化情報の有無を確認する。保持している変化情報がある場合はS604bへ進む。保持している変化情報がない場合は、S606bへ進む。
S604bにおいて、制御部101は保持している変化情報をレスポンスのデータ形式に変換する。図3のresponse列の例だと、変化したコンテンツを制御できるAPI(URL)を生成し、変化内容(Event)ごとにまとめたJSON形式のデータを生成する。
S605bにおいて、制御部101は通信部111を通じてスマートフォン200へレスポンスデータを送信する。送信が完了すると、S601bへ戻り、はじめから処理を繰り返す。
S606bにおいて、スマートフォン200からコンテンツの変化情報の停止要求を検知した場合、S601bへ戻り、はじめから処理を繰り返す。停止要求を検知しない場合、S603bへ戻り、コンテンツ変化情報が保持されるまで処理を繰り返す。ここで停止要求はAPI306のDELETEメソッドがこれに該当する。
S607bにおいて、S603bと同様に保持しているコンテンツ変化情報の有無を確認する。保持している変化情報がある場合はS608bへ進む。保持している変化情報がない場合は、S609bへ進む。Chunk形式での応答の場合、コンテンツの変化が無くてもレスポンスを送信する。
S608bにおいて、S604bと同様に、制御部101は保持している変化情報をレスポンス用のJSONデータ形式に変換する。
S609bにおいて、制御部101はレスポンス用データを生成する。このとき、コンテンツの変化が無いため、空のJSONデータを生成する。
S610bにおいて、制御部101は、通信部111を通じてスマートフォン200に対し、生成したレスポンスデータを送信する。送信が完了するとS611bへ進む。
S611bにおいて、スマートフォン200からコンテンツの変化情報の停止要求を検知した場合、S601bへ戻り、はじめから処理を繰り返す。停止要求を検知しない場合、S607bへ戻り、レスポンスデータの生成と送信処理を繰り返す。ここで停止要求はAPI305のDELETEメソッドがこれに該当する。
なお、上記フローでは、コンテンツの変化情報をJSON形式に変換してレスポンスを送信しているがこれに限らない。変化情報が示す変化の内容を受信機に実質的に通知することが可能であれば、他の形式でもよい。
図7は、本実施形態におけるスマートフォン200の処理を取り出して示したフローチャートである。
以下の動作は、制御部201がスマートフォン200にインストールされている、デジタルカメラ100との連係動作するためのアプリケーション(通信アプリ)を実行することにより実現される。
S701において、制御部201は、デジタルカメラ100に送信したコンテンツの変化情報の取得を要求するAPIに対するレスポンスを受信する。変化情報を受信するとS702へ進む。ここで制御部201は、取得したレスポンスデータをコンテンツの変化情報に変換する。レスポンスデータのヘッダ情報から取得したデータ形式がChunk形式か否かが判断できるため、制御部201は適当な変換方法を選択することができる。上述したように、レスポンスの形式に応じて変換方法を適応的に設定してもよい。
S702において、得られたコンテンツ変化情報を解析する。コンテンツの変化内容は追加なのか削除なのか、また変化情報はディレクトリ単位なのかファイル単位なのか等、スマートフォン200で保持しているコンテンツ情報を更新するために必要な情報を読み取る。ここで、得られた変化情報に詳細な情報がない場合、S704において、詳細な変化情報の要求と取得を行う。例えば、コンテンツの追加情報がディレクトリ単位で纏められて情報が丸め込まれていた場合、スマートフォン200は追加されたコンテンツのファイル単位の情報が別途必要となる。そこで、スマートフォン200は得られた変化情報から該当のディレクトリを制御するためのAPI(URL)を取得し、このAPI(URL)を実行することで、ディレクトリ内のファイル情報を得ることができる。例えば、図3のAPI302やAPI303がこれに該当する。
S705において、コンテンツの取得が必要か否かを判断する。コンテンツの取得が必要な場合、S706へ進む。コンテンツの取得が必要な場合の例としては、例えば、スマートフォン200上のアプリでデジタルカメラ100内のコンテンツ一覧画面を生成する場合などが挙げられる。コンテンツを表示するためには、コンテンツのファイルデータの取得が必要となるからである。
S706において、制御部201は、デジタルカメラ100に対して、コンテンツのファイルデータの要求および取得を行う。ファイルデータは、変化情報やAPI302に含まれる、ファイルを制御するためのAPI(URL)を実行することで取得ができる。API304がこれに該当する。
最後に、S707において、取得した変化情報やファイルデータを用いて、保持しているコンテンツ情報を更新する。更新が完了したら、S701に戻り処理を繰り返す。これらの処理を繰り返すことにより、スマートフォン200で保持しているコンテンツ情報をデジタルカメラで保持しているコンテンツ情報を同期することができる。
なお、本実施形態では、図3に示すAPI301~306をAPIサービスとして提供されていることを前提に説明したが、APIサービスで提供するAPIの種類はこれらに限定されない。例えば、「リモート撮影をする」および「カメラの設定をする」等の連係動作を実現するためのAPIが提供されてもよい。新たなAPIの追加はデジタルカメラ100で実行するAPIプログラムを追加してインストールすることにより実現可能である。
以上説明したように、本実施形態によれば、コンテンツデータを有する電子機器が、コンテンツデータの変化情報のデータ量を状況に応じて圧縮し、外部装置に提供するようにした。そのため、できる限り通信やデータ保持に負荷を与えることなく、詳細なコンテンツの変化情報を外部装置へ通知することが可能となる。
以上、本発明をその好適な実施形態に基づいて詳述してきたが、本発明はこれら特定の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。また、上述の実施形態においては、送信対象を画像として説明したが、これに限る必要はない。たとえば、音声ファイルや文書ファイルなど、クライアント機器とサーバ機器の間でやりとりできるファイルであれば何でもよい。
また、上述の実施形態の機能を実現するソフトウェアのプログラムを、記録媒体から直接、或いは有線/無線通信を用いてプログラムを実行可能なコンピュータを有するシステム又は装置に供給し、そのプログラムを実行する場合も本発明に含む。従って、本発明の機能処理をコンピュータで実現するために、該コンピュータに供給、インストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明の機能処理を実現するためのコンピュータプログラム自体も本発明に含まれる。その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等、プログラムの形態を問わない。プログラムを供給するための記録媒体としては、例えば、ハードディスク、磁気テープ等の磁気記録媒体、光/光磁気記憶媒体、不揮発性の半導体メモリでもよい。また、プログラムの供給方法としては、コンピュータネットワーク上のサーバに本発明を形成するコンピュータプログラムを記憶し、接続のあったクライアントコンピュータがコンピュータプログラムをダウンロードしてプログラムするような方法も考えられる。