Esquema da câmera do Stream da casa inteligente
action.devices.traits.CameraStream
: essa característica aborda como controlar o fluxo da câmera de um dispositivo.
Essa característica pertence a dispositivos que podem fazer streaming de feeds de vídeo para smart displays, dispositivos compatíveis com Chromecast ou smartphones. De modo geral, são câmeras de segurança ou para bebês. Mas essa característica também se aplica a dispositivos mais complexos que possuem uma câmera, como dispositivos de videoconferência ou um robô aspirador com uma câmera.
ATRIBUTOS do dispositivo
Os dispositivos com essa característica podem informar os seguintes atributos como parte da operação SYNC
. Para saber
mais sobre como lidar com 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 nessa matriz que é compatível com a superfície de destino é solicitado. |
[item, ...] |
String |
Tipo de mídia. Os valores suportados são:
|
cameraStreamNeedAuthToken |
Booleano |
Obrigatório. Indica se um token de autenticação vai ser fornecido via |
Exemplos
A câmera é compatível com vários protocolos e não requer um token de autenticação.
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
Câmera compatível com um único protocolo que exige 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:
webrtc
: WebRTChls
: HTTP Live Streamingdash
: streaming adaptável dinâmico sobre HTTPsmooth_stream
: streaming contínuoprogressive_mp4
: MP4 progressivo (usado mais para clipes)
STATES do dispositivo
Nenhuma.
Dispositivo COMMANDS
Os dispositivos com essa característica podem responder aos comandos a seguir como parte da operação EXECUTE
. Para saber
mais sobre como lidar com intents EXECUTE
, consulte
fulfillment de intent.
action.devices.commands.GetCameraStream
Parâmetros
Parâmetros | Tipo | Descrição |
---|---|---|
StreamToChromecast |
Booleano |
Obrigatório. Se o stream será reproduzido 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. Os valores suportados são:
|
Resultados
Resultados | Tipo | Descrição |
---|---|---|
cameraStreamAuthToken |
String |
Um token de autenticação para o destinatário específico para autorizar o acesso ao stream. Se |
cameraStreamProtocol |
String |
Obrigatório. O formato de mídia para o qual o URL de stream aponta. Ele precisa ser um dos protocolos listados no parâmetro de comando Os valores suportados são:
|
Resultados não WebRTC
Resultados | Tipo | Descrição |
---|---|---|
cameraStreamAccessUrl |
String |
Obrigatório. Endpoint do URL para recuperar o stream em tempo real no formato especificado por |
cameraStreamReceiverAppId |
String |
O ID do receptor do Google Cast para processar o stream da câmera quando o parâmetro |
Resultados WebRTC
Resultados | Tipo | Descrição |
---|---|---|
cameraStreamSignalingUrl |
String |
Obrigatório. Endpoint do 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 o |
cameraStreamOffer |
String |
Protocolo de descrição de sessão de oferta (SDP, na sigla em inglês). |
cameraStreamIceServers |
String |
Representa os servidores Interactive Connectivity Establishment (ICE) usando uma string JSON codificada com a descrição de um RTCIceServer. Se você não especificar os servidores STUN (Session Traversal Utilities for NAT), a plataforma usará como padrão os servidores STUN públicos do Google. Os servidores TURN (Traversal Using Relays around NAT) só serão necessários se não for possível garantir que os IPs / ICE candidatos fornecidos sejam acessíveis publicamente (por exemplo, por meio de um servidor de mídia, candidato ICE ao host público, candidato 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 a câmera da porta da frente (receptor personalizado do Google Cast).
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamReceiverAppId": "1g2f89213hg", "cameraStreamAuthToken": "12657342190192783", "cameraStreamProtocol": "progressive_mp4" }
Mostrar 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.
Atualmente, o WebRTC é compatível com o smart display Google Nest 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:
|
Parâmetros de solicitação de sinalização | A solicitação pode incluir estes parâmetros:
|
Parâmetros de resposta de sinalização | A resposta pode incluir estes parâmetros:
|
Requisitos e recomendações do WebRTC
- Atualmente, o Google oferece suporte à comunicação unidirecional (metade duplex).
- Você deve oferecer suporte ao agrupamento e ao rtcp-mux.
- Use (D)TLS 1.2 ou posterior.
- O Trickle ICE não é compatível. Todos os candidatos ICE precisam ser coletados antes de enviar o SDP.
- É altamente recomendável incluir 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 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 informar aos navegadores que um aplicativo da Web executado 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.
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" }
// 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 {}