Esquema de atributos de CameraStream de la casa inteligente
action.devices.traits.CameraStream
: Esta función abarca cómo controlar la transmisión de la cámara de un dispositivo.
Esta función pertenece a los dispositivos que pueden transmitir feeds de video a pantallas inteligentes, dispositivos compatibles con Chromecast o smartphones. En general, se trata de cámaras de seguridad o para bebés. Sin embargo, esta característica también se aplica a dispositivos más complejos que tienen una cámara (por ejemplo, dispositivos de videoconferencias o una aspiradora robot con una cámara).
ATRIBUTOS del dispositivo
Los dispositivos con esta característica pueden informar los siguientes atributos como parte de la operación SYNC
. Para obtener más información sobre cómo controlar los intents SYNC
, consulta Entrega de intents.
Atributos | Tipo | Descripción |
---|---|---|
cameraStreamSupportedProtocols |
Matriz |
Obligatorio. Son los tipos de contenido multimedia compatibles para la transmisión de la cámara, ordenados por preferencia. Por lo general, se solicita el primer protocolo de este array que es compatible con la plataforma de destino. |
[item, ...] |
String |
Tipo de medio. Valores admitidos:
|
cameraStreamNeedAuthToken |
Booleano |
Obligatorio. Indica si se proporcionará un token de autenticación a través de |
Ejemplos
Cámara con compatibilidad con varios protocolos que no requiere un token de autenticación
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
Cámara compatible con un solo protocolo que requiere un token de autenticación
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
Protocolos de transmisión compatibles
Esta función admite los siguientes protocolos de transmisión:
webrtc
: WebRTChls
: Transmisión HTTP en vivodash
: Transmisión adaptable y dinámica a través de HTTPsmooth_stream
: Transmisión fluidaprogressive_mp4
: MP4 progresivo (se usa principalmente para clips)
Cuando se transmiten protocolos hls
,dash
,smooth_stream
y progressive_mp4
a dispositivos Cast (Chromecast, pantallas inteligentes y smart TVs compatibles con Chromecast), se inicia un receptor web de Cast para procesar la transmisión y renderizarla en el dispositivo. Se recomienda que el desarrollador cree un receptor web personalizado para habilitar el acceso a las herramientas de depuración, personalizar el comportamiento del reproductor, personalizar el desarrollo de la marca de la IU y, además, incluir estadísticas. Para habilitar el uso del receptor personalizado y inhabilitar el uso del receptor predeterminado, configura el ID de app del receptor que se genera cuando registras tu aplicación de Cast en el campo cameraStreamReceiverAppId
de la respuesta EXECUTE
.
Para obtener más información sobre las aplicaciones de Custom Web Receiver, consulta la guía del sitio para desarrolladores.
ESTADOS DEL DISPOSITIVO
Ninguno
COMANDOS del dispositivo
Los dispositivos con esta característica pueden responder a los siguientes comandos como parte de la operación EXECUTE
. Para obtener más información sobre cómo controlar los intents EXECUTE
, consulta Entrega de intents.
action.devices.commands.GetCameraStream
Parámetros
Parámetros | Tipo | Descripción |
---|---|---|
StreamToChromecast |
Booleano |
Obligatorio. Indica si la transmisión se reproducirá en un dispositivo Chromecast. |
SupportedStreamProtocols |
Matriz |
Obligatorio. Tipos/formatos de medios compatibles con el destino deseado. |
[item, ...] |
String |
Tipo de medio. Valores admitidos:
|
Resultados
Resultados | Tipo | Descripción |
---|---|---|
cameraStreamAuthToken |
String |
Un token de autenticación para que el receptor específico autorice el acceso a la transmisión. Si |
cameraStreamProtocol |
String |
Obligatorio. Es el formato multimedia al que apunta la URL de transmisión. Debe ser uno de los protocolos que se indican en el parámetro del comando Valores admitidos:
|
Resultados que no son de WebRTC
Resultados | Tipo | Descripción |
---|---|---|
cameraStreamAccessUrl |
String |
Obligatorio. Es el extremo de URL para recuperar la transmisión en tiempo real en el formato que especifica |
cameraStreamReceiverAppId |
String |
ID del receptor de Cast para procesar la transmisión de la cámara cuando el parámetro |
Resultados de WebRTC
Resultados | Tipo | Descripción |
---|---|---|
cameraStreamSignalingUrl |
String |
Obligatorio. Extremo de URL para recuperar e intercambiar los protocolos de descripción de sesión (SDP) de cámara y cliente El cliente debe mostrar la URL de señalización que usa |
cameraStreamOffer |
String |
Protocolo de descripción de sesión de oferta (SDP) |
cameraStreamIceServers |
String |
Representa los servidores de establecimiento de conectividad interactiva (ICE) con una cadena JSON codificada con la descripción de un RTCIceServer. Si no especificas servidores STUN (utilidades de sesión transversal para NAT), la plataforma usará de forma predeterminada los servidores STUN públicos de Google. Los servidores TURN (Recorrido mediante relés en torno a NAT) solo son obligatorios si no puedes garantizar que las IP o los candidatos de ICE proporcionados sean de acceso público (p. ej., a través de un servidor de contenido multimedia, un candidato de ICE de host público, un candidato de ICE de relé, etcétera). |
Ejemplos
Muestra la cámara de la puerta principal (receptor de Cast predeterminado).
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
Mostrar la cámara de la puerta principal (receptor de Cast personalizado)
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamReceiverAppId": "1g2f89213hg", "cameraStreamAuthToken": "12657342190192783", "cameraStreamProtocol": "progressive_mp4" }
Mostrar la cámara de la puerta principal (transmisión de 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" }
ERRORES del dispositivo
Consulta la lista completa de errores y excepciones.Especificaciones del protocolo WebRTC
Los beneficios de usar WebRTC son la baja latencia y la conversación unidireccional. WebRTC usa un método POST
con un cuerpo POST
y una respuesta en formato JSON.
Actualmente, WebRTC es compatible con la pantalla inteligente Google Nest y los dispositivos Chromecast con Google TV.
En esta sección, se describen los requisitos para usar el protocolo de transmisión de WebRTC.
Tipo de datos | Parámetros/definiciones |
---|---|
Encabezado de solicitud de señalización |
El encabezado debe cumplir con estos requisitos:
|
Parámetros de solicitud de señalización | La solicitud puede incluir estos parámetros:
|
Parámetros de respuesta de señalización | La respuesta puede incluir los siguientes parámetros:
|
Requisitos y recomendaciones de WebRTC
- Actualmente, Google admite la comunicación unidireccional (dúplex medio).
- Debes admitir los paquetes y rtcp-mux.
- Debes usar (D)TLS 1.2 o versiones posteriores.
- No se admite Trickle ICE. Primero, se deben recopilar todos los candidatos de ICE antes de enviar el SDP.
- Te recomendamos que incluyas candidatos de ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 y TCP/IPv6 para aumentar la probabilidad de que se establezca una conexión correcta.
Resoluciones de video compatibles:
- Mínimo: 480p
- Máxima: 1080p
Códecs de video compatibles:
- VP8
- H.264
Códecs de audio compatibles:
- Opus (códec preferido)
- G.711 y PCMU
- G.722
Uso compartido de recursos multiorigen
El uso compartido de recursos multiorigen (CORS) es un mecanismo que usa encabezados HTTP adicionales para indicarles a los navegadores que permitan que una aplicación web que se ejecuta en un origen acceda a recursos seleccionados de otro. El servidor que aloja a cameraStreamSignalingUrl
debería responder con el siguiente encabezado:
Access-Control-Allow-Origin: https://www.gstatic.com
Ejemplo de solicitud y respuesta de señalización
En el siguiente ejemplo, se muestra una solicitud que Google envía a tu servicio de señalización y la respuesta correspondiente a 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 {}