Upload direto pelo Street View

Versão 2.1

Contexto

Nas versões anteriores da API, uma câmera compatível com OSC criava um ponto de acesso Wi-Fi ao qual os apps do Google Street View para iOS e Android poderiam se conectar. O app direciona a câmera OSC para capturar fotos e também faz o download do conteúdo capturado da câmera para publicá-lo no Google Street View. Para agilizar a publicação de conteúdo, adicionamos um novo fluxo de trabalho opcional que permite que as câmeras OSC façam upload do conteúdo diretamente para o servidor do Street View. Isso elimina a demorada transferência dupla de conteúdo primeiro da câmera para o app e, em seguida, do app para o servidor do Street View. Isso foi adicionado na API de nível 2.1 e só é relevante para câmeras OSC que podem fornecer um ponto de acesso Wi-Fi e também se conectar a um ponto de acesso Wi-Fi da infraestrutura com acesso à Internet.

Informações gerais

O novo fluxo de trabalho de upload exige que as câmeras forneçam uma maneira (por exemplo, um botão físico dedicado ou uma combinação de botões existentes) para permitir que os usuários alternem entre dois modos de Wi-Fi:

  • Modo direto:nesse modo, a câmera atua como um ponto de acesso que permite que um dispositivo móvel se conecte a ela. Nesse modo, os dispositivos móveis podem controlar a câmera para realizar tarefas como tirar fotos. Os dispositivos móveis também podem fornecer à câmera credenciais de ponto de acesso Wi-Fi, que podem ser usadas para alternar para o modo de Internet.
  • Modo de Internet:nesse modo, a câmera se conecta a um ponto de acesso Wi-Fi com acesso à Internet. Ele vai usar o identificador do ponto de acesso e a senha fornecidos pelo app quando a câmera estava anteriormente no Modo direto. Nesse modo, os dispositivos móveis podem iniciar uploads da câmera diretamente para o servidor do Street View. Eles também podem continuar controlando a câmera para realizar tarefas como tirar fotos.

O modo de câmera precisa persistir mesmo se a câmera for desativada e ativada novamente. Além disso, é altamente recomendável que a câmera ofereça um sinal (por exemplo, luz, som ou indicador em uma tela) para informar os usuários sobre o modo Wi-Fi atual.

A câmera também precisa ter protocolos de descoberta (consulte Descoberta) implementados para processar a comunicação enquanto ela estiver no modo de Internet.

Configuração do modo de Internet

  1. O usuário liga a câmera. Ele inicia no Modo direto porque o Modo de Internet ainda não foi configurado.
  2. O dispositivo móvel se conecta ao Wi-Fi da câmera.
  3. O app gera um certificado autoassinado.
  4. O app envia o comando switchWifi à câmera com o SSID do ponto de acesso Wi-Fi da infraestrutura a que a câmera vai precisar se conectar, a senha desse ponto de acesso e o certificado autoassinado que a câmera usa para autenticar o app mais tarde.
    • A câmera precisa armazenar a credencial de Wi-Fi e o certificado autoassinado do app de forma segura.
    • É recomendável que a câmera armazene várias credenciais de Wi-Fi, já que talvez ela precise se conectar a diferentes pontos de acesso Wi-Fi da infraestrutura. O requisito mínimo é que a câmera armazene a credencial de Wi-Fi mais recente.
  5. A câmera responde com o certificado autoassinado usado pelo app para autenticar a câmera mais tarde.
  6. Agora o usuário pode alternar entre o Modo direto e o Modo de Internet diretamente da câmera, por exemplo, com um botão de ativação físico.

Discovery

A descoberta de câmeras OSC é um protocolo baseado em zeroconf. A câmera PRECISA implementar o endereçamento link-local IPv4 e PRECISA estar em conformidade com as especificações de mDNS (DNS Multicast) e DNS-SD (descoberta de serviço baseada em DNS):

Nomes de instâncias de serviço

Para a parte <Service> do nome da instância de serviço, as câmeras OSC precisam usar _osc._tcp. Para a parte <Domain> do nome da instância de serviço, as câmeras OSC precisam usar local.. Observe que há um . à direita depois de local.

Registro TXT

Exigimos que a câmera envie os seguintes pares de chave-valor no registro TXT: txtvers, ty e id.

txtvers

Para permitir atualizações na versão do TXT no futuro, use o par de chave-valor txtvers=1.

ty

Fornece um nome legível pelo usuário para a câmera, por exemplo, ty=Google Street View Optimized Spherical Camera Model XYZ.

id

Fornece um ID exclusivo da câmera, por exemplo, id=A unique id of the camera. O valor de id PRECISA ser o mesmo que cameraId na saída /osc/info.

Avisos

Na inicialização ou no desligamento da câmera, ela PRECISA realizar a etapa de anúncio, conforme descrita na especificação de mDNS. Ele DEVE enviar o anúncio correspondente pelo menos duas vezes com um intervalo de no mínimo um segundo entre eles.

Inicialização

Na inicialização da câmera, ela PRECISA realizar as etapas de sondagem e anúncio, conforme descrito na especificação do mDNS. Os registros SRV, PTR e TXT devem ser enviados nesse caso. É recomendável agrupar todos os registros em uma resposta DNS, se possível. Caso contrário, a seguinte ordem é recomendada: registros SRV, PTR, TXT.

Desligamento

No encerramento da câmera, ela DEVE tentar notificar todas as partes interessadas enviando um "pacote de despedida" com TTL=0, conforme descrito na seção 10.1 da documentação do mDNS.

Certificado autoassinado

O app e a câmera podem usar os certificados autoassinados compartilhados durante a configuração do modo de Internet para se autenticarem e criarem um canal seguro para proteger os dados trocados por meio da autenticação mútua SSL.

No modo de Internet, o app funciona como um servidor SSL e a câmera como um cliente. A câmera verificaria se o certificado do servidor corresponde ao certificado autoassinado do app, e o app verifica se o certificado do cliente corresponde ao da câmera.

Qualquer biblioteca SSL compatível com autenticação mútua (por exemplo, OpenSSL) pode ser usada para estabelecer a conexão SSL entre o app e a câmera durante o modo de Internet.

Novo fluxo de envio

  1. Se a câmera não estiver no modo de Internet, o usuário vai mudar para o modo de Internet. A câmera se conecta ao Wi-Fi da infraestrutura usando as credenciais armazenadas.
  2. O dispositivo móvel também se conecta ao Wi-Fi da infraestrutura e descobre a câmera.
    • Isso exige que a câmera implemente um protocolo de descoberta local mDNS/DNS-SD (consulte Descoberta).
    • Não há um requisito específico sobre como isso é implementado (mDNSResponder é uma boa referência).
    • O app e a câmera geram e compartilham certificados autoassinados durante a configuração do modo de Internet. No modo de Internet, o app e a câmera se autenticam por SSL mútuo.
    • Após a descoberta da câmera, a comunicação com o cliente é ativada diretamente na rede local com base em HTTP 1.1. Os formatos de dados são baseados em JSON. As solicitações podem ser GET ou POST.
  3. O app consulta a câmera em busca de uma lista de arquivos com o comando listFiles.
  4. O app inicia o upload com o comando uploadFile para enviar uma imagem ou um vídeo diretamente da câmera para o servidor do Street View.
  5. O app pesquisa a câmera periodicamente para saber o progresso do upload com o comando status.