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 | 此特征属于支持移动侦测事件的任何设备。 | Motion | |
| CameraPerson | 此特征属于支持人员动态检测功能事件的任何设备。 | Person | |
| CameraSound | 此特征属于支持声音检测事件的任何设备。 | Sound | |
| Info | 此特征属于任何用于提供设备相关信息的设备。 |
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 设备类型触发:| 类型 | 元素 | 说明 |
|---|---|---|
| 事件 | Motion 特征的运动事件 | 摄像头检测到有动作。 |
| 事件 | 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
命令搭配使用。此命令会返回与该事件相关的摄像头图片的下载网址:
请求
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"
}
}
下载摄像头图片
使用 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 视频流,
GenerateRtspStream CameraLiveStream trait 命令的命令
会返回推流网址和相关 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 分钟。如果您需要延长直播的有效期,请针对您生成的视频流格式使用Format特征的相应 Extend Stream 命令。
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"
}
}
使用这些新值更新推流网址,以继续观看 直播:
rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken
停止直播
如果您不再使用摄像头直播,则应停止直播并使视频流失效。为此,请针对您生成的视频流格式使用 CameraLiveStream 特征的相应 StopFormatStream 命令。
RTSP
如需停止 RTSP 视频流,请使用令牌通过 StopRtspStream CameraLiveStream 特征命令的命令使其失效:
请求
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 错误代码参考文档 。