Esta é a Central do desenvolvedor do Google Home, a nova plataforma para aprender a desenvolver ações de casa inteligente. Observação: você continua criando ações no Console do Actions.
Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Esquema de características do Stream da câmera inteligente em casa

action.devices.traits.CameraStream: essa característica aborda como controlar o stream de câmera de um dispositivo.

Essa característica pertence a dispositivos que têm a capacidade de transmitir feeds de vídeo para smart displays, dispositivos compatíveis com Chromecast ou smartphones. Aquelas são câmeras de segurança ou câmeras para bebês. Mas essa característica também se aplica a dispositivos mais complexos que têm uma câmera, por exemplo, dispositivos de videoconferência ou um robô aspirador com uma câmera.

ATRIBUTOS DO DISPOSITIVO

Dispositivos com essa característica podem informar os seguintes atributos como parte da operação SYNC. Para saber mais sobre como processar intents SYNC, consulte fulfillment de intent.

Atributos Tipo Descrição
cameraStreamSupportedProtocols Array

Obrigatório.

Tipos de mídia compatíveis com o stream da câmera, ordenados por preferência. Normalmente, o primeiro protocolo na matriz compatível com a plataforma de destino é solicitado.

[item, ...] String

Tipo de mídia.

Os valores suportados são:

hls
Transmissão ao vivo HTTP
dash
Streaming adaptável dinâmico por HTTP
smooth_stream
Streaming suave
progressive_mp4
MP4 progressivo (usado principalmente para clipes)
webrtc
WebRTC
cameraStreamNeedAuthToken Booleano

Obrigatório.

Indica se um token de autenticação vai ser fornecido via cameraStreamAuthToken para que a plataforma de destino faça streaming do feed da câmera.

Exemplos

A câmera é compatível com vários protocolos, não sendo necessário um token de autenticação.

{
  "cameraStreamSupportedProtocols": [
    "webrtc",
    "hls",
    "dash",
    "smooth_stream",
    "progressive_mp4"
  ],
  "cameraStreamNeedAuthToken": false
}

A câmera é compatível com um único protocolo, exigindo um token de autenticação.

{
  "cameraStreamSupportedProtocols": [
    "hls"
  ],
  "cameraStreamNeedAuthToken": true
}

Protocolos de streaming compatíveis

Essa característica é compatível com os seguintes protocolos de streaming:

STATES do dispositivo

Nenhuma.

Comandos do dispositivo

Dispositivos com essa característica podem responder aos seguintes comandos como parte da operação EXECUTE. Para saber mais sobre como processar intents EXECUTE, consulte fulfillment de intent.

action.devices.commands.GetCameraStream

Parâmetros

Parâmetros Tipo Descrição
StreamToChromecast Booleano

Obrigatório.

Indica se a transmissão será exibida em um dispositivo Chromecast.

SupportedStreamProtocols Array

Obrigatório.

Tipos/formatos de mídia aceitos pelo destino desejado.

[item, ...] String

Tipo de mídia.

Os valores suportados são:

hls
Transmissão ao vivo HTTP
dash
Streaming adaptável dinâmico por HTTP
smooth_stream
Streaming suave
progressive_mp4
MP4 progressivo (usado principalmente para clipes)
webrtc
WebRTC

Resultados

Resultados Tipo Descrição
cameraStreamAuthToken String

Um token de autenticação para o receptor específico para autorizar o acesso ao stream. Se cameraStreamNeedAuthToken for verdadeiro e esse valor não for fornecido, as credenciais de OAuth do usuário serão usadas como token de autenticação.

cameraStreamProtocol String

Obrigatório.

O formato de mídia para que o URL de stream aponta. Precisa ser um dos protocolos listados no parâmetro de comando SupportedStreamProtocols.

Os valores suportados são:

hls
Transmissão ao vivo HTTP
dash
Streaming adaptável dinâmico por HTTP
smooth_stream
Streaming suave
progressive_mp4
MP4 progressivo (usado principalmente para clipes)
webrtc
WebRTC

Resultados que não são WebRTC

Resultados Tipo Descrição
cameraStreamAccessUrl String

Obrigatório.

Endpoint de URL para recuperar o stream em tempo real no formato especificado por cameraStreamProtocol.

cameraStreamReceiverAppId String

Código do receptor do Google Cast para processar o stream da câmera quando o parâmetro StreamToChromecast for verdadeiro. O receptor padrão será usado se não for fornecido.

Resultados WebRTC

Resultados Tipo Descrição
cameraStreamSignalingUrl String

Obrigatório.

Endpoint de URL para recuperar e trocar protocolos de descrição da sessão (SDPs) da câmera e do cliente. O cliente precisa retornar o URL de sinalização que usa o cameraStreamAuthToken como o token de autenticação no cabeçalho da solicitação.

cameraStreamOffer String

Oferecer protocolo de descrição de sessão (SDP).

cameraStreamIceServers String

Representa os servidores Interactive Connectivity estabeleciment (ICE) usando uma string JSON codificada com a descrição de um RTCIceServer. Se você não especificar os servidores STUN (Utilitários de sessão para NAT), a plataforma usará como padrão os servidores STUN públicos do Google. Os servidores Turn (Traversal Using Redirecionamentos about NAT) só serão necessários se você não garantir que os IPs / candidatos à ICE fornecidos sejam acessíveis publicamente (por exemplo, por um servidor de mídia, candidato a ICE do host público, candidato a ICE de redirecionamento etc.).

Exemplos

Mostrar a câmera da porta da frente (Receptor de transmissão padrão)

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamProtocol": "progressive_mp4"
}

Mostrar câmera da porta da frente (transporte personalizado do Google Cast)

{
  "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4",
  "cameraStreamReceiverAppId": "1g2f89213hg",
  "cameraStreamAuthToken": "12657342190192783",
  "cameraStreamProtocol": "progressive_mp4"
}

Mostrar a câmera da porta da frente (stream WebRTC).

{
  "cameraStreamIceServers": "[{\"urls\": \"stun:stun.l.partner.com:19302\"},{\"urls\":\"turn:192.158.29.39:3478?transport=udp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"},{\"urls\": \"turn:192.158.29.39:3478?transport=tcp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"}]",
  "cameraStreamSignalingUrl": "https://example.com/signaling/answer",
  "cameraStreamOffer": "o=- 4611731400430051336 2 IN IP4 127.0.0.1...",
  "cameraStreamProtocol": "webrtc"
}

Dispositivo ERRORS

Veja a lista completa de erros e exceções.

Especificações do protocolo WebRTC

Os benefícios de usar WebRTC são a baixa latência e a conversa unidirecional. O WebRTC usa um método POST com um corpo POST e uma resposta no formato JSON.

No momento, o WebRTC é compatível com o Google Nest Smart Display e o Chromecast com dispositivos Google TV.

Esta seção descreve os requisitos ao usar o protocolo de stream WebRTC.

Tipo de dados Parâmetros/definições
Cabeçalho da solicitação de sinalização

O cabeçalho precisa atender a estes requisitos:

  • Autenticação: o cabeçalho de autenticação precisa usar o token de autenticação do valor de retorno GetCameraStream para cameraStreamAuthToken com o tipo de token Bearer.
  • Tipo de conteúdo: application/json.
Parâmetros de solicitação de sinalização

A solicitação pode incluir estes parâmetros:

  • action: string. Os valores válidos são:
    • offer: oferece uma mensagem SDP do provedor.
    • answer: responde a mensagem SDP do fornecedor.
    • end: encerra a sessão atual.
  • deviceId: string. O ID do dispositivo, conforme relatado em uma solicitação SYNC ou EXECUTE.
  • sdp: string. Contém a mensagem do Session Description Protocol para a conexão de peering. O conteúdo é baseado no valor do parâmetro action. Se o action for "end", esse parâmetro poderá ficar vazio.
Parâmetros de resposta de sinalização

A resposta pode incluir estes parâmetros:

  • action: string. O valor da resposta precisa ser do tipo answer.
  • sdp: string. Mensagem SDP para a resposta que responde.

Requisitos e recomendações do WebRTC

  • No momento, o Google oferece suporte à comunicação unidirecional (metade duplex).
  • É preciso oferecer compatibilidade com o agrupamento e o rtcp-mux.
  • Você precisa usar o (D)TLS 1.2 ou uma versão mais recente.
  • O ICE do Trickle não é compatível. Todos os candidatos do ICE precisam ser coletados antes de enviar o SDP.
  • Recomendamos que você inclua os candidatos ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 e TCP/IPv6 para aumentar a probabilidade de uma conexão bem-sucedida.

Resoluções de vídeo compatíveis:

  • Mínimo:480p
  • Máximo:1080p

Codecs de vídeo compatíveis:

  • VP8
  • H.264

Codecs de áudio compatíveis:

  • Opus (codec de preferência)
  • G.711/PCMU.
  • G 722

Compartilhamento de recursos entre origens

O compartilhamento de recursos entre origens (CORS) é um mecanismo que usa cabeçalhos HTTP adicionais para informar aos navegadores que um aplicativo da Web em execução em uma origem pode acessar recursos selecionados de uma origem diferente. O servidor que hospeda cameraStreamSignalingUrl precisa responder com o seguinte cabeçalho:

Access-Control-Allow-Origin: https://www.gstatic.com

Exemplo de solicitação e resposta de sinalização

O exemplo a seguir mostra uma solicitação que o Google envia para seu serviço de sinalização e a resposta correspondente para o Google.

Solicitação
Header:

Authentication: Bearer <cameraStreamAuthToken>
Content-Type: application/json

POST body:

// When camera offer SDP is provided in the execution response, Google provides an answer SDP.
{
  "action": "answer",
  "deviceId": "123",
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// When camera offer SDP is not provided in execution response, Google generates and provides an offer SDP.
{
  "action": "offer",
  "deviceId": "123",
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// Close the current stream session.
{
  "action": "end"
  "deviceId": "123"
}

Resposta
// Response to accept the answer SDP in the request.
Response Code : 200
{}

// Response to provide the answer SDP from the service provider.
Response Code : 200
{
  // When the camera offer SDP is not provided in the execution response,
  // Google provides the answer SDP via the signaling response.
  "action": "answer"
  "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..."
}

// Response to close current session.
Response Code : 200
{}