本文档简要介绍了支持的 USB Video Class Extension Unit (XU) API 。 制定此规范的目的是影响相关实践, 并实现更好的异步可伸缩性,并针对 我们的合作伙伴
如需详细了解此文档的最新更改,请参阅版本 备注。
测试设施
为了帮助合作伙伴验证对本规范的遵从情况,我们提供了测试
设置在
开发者模式。
启用
写入文件系统。
将以下代码行添加到
/etc/chrome_dev.conf
:
--enable-logging
--log-level=0
重启设备,连接相机和 USB
按 Ctrl-Alt-X
,这样当前相机的规范合规性就会变为
锻炼并记录到 /home/chronos/user/log/chrome
。
小端字节序惯例
USB 是一种小端字节序标准。在此文档中:
- 多字节数字以大端字节序显示(并传输小端字节序)。
- 字节型数组采用小端字节序内存布局。
例如,0x12345678
等同于 [0x78, 0x56, 0x34, 0x12]
。
扩展单元 GUID
支持此 Meet XU 控制规范的扩展程序单元 必须使用此 GUID。
扩展单元 | GUID |
---|---|
外围设备 XU | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
外围设备 XU 选择器
这些是定义的外围设备控制 XU 选择器。
控制选择器 | 值 |
---|---|
GOOGXU_FRAME_STRATEGY |
0x01 |
GOOGXU_REFRAME |
0x02 |
GOOGXU_OCCUPANCY_COUNTING_TOGGLE |
0x03 |
GOOGXU_OCCUPANCY_COUNTING_READ |
0x04 |
GOOGXU_STATUS_INFO |
0x05 |
GOOGXU_STATUS_RESET |
0x06 |
GOOGXU_PRESETS |
0x07 |
GOOGXU_PAN_TILT_ABSOLUTE |
0x08 |
GOOGXU_PAN_TILT_RELATIVE |
0x09 |
控制请求类型
控制请求类型在 UVC 1.5 类 规格设计。
操作 | UVC 控制 |
---|---|
GET |
GET_CUR 、GET_MIN 、GET_MAX 、GET_RES 、GET_LEN 、GET_INFO 、GET_DEF |
SET |
SET_CUR |
相机模式
摄像头模式用于对会议室中的人员取景,属于tuple
/
- 策略(镜头视图)
- 偏差(音箱或房间)
- Feed(单个或多个信息流)
每个维度可以采用以下部分中介绍的值。
自动取景策略
功能 | 说明 |
---|---|
无 | 摄像头会停用所有智能取景功能,并允许客户端自由控制 PTZ 值。 注意:设置为此取景策略时,镜头保持在当前的平移、倾斜度和缩放位置。 |
持续取景 (CAZ) | 根据取景偏差,摄像头会持续跟踪会议室中的人员。 注意:在此模式下,系统会停用 PTZ。 |
拆分帧 | 相机会根据需要创建任意数量的视频观看。它会根据自动取景 Feed 选项,将这些 Feed 合成为单个视频流中的图块,或者为每个视图创建单独的视频流。 注意:在此模式下,系统会停用 PTZ。 |
动态视图 | 一个或多个摄像头会尽力提供房间的最佳视角。它可以决定是否将多个 Feed 合并为一个 Feed,或是否提供“有趣的”当前房间的视图 此视图旨在以最公平的方式让会议室内的参与者看到这些通话。 注意:
|
自动取景偏差
功能 | 说明 |
---|---|
高风险演示者(讲者跟踪) | 摄像头会尝试取景框中正在说话的人的最佳效果。 在这种情况下,镜头应偏向演示者。例如,首席执行官在董事会做演示。 |
协作 (房间跟踪) |
摄像头会尝试以最佳方式取景会议室中的所有参与者。在这种情况下,摄像头应对每位参与者一视同仁。大多数会议都应使用此策略。 |
自动取景 Feed
功能 | 说明 |
---|---|
单流 | 摄像头会向主机设备发送单个视频流。 |
多数据流 (进行中) |
摄像头会拆分视频流并创建多个视频流,以发送至主机。 注意:此功能的完整规范和预期行为正在等待审核,在本文档的后续修订版本中不受支持。 |
自动取景模式位图值
None
的默认状态除外,该状态由空字节表示
数组,字节数组中的每个位都表示不同的相机模式,
自动取景策略、自动取景
偏差和自动取景 Feed。
位索引 | 加拿大 | 分割式帧 | 动态 | - |
---|---|---|---|---|
扬声器 | 第 1 天 - |
- - |
第 5 天 第 6 天 |
单流 多流 |
Room | 第 2 天 - |
第 3 天 第 4 天 |
第 7 天 第 8 天 |
单流 多流 |
帧模式 | 帧模式值(最低有效字节) |
---|---|
None |
0x00 |
CAZ, Speaker, Single-Stream |
0x01 |
CAZ, Room, Single-Stream |
0x02 |
Split-Frame, Room, Single-Stream |
0x04 |
Split-Frame, Room, Multi-Stream |
0x08 |
Dynamic, Speaker, Single-Stream |
0x10 |
Dynamic, Speaker, Multi-Stream |
0x20 |
Dynamic, Room, Single-Stream |
0x40 |
Dynamic, Room, Multi-Stream |
0x80 |
对照组:GOOGXU_FRAME_STRATEGY
该控件用于获取或设置相机的取景模式,如
自动取景模式位图值。每种模式表示为
相应的位图中GET_RES
命令返回一个长度为 8 字节的
值为零 (0) 或一 (1) 的位掩码,以分别指示
功能不受支持或不受设备支持。例如,如果相机
支持 CAZ, Speaker, Single-Stream
、Split-Frame, Room, Single-Stream
和
Dynamic, Room, Multi-Stream
但不使用其他模式,则 GET_RES
应返回
0x000000000000000085(即 0b10000101
后跟七个零字节)。
SET_CUR
命令用于发送位图,以告知相机
要启用 SINGLE 个摄像头模式。
控件选择器 | 1 | |||
---|---|---|---|---|
操作 | GET / SET |
|||
wLength |
8 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bActiveMode |
8 | 位图 | 设置或返回主动相机模式 |
注意:
|
受支持的请求类型的行为如下所示:
偏移值 | 0 | 说明 |
---|---|---|
GET_CUR |
获取主动取景相机模式 | |
GET_MIN |
取决于摄像头 | |
GET_MAX |
取决于摄像头 | |
GET_RES |
返回受支持相机模式的 8 字节长位掩码 | |
GET_LEN |
0x0008 | 长度 |
GET_INFO |
0x0B | 自动更新 / 写入 / 读取 |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
默认值 |
SET_CUR |
设置主动取景相机模式 |
对照组:GOOGXU_REFRAME
该控件用于触发单次取景(也称为 OTAZ)。当 OTAZ 时 被触发时,镜头视图会贴靠到房间的最佳视图上。之后 客户将重新获得对云台面值的控制能力。如果是单样本取景 则相机不应定义此控件。
控件选择器 | 2 | |||
---|---|---|---|---|
操作 | SET |
|||
wLength |
1 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bReframe |
1 | 数字 | 0x01 执行重新构建请求 |
受支持的请求类型的行为如下所示:
偏移值 | 0 | 说明 |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | 只写 |
GET_DEF |
0x00 | |
SET_CUR |
设置有关单镜头取景的请求 |
入住人数计算
入住人数统计 (OC) 是一项用于估算参与者人数的功能 (尽管摄像头画面被剪裁了)。
下表显示了 OC 控件的预期行为及其相互作用 摄像头视频流和摄像头 LED 指示灯显示。
“计算入住人数”现为 | &摄像头视频流为: | 摄像头的 LED 指示灯应 | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR 应该为 |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR 应为 |
---|---|---|---|---|
已启用 | 非直播且未设为静音 | 开启 | 0x01 |
摄像头完整视野中的人员数量。 |
已启用 | 流式 | 开启 | 0x01 |
摄像头完整视野中的人员数量。 |
已启用 | 已忽略 | 关闭 | 0x01 |
通知功能已关闭 |
通知功能已关闭 | 非直播且未设为静音 | 关闭 | 0x00 |
通知功能已关闭 |
通知功能已关闭 | 流式 | 开启 | 0x00 |
通知功能已关闭 |
通知功能已关闭 | 已忽略 | 关闭 | 0x00 |
通知功能已关闭 |
对照组:GOOGXU_OCCUPANCY_COUNTING_TOGGLE
此控件用于启用或停用统计 房间。将值设为零 (0) 可停用此功能;将一 (1) 设为 功能。如果此功能不受支持,则相机不应定义此字段 控制。
控件选择器 | 3 | |||
---|---|---|---|---|
操作 | GET / SET |
|||
wLength |
1 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bOccupancy |
1 | 布尔值 | 设置入座人数统计函数 0x00 关闭函数 0x01 开启函数 |
受支持的请求类型的行为如下所示:
偏移值 | 0 | 说明 |
---|---|---|
GET_CUR |
在已开启占用计数功能的情况下返回 | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | 自动更新 / 写入 / 读取 |
GET_DEF |
0x00 | |
SET_CUR |
启用或停用入住人数统计功能 |
对照组:GOOGXU_OCCUPANCY_COUNTING_READ
此控件用于读取 摄像头。当占用计算方法为 则相机应停用此控件。如果系统未计算入座率 则镜头不应定义此控件。
控件选择器 | 4 | |||
---|---|---|---|---|
操作 | GET |
|||
wLength |
2 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bNumPeople |
2 | 数字 | 视图中检测到的入住人数。(只读) |
受支持的请求类型的行为如下所示:
偏移值 | 0 | 说明 |
---|---|---|
GET_CUR |
返回检测到的乘客人数 | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | 自动更新 / 读取 |
GET_DEF |
0x0000 |
设备遥测和诊断
这些控件旨在鼓励 Meet 设备,通常不面向用户。
对照组:GOOGXU_STATUS_INFO
此控件用于查询来自主机摄像头的信息以分享给 调试。
控件选择器 | 5 | |||
---|---|---|---|---|
操作 | GET |
|||
wLength |
8 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bNumCameras |
1 | 数字 | 连接到主摄像头的其他卫星数量,这些卫星可能会影响返回给主机的摄像头视频流。 |
1 | bIsMoving |
1 | 位图 | 当镜头处于空闲状态时为 0,当其 PTZ 值发生变化时为非零值。供应商可以随意将不同的轴或电机映射到不同的位。 |
2 | Undef |
6 | 取消定义 | 未来会延期。 |
受支持的请求类型的行为如下所示:
偏移值 | 0 | 1 | 2 | 说明 |
---|---|---|---|---|
GET_MIN |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
|
GET_MAX |
0xFF | 0xFF | 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF |
|
GET_RES |
0x01 | 0x01 | 0x01 0x00 0x00 0x00 0x00 0x00 |
|
GET_LEN |
0x08 | 0x00 | 0x0008 | |
GET_INFO |
0x09 | 自动更新 / 读取 | ||
GET_DEF |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
对照组:GOOGXU_STATUS_RESET
此控件用于向相机发出重置请求。将 一 (1) 请求重置相机。如果存在以下情况,相机会返回零 (0): 自上次重置后,未收到重启摄像头的请求,并且一 (1) 重置设备。重置操作必须触发摄像头重新启动。(对于 无法强制通过 USB 断开连接来模拟热插拔的自供电设备 useful.)
控件选择器 | 6 | |||
---|---|---|---|---|
操作 | GET / SET |
|||
wLength |
1 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bResetRequest |
1 | 布尔值 | 向主机和连接的摄像头发出重置请求。 如果在上次重置后发出了重置请求,则返回 0x01,否则返回 0x00。 |
受支持的请求类型的行为如下所示:
偏移值 | 0 | 说明 |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | 写入 / 读取 |
GET_DEF |
0x00 |
PTZ 预设
用于配置相机的视野范围并将其还原到预设位置。
对照组:GOOGXU_PRESETS
该控件用于将镜头的平移、倾斜和缩放 (PTZ) 值设置为 预设配置。
Preset Action
用于说明命令的预期操作。设置
值为一 (1),用于将当前的平移、倾斜和缩放值映射到
提供的预设索引将值设为两 (2) 应该能够转换平移效果,
将镜头倾斜和缩放到与提供的
索引或默认出厂坐标(如果之前未映射)。设置
值三 (3) 会将索引重置为出厂默认坐标。
Preset Index
用于指定与索引对应的 PTZ 坐标。
零 (0) 的 Preset index
映射到主坐标,应为
当 GOOGXU_FRAME_STRATEGY
设置为
NONE
。
控件选择器 | 7 | |||
---|---|---|---|---|
操作 | SET |
|||
wLength |
2 | |||
偏移值 | 字段 | 大小 | 值 | 说明 |
0 | bPresetAction |
1 | 数字 | 0x01:保存预设 0x02:恢复预设 0x03:将预设重置为默认值。(默认值应为有效的预设坐标)。 |
1 | bPresetIndex |
1 | 数字 | 活动预设索引。0~N-1 。其中 0 被视为默认摄像头开始位置,N-1 是供应商为预设数量定义的常量。 |
受支持的请求类型的行为如下所示:
偏移值 | 0 | 1 | 说明 |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | 支持最多 N 种预设 |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | 只写 | |
GET_DEF |
0x00 | 0x00 |
平移和倾斜辅助映射
有些相机具有特殊组件,如机械摄像头的电机、 或数字云台功能。对于这种情况,请使用标准的 V4L2 控件进行平移、 倾斜和缩放。
对照组:GOOGXU_PAN_TILT_ABSOLUTE
(已弃用)
“第 4 章:类别专用”中定义了平移和倾斜辅助映射控件 请求 UVC 1.5 类的第 4.2.2.1.14 节 PanTilt(绝对)控制 规格设计。
对照组:GOOGXU_PAN_TILT_RELATIVE
(已弃用)
“第 4 章:类别专用”中定义了平移和倾斜辅助映射控件 请求第 4.2.2.1.15 节 UVC 1.5 类的平移(相对)控制 规格设计。
相关主题
- Linux USB Video Class (UVC) 司机
- Video Class v1.5 文档 设置
- USB 2.0 规范
- Google Meet 设备帮助 中心
- Google Workspace 管理员帮助中的“Google Meet 设备”部分 中心
版本说明
以下发行说明反映了 本文档。
2024 年 5 月 21 日
- 移除了测试脚本,改为使用新的 CfM 测试工具,
用于练习
SET
,还支持 Series One 相机验证。 - 澄清了
GOOGXU_STATUS_INFO
。 - 阐明了
GOOGXU_STATUS_RESET
。 - 已弃用
GOOGXU_PAN_TILT_ABSOLUTE
和GOOGXU_PAN_TILT_RELATIVE
。
2023 年 11 月 15 日
更新了测试脚本,以检查和解释有效的取景模式。澄清的字节 表示。
2023 年 7 月 21 日
为合作伙伴添加了测试脚本,用于验证实现是否符合 此规范。
2023 年 5 月 25 日
已更正
GOOGXU_PRESETS
关于预设数量的说明它应为 N,而不是 N-1。
2023 年 4 月 17 日
初始版本。