Schemat atrybutu CameraStream dla inteligentnego domu

action.devices.traits.CameraStream – ta cecha obejmuje sposób sterowania strumieniem z kamery na urządzeniu.

Ta cecha dotyczy urządzeń, które mogą przesyłać strumieniowo filmy na inteligentne ekrany, urządzenia obsługujące Chromecasta lub smartfony. Zwykle są to kamery bezpieczeństwa lub elektroniczne nianie. Ta cecha dotyczy jednak również bardziej złożonych urządzeń z kamerą (np. urządzeń do rozmów wideo lub robota odkurzającego z kamerą).

ATRYBUTY URZĄDZENIA

Urządzenia z tą cechą mogą zgłaszać te atrybuty w ramach operacji SYNC. Więcej informacji o obsłudze intencji SYNC znajdziesz w artykule o realizacji 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

Wymagane.

Określa, czy token autoryzacji zostanie przekazany za pomocą cameraStreamAuthToken na powierzchni docelowej, aby przesyłać strumień z kamery. Czas życia tokena to 12 godzin.

Przykłady

Kamera obsługuje wiele protokołów i 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 przesyłania strumieniowego 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, aby przetworzyć strumień i wyświetlić go na urządzeniu. Zalecamy, aby programista utworzył niestandardowy odbiornik internetowy, aby umożliwić dostęp do narzędzi do debugowania, dostosować działanie odtwarzacza, dostosować elementy interfejsu użytkownika i uwzględnić dane 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.

STANOWISKO 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. Jeśli cameraStreamNeedAuthToken ma wartość true, a ta wartość nie jest podana, dane logowania OAuth użytkownika zostaną użyte jako token uwierzytelniający. Czas życia tokena to 12 godzin.

cameraStreamProtocol String

Wymagany.

Format multimediów, do którego wskazuje 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
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 przesyłania na potrzeby 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

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 tokenu uwierzytelniania w nagłówku żądania.

cameraStreamOffer String

Protokół opisu sesji oferty (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 korzystające z przekaźników w pobliżu NAT) są wymagane tylko wtedy, gdy nie możesz zagwarantować, że podane adresy IP / kandydaci ICE będą publicznie dostępne (np.przez serwer multimediów, kandydujący do ICE hosta publicznego, kandydujący do usługi przekaźnika ICE 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ż obraz z kamery przy drzwiach wejściowych (niestandardowy odbiornik Google 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"
}

Urządzenie ERRORS

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

Specyfikacje protokołu WebRTC

Zaletami korzystania z WebRTC są krótki czas oczekiwania i możliwość prowadzenia rozmowy w jednym kierunku. WebRTC korzysta z metody POST z treścią 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 opisano wymagania dotyczące korzystania z protokołu strumienia WebRTC.

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

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 (Typ treści): 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 dla połączenia równorzędnego. Treść zależy od wartości parametru action. Jeśli parametr action ma wartość „end”, ten 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. Komunikat SDP dla odpowiedzi.

Wymagania i zalecenia WebRTC

  • Google obecnie obsługuje komunikację 1-kierunkową (połowa dupleksu).
  • 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.
  • Zdecydowanie zalecamy dołączenie kandydatów UDP/IPv4, TCP/IPv4, UDP/IPv6 i TCP/IPv6 ICE, aby zwiększyć prawdopodobieństwo nawiązania połączenia.

Obsługiwane rozdzielczości filmów:

  • Co najmniej: 480p
  • Maksimum: 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ć następującym nagłówkiem:

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

Przykładowe żądanie i odpowiedź sygnalizacyjna

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