Отображать

Nest Hub Max

Дисплей Google Nest Hub Max поддерживается API управления интеллектуальными устройствами (SDM). Данное устройство возвращает тип устройства DISPLAY:

sdm.devices.types.DISPLAY

В Google Nest Hub Max есть камера, которая функционирует так же, как и обычные камеры.

Черты

Ссылка

К данному устройству относятся следующие характеристики, команды или события:

Черта Описание Команды События
CameraEventImage Эта особенность присуща любому устройству, поддерживающему генерацию изображений на основе событий. GenerateImage
CameraImage Эта функция присуща любому устройству, поддерживающему фотосъемку.
CameraLiveStream Эта функция присуща любому устройству, поддерживающему прямую трансляцию. GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotion Эта функция присуща любому устройству, поддерживающему обнаружение движения. Движение
Оператор Эта функция присуща любому устройству, поддерживающему события обнаружения людей. Человек
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" : "f39b35b7-21ba-4cf4-bbf0-5d36b21b345d",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "hkDG-nDge7SgosWYto0eOCLQeQ...", } } } "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" : "Xza0fN83xY5p88UNrpa-Bx55Hh..."
  }
}

Ответ

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

Скачать изображение с камеры

Для загрузки изображения с камеры выполните GET-запрос к url из ответа команды GenerateImage , используя token из заголовка HTTP Authorization с базовой авторизацией:

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

Остановить прямую трансляцию

Всякий раз, когда вы перестаёте использовать прямую трансляцию с камеры, следует остановить её и аннулировать поток. Для этого используйте соответствующую команду «Остановить Format потока» в настройках.CameraLiveStreamхарактеристика для сгенерированного вами формата потока.

RTSP

Чтобы остановить поток RTSP, используйте токен для аннулирования с помощью команды StopRtspStream из команды свойства CameraLiveStream:

Запрос

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

Ответ

{}

Ошибки

В связи с данным устройством могут быть возвращены следующие коды ошибок:

Сообщение об ошибке РПК Поиск неисправностей
Изображение с камеры больше недоступно для скачивания. DEADLINE_EXCEEDED Изображения событий становятся недоступны через 30 секунд после публикации события. Убедитесь, что вы загрузили изображение до истечения этого срока.
Идентификатор события не относится к камере. FAILED_PRECONDITION Используйте правильный eventID возвращаемый событием камеры.

Полный список кодов ошибок API см. в Справочнике кодов ошибок API.