Smart Device Management (SDM) API 支持 Google Nest Hub Max 显示屏。此设备返回的设备类型为 DISPLAY:
sdm.devices.types.DISPLAY
Google Nest Hub Max 配备摄像头,其功能与 CAMERA 设备类型相同。
特征
参考
以下特征、命令或事件与此设备相关:
| 特征 | 说明 | 命令 | 事件 |
|---|---|---|---|
| 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 特征的动作事件 | 摄像头检测到有动静。 |
| 事件 | CameraPerson 特征的 Person 事件 | 摄像头检测到有人。 |
| 事件 | 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 命令搭配使用。此命令会返回与相应事件相关的相机图片的下载网址:
请求
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"
}
}
下载相机拍摄的图片
使用 HTTP 授权标头中的 token 和基本授权,通过 GenerateImage 命令响应向 url 发出 GET 调用,以下载相机图片:
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下载网址还需遵守其他限制:
- 如果网址中同时提供了这两个参数,系统会使用
width并忽略height。 - 如果网址中未提供这两个参数,系统会为
width选择默认值 480。
如需了解图片属性,请参阅 CameraImage 特征。
观看直播
可以访问摄像头的直播。此设备支持以下视频流格式:
- RTSP
如需查看摄像头和支持的视频流格式的完整列表,请参阅支持的设备。
如需访问直播,请使用CameraLiveStream特征的相应 GenerateFormatStream 命令。
RTSP
对于 RTSP 流,CameraLiveStream 特征的 GenerateRtspStream 命令会返回流网址和相关 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"
}
}
然后使用视频流网址访问摄像头直播:
rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken
RTSP 直播网址无法在客户端之间共享。一个直播网址一次只能供一个客户端使用。如果多个客户端想要同时从同一摄像头进行流式传输,则必须为每个客户端单独发送 RTSP 命令,并且每个客户端都必须使用自己的流网址。
延长直播时长
摄像头直播会话的有效期仅为 5 分钟。如果您需要延长直播的生命周期,请针对您生成的直播格式使用 CameraLiveStream 特征的相应 ExtendFormatStream 命令。
RTSP
如需延长 RTSP 流,请使用 CameraLiveStream 特征命令的 ExtendRtspStream 命令来获取新的 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"
}
}
使用这些新值更新直播网址,以便继续观看直播:
rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken
停止直播
在任何时候,只要您不再使用摄像头实时视频画面,就应停止该视频画面并使相应的数据流失效。为此,请针对您生成的流格式使用CameraLiveStream特征的相应 StopFormatStream 命令。
RTSP
如需停止 RTSP 流,请使用令牌通过 CameraLiveStream 特征命令的 StopRtspStream 命令使其失效:
请求
POST /enterprises/project-id/devices/device-id:executeCommand
{
"command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
"params" : {
"streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
}
}
响应
{}
错误
可能会返回与此设备相关的以下错误代码:
| 错误消息 | RPC | 问题排查 |
|---|---|---|
| 摄像头图像已无法再下载。 | DEADLINE_EXCEEDED |
活动图片会在活动发布 30 秒后过期。请务必在过期前下载图片。 |
| 事件 ID 不属于相应相机。 | FAILED_PRECONDITION |
使用相机事件返回的正确 eventID。 |
如需查看完整的 API 错误代码列表,请参阅 API 错误代码参考文档。