Schéma de trait CameraStream pour la maison connectée

action.devices.traits.CameraStream : cette caractéristique explique comment contrôler le flux de la caméra d'un appareil.

Cette caractéristique s'applique aux appareils capables de diffuser des flux vidéo sur des écrans connectés, des appareils compatibles avec Chromecast ou des smartphones. Il s'agit généralement de caméras de sécurité ou de babyphones. Toutefois, cette caractéristique s'applique également aux appareils plus complexes dotés d'une caméra (par exemple, des appareils de visioconférence ou un robot aspirateur avec une caméra).

ATTRIBUTS de l'appareil

Les appareils présentant cette caractéristique peuvent signaler les attributs suivants dans le cadre de l'opération SYNC. Pour en savoir plus sur la gestion des intents SYNC, consultez la section Traitement des intents.

Attributs Type Description
cameraStreamSupportedProtocols Array

Obligatoire.

Types de contenus multimédias compatibles avec le flux de la caméra, classés par ordre de préférence. En règle générale, le premier protocole de ce tableau qui est compatible avec la surface cible est demandé.

[item, ...] String

Type de contenu.

Valeurs acceptées :

hls
Diffusion HTTP en direct
dash
Streaming adaptatif dynamique sur HTTP
smooth_stream
Streaming fluide
progressive_mp4
MP4 progressif (principalement utilisé pour les extraits)
webrtc
WebRTC
cameraStreamNeedAuthToken Valeur booléenne

Obligatoire.

Indique si un jeton d'autorisation sera fourni via cameraStreamAuthToken pour que la surface cible puisse diffuser le flux de la caméra. La durée de vie du jeton est de 12 heures.

Exemples

Caméra compatible avec plusieurs protocoles, sans jeton d'autorisation.

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

Appareil photo compatible avec un seul protocole, nécessitant un jeton d'autorisation.

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

Protocoles de streaming compatibles

Cette caractéristique est compatible avec les protocoles de streaming suivants:

Lorsque vous diffusez des contenus en streaming avec les protocoles hls, dash, smooth_stream et progressive_mp4 sur des appareils Cast (Chromecast, écrans connectés et smart TV compatibles Chromecast), un récepteur Web Cast est lancé pour traiter le flux et l'afficher sur l'appareil. Nous recommandons au développeur de créer un récepteur Web personnalisé pour permettre l'accès aux outils de débogage, personnaliser le comportement du lecteur, personnaliser le branding de l'interface utilisateur et inclure des données analytiques. Pour activer l'utilisation du récepteur personnalisé et désactiver l'utilisation du récepteur par défaut, définissez l'ID d'application du récepteur généré lorsque vous enregistrez votre application Cast dans le champ cameraStreamReceiverAppId de la réponse EXECUTE.

Pour en savoir plus sur les applications de récepteur Web personnalisé, consultez le guide du site pour les développeurs.

ÉTATS DE L'APPAREIL

Aucune.

COMMANDES DE L'APPAREIL

Les appareils dotés de cette caractéristique peuvent répondre aux commandes suivantes dans le cadre de l'opération EXECUTE. Pour en savoir plus sur la gestion des intents EXECUTE, consultez la section Traitement des intents.

action.devices.commands.GetCameraStream

Paramètres

Paramètres Type Description
StreamToChromecast Valeur booléenne

Obligatoire.

Lire ou non le flux sur un appareil Chromecast.

SupportedStreamProtocols Array

Obligatoire.

Types/formats multimédias compatibles avec la destination souhaitée.

[item, ...] String

Type de contenu.

Valeurs acceptées :

hls
Diffusion HTTP en direct
dash
Streaming adaptatif dynamique sur HTTP
smooth_stream
Streaming fluide
progressive_mp4
MP4 progressif (principalement utilisé pour les extraits)
webrtc
WebRTC

Résultats

Résultats Type Description
cameraStreamAuthToken String

Jeton d'authentification permettant au destinataire spécifique d'autoriser l'accès au flux. Si cameraStreamNeedAuthToken est défini sur "true" et que cette valeur n'est pas fournie, les identifiants OAuth de l'utilisateur sont utilisés comme jeton d'authentification. La durée de vie du jeton est de 12 heures.

cameraStreamProtocol String

Obligatoire.

Format multimédia auquel l'URL du flux pointe. Il doit s'agir de l'un des protocoles listés dans le paramètre de commande SupportedStreamProtocols.

Valeurs acceptées :

hls
HTTP Live Streaming
dash
Streaming adaptatif dynamique sur HTTP
smooth_stream
Streaming fluide
progressive_mp4
MP4 progressif (principalement utilisé pour les extraits)
webrtc
WebRTC

Résultats non WebRTC

Résultats Type Description
cameraStreamAccessUrl String

Obligatoire.

Point de terminaison de l'URL permettant de récupérer le flux en temps réel au format spécifié par cameraStreamProtocol.

cameraStreamReceiverAppId String

ID du récepteur de diffusion pour traiter le flux de la caméra lorsque le paramètre StreamToChromecast est défini sur "true". Le récepteur par défaut sera utilisé si aucun n'est fourni.

Résultats WebRTC

Résultats Type Description
cameraStreamSignalingUrl String

Obligatoire.

Point de terminaison d'URL permettant de récupérer et d'échanger les protocoles de description de session (SDP) de la caméra et du client. Le client doit renvoyer l'URL de signalisation qui utilise cameraStreamAuthToken comme jeton d'authentification dans l'en-tête de la requête.

cameraStreamOffer String

Proposez un protocole SDP (Session Description Protocol).

cameraStreamIceServers String

Représente les serveurs ICE (Interactive Connectivity Establishment) à l'aide d'une chaîne JSON encodée avec la description d'un RTCIceServer. Si vous ne spécifiez pas de serveurs STUN (Session Traversal Utilities for NAT), la plate-forme utilise par défaut les serveurs STUN publics de Google. Les serveurs TURN (Traversal Using Relays around NAT) ne sont nécessaires que si vous ne pouvez pas garantir que les adresses IP/candidats ICE fournis seront accessibles au public (par exemple, via un serveur multimédia, un candidat ICE d'hôte public, un candidat ICE de relais, etc.).

Exemples

Afficher la caméra de la porte d'entrée (récepteur Cast par défaut)

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

Afficher la caméra de la porte d'entrée (récepteur Cast personnalisé)

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

Afficher la caméra de la porte d'entrée (flux 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"
}

ERREURS de l'appareil

Consultez la liste complète des erreurs et exceptions.

Spécifications de protocole WebRTC

L'utilisation de WebRTC présente les avantages suivants : faible latence et conversation à sens unique. WebRTC utilise une méthode POST avec un corps POST et une réponse au format JSON.

WebRTC est actuellement compatible avec les appareils Google Nest Smart Display et Chromecast avec Google TV.

Cette section décrit les exigences à respecter lorsque vous utilisez le protocole de streaming WebRTC.

Type de données Paramètres/Définitions
En-tête de requête de signalement

L'en-tête doit répondre aux exigences suivantes :

  • Authentification : l'en-tête d'authentification doit utiliser le jeton d'authentification de la valeur renvoyée par GetCameraStream pour cameraStreamAuthToken avec le type de jeton Bearer.
  • Content-Type : application/json.
Paramètres de requête de signalisation

La requête peut inclure les paramètres suivants:

  • action : chaîne. Les valeurs valides sont les suivantes :
    • offer : message SDP d'offre du fournisseur.
    • answer : réponse au message SDP du fournisseur.
    • end : fermez la session en cours.
  • deviceId : chaîne. ID de l'appareil indiqué dans une requête SYNC ou EXECUTE.
  • sdp: chaîne. Contient le message du protocole de description de session pour la connexion peer. Le contenu est basé sur la valeur du paramètre action. Si action est "end", ce paramètre peut être vide.
Paramètres de réponse de signalisation

La réponse peut inclure les paramètres suivants :

  • action : chaîne. La valeur de la réponse doit être de type answer.
  • sdp : chaîne. Message SDP pour la réponse.

Exigences et recommandations concernant WebRTC

  • Google accepte actuellement la communication à sens unique (semi-duplex).
  • Vous devez prendre en charge le regroupement et rtcp-mux.
  • Vous devez utiliser (D)TLS 1.2 ou une version ultérieure.
  • Trickle ICE n'est pas pris en charge. Tous les candidats ICE doivent être collectés avant d'envoyer le SDP.
  • Nous vous recommandons vivement d'inclure des candidats ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 et TCP/IPv6 pour augmenter les chances de réussite de la connexion.

Résolutions vidéo compatibles :

  • Min.:480p
  • Maximum: 1080p

Codecs vidéo compatibles:

  • VP8
  • H.264

Codecs audio compatibles:

  • Opus (codec recommandé)
  • G.711/PCMU
  • G.722

Partage de ressources entre origines

Le partage des ressources entre origines multiples (CORS, Cross-Origin Resource Sharing) est un mécanisme qui utilise des en-têtes HTTP supplémentaires pour indiquer aux navigateurs d'autoriser une application Web s'exécutant à une origine à accéder à des ressources sélectionnées depuis une autre origine. Le serveur hébergeant cameraStreamSignalingUrl doit répondre avec l'en-tête suivant:

Access-Control-Allow-Origin: https://www.gstatic.com

Exemple de requête et de réponse de signalisation

L'exemple suivant montre une requête que Google envoie à votre service de signalisation et la réponse correspondante à Google.

Demande
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"
}
Réponse
// 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
{}