Schemat zadania inteligentnego kamery w domu

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

Ta cecha należy do urządzeń, które obsługują strumienie wideo na inteligentnych ekranach, urządzeniach obsługujących Chromecasta i smartfonach. Są to kamery monitoringu lub niemowląt. Ta cecha dotyczy też bardziej złożonych urządzeń z kamerą (np. urządzeń do rozmów wideo lub robota odkurzającego z kamerą).

ATTRIBUTES urządzenia

W ramach operacji SYNC urządzenia z tą cechą mogą zgłaszać wymienione poniżej atrybuty. Więcej informacji o obsłudze intencji SYNC znajdziesz w sekcji Realizacja intencji.

Atrybuty Typ Opis
cameraStreamSupportedProtocols Tablica

Wymagane.

Obsługiwane typy multimediów dla kamery, uporządkowane według preferencji. Zazwyczaj wymagany jest pierwszy protokół w tej tablicy, który jest zgodny z platformą docelową.

[item, ...] String

Typ multimediów.

Obsługiwane wartości:

hls
Transmisja na żywo przez HTTP
dash
Dynamiczne strumieniowe przesyłanie adaptacyjne przez HTTP
smooth_stream
Płynne odtwarzanie
progressive_mp4
Progresywne MP4 (zwykle używane w klipach)
webrtc
WebRTC
cameraStreamNeedAuthToken Wartość logiczna

Wymagane.

Określa, czy token uwierzytelniania zostanie dostarczony przez platformę cameraStreamAuthToken do platformy docelowej do strumieniowego przesyłania obrazu z kamery.

Przykłady

Obsługa kamery z obsługą wielu protokołów bez konieczności uwierzytelniania tokenem.

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

Aparat obsługujący 1 protokół, wymagający tokena uwierzytelniania.

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

Obsługiwane protokoły strumieniowania

Ta cecha obsługuje następujące protokoły strumieniowania:

Urządzenie STATES

Brak.

Urządzenie CommandS

W ramach operacji EXECUTE urządzenia z tą cechą mogą reagować na podane niżej polecenia. Więcej informacji o obsłudze intencji EXECUTE znajdziesz w sekcji Realizacja intencji.

action.devices.commands.GetCameraStream

Parametry

Parametry Typ Opis
StreamToChromecast Wartość logiczna

Wymagane.

Określa, czy strumień ma być odtwarzany na urządzeniu Chromecast.

SupportedStreamProtocols Tablica

Wymagane.

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 strumieniowe przesyłanie adaptacyjne przez HTTP
smooth_stream
Płynne odtwarzanie
progressive_mp4
Progresywne MP4 (zwykle używane w klipach)
webrtc
WebRTC

Wyniki

Wyniki Typ Opis
cameraStreamAuthToken String

Token uwierzytelniania określonego odbiornika, aby autoryzować dostęp do strumienia. Jeśli cameraStreamNeedAuthToken ma wartość Prawda i nie ma tej wartości, dane logowania OAuth użytkownika są używane jako token uwierzytelniania.

cameraStreamProtocol String

Wymagane.

Format multimediów, do którego prowadzi 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 strumieniowe przesyłanie adaptacyjne przez HTTP
smooth_stream
Płynne odtwarzanie
progressive_mp4
Progresywne MP4 (zwykle używane w klipach)
webrtc
WebRTC

Wyniki spoza WebRTC

Wyniki Typ Opis
cameraStreamAccessUrl String

Wymagane.

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

cameraStreamReceiverAppId String

Identyfikator odbiornika przetwarzający obraz z kamery, gdy parametr StreamToChromecast ma wartość Prawda. Jeśli nie zostanie podany, używany będzie domyślny odbiornik.

Wyniki WebRTC

Wyniki Typ Opis
cameraStreamSignalingUrl String

Wymagane.

Punkt końcowy adresu URL do pobierania i wymiany protokołów opisu sesji aparatu i klienta (SDP). Klient powinien zwrócić adres URL sygnału, który używa cameraStreamAuthToken jako tokena uwierzytelniania w nagłówku żądania.

cameraStreamOffer String

Schemat opisu sesji oferty (SDP).

cameraStreamIceServers String

Reprezentuje serwery Interactive Connectivity stitution (ICE) przy użyciu zakodowanego ciągu JSON z opisem RTCIceServer. Jeśli nie podasz serwerów STUN (Session Traversal Utilities for NAT), platforma domyślnie przyjmuje publiczne serwery STUN Google. Serwery TURN (trasowania z użyciem przekaźników otaczających NAT) są wymagane tylko wtedy, gdy nie możesz zagwarantować, że udostępnione adresy IP / kandydaci ICE będą publicznie dostępne (np.przez serwer mediów, kandydat do hostu publicznego ICE, kandydat do przekazywania dalej 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ń 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 używa metody POST z treścią POST i odpowiedzią w formacie JSON.

WebRTC działa obecnie na inteligentnych ekranach i Chromecastach Google Nest w połączeniu z urządzeniami Google TV.

W tej sekcji opisano wymagania dotyczące korzystania z protokołu strumienia WebRTC.

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

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

  • Uwierzytelnianie: w nagłówku uwierzytelniania powinien być używany token uwierzytelniania z wartości zwracanej przez GetCameraStream na potrzeby cameraStreamAuthToken z tokenem Bearer.
  • Typ treści: application/json.
Sygnał żądania reklamy

Żądanie może zawierać te parametry:

  • action: ciąg znaków. Prawidłowe wartości to:
    • offer: oferta wiadomości SDP od dostawcy.
    • answer: odpowiedz 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 Protocol Session Protocol dotyczący połączenia peera. Treść jest oparta na wartości parametru action. Jeśli action to „end”, ten parametr może być pusty.
Sygnały odpowiedzi

Odpowiedź może zawierać te parametry:

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

Wymagania i zalecenia WebRTC

  • Obecnie Google obsługuje komunikację jednokierunkową (połówkową)
  • Musisz obsługiwać grupowanie i rtcp-mux.
  • Musisz używać (D)TLS 1.2 lub nowszej wersji.
  • Kropla ICE nie jest obsługiwana. Przed wysłaniem SDP należy zebrać wszystkich kandydatów ICE.
  • Zdecydowanie zalecamy dołączenie kandydatów UDP/IPv4, TCP/IPv4, UDP/IPv6 i TCP/IPv6 ICE, aby zwiększyć prawdopodobieństwo udanego połączenia.

Obsługiwane rozdzielczości wideo:

  • Minimalna: 480p
  • Maksymalnie: 1080p

Obsługiwane kodeki wideo:

  • VP8
  • H.264

Obsługiwane kodeki audio:

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

Udostępnianie zasobów z innych domen

Cross-Origin Resource Share (CORS) to mechanizm, który korzysta z dodatkowych nagłówków HTTP, aby informować przeglądarki internetowe, które działają z jednego źródła, o uzyskaniu dostępu do wybranych zasobów z innego źródła. Serwer hostujący cameraStreamSignalingUrl powinien odpowiedzieć tym nagłówkiem:

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

Przykładowe żądanie i odpowiedź do sygnału

Przykład poniżej pokazuje żądanie, które Google wysyła do Twojej usługi sygnałów oraz odpowiednią odpowiedź do Google.

Żądanie
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
{}