Schemat atrybutu Smart Home CameraStream

action.devices.traits.CameraStream – ta cecha obejmuje kontrolowanie strumienia kamery urządzenia.

Ta cecha dotyczy urządzeń, które mogą przesyłać strumieniowo strumienie wideo na inteligentne ekrany, urządzenia obsługujące Chromecasta lub smartfony. Zwykle są to kamery bezpieczeństwa lub elektroniczne nianie. Ta cecha dotyczy też bardziej złożonych urządzeń z kamerą (np. urządzeń do wideokonferencji czy robotów sprzątających z kamerą).

ATRYBUTY URZĄDZENIA

Urządzenia z tą cechą mogą raportować te atrybuty w ramach operacji SYNC. Więcej informacji o obsługiwaniu intencji SYNC znajdziesz w artykule Realizacja intencji.

Atrybuty Typ Opis
cameraStreamSupportedProtocols Tablica

Wymagany.

Obsługiwane typy multimediów dla strumienia z kamery, posortowane według preferencji. Zazwyczaj wysyłane jest żądanie dotyczące pierwszego protokołu w tym tablicy, który jest zgodny z docelową powierzchnią.

[item, ...] String

Typ multimediów.

Obsługiwane wartości:

hls
Transmisja na żywo przez HTTP
dash
Dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP
smooth_stream
Płynne przesyłanie strumieniowe
progressive_mp4
Progresywne MP4 (używane głównie do klipów)
webrtc
WebRTC
cameraStreamNeedAuthToken Wartość logiczna

Wymagany.

Wskazuje, czy do strumieniowego przesyłania danych z kamery wymagany jest token autoryzacji.

Przykłady

Kamera obsługująca wiele protokołów, która nie wymaga tokena uwierzytelniania.

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

Kamera obsługująca jeden protokół, wymagająca tokena uwierzytelniania.

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

Obsługiwane protokoły strumieniowego przesyłania danych

Ta cecha obsługuje te protokoły strumieniowania:

Podczas przesyłania strumieniowego za pomocą protokołów hls,dash,smooth_stream i progressive_mp4 na urządzeniach Cast (Chromecasty, wyświetlacze smart i telewizory smart TV z Chromecastem) uruchamia się odbiornik internetowy Cast, który przetwarza strumień i renderuje go na urządzeniu. Zalecamy, aby deweloper utworzył niestandardowy odbiornik internetowy, aby umożliwić dostęp do narzędzi debugowania, dostosować działanie odtwarzacza, dostosować branding interfejsu użytkownika oraz uwzględnić funkcje analityczne. Aby umożliwić korzystanie z niestandardowego odbiornika i zrezygnować z używania odbiornika domyślnego, w polu EXECUTE odpowiedzi ustaw identyfikator aplikacji odbiornika wygenerowany podczas rejestrowania aplikacji przesyłania treści w polu cameraStreamReceiverAppId.

Więcej informacji o niestandardowych aplikacjach odbiornika internetowego znajdziesz w przewodniku na stronie dla deweloperów.

STANY URZĄDZENIA

Brak.

Polecenia urządzenia

Urządzenia z tą cechą mogą odpowiadać na te polecenia w ramach operacji EXECUTE. Więcej informacji o obsługiwaniu intencji EXECUTE znajdziesz w artykule Realizacja intencji.

action.devices.commands.GetCameraStream

Parametry

Parametry Typ Opis
StreamToChromecast Wartość logiczna

Wymagany.

Określa, czy strumień będzie odtwarzany na urządzeniu Chromecast.

SupportedStreamProtocols Tablica

Wymagany.

Typy/formaty multimediów obsługiwane przez wybrane miejsce docelowe.

[item, ...] String

Typ multimediów.

Obsługiwane wartości:

hls
Transmisja na żywo przez HTTP
dash
Dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP
smooth_stream
Płynne przesyłanie strumieniowe
progressive_mp4
Progresywne MP4 (używane głównie do klipów)
webrtc
WebRTC

Wyniki

Wyniki Typ Opis
cameraStreamAuthToken String

Token uwierzytelniający dla konkretnego odbiorcy, który autoryzuje dostęp do strumienia. Parametr cameraStreamAuthToken jest wymagany, jeśli parametr cameraStreamNeedAuthToken ma wartość Prawda, a token musi być ograniczony tylko do urządzenia docelowego.

cameraStreamProtocol String

Wymagany.

Format multimediów, do którego wskazuje adres URL strumienia. Musi to być jeden z protokołów wymienionych w parametrze polecenia SupportedStreamProtocols.

Obsługiwane wartości:

hls
Transmisja na żywo przez HTTP
dash
Dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP
smooth_stream
Płynne przesyłanie strumieniowe
progressive_mp4
Progresywne MP4 (używane głównie do klipów)
webrtc
WebRTC

Wyniki niebędące wynikami WebRTC

Wyniki Typ Opis
cameraStreamAccessUrl String

Wymagany.

Adres URL punktu końcowego do pobierania strumienia w czasie rzeczywistym w formacie określonym przez cameraStreamProtocol.

cameraStreamReceiverAppId String

Identyfikator odbiornika Google Cast do przetwarzania strumienia z kamery, gdy parametr StreamToChromecast ma wartość prawda. Jeśli nie zostanie podany, zostanie użyty odbiornik domyślny.

Wyniki WebRTC

Wyniki Typ Opis
cameraStreamSignalingUrl String

Wymagany.

Punkt końcowy URL do pobierania i wymiany protokołów opisu sesji (SDP) kamery i klienta. Klient powinien zwrócić adres URL sygnalizacji, który używa wartości cameraStreamAuthToken jako token uwierzytelniający w nagłówku żądania.

cameraStreamOffer String

Oferty z protokołem opisu sesji (SDP).

cameraStreamIceServers String

Reprezentuje serwery Interactive Connectivity Establishment (ICE) za pomocą zakodowanego ciągu JSON z opisem RTCIceServer. Jeśli nie określisz serwerów STUN (Session Traversal Utilities for NAT), platforma użyje domyślnie publicznych serwerów STUN Google. Serwery TURN (Traversal Using Relays around NAT) są wymagane tylko wtedy, gdy nie możesz zagwarantować, że podane adresy IP lub kandydaci ICE będą dostępne publicznie (np.przez serwer multimediów, publicznego hosta ICE, kandydata ICE na potrzeby przekaźnika itp.).

Przykłady

Pokaż obraz z kamery przy drzwiach wejściowych (domyślny odbiornik Google Cast).

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

Pokaż kamerę przy drzwiach wejściowych (niestandardowy odbiornik Cast).

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

Pokaż obraz z kamery przy drzwiach wejściowych (strumień 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"
}

BŁĘDY urządzenia

Zobacz pełną listę błędów i wyjątków.

Specyfikacje protokołu WebRTC

Zaletami korzystania z WebRTC są niskie opóźnienie i rozmowy w jednym kierunku. WebRTC używa metody POST z ciałem POST i odpowiedzią w formacie JSON.

WebRTC jest obecnie obsługiwany na urządzeniach Google Nest Hub i Chromecast z Google TV.

W tej sekcji opisaliśmy wymagania dotyczące korzystania z protokołu strumieniowego WebRTC.

Typ danych Parametry/definicje
Nagłówek żądania sygnalizacji

Nagłówek powinien spełniać te wymagania:

  • Uwierzytelnianie: nagłówek uwierzytelniania powinien używać tokenu autoryzacji z wartości zwracanej przez funkcję GetCameraStream w przypadku cameraStreamAuthToken z typem tokena Bearer.
  • Content-Type: application/json.
Parametry żądania sygnalizacji

Żądanie może zawierać te parametry:

  • action: ciąg znaków. Prawidłowe wartości to:
    • offer: oferuj wiadomość SDP od dostawcy.
    • answer: odpowiedź na wiadomość SDP od dostawcy.
    • end: zamknij bieżącą sesję.
  • deviceId: ciąg znaków. Identyfikator urządzenia podany w żądaniu SYNC lub EXECUTE.
  • sdp: ciąg znaków. Zawiera komunikat protokołu Session Description Protocol (SDP) dla połączenia z peerem. Treści są wyświetlane na podstawie wartości parametru action. Jeśli parametr action ma wartość „end”, parametr może być pusty.
Parametry odpowiedzi sygnalizacji

Odpowiedź może zawierać te parametry:

  • action: ciąg znaków. Wartość odpowiedzi musi być typu answer.
  • sdp: ciąg znaków. wiadomość SDP dla odpowiadającej odpowiedzi;

Wymagania i zalecenia dotyczące WebRTC

  • Google obsługuje obecnie komunikację w jednym kierunku (półdupleks).
  • Musisz obsługiwać łączenie i rtcp-mux.
  • Musisz używać protokołu (D)TLS w wersji 1.2 lub nowszej.
  • Protokół Trickle ICE nie jest obsługiwany. Przed wysłaniem SDP należy zebrać wszystkie kandydatów ICE.
  • Zalecamy uwzględnienie kandydatów ICE UDP/IPv4, TCP/IPv4, UDP/IPv6 i TCP/IPv6, aby zwiększyć prawdopodobieństwo nawiązania połączenia.

Obsługiwane rozdzielczości filmów:

  • Co najmniej: 480p
  • Maksymalnie: 1080p

Obsługiwane kodeki wideo:

  • VP8
  • H.264

Obsługiwane kodeki audio:

  • Opus (preferowany kodek)
  • G.711/PCMU
  • G.722

Współdzielenie zasobów pomiędzy serwerami z różnych domen

Cross-Origin Resource Sharing (CORS) to mechanizm, który używa dodatkowych nagłówków HTTP do informowania przeglądarek o tym, że aplikacja internetowa działająca w jednym pochodzeniu ma mieć dostęp do wybranych zasobów z innego pochodzenia. Serwer hostujący cameraStreamSignalingUrl powinien odpowiedzieć nagłówkiem:

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

Przykładowe żądanie i odpowiedź sygnalizacyjne

Na przykładzie poniżej pokazano żądanie wysłane przez Google do Twojej usługi sygnalizacyjnej i odpowiednią odpowiedź 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
{}