Smart Device Management (SDM) API 支持所有旧版 Nest Doorbell。此设备返回的设备类型为门铃:
sdm.devices.types.DOORBELL
Google Nest Doorbell(旧版)配备摄像头,其运作方式与设备类型为 CAMERA 的设备相同。
trait
参考
以下 trait、命令或事件与此设备相关:
特征 | 说明 | 命令 | 事件 |
---|---|---|---|
CameraEventImage | 此 trait 属于支持根据事件生成图片的任何设备。 | GenerateImage | |
CameraImage | 此 trait 属于支持拍照的任何设备。 | ||
CameraLiveStream | 此 trait 适用于任何支持直播的设备。 | GenerateRtspStream ExtendRtspStream StopRtspStream | |
CameraMotion | 此 trait 属于支持运动检测事件的任何设备。 | 动作 | |
CameraPerson | 此 trait 属于支持人体检测事件的任何设备。 | 人称 | |
CameraSound | 此 trait 属于支持声音检测事件的任何设备。 | 声音 | |
DoorbellChime | 此 trait 适用于支持门铃铃声和相关按压事件的任何设备。 | Chime | |
信息 | 此 trait 属于任何设备,用于提供与设备相关的信息。 |
JSON
如果 GET 响应中不存在 trait,则表示该 trait 或功能目前不适用于相应设备。如需了解详情,请参阅设备类型。
{ "type" : "sdm.devices.types.DOORBELL", "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.DoorbellChime" : {}, "sdm.devices.traits.Info" : { "customName" : "My device" } } }
处理门铃和摄像头事件
以下事件可能会由门铃设备类型触发:类型 | 元素 | 说明 |
---|---|---|
事件 | CameraMotion trait 的 Motion 事件 | 摄像头检测到有动静。 |
事件 | CameraPerson trait 的 Person 事件 | 摄像头检测到有人。 |
事件 | CameraSound trait 的 Sound 事件 | 摄像头检测到声音。 |
事件 | DoorbellChime trait 的 Chime 事件 | 有人按门铃了。 |
载荷
{ "eventId" : "48d37271-301c-486f-9266-edcb53982e06",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "B_NM_J0fhsbLeJBLdjLJmvlFmS..." } } } "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" : "TLJkb40AC62FKKrZvfBe1DPbhD..."
}
}
响应
{ "results" : { "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...", "token" : "g.0.eventToken" } }
下载相机图片
使用 HTTP Authorization 标头中的 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 trait。
访问直播
可以访问摄像头的实时画面。此设备支持以下串流格式:
- RTSP
如需查看摄像头和受支持的直播格式的完整列表,请参阅受支持的设备。
如需访问直播,请使用CameraLiveStreamtrait 的适当 GenerateFormatStream 命令。
RTSP
对于 RTSP 流,CameraLiveStream trait 命令的 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 trait 的适当 ExtendFormatStream 命令。
RTSP
如需延长 RTSP 流,请使用 CameraLiveStream trait 命令的 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
停止直播
每当您不再使用摄像头实时视频画面时,都应停止该画面并使其失效。为此,请针对您生成的流格式使用CameraLiveStreamtrait 的适当 StopFormatStream 命令。
RTSP
如需停止 RTSP 流式传输,请使用 CameraLiveStream trait 命令的 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 错误代码参考文档。