Google Meet 设备 USB Video Class Extension Unit API

本文档简要介绍了支持的 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_CURGET_MINGET_MAXGET_RESGET_LENGET_INFOGET_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-StreamSplit-Frame, Room, Single-StreamDynamic, 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 类的平移(相对)控制 规格设计

版本说明

以下发行说明反映了 本文档。

2024 年 5 月 21 日

2023 年 11 月 15 日

更新了测试脚本,以检查和解释有效的取景模式。澄清的字节 表示。

2023 年 7 月 21 日

为合作伙伴添加了测试脚本,用于验证实现是否符合 此规范。

2023 年 5 月 25 日

已更正 GOOGXU_PRESETS 关于预设数量的说明它应为 N,而不是 N-1。

2023 年 4 月 17 日

初始版本。