Schema für Stream-Eigenschaften der Smart-Home-Kamera

action.devices.traits.CameraStream: Diese Funktion beschreibt, wie der Kamerastream eines Geräts gesteuert wird.

Diese Eigenschaft gehört zu Geräten, die Videofeeds auf Smart Displays, Chromecast-fähige Geräte oder Smartphones streamen können. Im Wesentlichen handelt es sich dabei um Überwachungskameras oder Babykameras. Diese Eigenschaft gilt aber auch für komplexere Geräte mit einer Kamera, z. B. für Videokonferenzen oder einen Staubsaugerroboter mit Kamera.

Geräte-ATTRIBUTE

Geräte mit dieser Eigenschaft melden möglicherweise die folgenden Attribute im Rahmen des SYNC-Vorgangs. Weitere Informationen zum Umgang mit SYNC-Intents finden Sie unter Intent-Auftragsausführung.

Attribute Typ Beschreibung
cameraStreamSupportedProtocols Array

Erforderlich.

Unterstützte Medientypen für den Kamerastream, sortiert nach Präferenz In der Regel wird das erste Protokoll in diesem Array, das mit der Zieloberfläche kompatibel ist, angefordert.

[item, ...] String

Medientyp.

Unterstützte Werte:

hls
HTTP-Livestreaming
dash
Dynamisches adaptives Streaming über HTTP
smooth_stream
Zuverlässiges Streaming
progressive_mp4
Progressive MP4 (wird hauptsächlich für Clips verwendet)
webrtc
WebRTC
cameraStreamNeedAuthToken Boolesch

Erforderlich.

Gibt an, ob über cameraStreamAuthToken ein Authentifizierungstoken für die Zieloberfläche zum Streamen des Kamerafeeds bereitgestellt wird.

Beispiele

Kamera mit Unterstützung für mehrere Protokolle, ohne dass ein 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 Streaming-Protokolle

Diese Eigenschaft unterstützt die folgenden Streamingprotokolle:

Beim Streamen von hls-, dash-, smooth_stream- und progressive_mp4-Protokollen auf Übertragungsgeräte wie Chromecasts, Smart Displays und Chromecast-fähige Smart-TVs wird ein Cast Web Receiver gestartet, um den Stream zu verarbeiten und auf dem Gerät zu rendern. Es wird empfohlen, dass der Entwickler einen benutzerdefinierten Web Receiver erstellt, um Zugriff auf Debugging-Tools zu ermöglichen, das Spielerverhalten anzupassen, das UI-Branding anzupassen und Analysen einzubeziehen. Wenn du die Nutzung des benutzerdefinierten Empfängers aktivieren und die Verwendung des Standardempfängers deaktivieren möchtest, lege die ID der Empfänger-App fest, die bei der Registrierung deiner Cast-App im Feld cameraStreamReceiverAppId der EXECUTE-Antwort generiert wird.

Weitere Informationen zu Custom Web Receiver-Anwendungen finden Sie im Leitfaden zur Entwicklerwebsite.

Gerät STATES

Keine.

BEFEHLE auf Gerät

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.

Vom gewünschten Ziel unterstützte Medientypen/-formate.

[item, ...] String

Medientyp.

Unterstützte Werte:

hls
HTTP-Livestreaming
dash
Dynamisches adaptives Streaming über HTTP
smooth_stream
Zuverlässiges 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. Wenn cameraStreamNeedAuthToken „true“ ist und dieser Wert nicht angegeben wird, werden die OAuth-Anmeldedaten des Nutzers als Authentifizierungstoken verwendet.

cameraStreamProtocol String

Erforderlich.

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

Unterstützte Werte:

hls
HTTP-Livestreaming
dash
Dynamisches adaptives Streaming über HTTP
smooth_stream
Zuverlässiges 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 durch cameraStreamProtocol angegebenen Format.

cameraStreamReceiverAppId String

Streamingempfänger-ID zur Verarbeitung des Kamerastreams, wenn der Parameter „StreamToChromecast“ auf „true“ gesetzt ist. Falls nicht angegeben, wird der Standardempfänger verwendet.

WebRTC-Ergebnisse

Ergebnisse Typ Beschreibung
cameraStreamSignalingUrl String

Erforderlich.

URL-Endpunkt zum Abrufen und Austauschen von Session Description Protocols (SDPs) mit Kamera und Client. Der Client sollte die Signalisierungs-URL zurückgeben, die cameraStreamAuthToken als Authentifizierungstoken im Anfrageheader verwendet.

cameraStreamOffer String

Offer Session Description Protocol (SDP):

cameraStreamIceServers String

Stellt die ICE-Server (Interactive Connectivity Einrichtung) unter Verwendung eines codierten JSON-Strings mit der Beschreibung eines RTCIceServer dar. Wenn Sie keine STUN-Server (Session Traversal Utilities for NAT) angeben, werden standardmäßig die öffentlichen STUN-Server von Google verwendet. TURN-Server (Traversal Using Relays around NAT) sind nur erforderlich, wenn Sie nicht garantieren können, dass die bereitgestellten IPs / ICE-Kandidaten öffentlich zugänglich sind (z. B. über einen Medienserver, einen öffentlichen Host-ICE-Kandidaten, einen Relay-ICE-Kandidaten usw.).

Beispiele

Zeige die Haustürkamera (standardmäßiger Streamingempfänger).

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

Zeig die Haustürkamera (benutzerdefinierter Streamingempfänger).

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

Zeige die Haustürkamera an (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ät ERRORS

Sehen Sie sich die vollständige Liste der Fehler und Ausnahmen an.

WebRTC-Protokollspezifikationen

Die Vorteile der Verwendung von WebRTC sind niedrige Latenz und die Einweg-Kommunikation. WebRTC verwendet eine POST-Methode mit einem POST-Text und einer Antwort im JSON-Format.

WebRTC wird derzeit auf Smart Displays von Google Nest und Chromecast mit Google TV unterstützt.

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

Datentyp Parameter/Definitionen
Header der Signalisierungsanfrage

Der Header muss die folgenden Anforderungen erfüllen:

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

Die Anfrage kann die folgenden Parameter enthalten:

  • action: String. Gültige Werte sind:
    • offer: SDP-Nachricht vom Anbieter anbieten.
    • answer: Damit wird die SDP-Nachricht des Anbieters beantwortet.
    • end: Aktuelle Sitzung schließen.
  • deviceId: String. Die in einer SYNC- oder EXECUTE-Anfrage gemeldete Geräte-ID.
  • sdp: String. Enthält die Nachricht vom Session Description Protocol für die Peer-Verbindung. Der Inhalt basiert auf dem Wert des Parameters action. Wenn action „end“ ist, kann dieser Parameter leer sein.
Signalisierungsantwortparameter

Die Antwort kann die folgenden Parameter enthalten:

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

WebRTC-Anforderungen und -Empfehlungen

  • Google unterstützt derzeit die 1-Wege-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. Vor dem Senden des SDP müssen alle ICE-Kandidaten gesammelt werden.
  • Es wird dringend empfohlen, 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:

  • Minimum: 480 Pixel
  • Maximal:1080p

Unterstützte Video-Codecs:

  • VP8
  • H.264

Unterstützte Audio-Codecs:

  • 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 anweist, einer Webanwendung, die an einem Ort ausgeführt wird, den Zugriff auf ausgewählte Ressourcen von einer anderen Quelle zu ermöglichen. Der Server, auf dem cameraStreamSignalingUrl gehostet wird, sollte mit dem folgenden Header antworten:

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

Beispiel für 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
{}