A tela Google Nest Hub Max tem suporte na API Smart Device Management (SDM). Esse dispositivo retorna um tipo de dispositivo de 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
As seguintes características, comandos ou eventos estão relacionados a este dispositivo:
Traço | Descrição | Comandos | Eventos |
---|---|---|---|
CameraEventImage | Essa característica pertence a qualquer dispositivo compatível com a geração de imagens de eventos. | GenerateImage | |
CameraImage | Essa característica pertence a qualquer dispositivo compatível com a captura de imagens. | ||
CameraLiveStream | Essa característica pertence a qualquer dispositivo compatível com transmissão ao vivo. | GenerateRtspStream ExtendRtspStream StopRtspStream | |
CameraMotion | Essa característica pertence a qualquer dispositivo compatível com eventos de detecção de movimento. | Movimento | |
CameraPerson | Essa característica pertence a qualquer dispositivo compatível com eventos de detecção de pessoas. | Pessoa | |
CameraSound | Essa característica pertence a qualquer dispositivo compatível com eventos de detecção de som. | Som | |
Informações | Essa característica pertence a qualquer dispositivo para informações relacionadas a ele. |
JSON
A ausência de um atributo em uma resposta GET indica que o atributo ou recurso não está disponível no momento para o dispositivo. Consulte Tipos de dispositivo 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 eventos a seguir podem ser acionados por um tipo de dispositivo DISPLAY:Tipo | Elemento | Descrição |
---|---|---|
Evento | Evento Motion do atributo CameraMotion | A câmera detectou movimento. |
Evento | Evento Pessoa da característica "CameraPerson" | Uma pessoa foi detectada pela câmera. |
Evento | Evento Sound do atributo CameraSound | A câmera detectou som. |
Payload
{ "eventId" : "93779326-2fd6-4623-9e73-7ef91fd85b2c",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "jwatvkU6ucTeRHrDJ0FZP32eTF...", } } } "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" : "jYhiD3u7JPZGER8u9B4KfuEUYm..."
}
}
Resposta
{ "results" : { "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...", "token" : "g.0.eventToken" } }
Fazer o download de uma imagem da câmera
Faça uma chamada GET para o url
de uma
resposta de comando GenerateImage,
usando o token
no cabeçalho de autorização HTTP com autorização básica, para
fazer o download da 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 transferida por download. 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 fazer o download da 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 se aplicam:
- Se ambos os parâmetros forem fornecidos no URL,
width
será usado eheight
será ignorado. - Se nenhum parâmetro for fornecido no URL, um valor padrão de 480 será escolhido para o
width
.
Consulte o recurso CameraImage para informações sobre as 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 transmissão são compatíveis com esse dispositivo:
- RTSP
Para conferir uma lista completa de câmeras e formatos de transmissão compatíveis, consulte Dispositivos compatíveis.
Para acessar uma transmissão ao vivo, use o comando GenerateFormatStream adequado do recurso CameraLiveStream.
RTSP
Para um stream RTSP, o comando
GenerateRtspStream do comando de atributo 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 do 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 transmissão só pode ser usado por um cliente por vez. Se vários clientes quiserem fazer streaming da mesma câmera ao mesmo tempo, os comandos RTSP precisarão ser enviados para cada cliente individualmente, e cada um deles precisará usar o próprio URL de streaming.
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 adequado da característica CameraLiveStream do formato de transmissão que você criou.
RTSP
Para estender um stream RTSP, use o comando
ExtendRtspStream do comando de atributo 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 do stream com estes 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 usando uma transmissão ao vivo da câmera, pare e invalide a transmissão. Para fazer isso, use o comando StopFormatStream adequado da característica CameraLiveStream para o formato de transmissão gerado.
RTSP
Para interromper um stream RTSP, use o token para invalidar com o comando StopRtspStream do comando de característica 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 do evento. Faça o download da imagem antes do prazo de validade. |
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.