En este documento, se describen las APIs de unidades de extensión de clase de video (XU) USB compatibles que usan los sistemas de conferencias de Google Meet para habilitar funciones de cámara inteligentes. 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 ayudar a los socios a validar el cumplimiento de esta especificación, esta secuencia de comandos de prueba analiza la implementación y genera informes sobre ella.
Para obtener información sobre los cambios más recientes que se realizaron en este documento, consulta Notas de la versión.
Convención de Little-endian
El USB es un estándar Little-endian. En este documento se incluye lo siguiente:
- Los números de varios bytes aparecen con formato big-endian (y se transmiten en formato Little-endian).
- Los arrays de bytes están en el diseño de memoria Little-endian.
Por ejemplo, 0x12345678
es lo mismo 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 |
---|---|
Control de periféricos XU | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Selectores XU de control de periféricos
Estos son los selectores XU de control periférico definidos.
Controlar selectores | Valor |
---|---|
GOOGXU_FRAME_STRATEGY |
0x01 |
GOOGXU_REFRAME |
0x02 |
GOOGXU_OCCUPANCY_COUNTING_TOGGLE |
0x03 |
GOOGXU_OCCUPANCY_COUNTING_READ |
0x04 |
GOOGXU_STATUS_INFO |
0 × 05 |
GOOGXU_STATUS_RESET |
6 x 0 |
GOOGXU_PRESETS |
0x07 |
GOOGXU_PAN_TILT_ABSOLUTE |
0 × 08 |
GOOGXU_PAN_TILT_RELATIVE |
0x09 |
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 de 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 personas en una sala de reuniones y son un tuple
de lo siguiente:
- Estrategia (vista de cámara)
- Sesgo (bocina o habitación)
- Feeds (una o varias transmisiones)
Cada dimensión puede utilizar valores que se describen en las siguientes secciones.
Estrategia de encuadre automático
Función | Descripción |
---|---|
Ninguna | La cámara inhabilita todas las funciones inteligentes de encuadre y le permite al cliente controlar libremente los valores PTZ. Nota: Cuando se establece esta estrategia de encuadre, la cámara permanece en la posición de desplazamiento lateral, inclinación y zoom actuales. |
Enmarcado continuo (CAZ) | Según el sesgo del encuadre, la cámara sigue continuamente a las personas que están en la habitación. Nota: La PTZ se inhabilita en este modo. |
Marcos divididos | La cámara crea todas las vistas de video necesarias. Según la opción Encuadre automático de feeds, los feeds se redactan en mosaicos en una sola transmisión o se crean transmisiones de video por Internet separadas para cada vista. Nota: La PTZ se inhabilita en este modo. |
Vista dinámica | Una o más cámaras intentan ofrecer la mejor vista de la habitación. Puede decidir si componer o no varios feeds en uno o proporcionar una vista "interesante" de la habitación actual. El propósito de esta vista es ofrecer la visión más equitativa de los participantes en la sala para la llamada. Notas:
|
Sesgo de encuadre automático
Función | Descripción |
---|---|
Presentador de alto nivel (seguimiento del orador) | La cámara intenta encuadrar mejor a la persona que habla activamente en la sala. En este escenario, la cámara debe orientar al presentador. Por ejemplo, el director general en una sala de juntas dando una presentación. |
Colaboración (seguimiento de Room) |
La cámara intenta encuadrar mejor a todos los participantes de la sala. En este escenario, la cámara debe tratar a todos los participantes de manera equitativa. La mayoría de las reuniones deberían usar esta estrategia. |
Feeds de encuadre automático
Función | Descripción |
---|---|
Transmisión única | La cámara envía una sola transmisión de video por Internet al dispositivo host. |
Varias transmisiones (trabajo en curso) |
La cámara divide la transmisión y crea varias transmisiones de video por Internet 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 las revisiones posteriores de este documento. |
Valores de mapa de bits del modo de encuadre automático
Excepto por el estado predeterminado de None
que se representa con 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 encuadre automático, el sesgo de encuadre automático y los feeds de encuadre automático.
Índice de bits | CAZ | Marco dividido | Dinámico | - |
---|---|---|---|---|
Bocina | D1 - |
- - |
D5 D6 |
Transmisión única Transmisión múltiple |
Room | D2 - |
D3 D4 |
D7 D8 |
Transmisión única Transmisión múltiple |
Modos de encuadre | Valor de modo de trama (byte menos significativo) |
---|---|
None |
0 × 00 |
CAZ, Speaker, Single-Stream |
0x01 |
CAZ, Room, Single-Stream |
0x02 |
Split-Frame, Room, Single-Stream |
0x04 |
Split-Frame, Room, Multi-Stream |
0 × 08 |
Dynamic, Speaker, Single-Stream |
0 × 10 |
Dynamic, Speaker, Multi-Stream |
0 × 20 |
Dynamic, Room, Single-Stream |
0 × 40 |
Dynamic, Room, Multi-Stream |
0 × 80 |
Control: GOOGXU_FRAME_STRATEGY
Este control se usa para obtener o establecer los modos de encuadre de la cámara como se enumeran en los 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 el dispositivo no admite o no la función. 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 cero bytes).
El comando SET_CUR
se usa para enviar mapas de bits a fin de indicarle a la cámara qué modo de cámara SINGLE debe habilitar.
Selector de control | 1 | |||
---|---|---|---|---|
Operación | GET / SET |
|||
wLength |
8 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bActiveMode |
8 | Mapa de bits | Establecer o regresar el Modo de cámara activa |
Notas:
|
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_CUR |
Obtener el modo de cámara de enmarcado activo | |
GET_MIN |
Funciones que dependen de la cámara | |
GET_MAX |
Funciones que dependen 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 |
0 x 0 mil millones | Actualización automática / escritura / lectura |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valor predeterminado |
SET_CUR |
Establecer el modo de cámara de encuadre activo |
Control: GOOGXU_REFRAME
Este control se usa para activar el Enmarcado único, también conocido como OTAZ. Cuando se activa el modo 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 encuadre único, la cámara no debería 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 Ejecutar solicitud de replanteamiento |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_MIN |
0 × 00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | Solo escritura |
GET_DEF |
0 × 00 | |
SET_CUR |
Establece la solicitud para el enmarcado de un solo ejemplo |
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 por Internet de la cámara y su indicador LED.
Cuando el recuento de ocupación es | y la transmisión de video de la cámara es: | El indicador LED de la cámara debería estar | El valor de GET_CUR de GOOGXU_OCCUPANCY_COUNTING_TOGGLE debe ser |
El valor de GET_CUR de GOOGXU_OCCUPANCY_COUNTING_READ debe ser |
---|---|---|---|---|
Activada | No está transmitiendo y no silenciado | Activo | 0x01 |
La cantidad de personas en el campo visual completo de la cámara. |
Activada | Transmisión | Activo | 0x01 |
La cantidad de personas en el campo visual completo de la cámara. |
Activada | Se silenció | Desactivado | 0x01 |
Desactivadas |
Desactivadas | No está transmitiendo y no silenciado | Desactivado | 0x00 |
Desactivadas |
Desactivadas | Transmisión | Activo | 0x00 |
Desactivadas |
Desactivadas | Se silenció | Desactivado | 0x00 |
Desactivadas |
Control: GOOGXU_OCCUPANCY_COUNTING_TOGGLE
Este control se usa para habilitar o inhabilitar la función a fin de contar a los ocupantes de una habitación. Si se establece un valor de cero (0), se inhabilita esta función y uno (1), se habilita. Si no se admite esta función, 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 | Configurar la función de recuento de ocupación 0x00 Desactivar función 0x01 Activar función |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_CUR |
Mostrar si el recuento de ocupación está activado | |
GET_MIN |
0 × 00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0 x 0 mil millones | Actualización automática / escritura / lectura |
GET_DEF |
0 × 00 | |
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 está habilitado el recuento de ocupación. Si se inhabilita esta función, la cámara debe desactivar este control. Si no se admite el recuento de ocupación, la cámara no debería definir este control.
Selector de control | 4 | |||
---|---|---|---|---|
Operación | GET |
|||
wLength |
2 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bNumPeople |
2 | Número | La cantidad de ocupantes detectados en la vista. (Solo lectura) |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_CUR |
Número de retorno de ocupantes detectados | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | Actualización automática / lectura |
GET_DEF |
0x0000 |
Telemetría y diagnóstico del dispositivo
Estos controles tienen como objetivo fomentar mejores prácticas de depuración con hardware de Meet y, por lo general, no están para los usuarios.
Control: GOOGXU_STATUS_INFO
Este control se usa para consultar información de la cámara host y compartirla con 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 | La cantidad de cámaras adicionales conectadas al dispositivo principal. |
1 | bIsMoving |
1 | Mapa de bits | 0 cuando la cámara está inactiva y un valor distinto de cero cuando está en movimiento. Los proveedores tienen la libertad de asignar diferentes ejes o motores a diferentes bits. |
2 | Undef |
6 | Dejar de definir | Se extenderá en el futuro. |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | 1 | 2 | Descripción |
---|---|---|---|---|
GET_MIN |
0 × 00 | 0 × 00 | 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 |
0 × 08 | 0 × 00 | 0x0008 | |
GET_INFO |
0x09 | Actualización automática / lectura | ||
GET_DEF |
0 × 00 | 0 × 00 | 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 solicitará que se restablezca la cámara. La cámara muestra cero (0) si no se solicitó reiniciar la cámara desde el último restablecimiento y un (1) si se está restableciendo. Un restablecimiento activa el mismo comportamiento que una reconexión de hardware. Esta opción es útil para dispositivos autogenerados en los que no resulta útil forzar una desconexión por USB para emular una 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 la solicitud de restablecimiento se emitió desde el último restablecimiento, de lo contrario, 0x00. |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | Descripción |
---|---|---|
GET_MIN |
0 × 00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | Escritura / lectura |
GET_DEF |
0 × 00 |
Ajustes predeterminados de PTZ
Se usa para configurar y restablecer el campo visual de la cámara a una posición predeterminada.
Control: GOOGXU_PRESETS
Este control se usa para establecer los valores de desplazamiento lateral, 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. Si se establece un valor de uno (1), se usan para asignar los valores actuales de desplazamiento lateral, inclinación y zoom a un índice predeterminado proporcionado. Si se establece un valor de dos (2), se debería cambiar el desplazamiento lateral, 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 previamente). Si se establece un valor de tres (3), se restablecerá el índice a las coordenadas predeterminadas de fábrica.
Preset Index
se usa para especificar las coordenadas PTZ asignadas al índice.
El valor de Preset index
de cero (0) se asigna a las coordenadas de inicio y debe ser la posición predeterminada de activación de la cámara cuando GOOGXU_FRAME_STRATEGY
se establece en NONE
.
Selector de control | 7 | |||
---|---|---|---|---|
Operación | SET |
|||
wLength |
2 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bPresetAction |
1 | Número | 0x01: Guardar ajuste predeterminado 0x02: Restablecer ajuste predeterminado 0x03: Restablecer ajuste predeterminado al valor predeterminado (El valor predeterminado debe ser una coordenada predeterminada válida). |
1 | bPresetIndex |
1 | Número | El índice de Active Preset. 0~N-1 Donde 0 se considera la posición de inicio predeterminada de la cámara y N-1 es una constante definida por el proveedor para el número de ajustes predeterminados. |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | 1 | Descripción |
---|---|---|---|
GET_MIN |
0 × 00 | 0 × 00 | |
GET_MAX |
0x03 | N-1 | Se admiten ajustes predeterminados máximos de N |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0 × 00 | 0x0002 |
GET_INFO |
0x02 | Solo escritura | |
GET_DEF |
0 × 00 | 0 × 00 |
Asignación auxiliar de inclinación y desplazamiento lateral
Algunas cámaras tienen componentes especiales, como los motores de las cámaras mecánicas, que requieren la asignación de comandos XU a los controles estándar de V4L2 para que el desplazamiento lateral y la inclinación funcionen correctamente.
Estos controles imitan los controles absolutos y relativos de desplazamiento lateral e inclinación en la documentación de la especificación de UVC, lo que proporciona una forma estándar para que los dispositivos host asignen estos controles de forma correcta.
Control: GOOGXU_PAN_TILT_ABSOLUTE
Los controles de asignación auxiliar de desplazamiento lateral e inclinación se definen en el Capítulo 4: Sección 4.2.2.1.14 Solicitudes de inclinación (absoluta) de la Especificación de clases UVC 1.5.
Selector de control | 8 | |||
---|---|---|---|---|
Operación | GET/SET |
|||
wLength |
8 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | dwPanAbsolute |
4 | Número firmado | Es el parámetro de configuración del atributo del control de desplazamiento (absoluto) abordado. |
4 | dwTiltAbsolute |
4 | Número firmado | Es el parámetro de configuración del atributo del control de inclinación (absoluto) indicado. |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:
Desplazamiento | 0 | 4 | Descripción |
---|---|---|---|
GET_MIN |
Funciones que dependen de la cámara | ||
GET_MAX |
Funciones que dependen de la cámara | ||
GET_RES |
Funciones que dependen de la cámara | ||
GET_LEN |
0x0008 | ||
GET_INFO |
0 x 0 mil millones | Actualización automática / escritura / lectura | |
GET_DEF |
0x00000000 | 0x00000000 |
Control: GOOGXU_PAN_TILT_RELATIVE
Los controles de asignación auxiliar de inclinación y desplazamiento se definen en el Capítulo 4: Sección 4.2.2.1.15 Solicitudes de desplazamiento lateral (relativo) en la sección Solicitudes específicas para clases de la Especificación de clases UVC 1.5.
Selector de control | 9 | |||
---|---|---|---|---|
Operación | GET/SET |
|||
wLength |
4 | |||
Desplazamiento | Campo | Tamaño | Valor | Descripción |
0 | bPanRelative |
1 | Número firmado | Configuración del atributo del control de desplazamiento (relativo) asignado: 0: Parada 1: desplazamiento en el sentido de las manecillas del reloj 0xFF: movimiento en sentido contrario a las manecillas del reloj |
1 | bPanSpeed |
1 | Número | Velocidad del movimiento de desplazamiento lateral. |
2 | bTiltRelative |
1 | Número firmado | Configuración del atributo del control de inclinación (relativo) asignado: 0: Detener 1: Apuntar el plano de imagen hacia arriba 0xFF: Apuntar el plano de imagen hacia abajo |
3 | bTiltSpeed |
1 | Número | Velocidad del movimiento de inclinación. |
El comportamiento de los tipos de solicitudes admitidos es el siguiente:>
Desplazamiento | 0 | 1 | 2 | 3 | Descripción |
---|---|---|---|---|---|
GET_MIN |
Funciones que dependen de la cámara | ||||
GET_MAX |
Funciones que dependen de la cámara | ||||
GET_RES |
Funciones que dependen de la cámara | ||||
GET_LEN |
0x04 | 0 × 00 | 0x0004 | ||
GET_INFO |
0 x 0 mil millones | Actualización automática / escritura / lectura | |||
GET_DEF |
0 × 00 | 0 × 00 | 0 × 00 | 0 × 00 |
Temas relacionados
- Controlador de clase de video USB (UVC) de Linux
- Conjunto de documentos de clase de video v1.5
- Especificación de USB 2.0
- Centro de ayuda del hardware de Google Meet
- Sección de hardware de Google Meet del Centro de ayuda para administradores de Google Workspace
- Secuencia de comandos de prueba de las APIs de la unidad de extensión de clase de video USB del hardware de Google Meet
Notas de la versión
Estas notas de la versión reflejan mejoras y funciones nuevas en cada revisión de este documento.
15 de noviembre de 2023
Se actualizó la secuencia de comandos de prueba para verificar y también 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 a fin de cumplir con esta especificación.
25 de mayo de 2023
Se corrigió la nota de GOOGXU_PRESETS con respecto a la cantidad de ajustes predeterminados. Debería ser N, no N-1.
17 de abril de 2023
Versión inicial