Schemat właściwości strumienia danych z inteligentnych kamer domowych

action.devices.traits.CameraStream – ta cecha obejmuje sterowanie transmisją z kamery na urządzeniu.

Ta cecha należy do urządzeń, które umożliwiają strumieniowe przesyłanie obrazu wideo na inteligentne ekrany, urządzenia obsługujące Chromecasta lub smartfony. Mówiąc ogólnie, są to kamery monitoringu lub kamery do monitoringu dzieci. Ta cecha dotyczy też bardziej złożonych urządzeń z kamerą (np. urządzeń do wideokonferencji lub robota odkurzającego z kamerą).

Urządzenie ATTRIBUTES

Urządzenia z tą cechą mogą w ramach operacji SYNC zgłaszać te atrybuty. Więcej informacji o obsłudze intencji SYNC znajdziesz w artykule o realizacji intencji.

Atrybuty Typ Opis
cameraStreamSupportedProtocols Tablica

Wymagane.

Obsługiwane typy multimediów dla strumienia z kamery uporządkowane według preferencji. Zwykle żądany jest pierwszy protokół w tej tablicy, który jest zgodny z powierzchnią docelową.

[item, ...] String

Typ nośnika.

Obsługiwane wartości:

hls
Transmisja na żywo przez HTTP
dash
Dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP
smooth_stream
Płynne strumieniowanie
progressive_mp4
Progresywny MP4 (najczęściej używany w przypadku klipów)
webrtc
WebRTC
cameraStreamNeedAuthToken Wartość logiczna

Wymagane.

Określa, czy przez cameraStreamAuthToken będzie udostępniany token uwierzytelniania, który będzie używany do strumieniowego przesyłania obrazu z kamery do platformy docelowej.

Przykłady

Kamera z obsługą wielu 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 strumieniowania

Ta cecha obsługuje te protokoły strumieniowania:

Podczas strumieniowego przesyłania danych za pomocą protokołów hls,dash,smooth_stream i progressive_mp4 na urządzenia przesyłające (Chromecasty, inteligentne ekrany i telewizory smart TV obsługujące Chromecasta) uruchamiany jest odbiornik internetowy Cast, który przetwarza strumień i renderuje go na urządzeniu. Zaleca się, aby programista utworzył niestandardowy odbiornik internetowy, który umożliwi dostęp do narzędzi do debugowania, dostosuje działanie odtwarzacza, dostosuje elementy marki UI i zapewni dostęp do statystyk. Aby włączyć korzystanie z niestandardowego odbiornika i zrezygnować z używania domyślnego odbiornika, ustaw identyfikator aplikacji odbiorcy, który jest generowany podczas rejestrowania aplikacji Cast w polu cameraStreamReceiverAppId odpowiedzi EXECUTE.

Więcej informacji o aplikacjach niestandardowego odbiornika internetowego znajdziesz w przewodniku dla programistów.

Urządzenie STATES

Brak.

POLECENIA urządzenia

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

action.devices.commands.GetCameraStream

Parametry

Parametry Typ Opis
StreamToChromecast Wartość logiczna

Wymagane.

Określa, czy transmisja ma być odtwarzana na urządzeniu Chromecast.

SupportedStreamProtocols Tablica

Wymagane.

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

[item, ...] String

Typ nośnika.

Obsługiwane wartości:

hls
Transmisja na żywo przez HTTP
dash
Dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTP
smooth_stream
Płynne strumieniowanie
progressive_mp4
Progresywny MP4 (najczęściej używany w przypadku klipów)
webrtc
WebRTC

Wyniki

Wyniki Typ Opis
cameraStreamAuthToken String

Token uwierzytelniania konkretnego odbiorcy, który umożliwia autoryzację dostępu do strumienia. Jeśli cameraStreamNeedAuthToken ma wartość prawda, ale ta wartość nie zostanie podana, jako token uwierzytelniania będą używane dane logowania OAuth użytkownika.

cameraStreamProtocol String

Wymagane.

Format multimediów, do którego prowadzi adres URL strumienia. Powinien 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 strumieniowanie
progressive_mp4
Progresywny MP4 (najczęściej używany w przypadku klipów)
webrtc
WebRTC

Wyniki spoza WebRTC

Wyniki Typ Opis
cameraStreamAccessUrl String

Wymagane.

Punkt końcowy adresu URL do pobierania strumienia w czasie rzeczywistym w formacie określonym przez cameraStreamProtocol.

cameraStreamReceiverAppId String

Identyfikator odbiornika, który ma być używany do przetwarzania strumienia z kamery, gdy parametr StreamToChromecast ma wartość prawda. Jeśli nie zostanie podany, będzie używany domyślny odbiornik.

Wyniki WebRTC

Wyniki Typ Opis
cameraStreamSignalingUrl String

Wymagane.

Punkt końcowy adresu URL służący do pobierania i wymieniania protokołów opisu sesji (SDP) kamery i klienta. Klient powinien zwracać adres URL sygnału, który wykorzystuje cameraStreamAuthToken jako token uwierzytelniania w nagłówku żądania.

cameraStreamOffer String

Protokół opisu sesji oferty (SDP).

cameraStreamIceServers String

Reprezentuje serwery Interactive Connectivity Enrollmentment (ICE) za pomocą zakodowanego ciągu znaków JSON z opisem RTCIceServer. Jeśli nie określisz serwerów STUN (Session Traversal Utilities for NAT), domyślną platformą będą publiczne serwery STUN firmy Google. Turn (Traversal Korzystanie z przekaźników wokół NAT) jest wymagany tylko wtedy, gdy nie możesz zagwarantować, że podane adresy IP / ICE będą publicznie dostępne (np.przez serwer multimedialny, kandydata na hosta publicznego ICE, kandydata ICE itp.).

Przykłady

Pokaż kamerę przy drzwiach wejściowych (domyślny odbiornik 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ń z 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"
}

Urządzenie ERRORS

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

Specyfikacje protokołu WebRTC

Zalety korzystania z WebRTC to małe opóźnienia i jednokierunkowa rozmowa. WebRTC korzysta z metody POST z treścią i odpowiedzią POST w formacie JSON.

WebRTC jest obecnie obsługiwany na inteligentnym ekranie Google Nest i Chromecastach z Google TV.

W tej sekcji opisano wymagania związane z protokołem strumienia WebRTC.

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

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

  • Uwierzytelnianie: nagłówek uwierzytelniania powinien korzystać z tokena uwierzytelniania z wartości zwróconej GetCameraStream dla cameraStreamAuthToken z typem tokena Bearer.
  • Content-Type (Typ treści): application/json.
Parametry żądania sygnału

Żądanie może zawierać te parametry:

  • action: ciąg znaków. Prawidłowe wartości to:
    • offer: zaoferuj wiadomość SDP od dostawcy.
    • answer: odpowiedź SDP od dostawcy.
    • end: zamykanie bieżącej sesji.
  • deviceId: ciąg znaków. Identyfikator urządzenia podany w żądaniu SYNCHRONIZACJA lub WYKONANIE.
  • sdp: ciąg znaków. Zawiera komunikat Session Description Protocol dla połączenia peera. Treść zależy od wartości parametru action. Jeśli action ma wartość „end”, ten parametr może być pusty.
Parametry odpowiedzi sygnału

Odpowiedź może zawierać te parametry:

  • action: ciąg znaków. Wartość odpowiedzi musi być typu answer.
  • sdp: ciąg znaków. Komunikat SDP w odpowiedzi.

Wymagania i zalecenia dotyczące WebRTC

  • Obecnie Google obsługuje komunikację jednokierunkową (półdupleksową).
  • Musisz obsługiwać grupowanie i rtcp-mux.
  • Musisz używać protokołu (D)TLS w wersji 1.2 lub nowszej.
  • Kod Trickle ICE nie jest obsługiwany. Wszyscy kandydaci z ICE muszą zostać zebrani przed wysłaniem SDP.
  • Zdecydowanie zalecamy dodanie kandydatów UDP/IPv4, TCP/IPv4, UDP/IPv6 i TCP/IPv6 ICE, aby zwiększyć prawdopodobieństwo pomyślnego połączenia.

Obsługiwane rozdzielczości wideo:

  • Minimalna: 480p
  • Maksymalna: 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

Udostępnianie zasobów między serwerami (CORS) to mechanizm, który wykorzystuje dodatkowe nagłówki HTTP, aby informować przeglądarki o możliwości zezwolenia aplikacji internetowej działającej w jednym miejscu źródła na dostęp do wybranych zasobów z innego źródła. Serwer hostujący cameraStreamSignalingUrl powinien udzielić odpowiedzi za pomocą tego nagłówka:

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

Przykładowe żądanie sygnalizowania i odpowiedź

Poniższy przykład przedstawia żądanie, które Google wysyła do Twojej usługi sygnalizacyjnej, i odpowiadającą mu odpowiedź do Google.

Prośba
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"
}

Odpowiedź
// 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
{}