バージョン 2.1
背景
以前のバージョンの API では、OSC 準拠のカメラが Wi-Fi アクセス ポイントを作成し、Google ストリートビューの iOS アプリと Android アプリから接続できました。アプリは OSC カメラに写真を撮影するよう指示するとともに、撮影したコンテンツをカメラからダウンロードして Google ストリートビューに公開するよう指示します。コンテンツの公開を迅速化するために、OSC カメラがストリートビュー サーバーに直接コンテンツをアップロードできるようにする新しいオプション ワークフローを導入しました。これにより、最初にカメラからアプリへ、次にアプリからストリートビュー サーバーに、コンテンツを二重に転送する必要がなくなります。これは API レベル 2.1 で追加されました。Wi-Fi アクセス ポイントを提供し、インターネットにアクセスできるインフラストラクチャ Wi-Fi アクセス ポイントにも接続できる OSC カメラにのみ適用されます。
概要
新しいアップロード ワークフローでは、ユーザーが次の 2 つの Wi-Fi モードを切り替える方法(専用の物理ボタン、または既存のボタンの組み合わせなど)をカメラで用意する必要があります。
- ダイレクト モード: このモードでは、カメラはモバイル デバイスから接続するためのアクセス ポイントとして機能します。このモードでは、モバイル デバイスでカメラを制御して写真のキャプチャなどのタスクを実行できます。モバイル デバイスでは、カメラに Wi-Fi アクセス ポイントの認証情報を付与することもできます。この認証情報を使用して、カメラはインターネット モードに切り替えられます。
- インターネット モード: このモードでは、カメラはインターネットにアクセスできる Wi-Fi アクセス ポイントに接続します。このとき、カメラがダイレクト モードだったときにアプリから提供されたアクセス ポイント ID とパスワードが使用されます。このモードでは、モバイル デバイスからカメラから直接ストリートビュー サーバーへのアップロードを開始できます。また、引き続きカメラを制御して、写真のキャプチャなどのタスクを実行することもできます。
カメラモードは、カメラをオフにしてから再びオンにしても維持する必要があります。また、現在の Wi-Fi モードをユーザーに知らせる信号(画面上のライト、音、インジケーターなど)をカメラから出力することを強くおすすめします。
また、カメラがインターネット モードにあるときの通信を処理できるように、検出プロトコル(検出を参照)を実装しておく必要もあります。
インターネット モードの設定
- ユーザーがカメラの電源をオンにします。インターネット モードがまだ設定されていないため、ダイレクト モードで開始されます。
- モバイル デバイスがカメラの Wi-Fi に接続します。
- アプリは自己署名証明書を生成します。
- アプリは、カメラが接続する必要があるインフラストラクチャ Wi-Fi アクセス ポイントの SSID、そのアクセス ポイントのパスワード、後でカメラがアプリを認証する際に使用する自己署名証明書を使用して、カメラに
switchWifi
コマンドを送信します。- カメラは Wi-Fi 認証情報とアプリの自己署名証明書の両方を安全に保存する必要があることにご注意ください。
- カメラは異なるインフラストラクチャ Wi-Fi アクセス ポイントに接続する必要が生じる場合があるため、カメラには複数の Wi-Fi 認証情報を保存することをおすすめします。最小要件は、カメラが最新の Wi-Fi 認証情報を保存することです。
- カメラは、後でアプリがカメラを認証するために使用する自己署名証明書で応答します。
- ユーザーは、物理的な切り替えボタンなどを使用して、カメラから直接ダイレクト モードとインターネットモードを切り替えられるようになりました。
発見
OSC カメラの検出は、zeroconf ベースのプロトコルです。カメラは IPv4 リンクローカル アドレスを実装しなければならず、mDNS(マルチキャスト DNS)と DNS-SD(DNS ベースのサービス ディスカバリ)の仕様を遵守しなければなりません。
サービス インスタンス名
OSC カメラは、サービス インスタンス名の <Service>
部分に _osc._tcp
を使用する必要があります。OSC カメラは、サービス インスタンス名の <Domain>
部分に local.
を使用する必要があります。local
の後に .
がついています。
TXT レコード
カメラは TXT レコードで txtvers
、ty
、id
の Key-Value ペアを送信する必要があります。
テキストバー
今後の TXT バージョンの更新を許可するには、Key-Value ペア txtvers=1
を使用します。
ty
ユーザーが読むことができるカメラ名を指定します(例: ty=Google Street View Optimized Spherical Camera Model XYZ
)。
id
カメラの一意の ID を提供します(例: id=A unique id of the camera
)。id
の値は、/osc/info
出力の cameraId
と同じでなければなりません。
お知らせ
カメラの起動時またはシャットダウン時に、カメラは mDNS 仕様に記載されているとおり、通知ステップを実行しなければなりません。対応する通知を少なくとも 1 秒間隔で少なくとも 2 回送信すべきです。
スタートアップ
カメラの起動時に、mDNS 仕様に記載されているとおり、プローブと通知の手順を実行しなければなりません。この場合は、SRV レコード、PTR レコード、TXT レコードを送信する必要があります。可能であれば、すべてのレコードを 1 つの DNS レスポンスにグループ化することをおすすめします。それ以外の場合は、SRV、PTR、TXT レコードの順番をおすすめします。
シャットダウン
カメラのシャットダウン時には、mDNS ドキュメントのセクション 10.1 に記載されているとおり、TTL=0
で「グッドバイ パケット」を送信することですべての関係者への通知を試みるべきです。
自己署名証明書
アプリとカメラは、インターネット モードのセットアップ時に共有された自己署名証明書を使用して相互に認証を行い、SSL 相互認証を使用して交換データを保護するための安全なチャネルを構築できます。
インターネット モードでは、アプリが SSL サーバーとして機能し、カメラがクライアントとして機能します。サーバーの証明書がアプリの自己署名証明書と一致することをカメラが確認し、クライアントの証明書がカメラの証明書と一致することをアプリは確認します。
相互認証をサポートする任意の SSL ライブラリ(OpenSSL など)を使用すると、インターネット モードでのアプリとカメラ間の SSL 接続を確立できます。
新しいアップロード フロー
- カメラがインターネット モードになっていない場合は、インターネット モードに切り替えます。 カメラは、保存されている認証情報を使用してインフラストラクチャ Wi-Fi に接続します。
- また、モバイル デバイスはインフラストラクチャ Wi-Fi に接続し、カメラを検出します。
- そのためには、カメラにローカル検出プロトコルの mDNS/DNS-SD を実装する必要があります(検出を参照)。
- 実装方法に関する特定の要件はありません(mDNSResponder をご覧ください)。
- インターネット モードのセットアップ時に、アプリとカメラの両方で自己署名証明書が生成され、共有されます。インターネット モードの場合、アプリとカメラの両方が相互 SSL 認証によって相互に認証します。
- カメラが検出されると、HTTP 1.1 に基づくローカル ネットワーク経由で直接クライアント通信が有効になります。データ形式は JSON ベースです。リクエストには GET リクエストと POST リクエストがあります。
- アプリは
listFiles
コマンドを使用して、カメラにファイルのリストをクエリします。 - アプリで
uploadFile
コマンドを使用してアップロードを開始し、画像や動画をカメラからストリートビュー サーバーに直接アップロードします。 - アプリは
status
コマンドを使用して、アップロードの進行状況についてカメラを定期的にポーリングします。