Carga directa a través de Street View

Versión 2.1

Información general

En versiones anteriores de la API, una cámara compatible con OSC creaba un punto de acceso Wi-Fi al que las apps de Google Street View para iOS y Android podían conectarse. La app le indicaría a la cámara OSC que capturara fotos y, además, descargaría el contenido capturado de la cámara para, luego, publicarlo en Google Street View. Para acelerar la publicación de contenido, presentamos un nuevo flujo de trabajo opcional que permite que las cámaras OSC suban contenido directamente al servidor de Street View. De esta manera, se elimina la larga transferencia doble de contenido, primero de la cámara a la app y, luego, de la app al servidor de Street View. Esto se agregó en el nivel de API 2.1 y solo es relevante para las cámaras OSC que pueden proporcionar un punto de acceso Wi-Fi y, además, conectarse a un punto de acceso Wi-Fi de infraestructura con acceso a Internet.

Descripción general

El nuevo flujo de trabajo de carga requiere que las cámaras proporcionen una forma (p.ej., un botón físico exclusivo o una combinación de botones existentes) para permitir a los usuarios cambiar entre dos modos de Wi-Fi:

  • Modo directo: En este modo, la cámara actúa como un punto de acceso que permite que un dispositivo móvil se conecte a ella. En este modo, los dispositivos móviles pueden controlar la cámara para que realice tareas, como tomar fotos. Los dispositivos móviles también le pueden proporcionar a la cámara credenciales de punto de acceso Wi-Fi que la cámara puede usar para cambiar al modo de Internet.
  • Modo de Internet: En este modo, la cámara se conecta a un punto de acceso Wi-Fi con acceso a Internet. Usará el identificador y la contraseña de punto de acceso que se le proporcionaron desde la app cuando la cámara estaba en modo directo. En este modo, los dispositivos móviles pueden iniciar las cargas directamente desde la cámara al servidor de Street View. También pueden seguir controlando la cámara para realizar tareas como capturar fotos.

El modo de la cámara debe persistir en todas las cámaras que se apagan y se vuelven a encender. Además, se recomienda que la cámara ofrezca una señal (p.ej., luz, sonido o indicador en una pantalla) para informar a los usuarios sobre el modo Wi-Fi actual.

La cámara también debe tener protocolos de detección (consulta Descubrimiento) implementados para controlar la comunicación mientras la cámara está en modo de Internet.

Configuración del modo de Internet

  1. El usuario enciende la cámara. Se inicia en modo directo porque aún no se configuró el modo de Internet.
  2. El dispositivo móvil se conecta a la red Wi-Fi de la cámara.
  3. La app genera un certificado autofirmado.
  4. La app envía el comando switchWifi a la cámara con el SSID del punto de acceso Wi-Fi de la infraestructura al que deberá conectarse la cámara, la contraseña de ese punto de acceso y el certificado autofirmado que usa la cámara para autenticar la app más tarde.
    • Ten en cuenta que la cámara debe almacenar de forma segura la credencial de Wi-Fi y el certificado autofirmado de la app.
    • Se recomienda que la cámara almacene varias credenciales de Wi-Fi, ya que es posible que deba conectarse a diferentes puntos de acceso Wi-Fi de infraestructuras. El requisito mínimo es que la cámara almacene la credencial de Wi-Fi más reciente.
  5. La cámara responde con su certificado autofirmado que la app usa para autenticar la cámara más adelante.
  6. Ahora el usuario puede cambiar entre el modo directo y el modo de Internet directamente desde la cámara, p.ej., con un botón de activación físico.

Campañas discovery

La detección de cámaras OSC es un protocolo basado en zeroconf. La cámara DEBE implementar el direccionamiento local de vínculo IPv4 y DEBE cumplir con las especificaciones de mDNS (DNS multidifusión) y DNS-SD (Descubrimiento de servicios basados en DNS):

Nombres de instancias de servicio

Para la parte <Service> del nombre de la instancia de servicio, las cámaras OSC deben usar _osc._tcp. Para la parte <Domain> del nombre de la instancia de servicio, las cámaras OSC deben usar local.. Ten en cuenta que hay una . al final después de local.

registro TXT

Requerimos que la cámara envíe los siguientes pares clave-valor en el registro TXT: txtvers, ty y id.

txtver

Para permitir actualizaciones de la versión de TXT en el futuro, usa el par clave-valor txtvers=1.

ty

Proporciona un nombre de la cámara legible por el usuario, p.ej., ty=Google Street View Optimized Spherical Camera Model XYZ.

id

Proporciona un ID único de la cámara, p.ej., id=A unique id of the camera. El valor de id DEBE ser el mismo que el de cameraId en el resultado de /osc/info.

Anuncios

Cuando se inicia o apaga la cámara, esta DEBE realizar el paso de anuncio como se describe en la especificación de mDNS. DEBE enviar el anuncio correspondiente al menos dos veces, con un intervalo de al menos un segundo entre ellos.

Inicio

Cuando se inicia la cámara, DEBES realizar el sondeo y el anuncio de los pasos que se describen en la especificación de mDNS. En este caso, se deben enviar los registros SRV, PTR y TXT. Se recomienda agrupar todos los registros en una respuesta DNS, si es posible. De lo contrario, se recomienda el siguiente orden: registros SRV, PTR y TXT.

Cierre

Cuando se apaga la cámara, DEBES intentar notificar a todas las partes interesadas enviando un "paquete de despedida" con TTL=0, como se describe en la sección 10.1 de la documentación de mDNS.

Certificado autofirmado

La app y la cámara pueden usar los certificados autofirmados compartidos durante la configuración del modo de Internet para autenticarse entre sí y compilar un canal seguro a fin de proteger los datos intercambiados mediante la autenticación SSL mutua.

Durante el modo de Internet, la app actuaría como un servidor SSL y la cámara como un cliente. La cámara comprobará que el certificado del servidor coincida con el certificado autofirmado de la app, y la app comprobará que el certificado del cliente coincida con el de la cámara.

Se puede usar cualquier biblioteca SSL que admita la autenticación mutua (p.ej., OpenSSL) para establecer una conexión SSL entre la app y la cámara durante el modo de Internet.

Flujo de carga nuevo

  1. Si la cámara no está en modo de Internet, el usuario la cambia al modo de Internet. La cámara se conecta a la red Wi-Fi de la infraestructura con credenciales almacenadas.
  2. El dispositivo móvil también se conecta a la red Wi-Fi de la infraestructura y detecta la cámara.
    • Esto requiere que la cámara implemente un protocolo de detección local mDNS/DNS-SD (consulta Descubrimiento).
    • No hay un requisito específico sobre cómo se implementa (mDNSResponder es una buena referencia).
    • La app y la cámara generan y comparten certificados autofirmados durante la configuración del modo de Internet. Durante el modo de Internet, la app y la cámara se autentican entre sí a través de la autenticación SSL mutua.
    • Después de descubrir la cámara, se habilita la comunicación con el cliente directamente a través de la red local basada en HTTP 1.1. Los formatos de datos están basados en JSON. Las solicitudes pueden ser solicitudes GET o POST.
  3. La app consulta a la cámara para obtener una lista de archivos con el comando listFiles.
  4. La app inicia la carga con el comando uploadFile para subir una imagen o un video directamente desde la cámara al servidor de Street View.
  5. La app sondea la cámara de forma periódica para conocer el progreso de la carga con el comando status.