智能家居 CameraStream trait 架构
action.devices.traits.CameraStream
- 此 trait 介绍了如何控制设备的摄像头数据流。
此特征属于能够将视频信息流流式传输到智能显示屏、支持 Chromecast 的设备或智能手机的设备。这些设备通常是监控摄像头或婴儿摄像头。不过,此 trait 也适用于具有摄像头的更复杂设备(例如视频会议设备或带摄像头的吸尘器机器人)。
设备属性
具有此 trait 的设备可能会在 SYNC
操作中报告以下属性。如需详细了解如何处理 SYNC
intent,请参阅intent 执行方式。
属性 | 类型 | 说明 |
---|---|---|
cameraStreamSupportedProtocols |
数组 |
必填。 摄像头视频流支持的媒体类型,按偏好设置排序。通常,系统会请求此数组中与目标 Surface 兼容的第一个协议。 |
[item, ...] |
String |
媒体类型。 支持的值:
|
cameraStreamNeedAuthToken |
布尔值 |
必填。 是否将通过 |
示例
支持多种协议的相机,无需身份验证令牌。
{ "cameraStreamSupportedProtocols": [ "webrtc", "hls", "dash", "smooth_stream", "progressive_mp4" ], "cameraStreamNeedAuthToken": false }
支持单个协议且需要身份验证令牌的相机。
{ "cameraStreamSupportedProtocols": [ "hls" ], "cameraStreamNeedAuthToken": true }
支持的流式传输协议
此 trait 支持以下流式传输协议:
webrtc
:WebRTChls
:HTTP 直播dash
:基于 HTTP 的动态自适应流式传输smooth_stream
:流畅播放progressive_mp4
:渐进式 MP4(主要用于剪辑)
将 hls
、dash
、smooth_stream
和 progressive_mp4
协议流式传输到 Cast 设备(Chromecast、智能显示屏和支持 Chromecast 的智能电视)时,系统会启动 Cast Web Receiver 来处理流式传输并在设备上呈现。建议开发者创建自定义 Web 接收器,以便访问调试工具、自定义玩家行为、自定义界面品牌,以及添加分析。如需启用自定义接收器并停用默认接收器,请在 EXECUTE
响应的 cameraStreamReceiverAppId
字段中设置您在注册 Cast 应用时生成的接收器应用 ID。
如需详细了解自定义 Web 接收器应用,请访问开发者网站的指南。
设备状态
无。
设备命令
具有此特征的设备可以在 EXECUTE
操作过程中响应以下命令。如需详细了解如何处理 EXECUTE
intent,请参阅intent 执行方式。
action.devices.commands.GetCameraStream
参数
参数 | 类型 | 说明 |
---|---|---|
StreamToChromecast |
布尔值 |
必填。 是否会在 Chromecast 设备上播放直播内容。 |
SupportedStreamProtocols |
数组 |
必填。 目标位置支持的媒体类型/格式。 |
[item, ...] |
String |
媒体类型。 支持的值:
|
结果
结果 | 类型 | 说明 |
---|---|---|
cameraStreamAuthToken |
String |
用于授权特定接收器访问数据流的身份验证令牌。如果 |
cameraStreamProtocol |
String |
必填。 串流网址指向的媒体格式。它应为 支持的值:
|
非 WebRTC 结果
结果 | 类型 | 说明 |
---|---|---|
cameraStreamAccessUrl |
String |
必填。 用于以 |
cameraStreamReceiverAppId |
String |
当 |
WebRTC 结果
结果 | 类型 | 说明 |
---|---|---|
cameraStreamSignalingUrl |
String |
必填。 用于检索和交换相机和客户端会话描述协议 (SDP) 的网址端点。客户端应在请求标头中返回使用 |
cameraStreamOffer |
String |
提供会话说明协议 (SDP)。 |
cameraStreamIceServers |
String |
使用编码的 JSON 字符串和 RTCIceServer 的描述表示交互式连接建立 (ICE) 服务器。如果您未指定 STUN(NAT 会话遍历实用程序)服务器,平台将默认使用 Google 的公共 STUN 服务器。仅在您无法保证所提供的 IP / ICE 候选网络可公开访问(例如,通过媒体服务器、公共主机 ICE 候选网络、中继 ICE 候选网络等)的情况下,才需要使用 TURN(Traversal With Relays around NAT)服务器。 |
示例
显示前门摄像头(默认 Cast 接收器)。
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamProtocol": "progressive_mp4" }
显示前门摄像头(自定义 Cast 接收器)。
{ "cameraStreamAccessUrl": "https://fluffysheep.com/baaaaa.mp4", "cameraStreamReceiverAppId": "1g2f89213hg", "cameraStreamAuthToken": "12657342190192783", "cameraStreamProtocol": "progressive_mp4" }
显示前门摄像头(WebRTC 流式传输)。
{ "cameraStreamIceServers": "[{\"urls\": \"stun:stun.l.partner.com:19302\"},{\"urls\":\"turn:192.158.29.39:3478?transport=udp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"},{\"urls\": \"turn:192.158.29.39:3478?transport=tcp\",\"credential\": \"JZEOEt2V3Qb0y27GRntt2u2PAYA=\",\"username\": \"28224511:1379330808\"}]", "cameraStreamSignalingUrl": "https://example.com/signaling/answer", "cameraStreamOffer": "o=- 4611731400430051336 2 IN IP4 127.0.0.1...", "cameraStreamProtocol": "webrtc" }
设备错误
查看错误和异常的完整列表。WebRTC 协议规范
使用 WebRTC 的好处是低延迟和单向通话。WebRTC 使用 POST
方法,其中包含 JSON 格式的 POST
正文和响应。
Google Nest 智能显示屏和 Chromecast(支持 Google TV)设备目前支持 WebRTC。
本部分介绍了使用 WebRTC 流协议时的要求。
数据类型 | 参数/定义 |
---|---|
信令请求标头 |
标头应满足以下要求:
|
信令请求参数 | 请求可以包含以下参数:
|
信号响应参数 | 响应可以包含以下参数:
|
WebRTC 要求和建议
- Google 目前支持单向(半双工)通信。
- 您必须支持捆绑和 rtcp-mux。
- 您必须使用 (D)TLS 1.2 或更高版本。
- 不支持涓流 ICE。 必须先收集所有 ICE 候选,然后才能发送 SDP。
- 强烈建议您添加 UDP/IPv4、TCP/IPv4、UDP/IPv6 和 TCP/IPv6 ICE 候选项,以提高成功连接的几率。
支持的视频分辨率:
- 最低:480p
- 最高:1080p
支持的视频编解码器:
- VP8
- H.264
支持的音频编解码器:
- Opus(首选编解码器)
- G.711/PCMU
- G.722
跨源资源共享
跨源资源共享 (CORS) 是一种机制,它使用额外的 HTTP 标头告知浏览器允许在一个源上运行的 Web 应用访问来自其他源的选定资源。托管 cameraStreamSignalingUrl
的服务器应返回以下标头:
Access-Control-Allow-Origin: https://www.gstatic.com
示例信号请求和响应
以下示例展示了 Google 向您的信令服务发送的请求以及 Google 收到的相应响应。
Header: Authentication: Bearer <cameraStreamAuthToken> Content-Type: application/json POST body: // When camera offer SDP is provided in the execution response, Google provides an answer SDP. { "action": "answer", "deviceId": "123", "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..." } // When camera offer SDP is not provided in execution response, Google generates and provides an offer SDP. { "action": "offer", "deviceId": "123", "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..." } // Close the current stream session. { "action": "end" "deviceId": "123" }
// Response to accept the answer SDP in the request. Response Code : 200 {} // Response to provide the answer SDP from the service provider. Response Code : 200 { // When the camera offer SDP is not provided in the execution response, // Google provides the answer SDP via the signaling response. "action": "answer" "sdp": "o=- 4611731400430051336 2 IN IP4 127.0.0.1..." } // Response to close current session. Response Code : 200 {}