Sieć reklamowa

Nest Hub Max

Wyświetlacz Google Nest Hub Max jest obsługiwany przez interfejs Smart Device Management (SDM). To urządzenie zwraca typ urządzenia DISPLAY:

sdm.devices.types.DISPLAY

Google Nest Hub Max jest wyposażony w kamerę, która działa tak samo jak typ CAMERA.

Cechy

Dokumentacja

Z tym urządzeniem są powiązane te cechy, polecenia lub zdarzenia:

CechaOpisPoleceniaWydarzenia
CameraEventImageTa cecha należy do każdego urządzenia, które obsługuje generowanie obrazów na podstawie zdarzeń.GenerateImage
CameraImageTa cecha należy do każdego urządzenia, które pozwala robić zdjęcia.
CameraLiveStreamTa cecha należy do każdego urządzenia, które obsługuje transmisję na żywo.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionTa cecha jest przypisana do każdego urządzenia, które obsługuje zdarzenia wykrywania ruchu.Ruch
CameraPersonTa cecha jest przypisana do każdego urządzenia, które obsługuje zdarzenia wykrywania osób.Osoba
CameraSoundTa cecha jest przypisana do każdego urządzenia, które obsługuje zdarzenia wykrywania dźwięku.Dźwięk
InformacjeTa cecha należy do każdego urządzenia, aby uzyskać informacje związane z tym urządzeniem.

JSON

Brak cechy w odpowiedzi GET oznacza, że są one obecnie niedostępne dla danego urządzenia. Więcej informacji znajdziesz w sekcji Typy urządzeń.

{
  "type" : "sdm.devices.types.DISPLAY",
  "traits" : {
    "sdm.devices.traits.CameraEventImage" : {},
    "sdm.devices.traits.CameraImage" : {
      "maxImageResolution" : {
        "width" : 1280,
        "height" : 960
      }
    },
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    },
    "sdm.devices.traits.CameraMotion" : {},
    "sdm.devices.traits.CameraPerson" : {},
    "sdm.devices.traits.CameraSound" : {},
    "sdm.devices.traits.Info" : {
      "customName" : "My device"
    }
  }
}

Obsługa zdarzeń rejestrowanych przez kamerę

Urządzenia typu DISPLAY mogą wywoływać te zdarzenia:

Typ Element Opis
Zdarzenie Zdarzenie Ruch cechy Ruch aparatu Kamera wykryła ruch.
Zdarzenie Zdarzenie Person dotyczące cechy kamery Kamera wykryła osobę.
Zdarzenie Zdarzenie Dźwięk cechy Dźwięk kamery Kamera wykryła dźwięk.
Na przykład w tym przypadku kamera wykryła ruch:

Ładunek

{
  "eventId" : "f698b6e9-0572-4775-99ab-554c7b944201",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "YtEkPsfcoSs8Gp7h0EJI5xvcHB...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
Ładunek tego zdarzenia zawiera obiekt eventId, którego można używać z poleceniem GenerateImage. To polecenie zwraca adres URL pobierania obrazu z kamery powiązanego ze zdarzeniem:

Prośba

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "L8dOfhrW5F6e-LvdNK6WDW6s0W..."
  }
}

Odpowiedź

{
  "results" : {
    "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "token" : "g.0.eventToken"
  }
}

Pobieranie obrazu z aparatu

Wykonaj wywołanie GET do url z odpowiedzi polecenia GenerateImage, używając parametru token w nagłówku autoryzacji HTTP z autoryzacją podstawową, aby pobrać obraz z aparatu:

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...

Za pomocą parametrów zapytania width lub height możesz dostosować rozdzielczość pobieranego obrazu. Musisz określić tylko jeden z tych parametrów. Drugi parametr jest skalowany automatycznie zgodnie z formatem obrazu aparatu.

Jeśli na przykład format obrazu to 4:3, to aby pobrać zdjęcie o rozdzielczości 480 x 360, określ szerokość lub wysokość:

Szerokość

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480

Wzrost

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360

Obowiązują też inne ograniczenia dotyczące adresu URL pobierania:

  • Jeśli adres URL zawiera oba parametry, używany jest parametr width, a parametr height jest ignorowany.
  • Jeśli w adresie URL nie ma żadnego z tych parametrów, w polu width używana jest domyślna wartość 480.

Informacje o właściwościach obrazów znajdziesz w opisie właściwości CameraImage .

Dostęp do transmisji na żywo

Można uzyskać dostęp do transmisji na żywo z kamery. Na tym urządzeniu obsługiwane są te formaty strumienia:

  • RTSP

Pełną listę kamer i obsługiwanych formatów strumienia znajdziesz w sekcji Obsługiwane urządzenia.

Aby uzyskać dostęp do transmisji na żywo, użyj odpowiedniego polecenia WygenerujFormattransmisję w funkcjiTransmisja na żywo z kamery.

RTSP

W przypadku strumienia RTSP polecenie GenerateRtspStream w poleceniu cechy CameraLiveStream zwraca adres URL strumienia i powiązane z nim streamToken:

Prośba

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
  "params" : {}
}

Odpowiedź

{
  "results" : {
    "streamUrls" : {
      "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Następnie użyj adresu URL transmisji, aby uzyskać dostęp do transmisji na żywo z kamery:

rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken

Nie można udostępniać adresów URL transmisji na żywo przy użyciu protokołu RTSP między klientami. Z adresu URL strumienia może korzystać tylko jeden klient w danym momencie. Jeśli w tym samym czasie wielu klientów chce przesyłać strumieniowo z tej samej kamery, polecenia RTSP muszą być wysyłane do każdego z nich, a każdy klient musi używać własnego adresu URL strumienia.

Przedłużanie transmisji na żywo

Sesje transmisji na żywo z kamery mogą trwać tylko 5 minut. Jeśli chcesz przedłużyć czas trwania transmisji na żywo, użyj odpowiedniego polecenia ExtendFormatStream właściwości CameraLiveStream dla wygenerowanego formatu strumienia.

RTSP

Aby rozszerzyć strumień RTSP, użyj polecenia ExtendRtspStream w poleceniu cechy CameraLiveStream, aby uzyskać nowe wartości streamExtensionToken i streamToken:

Prośba

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Odpowiedź

{
  "results" : {
    "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "streamToken" : "g.0.newStreamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Zaktualizuj adres URL transmisji za pomocą tych nowych wartości, aby kontynuować oglądanie transmisji:

rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken

Zatrzymywanie transmisji na żywo

Za każdym razem, gdy nie korzystasz już z transmisji na żywo z kamery, zatrzymaj ją i unieważnij. Aby to zrobić, użyj odpowiedniego polecenia ZatrzymajFormatStream właściwościCameraLiveStreamdla wygenerowanego formatu strumienia.

RTSP

Aby zatrzymać strumień RTSP, użyj tokena do unieważnienia za pomocą polecenia StopRtspStream w poleceniu trait CameraLiveStream:

Prośba

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Odpowiedź

{}

Błędy

W odniesieniu do tego urządzenia mogą zostać zwrócone następujące kody błędów:

Komunikat o błędzie RPC Rozwiązywanie problemów
Obraz z aparatu nie jest już dostępny do pobrania. DEADLINE_EXCEEDED Obrazy zdarzenia wygasają po 30 sekundach po jego opublikowaniu. Pamiętaj, aby pobrać zdjęcie przed wygaśnięciem ważności.
Identyfikator wydarzenia nie należy do kamery. FAILED_PRECONDITION Użyj prawidłowej wartości eventID zwróconej przez zdarzenie kamery.

Pełną listę kodów błędów interfejsu API znajdziesz w dokumentacji błędów interfejsu API.