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:
|
cameraStreamNeedAuthToken |
Wartość logiczna |
Wymagane. Określa, czy przez |
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:
webrtc
: WebRTChls
: transmisja na żywo przez HTTPdash
: dynamiczne adaptacyjne strumieniowe przesyłanie danych przez HTTPsmooth_stream
: Płynne strumieniowanieprogressive_mp4
: progresywny MP4 (najczęściej używany w przypadku klipów)
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:
|
Wyniki
Wyniki | Typ | Opis |
---|---|---|
cameraStreamAuthToken |
String |
Token uwierzytelniania konkretnego odbiorcy, który umożliwia autoryzację dostępu do strumienia. Jeśli |
cameraStreamProtocol |
String |
Wymagane. Format multimediów, do którego prowadzi adres URL strumienia. Powinien to być jeden z protokołów wymienionych w parametrze polecenia Obsługiwane wartości:
|
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 |
cameraStreamReceiverAppId |
String |
Identyfikator odbiornika, który ma być używany do przetwarzania strumienia z kamery, gdy parametr |
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 |
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:
|
Parametry żądania sygnału | Żądanie może zawierać te parametry:
|
Parametry odpowiedzi sygnału | Odpowiedź może zawierać te parametry:
|
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.
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 {}