Neste documento, descrevemos as APIs Video Class Extension Unit (XU) USB compatíveis usadas pelos sistemas de videoconferência do Google Meet para ativar recursos de câmera inteligentes. O objetivo da criação dessa especificação é influenciar as práticas para ativar esses recursos e permitir uma melhor escalonabilidade e testes assíncronos para nossos parceiros.
Para ajudar os parceiros a validar a conformidade com essa especificação, este script de teste analisa e gera relatórios sobre sua implementação.
Para detalhes sobre as mudanças mais recentes neste documento, acesse as Notas da versão.
Convenção Little-endian
USB é um padrão few-endian. Neste documento:
- Números de vários bytes parecem big-endian (e são transmitidos few-endian).
- As matrizes de bytes estão no layout de memória few-endian.
Por exemplo, 0x12345678
é igual a [0x78, 0x56, 0x34, 0x12]
.
GUID da unidade de extensão
As unidades de extensão compatíveis com a especificação de controle do Meet XU precisam usar esse GUID.
Unidade de extensão | GUID |
---|---|
Controle periférico XU | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Seletores XU de controle periférico
Estes são os seletores XU dos controles de periféricos definidos.
Seletores de controle | 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 |
Controlar o tipo de solicitação
Os tipos de solicitação de controle são definidos no Capítulo 4, solicitações específicas de classe da especificação de classe UVC 1.5 (link em inglês).
Operação | Controle de UVC |
---|---|
GET |
GET_CUR , GET_MIN , GET_MAX , GET_RES , GET_LEN , GET_INFO , GET_DEF |
SET |
SET_CUR |
Modos da câmera
Os modos de câmera são usados para enquadrar pessoas em uma sala de conferências e são tuple
de:
- Estratégia (visualização da câmera)
- Viés (alto-falante ou sala)
- Feeds (únicos ou vários streams)
Cada dimensão pode ter valores descritos nas seções a seguir.
Estratégia de enquadramento automático
Recurso | Descrição |
---|---|
Nenhum | A câmera desativa todos os recursos de enquadramento inteligente e permite que o cliente controle livremente os valores PTZ. Observação:quando definida para essa estratégia de enquadramento, a câmera permanece na posição de movimentação, inclinação e zoom atuais. |
Enquadramento contínuo (CAZ, na sigla em inglês) | Com base no viés de enquadramento, a câmera rastreia continuamente as pessoas na sala. Observação:o modo PTZ está desativado nesse modo. |
Quadros separados | A câmera cria quantas exibições de vídeo forem necessárias. Com base na opção Enquadramento automático de feeds, os feeds são compostos por blocos em um único stream ou criados streams de vídeo separados para cada visualização. Observação:o modo PTZ está desativado nesse modo. |
Visualização dinâmica | Uma ou mais câmeras tentam fornecer a melhor visão do ambiente. Ela decide se vai ou não combinar vários feeds em um ou fornecer uma visão "interessante" da sala atual. O objetivo dessa visualização é mostrar de maneira equitativa os participantes da sala na chamada. Observações:
|
Viés de enquadramento automático
Recurso | Descrição |
---|---|
Apresentador de alto risco (acompanhamento de palestrantes) | A câmera tenta enquadrar melhor a pessoa que está falando ativamente na sala. Neste cenário, a câmera precisa estar voltada para o apresentador. Por exemplo, o CEO em uma sala de reuniões fazendo uma apresentação. |
Colaboração (rastreamento de sala) |
A câmera tenta enquadrar melhor todos os participantes na sala. Neste cenário, a câmera precisa tratar todos os participantes de maneira equitativa. A maioria das reuniões deve usar essa estratégia. |
Enquadramento automático de feeds
Recurso | Descrição |
---|---|
Fluxo único | A câmera envia um único stream de vídeo para o dispositivo host. |
Multistream (em andamento) |
A câmera divide o stream e cria vários streams de vídeo para enviar ao host. Observação:a especificação completa e o comportamento esperado para esse recurso estão com revisão pendente e estão disponíveis apenas após as próximas revisões deste documento. |
Valores de bitmap do modo de enquadramento automático
Exceto pelo estado padrão de None
, que é representado por uma matriz de bytes
vazia, cada bit na matriz de bytes representa um modo de câmera diferente, que é uma
combinação específica da estratégia de enquadramento automático, viés de enquadramento
automático e Feeds de enquadramento automático.
Índice de bits | CAZ | Frame dividido | Dynamic | - |
---|---|---|---|---|
Apresentador | Dia 1 – |
– – |
D5 D6 |
Stream único Multistream |
Room | Dia 2 – |
D3 D4 |
D7 D8 |
Stream único Multistream |
Modos de frame | Valor do modo de frame (byte menos significativo) |
---|---|
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 |
Controle: GOOGXU_FRAME_STRATEGY
Esse controle é usado para conferir ou definir os modos de enquadramento da câmera, conforme listado em
Valores de bitmap do modo de enquadramento automático. Cada modo é representado como
um bit nos respectivos bitmaps. O comando GET_RES
retorna uma bitmask de 8 bytes
com um valor zero (0) ou um (1) para indicar, respectivamente, se o
recurso não tem suporte ou tem suporte do dispositivo. Por exemplo, se uma câmera
for compatível com CAZ, Speaker, Single-Stream
, Split-Frame, Room, Single-Stream
e
Dynamic, Room, Multi-Stream
, mas nenhum outro modo, GET_RES
retornará
0x000000000000000085 (ou seja, 0b10000101
seguido por sete zero bytes).
O comando SET_CUR
é usado para enviar bitmaps e informar à câmera qual
modo SINGLE precisa ser ativado.
Seletor de controle | 1 | |||
---|---|---|---|---|
Operação | GET / SET |
|||
wLength |
8 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bActiveMode |
8 | Bitmap | Definir ou retornar o modo de câmera ativa |
Observações:
|
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | Descrição |
---|---|---|
GET_CUR |
Acessar modo de câmera enquadramento ativo | |
GET_MIN |
Dependente da câmera | |
GET_MAX |
Dependente da câmera | |
GET_RES |
Retorna uma bitmask de 8 bytes dos modos de câmera com suporte | |
GET_LEN |
0x0008 | Comprimento |
GET_INFO |
0 x 0 bi | Atualização automática / gravação / leitura |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valor padrão |
SET_CUR |
Definir o modo da câmera de enquadramento ativo |
Controle: GOOGXU_REFRAME
Esse controle é usado para acionar o enquadramento único, também conhecido como OTAZ. Quando a OTAZ é acionada, a visualização da câmera se ajusta à melhor visualização do cômodo. Depois, o cliente recupera a capacidade de controlar os valores de PTZ. Se o enquadramento único não for compatível, a câmera não definirá esse controle.
Seletor de controle | 2 | |||
---|---|---|---|---|
Operação | SET |
|||
wLength |
1 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bReframe |
1 | Número | 0x01 Executar solicitação de reenquadramento |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | Descrição |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | Somente gravação |
GET_DEF |
0x00 | |
SET_CUR |
Definir solicitação de enquadramento único |
Contagem de ocupação
A contagem de ocupação (OC, na sigla em inglês) é um recurso usado para estimar o número de participantes em uma sala de reunião, apesar da visualização cortada da câmera.
Esta tabela mostra o comportamento esperado dos controles da OC e as interações deles com o stream de vídeo e o indicador LED da câmera.
Quando a contagem de ocupação é | e o stream de vídeo da câmera é: | O indicador LED da câmera deve estar | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR precisa ser |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR precisa ser |
---|---|---|---|---|
Ativado | Não está sendo transmitida e não está silenciada | Ativado | 0x01 |
A contagem de pessoas no campo de visão completo da câmera. |
Ativado | Streaming | Ativado | 0x01 |
A contagem de pessoas no campo de visão completo da câmera. |
Ativado | silenciado; | Desativado | 0x01 |
Desativadas |
Desativadas | Não está sendo transmitida e não está silenciada | Desativado | 0x00 |
Desativadas |
Desativadas | Streaming | Ativado | 0x00 |
Desativadas |
Desativadas | silenciado; | Desativado | 0x00 |
Desativadas |
Controle: GOOGXU_OCCUPANCY_COUNTING_TOGGLE
Esse controle é usado para ativar ou desativar o recurso de contagem de ocupantes em um ambiente. Definir um valor como zero (0) desativa esse recurso e 1 (um) ativa ele. Se esse recurso não tiver suporte, a câmera não vai definir esse controle.
Seletor de controle | 3 | |||
---|---|---|---|---|
Operação | GET / SET |
|||
wLength |
1 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bOccupancy |
1 | Booleano | Definir função de contagem de ocupação 0x00 Desativar função 0x01 Ativar função |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | Descrição |
---|---|---|
GET_CUR |
Devolver se a contagem de ocupação estiver ativada | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0 x 0 bi | Atualização automática / gravação / leitura |
GET_DEF |
0x00 | |
SET_CUR |
Ativar ou desativar o recurso de contagem de ocupação |
Controle: GOOGXU_OCCUPANCY_COUNTING_READ
Esse controle é usado para ler o número de participantes de uma sala informado pela câmera quando a contagem de ocupação está ativada. Se esse recurso estiver desativado, a câmera precisará desativar o controle. Se a contagem de ocupação não estiver disponível, a câmera não vai definir esse controle.
Seletor de controle | 4 | |||
---|---|---|---|---|
Operação | GET |
|||
wLength |
2 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bNumPeople |
2 | Número | O número de ocupantes detectados na visualização. (Somente leitura) |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | Descrição |
---|---|---|
GET_CUR |
Número de retorno dos ocupantes detectados | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | Atualização automática / leitura |
GET_DEF |
0x0000 |
Telemetria e diagnósticos do dispositivo
Esses controles visam incentivar práticas de depuração melhores com o hardware do Google Meet e geralmente não são voltados para o usuário.
Controle: GOOGXU_STATUS_INFO
Esse controle é usado para consultar informações da câmera do host e compartilhar com parceiros para depuração.
Seletor de controle | 5 | |||
---|---|---|---|---|
Operação | GET |
|||
wLength |
8 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bNumCameras |
1 | Número | O número de câmeras adicionais conectadas ao dispositivo principal. |
1 | bIsMoving |
1 | Bitmap | 0 quando a câmera está inativa e diferente de zero quando ela está em movimento. Os fornecedores são livres para mapear diferentes eixos ou motores para diferentes bits. |
2 | Undef |
6 | Cancelar definição | A ser estendido no futuro. |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | 1 | 2 | Descrição |
---|---|---|---|---|
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 | Atualização automática / leitura | ||
GET_DEF |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
Controle: GOOGXU_STATUS_RESET
Esse controle é usado para solicitar a redefinição da câmera. A definição do valor 1 (um) solicita que a câmera seja redefinida. A câmera vai retornar zero (0) se não houver solicitação para reiniciá-la desde a última redefinição, e um (1) se ela estiver sendo redefinida. Uma redefinição aciona o mesmo comportamento que uma reconexão de hardware. Isso é útil para dispositivos autoalimentados em que não é útil forçar um desconexão USB para emular um hotplug.
Seletor de controle | 6 | |||
---|---|---|---|---|
Operação | GET / SET |
|||
wLength |
1 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bResetRequest |
1 | Booleano | Enviar uma solicitação de redefinição ao host e às câmeras conectadas. retorna 0x01 se a solicitação de redefinição foi emitida desde a última redefinição. Caso contrário, retorna 0x00. |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | Descrição |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | Gravação / leitura |
GET_DEF |
0x00 |
Predefinições PTZ
Usado para configurar e restaurar o campo de visão da câmera em uma posição predefinida.
Controle: GOOGXU_PRESETS
Esse controle é usado para definir os valores de movimentação, inclinação e zoom (PTZ, na sigla em inglês) da câmera para uma configuração predefinida.
O Preset Action
é usado para declarar a ação pretendida do comando. A definição de um valor de 1 (um) é usada para mapear os valores atuais de movimentação, inclinação e zoom para um índice predefinido fornecido. A definição de um valor de dois (2) precisa fazer a transição da movimentação,
inclinação e zoom da câmera para os valores mapeados anteriormente para o índice
fornecido ou as coordenadas padrão de fábrica (se não tiverem sido mapeadas anteriormente). Definir um valor de três (3) redefine o índice para as coordenadas padrão de fábrica.
O Preset Index
é usado para especificar as coordenadas PTZ mapeadas para o índice.
O Preset index
de zero (0) é mapeado para as coordenadas da casa e precisa ser
a posição padrão da câmera na ativação, quando GOOGXU_FRAME_STRATEGY
está definido como
NONE
.
Seletor de controle | 7 | |||
---|---|---|---|---|
Operação | SET |
|||
wLength |
2 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bPresetAction |
1 | Número | 0x01: salvar predefinição 0x02: restaurar predefinição 0x03: redefinir predefinição para o padrão O padrão deve ser uma coordenada predefinida válida. |
1 | bPresetIndex |
1 | Número | O índice de predefinição ativa. 0~N-1 , em que 0 é considerado a posição inicial padrão da câmera e N-1 é uma constante definida pelo fornecedor para o número de predefinições. |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | 1 | Descrição |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | Número máximo de predefinições compatíveis |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | Somente gravação | |
GET_DEF |
0x00 | 0x00 |
Mapeamento auxiliar de movimentação e inclinação
Algumas câmeras têm componentes especiais, como os motores para câmeras mecânicas, que exigem o mapeamento de comandos XU em controles V4L2 padrão para que os recursos de movimentação e inclinação funcionem conforme o esperado.
Esses controles imitam os controles absolutos e relativos de movimentação e inclinação na documentação de especificação UVC, fornecendo uma maneira padrão para os dispositivos host mapearem corretamente esses controles.
Controle: GOOGXU_PAN_TILT_ABSOLUTE
Os controles de mapeamento auxiliar de movimentação e inclinação são definidos no Capítulo 4: solicitações específicas de classe, Seção 4.2.2.1.14 Controle "Panorâmica (absoluto)" da especificação de classe UVC 1.5 (link em inglês).
Seletor de controle | 8 | |||
---|---|---|---|---|
Operação | GET/SET |
|||
wLength |
8 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | dwPanAbsolute |
4 | Número assinado | A configuração do atributo do controle de panorâmica (absoluto) endereçado. |
4 | dwTiltAbsolute |
4 | Número assinado | A configuração do atributo do controle de inclinação (absoluto) endereçado. |
O comportamento dos tipos de solicitação compatíveis é o seguinte:
Deslocamento | 0 | 4 | Descrição |
---|---|---|---|
GET_MIN |
Dependente da câmera | ||
GET_MAX |
Dependente da câmera | ||
GET_RES |
Dependente da câmera | ||
GET_LEN |
0x0008 | ||
GET_INFO |
0 x 0 bi | Atualização automática / gravação / leitura | |
GET_DEF |
0x00000000 | 0x00000000 |
Controle: GOOGXU_PAN_TILT_RELATIVE
Os controles de mapeamento auxiliar de movimentação e inclinação são definidos no Capítulo 4: solicitações específicas de classe, Seção 4.2.2.1.15 Controle do PanIntil (relativo) da especificação de classe UVC 1.5 (link em inglês).
Seletor de controle | 9 | |||
---|---|---|---|---|
Operação | GET/SET |
|||
wLength |
4 | |||
Deslocamento | Campo | Tamanho | Valor | Descrição |
0 | bPanRelative |
1 | Número assinado | A configuração do atributo do controle de movimentação (relativa) endereçada: 0: Parada 1: movendo-se para a direção no sentido horário 0xFF: movendo-se para o sentido anti-horário |
1 | bPanSpeed |
1 | Número | Velocidade do movimento da movimentação. |
2 | bTiltRelative |
1 | Número assinado | A configuração do atributo do controle de inclinação (relativo) endereçado: 0: parar 1: apontar o plano de imagem para cima 0xFF: apontar o plano de imagem para baixo |
3 | bTiltSpeed |
1 | Número | Velocidade do movimento de inclinação. |
O comportamento dos tipos de solicitação compatíveis é o seguinte:>
Deslocamento | 0 | 1 | 2 | 3 | Descrição |
---|---|---|---|---|---|
GET_MIN |
Dependente da câmera | ||||
GET_MAX |
Dependente da câmera | ||||
GET_RES |
Dependente da câmera | ||||
GET_LEN |
0x04 | 0x00 | 0x0004 | ||
GET_INFO |
0 x 0 bi | Atualização automática / gravação / leitura | |||
GET_DEF |
0x00 | 0x00 | 0x00 | 0x00 |
Temas relacionados
- Driver de classe de vídeo USB (UVC) do Linux
- Conjunto de documentos da classe de vídeo v1.5
- Especificação USB 2.0
- Central de Ajuda do hardware do Google Meet
- Seção "Hardware do Google Meet" da Central de Ajuda para admins do Google Workspace
- Script de teste das APIs de unidade de extensão de classe de vídeo USB do hardware do Google Meet
Notas da versão
As notas da versão refletem as melhorias e os novos recursos em cada revisão deste documento.
15 de novembro de 2023
O script de teste foi atualizado para verificar e interpretar os modos de enquadramento válidos. Esclarecimento das representações de bytes.
21 de julho de 2023
Adicionamos um script de teste para que os parceiros validem implementações para obedecer a essa especificação.
25 de maio de 2023
Correção da observação GOOGXU_PRESETS sobre o número de predefinições. Deve ser N, não N-1.
17 de abril de 2023
Versão inicial.