
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ística | Descrição | Comandos | Eventos |
---|---|---|---|
CameraEventImage | Essa característica pertence a qualquer dispositivo que ofereça suporte à geração de imagens com base em eventos. | GenerateImage | |
CameraImage | Esse traço pertence a qualquer dispositivo que possa tirar fotos. | ||
CameraLiveStream | Essa característica pertence a qualquer dispositivo compatível com transmissão ao vivo. | GenerateRtspStream ExtendRtspStream StopRtspStream | |
CameraMotion | Esse traço pertence a qualquer dispositivo compatível com eventos de detecção de movimento. | Movimento | |
CameraPerson | Esse traço pertence a qualquer dispositivo que ofereça suporte a eventos de detecção de pessoas. | Person | |
CameraSound | Esse traço pertence a qualquer dispositivo compatível com eventos de detecção de som. | Som | |
Informações | Esse 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. |
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" ] }
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 eheight
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.