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 :
|
cameraStreamNeedAuthToken |
Valeur booléenne |
Obligatoire. Indique si un jeton d'autorisation sera fourni via |
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:
webrtc
: WebRTChls
: diffusion HTTP en directdash
: streaming adaptatif dynamique sur HTTPsmooth_stream
: Streaming fluideprogressive_mp4
: MP4 progressif (principalement utilisé pour les extraits)
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 :
|
Résultats
Résultats | Type | Description |
---|---|---|
cameraStreamAuthToken |
String |
Jeton d'authentification permettant au destinataire spécifique d'autoriser l'accès au flux. Si |
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 Valeurs acceptées :
|
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 |
cameraStreamReceiverAppId |
String |
ID du récepteur de diffusion pour traiter le flux de la caméra lorsque le paramètre |
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 |
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 :
|
Paramètres de requête de signalisation | La requête peut inclure les paramètres suivants:
|
Paramètres de réponse de signalisation | La réponse peut inclure les paramètres suivants :
|
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.
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 {}