En este documento, se describen las APIs de la unidad de extensión de clase de video USB (XU) compatibles que usan los sistemas de conferencias de Google Meet para habilitar funciones de cámara inteligente. El propósito de crear esta especificación es influir en las prácticas para habilitar estas funciones y permitir una mejor escalabilidad y pruebas asíncronas para nuestros socios.
Para obtener detalles sobre los cambios más recientes de este documento, consulta las Notas de la versión.
Instalación de prueba
Para ayudar a los socios a validar el cumplimiento de esta especificación, proporcionamos una función de prueba en los dispositivos Chromebox para reuniones configurados en el modo de desarrollador.
Habilita la escritura en el sistema de archivos.
Agrega las siguientes líneas a /etc/chrome_dev.conf
:
--enable-logging
--log-level=0
Reinicia el dispositivo, conecta la cámara y un teclado USB, presiona Ctrl-Alt-X
y se verificará el cumplimiento de las especificaciones de la cámara activa y se registrará en /home/chronos/user/log/chrome
.
Convención little-endian
USB es un estándar de orden de bytes little endian. En este documento, se incluye lo siguiente:
- Los números de varios bytes aparecen en formato big-endian (y se transmiten en formato little-endian).
- Los arrays de bytes están en el diseño de memoria de orden inferior.
Por ejemplo, 0x12345678
es igual que [0x78, 0x56, 0x34, 0x12]
.
GUID de la unidad de extensión
Las unidades de extensión que admiten esta especificación de control de XU de Meet deben usar este GUID.
Unidad de extensión | GUID |
---|---|
XU de control de periféricos | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Selectores de XU de control de periféricos
Estos son los selectores de XU de control de periféricos definidos.
Selectores de control | Valor |
---|---|
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 |
GOOGXU_SATELLITE_INFO |
0x0A |
Tipo de solicitud de control
Los tipos de solicitudes de control se definen en el Capítulo 4: Solicitudes específicas de clase de la Especificación de clase UVC 1.5.
Operación | Control de UVC |
---|---|
GET |
GET_CUR , GET_MIN , GET_MAX , GET_RES , GET_LEN , GET_INFO , GET_DEF |
SET |
SET_CUR |
Modos de cámara
Los modos de cámara se usan para encuadrar a las personas en una sala de reuniones y son un tuple
de lo siguiente:
- Estrategia (vista de la cámara)
- Sesgo (bocina o habitación)
- Feeds (uno o varios flujos)
Cada dimensión puede tener los valores que se describen en las siguientes secciones.
Estrategia de encuadre automático
En todos los modos de encuadre automático, excepto en “Ninguno”, se inhabilitan el desplazamiento lateral, la inclinación y el zoom manuales.
Función | Descripción |
---|---|
Ninguno | La cámara inhabilita todas las funciones de enmarcado inteligente y permite que el cliente controle libremente los valores de PTZ. Nota: Cuando se configura esta estrategia de encuadre, la cámara permanece en su posición actual de desplazamiento lateral, inclinación y zoom. |
Enmarcado continuo (CAZ) | En función del sesgo de enmarcado, la cámara realiza un seguimiento continuo de las personas que están en la habitación. |
Marcos divididos | La cámara crea tantas vistas de video como sea necesario. Según la opción Feeds de enmarcado automático, los compone en tarjetas en una sola transmisión o crea transmisiones de video independientes para cada vista. |
Vista dinámica | Una o más cámaras intentan proporcionar la mejor vista de la habitación. Puede decidir si combinar varios feeds en uno o proporcionar una vista "interesante" de la sala actual. El propósito de esta vista es proporcionar la vista más equitativa de los participantes en la sala a la llamada. |
Preferido por el proveedor | El sistema de cámaras usa su propia lógica para determinar la mejor vista de la habitación. La estrategia de enmarcado subyacente está sujeta a cambios sin previo aviso. Por ejemplo, si cambia la cantidad de personas en la sala o la cámara puede detectar la diferencia entre una reunión de "Presentador con mucho en juego" y una de "Colaboración", el sistema puede adaptar o cambiar la estrategia de encuadre según lo considere adecuado en este modo. Cuando se usa este modo, llamar a getCur debería mostrar VENDOR_PREFERRED, y no el modo de enmarcado subyacente que seleccionó el sistema. |
Sesgo de encuadre automático
Función | Descripción |
---|---|
Presentador de alto riesgo (seguimiento de oradores) | La cámara intenta encuadrar mejor a la persona que habla de forma activa en la sala. En este caso, la cámara debe enfocarse en el presentador. Por ejemplo, el director general en una sala de juntas dando una presentación. |
Colaboración (seguimiento de salas) |
La cámara intenta encuadrar mejor a todos los participantes de la sala. En esta situación, la cámara debe tratar a todos los participantes de manera equitativa. |
Feeds con encuadre automático
Función | Descripción |
---|---|
Transmisión única | La cámara envía una sola transmisión de video al dispositivo host. |
Multiflujo (en proceso) |
La cámara divide la transmisión y crea varias transmisiones de video para enviarlas al host. Nota: La especificación completa y el comportamiento esperado de esta función están pendientes de revisión y no se admiten hasta que se realicen revisiones posteriores de este documento. |
Valores de mapa de bits del modo de enmarcado automático
Excepto por el estado predeterminado de None
, que está representado por un array de bytes vacío, cada bit del array de bytes representa un modo de cámara diferente, que es una combinación específica de la estrategia de enmarcado automático, el sesgo de enmarcado automático y los feeds de enmarcado automático.
Feeds con encuadre automático | CAZ | Marco dividido | Dinámico | Preferido por el proveedor | Sesgo de encuadre automático |
---|---|---|---|---|---|
Transmisión única | D1 D2 |
- D3 |
D5 D7 |
D9 (bocina o sala) | Bocina Habitación |
Multitransmisión | - - |
- D4 |
D6 D8 |
- | Bocina Habitación |
Modos de marco | Valor del modo de fotogramas (byte menos significativo) |
---|---|
None |
0x0000 |
CAZ, Speaker, Single-Stream |
0x0001 |
CAZ, Room, Single-Stream |
0x0002 |
Split-Frame, Room, Single-Stream |
0x0004 |
Split-Frame, Room, Multi-Stream |
0x0008 |
Dynamic, Speaker, Single-Stream |
0x0010 |
Dynamic, Speaker, Multi-Stream |
0x0020 |
Dynamic, Room, Single-Stream |
0x0040 |
Dynamic, Room, Multi-Stream |
0x0080 |
Vendor-preferred, Single-Stream |
0x0100 |
Control: GOOGXU_FRAME_STRATEGY
Este control se usa para obtener o configurar los modos de encuadre de la cámara, como se indica en Valores de mapa de bits del modo de encuadre automático. Cada modo se representa como un bit en su respectivo mapa de bits. El comando GET_RES
muestra una máscara de bits de 8 bytes con un valor de cero (0) o uno (1) para indicar, respectivamente, si la función es compatible o no con el dispositivo. Por ejemplo, si una cámara admite CAZ, Speaker, Single-Stream
, Split-Frame, Room, Single-Stream
y Dynamic, Room, Multi-Stream
, pero no otros modos, GET_RES
debería mostrar 0x000000000000000085 (es decir, 0b10000101
seguido de siete bytes cero).
El comando SET_CUR
se usa para enviar mapas de bits para indicarle a la cámara qué modo de cámara SINGLE habilitar.
Selector de control | 1 | |||
---|---|---|---|---|
Operación | GET / SET |
|||
wLength |
8 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bActiveMode |
8 | Mapa de bits | Cómo configurar o restablecer el modo de cámara activa |
Notas:
|
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_CUR |
Obtén el modo de cámara de enmarcado activo | |
GET_MIN |
Depende de la cámara | |
GET_MAX |
Depende de la cámara | |
GET_RES |
Muestra una máscara de bits de 8 bytes de los modos de cámara compatibles. | |
GET_LEN |
0x0008 | Longitud |
GET_INFO |
0x0B | AutoUpdate / Write / Read |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valor predeterminado |
SET_CUR |
Cómo configurar el modo de cámara de enmarcado activo |
Control: GOOGXU_REFRAME
Este control se usa para activar el enmarcado único, también conocido como OTAZ. Cuando se activa la OTAZ, la vista de la cámara se ajusta a la mejor vista de la habitación. Luego, el cliente recupera la capacidad de controlar los valores de PTZ. Si no se admite el enmarcado único, la cámara no debe definir este control.
Selector de control | 2 | |||
---|---|---|---|---|
Operación | SET |
|||
wLength |
1 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bReframe |
1 | Número | 0x01 Ejecuta la solicitud de cambio de formato |
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | Solo escritura |
GET_DEF |
0x00 | |
SET_CUR |
Cómo configurar la solicitud para el enmarcado único |
Recuento de ocupación
El recuento de ocupación (OC) es una función que se usa para estimar la cantidad de participantes en una sala de reuniones, a pesar de la vista recortada de la cámara.
En esta tabla, se muestra el comportamiento esperado de los controles de OC y sus interacciones con la transmisión de video de la cámara y el indicador LED de la cámara.
Cuándo se realiza el recuento de ocupación | y la transmisión de video de la cámara es la siguiente: | El indicador LED de la cámara debe estar | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR debe ser |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR debe ser |
---|---|---|---|---|
Activada | No se está transmitiendo y no está silenciado | Activado | 0x01 |
Es el recuento de personas en el campo visual completo de la cámara. |
Activada | Transmisión | Activado | 0x01 |
Es el recuento de personas en el campo visual completo de la cámara. |
Activada | Silenciado | Desactivado | 0x01 |
Desactivadas |
Desactivadas | No se está transmitiendo y no está silenciado | Desactivado | 0x00 |
Desactivadas |
Desactivadas | Transmisión | Activado | 0x00 |
Desactivadas |
Desactivadas | Silenciado | Desactivado | 0x00 |
Desactivadas |
Control: GOOGXU_OCCUPANCY_COUNTING_TOGGLE
Este control se usa para habilitar o inhabilitar la función de contar ocupantes en una habitación. Si estableces un valor de cero (0), se inhabilita esta función, y si estableces uno (1), se habilita. Si esta función no es compatible, la cámara no debería definir este control.
Selector de control | 3 | |||
---|---|---|---|---|
Operación | GET / SET |
|||
wLength |
1 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bOccupancy |
1 | Booleano | Configura la función de recuento de ocupación 0x00 Desactiva la función 0x01 Activa la función |
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_CUR |
Muestra si el recuento de ocupación está activado. | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | AutoUpdate / Write / Read |
GET_DEF |
0x00 | |
SET_CUR |
Habilita o inhabilita la función de recuento de ocupación |
Control: GOOGXU_OCCUPANCY_COUNTING_READ
Este control se usa para leer la cantidad de participantes en una sala que informa la cámara cuando el recuento de ocupación está habilitado. Cuando el recuento de ocupación está inhabilitado, la cámara debe inhabilitar este control. Si no se admite el recuento de ocupación, la cámara no debe definir este control.
Selector de control | 4 | |||
---|---|---|---|---|
Operación | GET |
|||
wLength |
2 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bNumPeople |
2 | Número | Es la cantidad de ocupantes detectados en la vista. (Solo lectura) |
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_CUR |
Muestra la cantidad de ocupantes detectados | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | AutoUpdate / Read |
GET_DEF |
0x0000 |
Telemetría y diagnóstico del dispositivo
Estos controles están diseñados para fomentar mejores prácticas de depuración con el hardware de Meet y, por lo general, no están orientados al usuario.
Control: GOOGXU_STATUS_INFO
Este control se usa para consultar información de la cámara host y compartirla con los socios para la depuración.
Selector de control | 5 | |||
---|---|---|---|---|
Operación | GET |
|||
wLength |
8 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bNumCameras |
1 | Número | Es la cantidad de satélites adicionales conectados a la cámara principal que pueden afectar la transmisión de la cámara que se muestra al host. |
1 | bIsMoving |
1 | Mapa de bits | Es 0 cuando la cámara está inactiva y distinto de cero cuando cambian sus valores de PTZ. Los proveedores pueden asignar diferentes ejes o motores a diferentes bits. |
2 | Undef |
6 | Undef | Se extenderá en el futuro. |
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | 1 | 2 | Descripción |
---|---|---|---|---|
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 | AutoUpdate / Read | ||
GET_DEF |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
Control: GOOGXU_SATELLITE_INFO
Este control se usa para consultar los dispositivos satelitales que están conectados a este sistema de cámaras.
Selector de control | 0x0A | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Operación | GET |
|||||||||||
wLength |
20 | |||||||||||
Desplazamiento | Campo | Tamaño | Valor | Descripción | ||||||||
0 | bSatelliteList |
20 | Mapa de bits | Es la lista de tipos de satélites conectados al sistema. Incluye cuatro ranuras separadas de 5 bytes. Cada uno de los espacios se describe de la siguiente manera:
|
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_MIN |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
|
GET_MAX |
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF |
|
GET_RES |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
|
GET_LEN |
0x14 | 20 bytes |
GET_INFO |
0x09 | AutoUpdate / Read |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Control: GOOGXU_STATUS_RESET
Este control se usa para enviar una solicitud de restablecimiento a la cámara. Si estableces un valor de uno (1), se solicita que se restablezca la cámara. La cámara muestra cero (0) si no se recibió ninguna solicitud de reinicio desde el último restablecimiento y uno (1) si se está restableciendo. El restablecimiento debe activar el reinicio de la cámara. (Esto es necesario para los dispositivos con alimentación propia en los que no es útil forzar una desconexión USB para emular un dispositivo con conexión en caliente).
Selector de control | 6 | |||
---|---|---|---|---|
Operación | GET / SET |
|||
wLength |
1 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bResetRequest |
1 | Booleano | Envía una solicitud de restablecimiento al host y a las cámaras conectadas. Muestra 0x01 si se emitió una solicitud de restablecimiento desde el último restablecimiento; de lo contrario, muestra 0x00. |
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | Escritura / lectura |
GET_DEF |
0x00 |
Ajustes predeterminados de PTZ
Se usa para configurar y restablecer el campo de visión de la cámara en una posición predeterminada.
Control: GOOGXU_PRESETS
Este control se usa para establecer los valores de panorámica, inclinación y zoom (PTZ) de la cámara en una configuración predeterminada.
Preset Action
se usa para indicar la acción prevista del comando. Establecer un valor de uno (1) se usa para asignar los valores actuales de paneo, inclinación y zoom a un índice predeterminado proporcionado. Si estableces un valor de dos (2), se debe realizar la transición del paneo, la inclinación y el zoom de la cámara a los valores asignados anteriormente para el índice proporcionado o las coordenadas de fábrica predeterminadas (si no se asignaron anteriormente). Si estableces un valor de tres (3), se restablece el índice a las coordenadas predeterminadas de fábrica.
Preset Index
se usa para especificar las coordenadas de PTZ asignadas al índice.
El Preset index
de cero (0) se asigna a las coordenadas de inicio y debe ser la posición predeterminada de la cámara cuando se activa GOOGXU_FRAME_STRATEGY
en NONE
.
Selector de control | 7 | |||
---|---|---|---|---|
Operación | SET |
|||
wLength |
2 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bPresetAction |
1 | Número | 0x01: Guarda el parámetro de configuración predeterminado . 0x02: Restablece el parámetro de configuración predeterminado . 0x03: Restablece el parámetro de configuración predeterminado. (El valor predeterminado debe ser una coordenada predeterminada válida). |
1 | bPresetIndex |
1 | Número | Es el índice de configuración predeterminada activa. 0~N-1 En el que 0 se considera la posición de inicio predeterminada de la cámara y N-1 es una constante definida por el proveedor para la cantidad de ajustes predeterminados. |
El comportamiento de los tipos de solicitud admitidos es el siguiente:
Desplazamiento | 0 | 1 | Descripción |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | Se admiten N ajustes predeterminados máximos |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | Solo escritura | |
GET_DEF |
0x00 | 0x00 |
Mapeo auxiliar de desplazamiento y giro
Algunas cámaras tienen componentes especiales, como los motores para cámaras mecánicas o las capacidades de PTZ digitales. Para ello, usa los controles estándar de V4L2 para el paneo, la inclinación y el zoom.
Control: GOOGXU_PAN_TILT_ABSOLUTE
(obsoleto)
Los controles de asignación auxiliares de paneo y giro se definen en el Capítulo 4: Solicitudes específicas de clase, Sección 4.2.2.1.14 Control PanTilt (absoluto) de la Especificación de la clase UVC 1.5.
Control: GOOGXU_PAN_TILT_RELATIVE
(obsoleto)
Los controles de asignación auxiliares de paneo y giro se definen en el Capítulo 4: Solicitudes específicas de clase, Sección 4.2.2.1.15 Control PanTilt (relativo) de la Especificación de la clase UVC 1.5.
Temas relacionados
- Controlador de clase de video USB (UVC) de Linux
- Conjunto de documentos de la clase de video v1.5
- Especificación de USB 2.0
- Centro de ayuda del hardware de Google Meet
- Sección Hardware de Google Meet del Centro de ayuda para administradores de Google Workspace
Notas de la versión
Estas notas de la versión reflejan las mejoras y las funciones nuevas en cada revisión de este documento.
27 de enero de 2025
- Se agregó la estrategia de encuadre
Vendor-preferred
aGOOGXU_FRAME_STRATEGY
. - Se agregó un nuevo control:
GOOGXU_SATELLITE_INFO
.
21 de mayo de 2024
- Se quitó la secuencia de comandos de prueba en favor de la nueva instalación de prueba de CfM, que ejecuta
SET
y también admite la validación de cámaras de la serie One. - Se aclararon los campos en
GOOGXU_STATUS_INFO
. - Se aclaró el comportamiento de
GOOGXU_STATUS_RESET
. - Se dejaron de usar
GOOGXU_PAN_TILT_ABSOLUTE
yGOOGXU_PAN_TILT_RELATIVE
.
15 de noviembre de 2023
Se actualizó la secuencia de comandos de prueba para verificar e interpretar los modos de enmarcado válidos. Se aclararon las representaciones de bytes.
21 de julio de 2023
Se agregó una secuencia de comandos de prueba para que los socios validen las implementaciones para garantizar el cumplimiento de esta especificación.
25 de mayo de 2023
Se corrigió la nota de GOOGXU_PRESETS
sobre la cantidad de ajustes predeterminados. Debe ser N, no N-1.
17 de abril de 2023
Versión inicial