Esquema de atributo do recurso de transmissão de câmera da casa inteligente

action.devices.traits.CameraStream: essa característica abrange como controlar o fluxo da câmera de um dispositivo.

Essa característica pertence a dispositivos que podem transmitir feeds de vídeo para telas inteligentes, dispositivos com Chromecast ou smartphones. Em geral, são câmeras de segurança ou de monitoramento infantil. Mas essa característica também se aplica a dispositivos mais complexos que têm uma câmera, como 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 o processamento de intents SYNC, consulte Fulfillment de intents.

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 nessa matriz que é compatível com a superfície de destino é solicitado.

[item, ...] String

Tipo de mídia.

Valores aceitos:

hls
HTTP Live Streaming
dash
Streaming adaptável dinâmico sobre 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 será fornecido por cameraStreamAuthToken para que a plataforma de destino transmita o feed da câmera. A vida útil do token é de 12 horas.

Exemplos

Câmera com suporte a vários protocolos, sem exigir um token de autenticação.

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

Câmera com suporte a um único protocolo, exigindo um token de autenticação.

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

Protocolos de streaming compatíveis

Essa característica oferece suporte aos seguintes protocolos de streaming:

Ao fazer streaming de protocolos hls,dash,smooth_stream e progressive_mp4 para dispositivos Cast (Chromecasts, telas inteligentes e smart TVs com Chromecast), um Cast Web Receiver é iniciado para processar o stream e renderizá-lo no dispositivo. É recomendável que o desenvolvedor crie um Custom Web Receiver para permitir o acesso a ferramentas de depuração, personalizar o comportamento do jogador, personalizar o branding da interface e incluir análises. Para ativar o uso do receptor personalizado e desativar o uso do receptor padrão, defina o ID do app do receptor que é gerado quando você registra seu aplicativo do Google Cast no campo cameraStreamReceiverAppId da resposta EXECUTE.

Para saber mais sobre os aplicativos de receptor da Web personalizado, acesse o guia do site para desenvolvedores.

ESTADOS DO DISPOSITIVO

Nenhum.

COMANDOS DO dispositivo

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

action.devices.commands.GetCameraStream

Parâmetros

Parâmetros Tipo Descrição
StreamToChromecast Booleano

Obrigatório.

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

SupportedStreamProtocols Array

Obrigatório.

Tipos/formatos de mídia compatíveis com o destino desejado.

[item, ...] String

Tipo de mídia.

Valores aceitos:

hls
HTTP Live Streaming
dash
Streaming adaptável dinâmico sobre 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 a fim de autorizar o acesso ao stream. Se cameraStreamNeedAuthToken for verdadeiro e esse valor não for fornecido, as credenciais OAuth do usuário serão usadas como o token de autenticação. A vida útil do token é de 12 horas.

cameraStreamProtocol String

Obrigatório.

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

Valores aceitos:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Streaming suave
progressive_mp4
MP4 progressivo (usado principalmente para clipes)
webrtc
WebRTC

Resultados nã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

O ID do receptor do Cast para processar o stream da câmera quando o parâmetro StreamToChromecast é verdadeiro. Se não for fornecido, o receptor padrão será usado.

Resultados WebRTC

Resultados Tipo Descrição
cameraStreamSignalingUrl String

Obrigatório.

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

cameraStreamOffer String

Ofereça um protocolo de descrição de sessão (SDP).

cameraStreamIceServers String

Representa os servidores de estabelecimento de conectividade interativa (ICE, na sigla em inglês) usando uma string JSON codificada com a descrição de um RTCIceServer. Se você não especificar servidores STUN (Utilitários de travessia de sessão para NAT), a plataforma vai usar os servidores STUN públicos do Google por padrão. Os servidores TURN (Travessia usando relés em torno de NAT) são necessários apenas se você não puder garantir que os IPs / candidatos ICE fornecidos serão acessíveis publicamente (por exemplo, por um servidor de mídia, candidato ICE de host público, candidato ICE de retransmissão etc.).

Exemplos

Mostrar a câmera da porta da frente (receptor do Google Cast padrão).

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

Mostrar a câmera da porta da frente (receptor de transmissão personalizado).

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

Mostrar a câmera da porta da frente (fluxo do 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"
}

ERROS no dispositivo

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

Especificações do protocolo WebRTC

Os benefícios do uso do 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.

Atualmente, 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 transmissão do 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: mensagem SDP de oferta do provedor.
    • answer: responde à mensagem SDP do provedor.
    • end: fecha a sessão atual.
  • deviceId: string. O ID do dispositivo conforme informado em uma solicitação SYNC ou EXECUTE.
  • sdp: string. Contém a mensagem do protocolo de descrição de sessão para a conexão de peer. O conteúdo é baseado no valor do parâmetro action. Se o action for "end", esse parâmetro poderá estar 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.

Requisitos e recomendações do WebRTC

  • No momento, o Google oferece suporte à comunicação unidirecional (half-duplex).
  • É necessário oferecer suporte a agrupamento e rtcp-mux.
  • É necessário usar o (D)TLS 1.2 ou mais recente.
  • Não há suporte para Trickle ICE. Todos os candidatos ICE precisam estar reunidos antes de enviar o SDP.
  • É altamente recomendável incluir 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 (códec preferido)
  • G.711/PCMU
  • G.722

Compartilhamento de recursos entre origens

O compartilhamento de recursos entre origens (CORS, na sigla em inglês) é um mecanismo que usa cabeçalhos HTTP adicionais para permitir que um aplicativo da Web em execução em uma origem acesse recursos selecionados de outra origem. 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 ao 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
{}