Exibição

Nest Hub Max

O display do Google Nest Hub Max é compatível com a API Smart Device Management (SDM). Esse dispositivo retorna um tipo de dispositivo DISPLAY:

sdm.devices.types.DISPLAY

O Google Nest Hub Max tem uma câmera que funciona da mesma forma que um tipo de dispositivo CAMERA.

Características

Referência

Os seguintes traços, comandos ou eventos estão relacionados a este dispositivo:

CaracterísticaDescriçãoComandosEventos
CameraEventImageEssa característica pertence a qualquer dispositivo que ofereça suporte à geração de imagens com base em eventos.GenerateImage
CameraImageEsse traço pertence a qualquer dispositivo que possa tirar fotos.
CameraLiveStreamEssa característica pertence a qualquer dispositivo compatível com transmissão ao vivo.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionEsse traço pertence a qualquer dispositivo compatível com eventos de detecção de movimento.Movimento
CameraPersonEsse traço pertence a qualquer dispositivo que ofereça suporte a eventos de detecção de pessoas.Person
CameraSoundEsse traço pertence a qualquer dispositivo compatível com eventos de detecção de som.Som
InformaçõesEsse atributo pertence a qualquer dispositivo para informações relacionadas a ele.

JSON

A ausência de uma característica em uma resposta GET indica que a característica ou recurso não está disponível no momento para o dispositivo. Consulte Tipos de dispositivos para mais informações.

{
  "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"
    }
  }
}

Processar eventos da câmera

Os seguintes eventos podem ser acionados de um tipo de dispositivo DISPLAY:

Tipo Elemento Descrição
Evento Evento motion da característica CameraMotion A câmera detectou movimento.
Evento Evento Person do traço CameraPerson Uma pessoa foi detectada pela câmera.
Evento Evento Sound da característica CameraSound A câmera detectou som.
Por exemplo, aqui a câmera detectou movimento:

Payload

{
  "eventId" : "e0f693ef-10ff-42d4-a739-fe65312b5e4c",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "dpkR6ZXalxvqAy58mjQCS85SLi...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
O payload desse evento contém um eventId que pode ser usado com o comando GenerateImage. Esse comando retorna um URL de download para a imagem da câmera relacionada ao evento:

Solicitação

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

Resposta

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

Baixar uma imagem da câmera

Faça uma chamada GET para o url de uma resposta do comando GenerateImage, usando o token no cabeçalho de autorização HTTP com autorização básica, para baixar a imagem da câmera:

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

Use os parâmetros de consulta width ou height para personalizar a resolução da imagem baixada. Apenas um desses parâmetros precisa ser especificado. O outro parâmetro é dimensionado automaticamente de acordo com a proporção da câmera.

Por exemplo, se a proporção da câmera for 4:3, para baixar a imagem com uma resolução de 480 x 360, especifique a largura ou a altura:

Largura

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

Altura

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

Outras restrições ao URL de download são aplicadas:

  • Se os dois parâmetros forem fornecidos no URL, width será usado e height será ignorado.
  • Se nenhum dos parâmetros for fornecido no URL, um valor padrão de 480 será escolhido para width.

Consulte a característica CameraImage para informações sobre propriedades de imagem.

Acessar uma transmissão ao vivo

A transmissão ao vivo de uma câmera pode ser acessada. Os seguintes formatos de stream são compatíveis com este dispositivo:

  • RTSP

Para conferir uma lista completa de câmeras e formatos de stream compatíveis, consulte Dispositivos compatíveis.

Para acessar uma transmissão ao vivo, use o comando GenerateFormatStream apropriado da característicaCameraLiveStream.

RTSP

Para um stream RTSP, o comando GenerateRtspStream do comando de traço CameraLiveStream retorna o URL do stream e o streamToken relacionado:

Solicitação

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

Resposta

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

Em seguida, use o URL de stream para acessar a transmissão ao vivo da câmera:

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

Os URLs de transmissão ao vivo RTSP não podem ser compartilhados entre clientes. Um URL de stream só pode ser usado por um cliente por vez. Se vários clientes quiserem transmitir da mesma câmera ao mesmo tempo, os comandos RTSP precisarão ser enviados para cada cliente individual, e cada cliente individual precisará usar o próprio URL de stream.

Estender uma transmissão ao vivo

As sessões de transmissão ao vivo da câmera são válidas por apenas 5 minutos. Se você precisar estender a duração de uma transmissão ao vivo, use o comando ExtendFormatStream apropriado da característica CameraLiveStream para o formato de transmissão gerado.

RTSP

Para estender um fluxo RTSP, use o comando ExtendRtspStream do comando de traço CameraLiveStream para receber novos valores de streamExtensionToken e streamToken:

Solicitação

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

Resposta

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

Atualize o URL da transmissão com esses novos valores para continuar assistindo a transmissão ao vivo:

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

Parar uma transmissão ao vivo

Sempre que você não estiver mais usando uma transmissão ao vivo de câmera, pare e invalide a transmissão. Para isso, use o comando StopFormatStream apropriado da característicaCameraLiveStream para o formato de transmissão que você gerou.

RTSP

Para interromper um fluxo RTSP, use o token para invalidar com o comando StopRtspStream do comando de traço CameraLiveStream:

Solicitação

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

Resposta

{}

Erros

Os seguintes códigos de erro podem ser retornados em relação a este dispositivo:

Mensagem de erro RPC Solução de problemas
A imagem da câmera não está mais disponível para download. DEADLINE_EXCEEDED As imagens de eventos expiram 30 segundos após a publicação. Faça o download da imagem antes do vencimento.
O ID do evento não pertence à câmera. FAILED_PRECONDITION Use o eventID correto retornado pelo evento da câmera.

Consulte a Referência de códigos de erro da API para conferir a lista completa de códigos de erro da API.