Wyświetlacz Google Nest Hub Max jest obsługiwany w interfejsie Smart Device Management (SDM) API. To urządzenie zwraca typ urządzenia DISPLAY:
sdm.devices.types.DISPLAY
Google Nest Hub Max ma kamerę, która działa tak samo jak urządzenie typu CAMERA.
Cechy
Dokumentacja
Z tym urządzeniem są powiązane te cechy, polecenia i zdarzenia:
| Cechy | Opis | Polecenia | Wydarzenia |
|---|---|---|---|
| CameraEventImage | Ta cecha należy do każdego urządzenia, które obsługuje generowanie obrazów na podstawie zdarzeń. | GenerateImage | |
| CameraImage | Ta cecha należy do każdego urządzenia, które obsługuje robienie zdjęć. | ||
| CameraLiveStream | Ta cecha należy do każdego urządzenia, które obsługuje transmisje na żywo. | GenerateRtspStream ExtendRtspStream StopRtspStream | |
| CameraMotion | Ta cecha należy do każdego urządzenia, które obsługuje zdarzenia wykrywania ruchu. | Ruch | |
| CameraPerson | Ta cecha należy do każdego urządzenia, które obsługuje zdarzenia wykrywania osób. | Osoba | |
| CameraSound | Ta cecha należy do każdego urządzenia, które obsługuje zdarzenia wykrywania dźwięku. | Dźwięk | |
| Informacje | Ta cecha należy do każdego urządzenia, które przekazuje informacje o urządzeniu. |
JSON
Brak cechy w odpowiedzi GET oznacza, że cecha lub funkcja jest obecnie niedostępna na urządzeniu. 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ń z kamery
Na urządzeniach typu DISPLAY mogą być wywoływane te zdarzenia:| Typ | Element | Opis |
|---|---|---|
| Zdarzenie | Zdarzenie Motion cechy CameraMotion | Kamera wykryła ruch. |
| Zdarzenie | Zdarzenie Person cechy CameraPerson | Kamera wykryła osobę. |
| Zdarzenie | Zdarzenie Sound cechy CameraSound | Kamera wykryła dźwięk. |
Ładunek
{
"eventId" : "e78aba4f-b8d3-4df6-b224-066c6ea345b2",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : {
"name" : "enterprises/project-id/devices/device-id",
"events" : {
"sdm.devices.events.CameraMotion.Motion" : {
"eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
"eventId" : "4d026q2_N_TkClOUn3Myd9yjNu...",
}
}
}
"userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [
"enterprises/project-id/devices/device-id"
]
}eventId, którego można użyć w poleceniu GenerateImage. To polecenie zwraca adres URL pobierania obrazu z kamery powiązanego ze zdarzeniem:
Żądanie
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
"params" : {
"eventId" : "xj_A0qp0TlpfQsIVYdzeeb0kzb..."
}
}
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 na polecenie GenerateImage, używając token w nagłówku autoryzacji HTTP z autoryzacją podstawową, aby pobrać obraz z kamery:
curl -H "Authorization: Basic g.0.eventToken" \
https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...Użyj parametrów zapytania width lub height, aby dostosować rozdzielczość pobranego obrazu. Wystarczy podać tylko jeden z tych parametrów. Drugi parametr jest skalowany automatycznie zgodnie z formatem obrazu z kamery.
Jeśli na przykład współczynnik proporcji aparatu to 4:3, aby pobrać obraz z aparatu o rozdzielczości 480 x 360, podaj szerokość lub wysokość:
Szerokość
curl -H "Authorization: Basic g.0.eventToken" \
https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480Wysokość
curl -H "Authorization: Basic g.0.eventToken" \
https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360Obowiązują inne ograniczenia dotyczące adresu URL pobierania:
- Jeśli w adresie URL podane są oba parametry, używany jest parametr
width, a parametrheightjest ignorowany. - Jeśli w adresie URL nie podano żadnego z tych parametrów, dla parametru
widthzostanie wybrana wartość domyślna 480.
Informacje o właściwościach obrazu znajdziesz w cechie CameraImage .
Otwieranie transmisji na żywo
Dostępna jest transmisja na żywo z kamery. To urządzenie obsługuje te formaty strumieniowania:
- RTSP
Pełną listę kamer i obsługiwanych formatów strumieniowania znajdziesz w sekcji Obsługiwane urządzenia.
Aby uzyskać dostęp do transmisji na żywo, użyj odpowiedniego polecenia GenerateFormatStream z cechyCameraLiveStream.
RTSP
W przypadku strumienia RTSP polecenie GenerateRtspStream z polecenia cechy CameraLiveStream zwraca adres URL strumienia i powiązane z nim streamToken:
Żądanie
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 strumienia, aby uzyskać dostęp do transmisji na żywo z kamery:
rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken
Adresów URL transmisji na żywo RTSP nie można udostępniać między klientami. Adres URL strumienia może być używany tylko przez jednego klienta naraz. Jeśli wielu klientów chce jednocześnie przesyłać strumieniowo dane z tej samej kamery, polecenia RTSP muszą być wysyłane do każdego klienta z osobna, a każdy klient musi używać własnego adresu URL strumienia.
Przedłużanie transmisji na żywo
Sesje transmisji na żywo z kamery są ważne tylko przez 5 minut. Jeśli chcesz przedłużyć czas trwania transmisji na żywo, użyj odpowiedniego polecenia ExtendFormatStream z cechy CameraLiveStream dla wygenerowanego formatu strumienia.
RTSP
Aby przedłużyć strumień RTSP, użyj polecenia ExtendRtspStream z cechy CameraLiveStream, aby uzyskać nowe wartości streamExtensionToken i streamToken:
Żądanie
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"
}
}
Aby nadal oglądać transmisję na żywo, zaktualizuj adres URL transmisji, podając te nowe wartości:
rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken
Zatrzymywanie transmisji na żywo
Gdy nie korzystasz już z transmisji na żywo z kamery, zatrzymaj ją i unieważnij. Aby to zrobić, użyj odpowiedniego polecenia StopFormatStream w przypadku cechyCameraLiveStreamdla wygenerowanego formatu strumienia.
RTSP
Aby zatrzymać strumień RTSP, użyj tokena do unieważnienia za pomocą polecenia StopRtspStream polecenia cechy CameraLiveStream:
Żądanie
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Odpowiedź
{}
Błędy
W związku z tym urządzeniem mogą być zwracane te kody błędów:
| Komunikat o błędzie | RPC | Rozwiązywanie problemów |
|---|---|---|
| Obraz z kamery nie jest już dostępny do pobrania. | DEADLINE_EXCEEDED |
Obrazy zdarzeń wygasają 30 sekund po opublikowaniu zdarzenia. Pamiętaj, aby pobrać obraz przed wygaśnięciem. |
| Identyfikator zdarzenia nie należy do kamery. | FAILED_PRECONDITION |
Użyj prawidłowego parametru eventID zwróconego przez zdarzenie zarejestrowane przez kamerę. |
Pełną listę kodów błędów interfejsu API znajdziesz w dokumentacji kodów błędów interfejsu API.