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. In der Regel handelt es sich dabei um Überwachungskameras oder Babyfone. Diese Eigenschaft gilt aber auch für komplexere Geräte mit Kamera, z. B. Videokonferenzgeräte oder Staubsaugerroboter mit Kamera.

Geräteattribute

Geräte mit dieser Eigenschaft können im Rahmen des Vorgangs SYNC die folgenden Attribute 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:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Ruhiges Streaming
progressive_mp4
Progressive MP4 (wird hauptsächlich für Clips verwendet)
webrtc
WebRTC
cameraStreamNeedAuthToken Boolesch

Erforderlich.

Gibt an, ob für das Streamen des Kamerafeeds ein Autorisierungstoken erforderlich ist.

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:

Beim Streamen 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 auf der Website für Entwickler.

GERÄTESTATUS

Keine.

Gerätebefehle

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-Ausfü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:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Ruhiges Streaming
progressive_mp4
Progressive MP4 (wird hauptsächlich für Clips verwendet)
webrtc
WebRTC

Ergebnisse

Ergebnisse Typ Beschreibung
cameraStreamAuthToken String

Ein Authentifizierungstoken für den jeweiligen Empfänger, um den Zugriff auf den Stream zu autorisieren. cameraStreamAuthToken ist erforderlich, wenn cameraStreamNeedAuthToken auf „wahr“ gesetzt ist und das Token nur auf das Zielgerät beschränkt werden muss.

cameraStreamProtocol String

Erforderlich.

Das Medienformat, auf das die Stream-URL verweist. Es sollte sich um eines der Protokolle handeln, die im Befehlsparameter SupportedStreamProtocols aufgeführt sind.

Unterstützte Werte:

hls
HTTP Live Streaming
dash
Dynamic Adaptive Streaming over HTTP
smooth_stream
Ruhiges Streaming
progressive_mp4
Progressive MP4 (wird hauptsächlich für Clips verwendet)
webrtc
WebRTC

Nicht WebRTC-Ergebnisse

Ergebnisse Typ Beschreibung
cameraStreamAccessUrl String

Erforderlich.

URL-Endpunkt zum Abrufen des Echtzeitstreams im von cameraStreamProtocol angegebenen Format.

cameraStreamReceiverAppId String

ID des Empfängers für die Übertragung, um den Kamerastream zu verarbeiten, wenn der Parameter StreamToChromecast auf „wahr“ gesetzt ist. Andernfalls wird der Standardempfänger verwendet.

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, in deren Anfrageheader cameraStreamAuthToken als Authentifizierungstoken verwendet wird.

cameraStreamOffer String

Biete das Session Description Protocol (SDP) an.

Wenn das Offer SDP Teil des Execution(WebRTC)-Ergebnisses ist, stellt Google das Answer SDP am Signalendpunkt bereit.

Wenn sie nicht in der Ausführungsabsicht enthalten ist, generiert Google die SDP für das Angebot und sendet sie an den Signalisierungsendpunkt. Als Antwort wird eine SDP für die Antwort erwartet. Weitere Informationen finden Sie in diesem Artikel.

cameraStreamIceServers String

Stellt die ICE-Server (Interactive Connectivity Establishment) mit einem codierten JSON-String 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 Ausnahmen

WebRTC-Protokollspezifikationen

Die Vorteile von WebRTC sind eine geringe Latenz und eine Einweg-Unterstützung. WebRTC verwendet die POST-Methode mit einem POST-Text und einer Antwort im JSON-Format.

WebRTC wird derzeit auf Google Nest Smart Displays und Chromecast mit Google TV-Geräten unterstützt.

In diesem Abschnitt werden die Anforderungen bei der Verwendung des WebRTC-Streams beschrieben.

Datentyp Parameter/Definitionen
Signalanfrageheader

Der Header sollte die folgenden Anforderungen erfüllen:

  • Authentifizierung: Der Authentifizierungsheader sollte das Authentifizierungstoken aus dem GetCameraStream-Rückgabewert für cameraStreamAuthToken mit dem Tokentyp Bearer verwenden.
  • Content-Type: application/json.
Signalanfrageparameter

Die Anfrage kann die folgenden Parameter enthalten:

  • action: String. Gültige Werte sind:
    • offer: SDP-Angebotsnachricht vom Anbieter.
    • answer: Antwort auf SDP-Nachricht vom Anbieter.
    • end: Schließen Sie die aktuelle Sitzung.
  • deviceId: String. Die Geräte-ID, wie in einer SYNC- oder EXECUTE-Anfrage angegeben.
  • sdp: String. Enthält die Session Description Protocol-Nachricht für die Peer-Verbindung. Der Inhalt basiert auf dem Wert des Parameters action. Wenn action „end“ ist, kann dieser Parameter leer sein.
Parameter für die Signalantwort

Die Antwort kann folgende Parameter enthalten:

  • action: String. Der Antwortwert muss vom Typ answer sein.
  • sdp: String. SDP-Nachricht für die Antwort.

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
  • Maximal: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 zusätzliche HTTP-Header verwendet, um Browsern mitzuteilen, dass eine Webanwendung, die an einem Ursprung ausgeführt wird, auf ausgewählte Ressourcen eines anderen Ursprungs zugreifen darf. Der Server, auf dem cameraStreamSignalingUrl gehostet wird, muss 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.

Anfrage
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"
}
Antwort
// 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
{}