Esquema de rasgo de CameraStream para la casa inteligente
action.devices.traits.CameraStream
: Esta característica abarca cómo controlar la transmisión de la cámara de un dispositivo.
Esta característica 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 de bebés. Sin embargo, esta característica también se aplica a dispositivos más complejos que tienen una cámara (por ejemplo, dispositivos para videoconferencias o una aspiradora robot con una cámara).
Dispositivo ATTRIBUTES
Los dispositivos con esta característica pueden informar los siguientes atributos como parte de la operación SYNC
. Si quieres obtener más información para controlar intents SYNC
, consulta Entrega de intents.
Atributos | Tipo | Descripción |
---|---|---|
cameraStreamSupportedProtocols |
Matriz |
Obligatorio. Tipos de contenido multimedia compatibles con 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 superficie 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 compatible con varios protocolos, sin necesidad de 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 característica admite los siguientes protocolos de transmisión:
webrtc
: WebRTChls
: Transmisión en vivo HTTPdash
: 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 los protocolos hls
, dash
, smooth_stream
y progressive_mp4
a dispositivos de transmisión (Chromecast, pantallas inteligentes y smart TVs compatibles con Chromecast), se inicia un receptor web de transmisión 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 jugador, personalizar el desarrollo de la marca de la IU e incluir estadísticas. Para habilitar el uso del receptor personalizado e inhabilitar el uso del receptor predeterminado, configura el ID de la app receptora que se genera cuando registras la aplicación de Cast en el campo cameraStreamReceiverAppId
de la respuesta de EXECUTE
.
Para obtener más información sobre las aplicaciones de receptores web personalizados, visita la guía del sitio para desarrolladores.
Dispositivo STATES
Ningún contenido de este tipo
COMMANDS del dispositivo
Los dispositivos con esta característica pueden responder a los siguientes comandos como parte de la operación EXECUTE
. Si quieres obtener más información para controlar 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 debe reproducir en un dispositivo Chromecast. |
SupportedStreamProtocols |
Matriz |
Obligatorio. Tipos o 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 el valor de |
cameraStreamProtocol |
String |
Obligatorio. El formato multimedia al que dirige la URL de la transmisión. Debe ser uno de los protocolos que se enumeran en el parámetro del comando Valores admitidos:
|
Resultados que no son de WebRTC
Resultados | Tipo | Descripción |
---|---|---|
cameraStreamAccessUrl |
String |
Obligatorio. Extremo de URL para recuperar la transmisión en tiempo real en el formato especificado por |
cameraStreamReceiverAppId |
String |
El ID del receptor de transmisión 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 y, luego, intercambiar los protocolos de descripción de sesión (SDP) de la cámara y del cliente. El cliente debe mostrar la URL de señalización que usa |
cameraStreamOffer |
String |
Ofrece protocolo de descripción de sesión (SDP). |
cameraStreamIceServers |
String |
Representa los servidores del Interactive Connectivity Establishment (ICE) que usan una string JSON codificada con la descripción de un RTCIceServer. Si no especificas servidores STUN (Session Traversal Utilities for NAT), la plataforma usará de forma predeterminada los servidores STUN públicos de Google. Los servidores TURN (Recorrido con retransmisiones en torno a NAT) solo son necesarios si no se puede garantizar que las IP o los candidatos de ICE proporcionados sean de acceso público (p.ej., a través de un servidor de medios, un candidato de ICE de host público, un candidato de ICE de retransmisión, etcétera). |
Ejemplos
Muestra la cámara de la puerta principal (receptor de transmisión predeterminado).
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
Mostrar la cámara de la puerta principal (receptor de transmisión 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" }
Dispositivo ERRORS
Consulta la lista completa de errores y excepciones.Especificaciones del protocolo WebRTC
Los beneficios de usar WebRTC son la latencia baja y la comunicación unidireccional. WebRTC usa un método POST
con un cuerpo y una respuesta POST
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 la 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 estos parámetros:
|
Requisitos y recomendaciones de WebRTC
- Actualmente, Google admite la comunicación unidireccional (dúplex medio).
- Debes admitir la agrupación y rtcp-mux.
- Debes usar (D)TLS 1.2 o una versión posterior.
- No se admite el goteo ICE. 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 una conexión exitosa.
Resoluciones de video compatibles:
- Mínimo: 480p
- Máximo: 1080p
Códecs de video compatibles:
- VP8
- H.264
Códecs de audio compatibles:
- Opus (códec preferido)
- G.711/PCMU
- G.722
Uso compartido de recursos entre dominios
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 los recursos seleccionados desde otro. El servidor que aloja cameraStreamSignalingUrl
debería responder con el siguiente encabezado:
Access-Control-Allow-Origin: https://www.gstatic.com
Ejemplo de solicitud de señalización y respuesta
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 {}