显示

Nest Hub Max

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" : "04bc3546-467f-4e36-ac32-527b2544c40c",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "dHB50rqUb3zW1V4z9QZUXwgVgy...", } } } "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" : "Ep8hkHSQ1V2WzF1b51JnWppar0..."
  }
}

响应

{
  "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...

使用 widthheight 查询参数自定义下载图片的清晰度。只需指定其中一个参数。另一个形参会根据相机的宽高比自动缩放。

例如,如果摄像头的宽高比为 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 命令来获取新的 streamExtensionTokenstreamToken 值:

请求

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 错误代码参考文档