Questo documento descrive le API USB Video Class Extension Unit (XU) supportate utilizzate dai sistemi di conferenza Google Meet per attivare le funzionalità intelligenti della videocamera. Lo scopo della creazione di questa specifica è influenzare le pratiche per abilitare queste funzionalità e consentire una migliore scalabilità e test asincroni per i nostri partner.
Per informazioni dettagliate sulle ultime modifiche apportate a questo documento, consulta le note di rilascio.
Struttura di test
Per aiutare i partner a convalidare la conformità a questa specifica, forniamo un impianto di test nei dispositivi Chromebox for meetings impostati in modalità sviluppatore.
Attiva
la scrittura nel file system.
Aggiungi le seguenti righe a
/etc/chrome_dev.conf
:
--enable-logging
--log-level=0
Riavvia il dispositivo, collega la videocamera e una tastiera USB, premi Ctrl-Alt-X
e la conformità alle specifiche della videocamera attiva verrà esercitata e registrata in /var/log/chrome/chrome
(se utilizzi un'immagine firmata, in /home/chronos/user/log/chrome
).
Convenzione little-endian
USB è uno standard little-endian. All'interno di questo documento:
- I numeri multi-byte vengono visualizzati in formato big-endian (e vengono trasmessi in formato little-endian).
- Gli array di byte sono nel layout di memoria little-endian.
Ad esempio, 0x12345678
è uguale a [0x78, 0x56, 0x34, 0x12]
.
GUID unità di estensione
Le unità di estensione che supportano questa specifica di controllo Meet XU devono utilizzare questo GUID.
Unità di estensione | GUID |
---|---|
Peripheral Control XU | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Selettori XU di controllo delle periferiche
Questi sono i selettori XU di controllo delle periferiche definiti.
Selettori di controllo | Valore |
---|---|
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 di richiesta di controllo
I tipi di richieste di controllo sono definiti nel capitolo 4: Richieste specifiche della classe della specifica della classe UVC 1.5.
Operazione | Controllo UVC |
---|---|
GET |
GET_CUR , GET_MIN , GET_MAX , GET_RES , GET_LEN , GET_INFO , GET_DEF |
SET |
SET_CUR |
Modalità fotocamera
Le modalità fotocamera vengono utilizzate per inquadrare le persone in una sala riunioni e sono un tuple
di:
- Strategia (vista della videocamera)
- Bias (speaker o stanza)
- Feed (uno o più stream)
Ogni dimensione può assumere i valori descritti nelle sezioni seguenti.
Strategia di inquadratura automatica
In tutte le modalità di inquadratura automatica, tranne "Nessuna", la panoramica, l'inclinazione e lo zoom manuali sono disattivati.
Funzionalità | Descrizione |
---|---|
Nessuno | La videocamera disattiva tutte le funzionalità di inquadratura intelligente e consente al client di controllare liberamente i valori PTZ. Nota:se impostata su questa strategia di inquadratura, la videocamera rimane nella sua attuale posizione di panoramica, inclinazione e zoom. |
Inquadratura continua (CAZ) | In base alla preferenza di inquadratura, la videocamera traccia continuamente le persone nella stanza. |
Frame divisi | La videocamera crea tutte le visualizzazioni video necessarie. In base all'opzione Feed con inquadratura automatica, li compone in riquadri in un unico stream o crea stream video separati per ogni visualizzazione. |
Visualizzazione dinamica | Una o più videocamere tentano di fornire la migliore visualizzazione della stanza. Può decidere se comporre più feed in uno solo o fornire una visualizzazione "interessante" della stanza corrente. Lo scopo di questa visualizzazione è fornire una visione più equa dei partecipanti alla chiamata presenti nella stanza. |
Preferito dal fornitore | Il sistema di videocamere utilizza una propria logica per determinare la migliore visuale della stanza. La strategia di inquadratura sottostante è soggetta a modifiche senza preavviso. Ad esempio, se il numero di persone nella stanza cambia o la videocamera è in grado di rilevare la differenza tra una riunione "Presentatore di alto livello" e una riunione "Collaborazione", il sistema è libero di adattare o modificare la strategia di inquadratura come meglio crede in questa modalità. In questa modalità, la chiamata getCur dovrebbe restituire VENDOR_PREFERRED e non la modalità di inquadratura sottostante selezionata dal sistema. |
Bias di inquadratura automatica
Funzionalità | Descrizione |
---|---|
Presentatore di eventi importanti (tracciamento dell'oratore) | La videocamera tenta di inquadrare al meglio la persona che sta parlando attivamente nella stanza. In questo scenario, la videocamera dovrebbe dare la priorità al relatore. Ad esempio, l'amministratore delegato in una sala riunioni che fa una presentazione. |
Collaborazione (monitoraggio della stanza) |
La videocamera tenta di inquadrare al meglio tutti i partecipanti nella stanza. In questo scenario, la videocamera deve trattare tutti i partecipanti in modo equo. |
Feed con inquadratura automatica
Funzionalità | Descrizione |
---|---|
Single-Stream | La videocamera invia un singolo video stream al dispositivo host. |
Multi-Stream (in corso di elaborazione) |
La videocamera divide lo stream e crea più video stream da inviare all'host. Nota:la specifica completa e il comportamento previsto di questa funzionalità sono in attesa di revisione e non sono supportati fino alle revisioni successive di questo documento. |
Valori bitmap della modalità di inquadratura automatica
Ad eccezione dello stato predefinito di None
, rappresentato da un array di byte vuoto, ogni bit nell'array di byte rappresenta una modalità della videocamera diversa, ovvero una combinazione specifica della strategia di inquadratura automatica, della distorsione dell'inquadratura automatica e dei feed dell'inquadratura automatica.
Feed con inquadratura automatica | CAZ | Split-Frame | Dinamico | Preferito dal fornitore | Bias di inquadratura automatica |
---|---|---|---|---|---|
Single-Stream | D1 D2 |
- D3 |
D5 D7 |
D9 (speaker o stanza) | Speaker Stanza |
Multi-Stream | - - |
- D4 |
D6 D8 |
- | Speaker Stanza |
Modalità frame | Valore della modalità Frame (byte meno 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 |
Controllo: GOOGXU_FRAME_STRATEGY
Questo controllo viene utilizzato per ottenere o impostare le modalità di inquadratura della videocamera elencate in
Valori bitmap della modalità di inquadratura automatica. Ogni modalità è rappresentata
da un bit nella rispettiva bitmap. Il comando GET_RES
restituisce una maschera di bit lunga 8 byte con un valore pari a zero (0) o uno (1) per indicare rispettivamente se la funzionalità non è supportata o è supportata dal dispositivo. Ad esempio, se una videocamera
supporta CAZ, Speaker, Single-Stream
, Split-Frame, Room, Single-Stream
e
Dynamic, Room, Multi-Stream
, ma non altre modalità, GET_RES
deve restituire
0x000000000000000085 (ovvero 0b10000101
seguito da sette byte zero).
Il comando SET_CUR
viene utilizzato per inviare bitmap per indicare alla videocamera quale
modalità videocamera SINGLE attivare.
Selettore di controllo | 1 | |||
---|---|---|---|---|
Operazione | GET / SET |
|||
wLength |
8 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bActiveMode |
8 | Bitmap | Impostare o ripristinare la modalità Fotocamera attiva |
Note:
|
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_CUR |
Ottenere la modalità fotocamera Inquadratura attiva | |
GET_MIN |
Dipendente dalla videocamera | |
GET_MAX |
Dipendente dalla videocamera | |
GET_RES |
Restituisce una maschera di bit lunga 8 byte delle modalità della videocamera supportate | |
GET_LEN |
0x0008 | Lunghezza |
GET_INFO |
0x0B | Aggiornamento automatico / Scrittura / Lettura |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valore predefinito |
SET_CUR |
Impostare la modalità della videocamera con inquadratura attiva |
Controllo: GOOGXU_REFRAME
Questo controllo viene utilizzato per attivare l'inquadratura one-shot, nota anche come OTAZ. Quando viene attivata la funzionalità OTAZ, la visualizzazione della videocamera si sposta sulla migliore visualizzazione della stanza. Successivamente, il client riacquisisce la possibilità di controllare i valori PTZ. Se l'inquadratura one-shot non è supportata, la videocamera non deve definire questo controllo.
Selettore di controllo | 2 | |||
---|---|---|---|---|
Operazione | SET |
|||
wLength |
1 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bReframe |
1 | Numero | 0x01 Execute Reframe Request |
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | Solo scrittura |
GET_DEF |
0x00 | |
SET_CUR |
Imposta la richiesta di inquadratura one-shot |
Conteggio presenze
Il conteggio delle persone (OC) è una funzionalità utilizzata per stimare il numero di partecipanti in una sala riunioni, nonostante la visuale ritagliata della videocamera.
Questa tabella mostra il comportamento previsto dei controlli OC e le loro interazioni con il video stream della videocamera e l'indicatore LED della videocamera.
Quando il conteggio presenze è | e lo stream video della videocamera è: | L'indicatore LED della videocamera dovrebbe essere | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR deve essere |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR deve essere |
---|---|---|---|---|
Attivato | Non in streaming e audio non disattivato | On | 0x01 |
Il conteggio delle persone nel campo visivo completo della videocamera. |
Attivato | Streaming | On | 0x01 |
Il conteggio delle persone nel campo visivo completo della videocamera. |
Attivato | Audio disattivato | Off | 0x01 |
Disattivate |
Disattivate | Non in streaming e audio non disattivato | Off | 0x00 |
Disattivate |
Disattivate | Streaming | On | 0x00 |
Disattivate |
Disattivate | Audio disattivato | Off | 0x00 |
Disattivate |
Controllo: GOOGXU_OCCUPANCY_COUNTING_TOGGLE
Questo controllo viene utilizzato per attivare o disattivare la funzionalità di conteggio degli occupanti in una stanza. Se imposti il valore su zero (0), questa funzionalità viene disattivata, mentre se lo imposti su uno (1), viene attivata. Se questa funzionalità non è supportata, la videocamera non deve definire questo controllo.
Selettore di controllo | 3 | |||
---|---|---|---|---|
Operazione | GET / SET |
|||
wLength |
1 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bOccupancy |
1 | Booleano | Imposta la funzione di conteggio del numero di partecipanti 0x00 Disattiva la funzione 0x01 Attiva la funzione |
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_CUR |
Restituisce un valore se il conteggio del numero di partecipanti è attivo | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | Aggiornamento automatico / Scrittura / Lettura |
GET_DEF |
0x00 | |
SET_CUR |
Attivare o disattivare la funzionalità di conteggio del numero di partecipanti |
Controllo: GOOGXU_OCCUPANCY_COUNTING_READ
Questo controllo viene utilizzato per leggere il numero di partecipanti in una stanza segnalato dalla videocamera quando il conteggio dell'occupazione è abilitato. Quando il conteggio dell'occupazione è disattivato, la videocamera deve disattivare questo controllo. Se il conteggio dell'occupazione non è supportato, la videocamera non deve definire questo controllo.
Selettore di controllo | 4 | |||
---|---|---|---|---|
Operazione | GET |
|||
wLength |
2 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bNumPeople |
2 | Numero | Il numero di occupanti rilevati nella visualizzazione. (Sola lettura) |
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_CUR |
Restituisce il numero di occupanti rilevati | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | AutoUpdate / Read |
GET_DEF |
0x0000 |
Telemetria e diagnostica del dispositivo
Questi controlli hanno lo scopo di incoraggiare migliori pratiche di debug con l'hardware Meet e di solito non sono rivolti agli utenti.
Controllo: GOOGXU_STATUS_INFO
Questo controllo viene utilizzato per eseguire query sulle informazioni della videocamera host da condividere con i partner per il debug.
Selettore di controllo | 5 | |||
---|---|---|---|---|
Operazione | GET |
|||
wLength |
8 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bNumCameras |
1 | Numero | Il numero di satelliti aggiuntivi collegati alla videocamera principale che potrebbero influire sullo stream della videocamera restituito all'host. |
1 | bIsMoving |
1 | Bitmap | 0 quando la videocamera è inattiva e diverso da zero quando i valori PTZ cambiano. I fornitori sono liberi di mappare assi o motori diversi su bit diversi. |
2 | Undef |
6 | Undef | Verrà esteso in futuro. |
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | 1 | 2 | Descrizione |
---|---|---|---|---|
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 |
Controllo: GOOGXU_SATELLITE_INFO
Questo controllo viene utilizzato per eseguire query sui dispositivi satellite connessi a questo sistema di telecamere.
Selettore di controllo | 0x0A | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Operazione | GET |
|||||||||||
wLength |
20 | |||||||||||
Offset | Campo | Dimensioni | Valore | Descrizione | ||||||||
0 | bSatelliteList |
20 | Bitmap | L'elenco dei tipi di satelliti collegati al sistema. Include quattro slot separati da 5 byte. Ciascuno slot è descritto come segue:
|
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
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 byte |
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 |
Controllo: GOOGXU_STATUS_RESET
Questo controllo viene utilizzato per inviare una richiesta di ripristino alla videocamera. L'impostazione del valore su uno (1) richiede il ripristino della videocamera. La videocamera restituisce zero (0) se non è stata richiesta la riattivazione della videocamera dall'ultimo ripristino e uno (1) se è in fase di ripristino. Il ripristino deve attivare il riavvio della videocamera. (Questo è necessario per i dispositivi autoalimentati in cui forzare una disconnessione USB per emulare un hotplug non è utile.)
Selettore di controllo | 6 | |||
---|---|---|---|---|
Operazione | GET / SET |
|||
wLength |
1 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bResetRequest |
1 | Booleano | Invia una richiesta di ripristino all'hub e alle videocamere connesse. Restituisce 0x01 se la richiesta di ripristino è stata emessa dall'ultimo ripristino, altrimenti 0x00. |
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | Scrittura / lettura |
GET_DEF |
0x00 |
Preset PTZ
Utilizzato per configurare e ripristinare il campo visivo della videocamera in una posizione preimpostata.
Controllo: GOOGXU_PRESETS
Questo controllo viene utilizzato per impostare i valori di panoramica, inclinazione e zoom (PTZ) della videocamera su una configurazione preimpostata.
Preset Action
viene utilizzato per indicare l'azione prevista del comando. L'impostazione
di un valore pari a uno (1) viene utilizzata per mappare i valori correnti di panoramica, inclinazione e zoom a un
indice preimpostato fornito. L'impostazione di un valore pari a due (2) deve spostare la panoramica, l'inclinazione e lo zoom della videocamera sui valori mappati in precedenza per l'indice fornito o sulle coordinate predefinite di fabbrica (se non mappate in precedenza). L'impostazione di un valore di tre (3) ripristina l'indice alle coordinate predefinite di fabbrica.
Preset Index
viene utilizzato per specificare le coordinate PTZ mappate all'indice.
Il valore Preset index
pari a zero (0) è mappato alle coordinate della posizione originale e deve
essere la posizione predefinita della videocamera al risveglio quando GOOGXU_FRAME_STRATEGY
è impostato su
NONE
.
Selettore di controllo | 7 | |||
---|---|---|---|---|
Operazione | SET |
|||
wLength |
2 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bPresetAction |
1 | Numero | 0x01: Salva preimpostazione 0x02: Ripristina preimpostazione 0x03: Ripristina preimpostazione predefinita. (Il valore predefinito deve essere una coordinata preimpostata valida.) |
1 | bPresetIndex |
1 | Numero | Indice dei preset attivi. 0~N-1 Dove 0 è considerato la posizione iniziale predefinita della videocamera e N-1 è una costante definita dal fornitore per il numero di preset. |
Il comportamento dei tipi di richieste supportati è il seguente:
Offset | 0 | 1 | Descrizione |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | Numero massimo di preset supportati |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | Solo scrittura | |
GET_DEF |
0x00 | 0x00 |
Mappatura ausiliaria di panoramica e inclinazione
Alcune videocamere hanno componenti speciali, come i motori per le videocamere meccaniche o funzionalità PTZ digitali. Per queste, utilizza i controlli V4L2 standard per la panoramica, l'inclinazione e lo zoom.
Controllo: GOOGXU_PAN_TILT_ABSOLUTE
(deprecato)
I controlli di mappatura ausiliari di panoramica e inclinazione sono definiti nel capitolo 4: Richieste specifiche della classe, sezione 4.2.2.1.14 Controllo panoramica/inclinazione (assoluto) della specifica della classe UVC 1.5.
Controllo: GOOGXU_PAN_TILT_RELATIVE
(deprecato)
I controlli di mappatura ausiliari di panoramica e inclinazione sono definiti nel capitolo 4: Richieste specifiche della classe, sezione 4.2.2.1.15 Controllo panoramica/inclinazione (relativo) della specifica della classe UVC 1.5.
Argomenti correlati
- Driver Linux USB Video Class (UVC)
- Set di documenti Video Class v1.5
- Specifiche USB 2.0
- Centro assistenza per l'hardware Google Meet
- Sezione Google Meet Hardware del Centro assistenza per amministratori di Google Workspace
Note di rilascio
Queste note di rilascio riflettono i miglioramenti e le nuove funzionalità in ogni revisione di questo documento.
13 agosto 2025
- Dettagli corretti del centro di test.
27 gen 2025
- Aggiunta della strategia di inquadratura
Vendor-preferred
aGOOGXU_FRAME_STRATEGY
. - È stato aggiunto un nuovo controllo:
GOOGXU_SATELLITE_INFO
.
21 maggio 2024
- Abbiamo rimosso lo script di test a favore del nuovo strumento di test CfM,
che utilizza
SET
e supporta anche la convalida delle videocamere Series One. - Campi chiariti in
GOOGXU_STATUS_INFO
. - Comportamento chiarito di
GOOGXU_STATUS_RESET
. - Deprecati
GOOGXU_PAN_TILT_ABSOLUTE
eGOOGXU_PAN_TILT_RELATIVE
.
15 novembre 2023
Aggiornamento dello script di test per controllare e interpretare le modalità di inquadratura valide. Rappresentazioni di byte chiarite.
21 luglio 2023
È stato aggiunto uno script di test per consentire ai partner di convalidare le implementazioni per la conformità a questa specifica.
25 maggio 2023
Correzione
GOOGXU_PRESETS
nota relativa al numero di preset. Deve essere N, non N-1.
17 aprile 2023
Release iniziale.