Te damos la bienvenida al Centro para desarrolladores de Google Home, el nuevo destino para aprender a desarrollar acciones para el hogar inteligente. Nota: Continuarás compilando acciones en la Consola de Actions.
Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Esquema de la función de cámara inteligente de Home Stream

action.devices.traits.CameraStream: Esta característica describe 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. Por lo general, son cámaras de seguridad o cámaras 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 videoconferencia o un robot de aspiradora 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 manejar los intents SYNC, consulta Entrega de intents.

Atributos Tipo Descripción
cameraStreamSupportedProtocols Matriz

Obligatorio.

Tipos de medios compatibles para la transmisión de la cámara, ordenados por preferencia. Por lo general, se solicita el primer protocolo de este arreglo que es compatible con la superficie de destino.

[item, ...] String

Tipo de medio.

Valores admitidos:

hls
Transmisión en vivo HTTP
dash
Transmisión adaptable y dinámica a través de HTTP
smooth_stream
Transmisión fluida
progressive_mp4
MP4 progresivo (principalmente utilizado para clips)
webrtc
WebRTC
cameraStreamNeedAuthToken Booleano

Obligatorio.

Indica si se proporcionará un token de autenticación a través de cameraStreamAuthToken para que la superficie de destino transmita el feed de la cámara.

Ejemplos

La cámara es compatible con varios protocolos y no requiere un token de autenticación.

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

Cámara que admite un solo protocolo y 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:

Dispositivo STATEs

Ninguno

Dispositivo COMMAND

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 manejar 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/medios de medios compatibles con el destino deseado

[item, ...] String

Tipo de medio.

Valores admitidos:

hls
Transmisión en vivo HTTP
dash
Transmisión adaptable y dinámica a través de HTTP
smooth_stream
Transmisión fluida
progressive_mp4
MP4 progresivo (principalmente utilizado para clips)
webrtc
WebRTC

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 cameraStreamNeedAuthToken es verdadero y no se proporciona este valor, se usarán las credenciales de OAuth del usuario como token de autenticación.

cameraStreamProtocol String

Obligatorio.

El formato de medios al que apunta la URL de la transmisión. Debe ser uno de los protocolos que se enumeran en el parámetro de comando SupportedStreamProtocols.

Valores admitidos:

hls
Transmisión en vivo HTTP
dash
Transmisión adaptable y dinámica a través de HTTP
smooth_stream
Transmisión fluida
progressive_mp4
MP4 progresivo (principalmente utilizado para clips)
webrtc
WebRTC

Resultados que no sean 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 cameraStreamProtocol

cameraStreamReceiverAppId String

ID de receptor de transmisión para procesar la transmisión de la cámara cuando el parámetro StreamToChromecast es verdadero; se usará el receptor predeterminado si no se proporciona.

Resultados de WebRTC

Resultados Tipo Descripción
cameraStreamSignalingUrl String

Obligatorio.

Extremo de URL para recuperar e intercambiar protocolos de descripción de sesión (SDP) de cámaras y clientes El cliente debe mostrar la URL de señalización que usa cameraStreamAuthToken como el token de autenticación en el encabezado de la solicitud.

cameraStreamOffer String

Protocolo de descripción de sesiones de oferta (SDP).

cameraStreamIceServers String

Representa los servidores del establecimiento de conectividad interactiva (ICE) mediante una string JSON codificada con la descripción de un RTCIceServer. Si no especificas los servidores de STUN (Session Traversal Utilities for NAT), la plataforma usa de forma predeterminada los servidores de STUN públicos de Google. Los servidores TURN (Recorrido mediante relés en torno a NAT) solo son necesarios si no puedes garantizar que las direcciones IP o los candidatos de ICE proporcionados sean de acceso público (p.ej., mediante un servidor de medios, un candidato de ICE del 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"
}

Muestra 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"
}

Muestra 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 las conversaciones unidireccionales y la latencia baja. WebRTC usa un método POST con un cuerpo POST y una respuesta en formato JSON.

WebRTC es compatible con la pantalla inteligente de Google Nest y los dispositivos Chromecast con Google TV.

En esta sección, se describen los requisitos para usar el protocolo de transmisión WebRTC.

Tipo de datos Parámetros/Definiciones
Encabezado de la solicitud de señalización

El encabezado debe cumplir con estos requisitos:

  • Autenticación: El encabezado de autenticación debe usar el token de autenticación del valor de retorno GetCameraStream para cameraStreamAuthToken con el tipo de token Bearer.
  • Content-Type: application/json
Parámetros de solicitud de señalización

La solicitud puede incluir estos parámetros:

  • action: String. Los valores válidos son los siguientes:
    • offer: Mensaje del proveedor que brinda el SDP.
    • answer: responde el mensaje SDP del proveedor.
    • end: Cierra la sesión actual.
  • deviceId: String. El ID de dispositivo, como se informa en una solicitud SYNC o EXECUTE.
  • sdp: String. Contiene el mensaje del protocolo de descripción de sesión para la conexión del par. El contenido se basa en el valor del parámetro action. Si el action es "end", este parámetro puede estar vacío.
Parámetros de respuesta de señalización

La respuesta puede incluir los siguientes parámetros:

  • action: String. El valor de la respuesta debe ser del tipo answer.
  • sdp: String. Mensaje SDP para la respuesta de respuesta.

Requisitos y recomendaciones de WebRTC

  • Actualmente, Google admite la comunicación unidireccional (medio dúplex).
  • Debes admitir la agrupación y rtcp-mux.
  • Debes usar (D)TLS 1.2 o una versión posterior.
  • No se admite Trickle ICE. Todos los candidatos de ICE se deben reunir antes de enviar el SDP.
  • Se recomienda que incluya candidatos ICE en UDP/IPv4, TCP/IPv4, UDP/IPv6 y TCP/IPv6 para aumentar la probabilidad de una conexión exitosa.

Resoluciones de video compatibles:

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

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 indicar a los navegadores que permiten que una aplicación web que se ejecuta en un origen acceda a los recursos seleccionados desde un origen diferente. El servidor que aloja cameraStreamSignalingUrl debe 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.

Solicitud
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"
}

Respuesta
// 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
{}