Smart Home CameraStream Trait Schema
action.devices.traits.CameraStream
: Mit diesem Attribut wird festgelegt, wie der Kamerastream eines Geräts gesteuert wird.
Diese Eigenschaft gilt für Geräte, die Videofeeds auf Smart Displays, Chromecast-fähige Geräte oder Smartphones streamen können. Im Großen und Ganzen sind das Überwachungskameras oder Babykameras. Diese Eigenschaft gilt jedoch auch für komplexere Geräte mit einer Kamera, z. B. Videokonferenzgeräte oder einen Staubsaugerroboter mit Kamera.
Geräteattribute
Geräte mit diesem Merkmal können die folgenden Attribute im Rahmen des Vorgangs SYNC
melden. Weitere Informationen zum Umgang mit SYNC
-Intents finden Sie unter Intent-Ausführung.
Attribute | Typ | Beschreibung |
---|---|---|
cameraStreamSupportedProtocols |
Array |
Erforderlich. Unterstützte Medientypen für den Kamerastream, nach Präferenz sortiert. Normalerweise wird das erste Protokoll in diesem Array angefordert, das mit der Zieloberfläche kompatibel ist. |
[item, ...] |
String |
Medientyp. Unterstützte Werte:
|
cameraStreamNeedAuthToken |
Boolesch |
Erforderlich. Gibt an, ob über |
Beispiele
Kamera mit Unterstützung mehrerer Protokolle, für die kein Authentifizierungstoken erforderlich ist.
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
Kamera, die ein einzelnes Protokoll unterstützt und ein Authentifizierungstoken erfordert
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
Unterstützte Streamingprotokolle
Diese Eigenschaft unterstützt die folgenden Streamingprotokolle:
webrtc
: WebRTChls
: HTTP Live Streamingdash
: Dynamic Adaptive Streaming over HTTPsmooth_stream
: flüssiges Streamingprogressive_mp4
: Progressive MP4 (hauptsächlich für Clips verwendet)
Beim Streaming von hls
-, dash
-, smooth_stream
- und progressive_mp4
-Protokollen auf Cast-Geräte (Chromecast, Smart Displays und Chromecast-fähige Smart-TVs) wird ein Cast-Webreceiver gestartet, um den Stream zu verarbeiten und auf dem Gerät zu rendern. Es wird empfohlen, einen benutzerdefinierten Webreceiver zu erstellen, um den Zugriff auf Debugging-Tools zu ermöglichen, das Playerverhalten anzupassen, das UI-Branding anzupassen und Analysen einzubinden. Wenn du die Verwendung des benutzerdefinierten Empfängers aktivieren und die Verwendung des Standardempfängers deaktivieren möchtest, setze die Empfänger-App-ID, die beim Registrieren deiner Cast-Anwendung generiert wird, im Feld cameraStreamReceiverAppId
der EXECUTE
-Antwort.
Weitere Informationen zu benutzerdefinierten Webreceiver-Anwendungen findest du in diesem Leitfaden.
GERÄTESTATUS
Keine.
BEFEHLE für Geräte
Geräte mit dieser Eigenschaft können im Rahmen des Vorgangs EXECUTE
auf die folgenden Befehle reagieren. Weitere Informationen zum Umgang mit EXECUTE
-Intents finden Sie unter Intent-Auftragsausführung.
action.devices.commands.GetCameraStream
Parameter
Parameter | Typ | Beschreibung |
---|---|---|
StreamToChromecast |
Boolesch |
Erforderlich. Gibt an, ob der Stream auf einem Chromecast-Gerät wiedergegeben wird. |
SupportedStreamProtocols |
Array |
Erforderlich. Medientypen/-formate, die vom gewünschten Ziel unterstützt werden. |
[item, ...] |
String |
Medientyp. Unterstützte Werte:
|
Ergebnisse
Ergebnisse | Typ | Beschreibung |
---|---|---|
cameraStreamAuthToken |
String |
Ein Authentifizierungstoken für den jeweiligen Empfänger, um den Zugriff auf den Stream zu autorisieren. Wenn |
cameraStreamProtocol |
String |
Erforderlich. Das Medienformat, auf das die Stream-URL verweist. Es sollte sich um eines der Protokolle handeln, die im Befehlsparameter Unterstützte Werte:
|
Nicht WebRTC-Ergebnisse
Ergebnisse | Typ | Beschreibung |
---|---|---|
cameraStreamAccessUrl |
String |
Erforderlich. URL-Endpunkt zum Abrufen des Echtzeitstreams im von |
cameraStreamReceiverAppId |
String |
ID des Empfängers für die Übertragung, um den Kamerastream zu verarbeiten, wenn der Parameter |
WebRTC-Ergebnisse
Ergebnisse | Typ | Beschreibung |
---|---|---|
cameraStreamSignalingUrl |
String |
Erforderlich. URL-Endpunkt zum Abrufen und Austauschen von Session Description Protocol-Protokollen (SDPs) für Kameras und Clients. Der Client sollte die Signalisierungs-URL zurückgeben, die |
cameraStreamOffer |
String |
Biete das Session Description Protocol (SDP) an. |
cameraStreamIceServers |
String |
Stellt die ICE-Server (Interactive Connectivity Einrichtung) mithilfe eines codierten JSON-Strings mit der Beschreibung eines RTCIceServer dar. Wenn Sie keine STUN-Server (Session Traversal Utilities for NAT) angeben, verwendet die Plattform standardmäßig die öffentlichen STUN-Server von Google. TURN-Server (Traversal Using Relays around NAT) sind nur erforderlich, wenn Sie nicht garantieren können, dass die angegebenen IP-Adressen/ICE-Kandidaten öffentlich zugänglich sind (z. B. über einen Mediaserver, einen öffentlichen Host-ICE-Kandidaten oder einen ICE-Relay-Kandidaten). |
Beispiele
Zeig mir das Bild der Haustürkamera (Standard-Cast-Empfänger).
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
Zeig mir das Bild der Haustürkamera (benutzerdefinierter Cast-Empfänger)
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamReceiverAppId": "1g2f89213hg", "cameraStreamAuthToken": "12657342190192783", "cameraStreamProtocol": "progressive_mp4" }
Zeig mir das Bild der Haustürkamera (WebRTC-Stream).
{ "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" }
GERÄTEFEHLER
Eine vollständige Liste der Fehler und AusnahmenWebRTC-Protokollspezifikationen
Die Vorteile von WebRTC sind eine niedrige Latenz und einseitiges Sprechen. WebRTC verwendet die POST
-Methode mit einem POST
-Text und einer Antwort im JSON-Format.
WebRTC wird derzeit auf Google Nest Smart Display und Chromecast mit Google TV unterstützt.
In diesem Abschnitt werden die Anforderungen bei Verwendung des WebRTC-Streams beschrieben.
Datentyp | Parameter/Definitionen |
---|---|
Signalanfrageheader |
Der Header sollte die folgenden Anforderungen erfüllen:
|
Signalanfrageparameter | Die Anfrage kann die folgenden Parameter enthalten:
|
Signaling-Antwortparameter | Die Antwort kann folgende Parameter enthalten:
|
WebRTC-Anforderungen und -Empfehlungen
- Google unterstützt derzeit nur die Einweg-Kommunikation (Halbduplex).
- Sie müssen Bündelung und RTCP-Mux unterstützen.
- Sie müssen (D)TLS 1.2 oder höher verwenden.
- Trickle ICE wird nicht unterstützt. Alle ICE-Kandidaten müssen zuerst erfasst werden, bevor die SDP gesendet wird.
- Wir empfehlen dringend, UDP/IPv4-, TCP/IPv4-, UDP/IPv6- und TCP/IPv6-ICE-Kandidaten anzugeben, um die Wahrscheinlichkeit einer erfolgreichen Verbindung zu erhöhen.
Unterstützte Videoauflösungen:
- Mindestwert: 480p
- Maximale Auflösung:1080p
Unterstützte Videocodecs:
- VP8
- H.264
Unterstützte Audiocodecs:
- Opus (bevorzugter Codec)
- G.711/PCMU
- G.722
Cross-Origin Resource Sharing
Cross-Origin Resource Sharing (CORS) ist ein Mechanismus, der Browser mithilfe zusätzlicher HTTP-Header darüber informiert, dass eine an einem Ursprung ausgeführte Webanwendung auf ausgewählte Ressourcen aus einer anderen Quelle zugreifen darf. Der Server, auf dem cameraStreamSignalingUrl
gehostet wird, sollte mit dem folgenden Header antworten:
Access-Control-Allow-Origin: https://www.gstatic.com
Beispiel für eine Signalanfrage und -antwort
Das folgende Beispiel zeigt eine Anfrage, die Google an Ihren Signalisierungsdienst sendet, und die entsprechende Antwort an 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 {}