
Дисплей Google Nest Hub Max поддерживается в API управления интеллектуальными устройствами (SDM). Это устройство возвращает тип устройства DISPLAY:
sdm.devices.types.DISPLAY
Google Nest Hub Max оснащен камерой, которая функционирует так же, как устройство типа КАМЕРА.
Черты
Ссылка
С этим устройством связаны следующие характеристики, команды или события:
| Черта | Описание | Команды | События |
|---|---|---|---|
| CameraEventImage | Эта черта присуща любому устройству, поддерживающему генерацию изображений из событий. | GenerateImage | |
| CameraImage | Эта характеристика присуща любому устройству, поддерживающему фотосъемку. | ||
| CameraLiveStream | Эта характеристика присуща любому устройству, поддерживающему потоковую трансляцию. | GenerateRtspStream ExtendRtspStream StopRtspStream | |
| CameraMotion | Эта характеристика присуща любому устройству, поддерживающему события обнаружения движения. | Движение | |
| CameraPerson | Эта характеристика присуща любому устройству, поддерживающему события обнаружения человека. | Человек | |
| CameraSound | Эта характеристика присуща любому устройству, поддерживающему события обнаружения звука. | Звук | |
| Информация | Эта черта присуща любому устройству для получения информации, связанной с устройством. |
JSON
Отсутствие характеристики в ответе GET означает, что эта характеристика или функция в настоящее время недоступна для устройства. Подробнее см. в разделе «Типы устройств» .
{
"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"
}
}
}Обработка событий камеры
Следующие события могут быть вызваны устройством типа DISPLAY:| Тип | Элемент | Описание |
|---|---|---|
| Событие | Событие движения свойства CameraMotion | Камера зафиксировала движение. |
| Событие | Событие Person черты CameraPerson | Камера зафиксировала человека. |
| Событие | Звуковое событие признака CameraSound | Камера зафиксировала звук. |
Полезная нагрузка
{
"eventId" : "04375f3a-1eda-4f34-bd80-3df9c994507e",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : {
"name" : "enterprises/project-id/devices/device-id",
"events" : {
"sdm.devices.events.CameraMotion.Motion" : {
"eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
"eventId" : "LYRhFCHJpgyXetYipL67GI4LBL...",
}
}
}
"userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [
"enterprises/project-id/devices/device-id"
]
}eventId , который можно использовать с командой GenerateImage . Эта команда возвращает URL для загрузки изображения с камеры, связанного с событием: Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
"params" : {
"eventId" : "Joc98E07K4AYd3pxRuXTRdjROU..."
}
}
Ответ
{
"results" : {
"url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
"token" : "g.0.eventToken"
}
}
Загрузить изображение с камеры
Выполните вызов GET к url из ответа команды GenerateImage , используя token в заголовке HTTP-авторизации с базовой авторизацией, чтобы загрузить изображение с камеры:
curl -H "Authorization: Basic g.0.eventToken" \
https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1... Используйте параметры запроса width или height , чтобы настроить разрешение загружаемого изображения. Необходимо указать только один из этих параметров. Другой параметр масштабируется автоматически в соответствии с соотношением сторон камеры.
Например, если соотношение сторон камеры составляет 4:3, то для загрузки изображения с камеры с разрешением 480 x 360 укажите либо ширину, либо высоту:
Ширина
curl -H "Authorization: Basic g.0.eventToken" \
https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480Высота
curl -H "Authorization: Basic g.0.eventToken" \
https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360Действуют и другие ограничения на URL-адрес загрузки:
- Если в URL указаны оба параметра, используется
width, аheightигнорируется. - Если в URL-адресе не указан ни один из параметров, для
widthвыбирается значение по умолчанию 480.
См. CameraImage признак для получения информации о свойствах изображения.
Доступ к прямой трансляции
Доступна прямая трансляция с камеры. Устройство поддерживает следующие форматы потоковой передачи:
- RTSP
Полный список камер и поддерживаемых форматов потоковой передачи см. в разделе Поддерживаемые устройства .
Чтобы получить доступ к прямой трансляции, используйте соответствующую команду «Сгенерировать Format потока»CameraLiveStreamчерта.
RTSP
Для потока RTSP команда GenerateRtspStream команды типа CameraLiveStream возвращает URL-адрес потока и связанный с ним streamToken :
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
"params" : {}
}
Ответ
{
"results" : {
"streamUrls" : {
"rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
},
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
"streamToken" : "g.0.streamingToken",
"expiresAt" : "2018-01-04T18:30:00.000Z"
}
}
Затем используйте URL-адрес потока для доступа к прямой трансляции с камеры:
rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken
URL-адреса прямых трансляций RTSP не могут быть общими для нескольких клиентов. URL-адрес потока может использоваться только одним клиентом одновременно. Если несколько клиентов хотят транслировать видео с одной и той же камеры одновременно, команды RTSP необходимо отправлять каждому клиенту отдельно, и каждый клиент должен использовать свой собственный URL-адрес потока.
Продлить прямую трансляцию
Сеансы прямой трансляции с камеры длятся всего 5 минут. Если вам нужно продлить время трансляции, используйте соответствующую команду «Расширить Format потока» в меню CameraLiveStream черта для сгенерированного вами формата потока.
RTSP
Чтобы расширить поток RTSP, используйте команду ExtendRtspStream команды трейта CameraLiveStream для получения новых значений streamExtensionToken и streamToken :
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Ответ
{
"results" : {
"streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
"streamToken" : "g.0.newStreamingToken",
"expiresAt" : "2018-01-04T18:30:00.000Z"
}
}
Обновите URL-адрес трансляции, указав эти новые значения, чтобы продолжить просмотр прямой трансляции:
rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken
Остановить прямую трансляцию
Если вы больше не используете прямую трансляцию с камеры, остановите её и сделайте её недействительной. Для этого используйте соответствующую команду Stop Format Stream вCameraLiveStreamчерта для сгенерированного вами формата потока.
RTSP
Чтобы остановить поток RTSP, используйте токен для аннулирования с помощью команды StopRtspStream команды-трейта CameraLiveStream:
Запрос
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
Ответ
{}
Ошибки
В отношении данного устройства могут быть возвращены следующие коды ошибок:
| Сообщение об ошибке | RPC | Поиск неисправностей |
|---|---|---|
| Изображение с камеры больше не доступно для загрузки. | DEADLINE_EXCEEDED | Изображения событий удаляются через 30 секунд после публикации. Обязательно загрузите изображение до истечения срока действия. |
| Идентификатор события не принадлежит камере. | FAILED_PRECONDITION | Используйте правильный eventID , возвращаемый событием камеры. |
Полный список кодов ошибок API см. в Справочнике кодов ошибок API.