Ce document décrit les API d'unité d'extension (XU) de classe vidéo USB compatibles utilisées par les systèmes de visioconférence Google Meet pour activer les fonctionnalités de caméras intelligentes. L'objectif de cette spécification est d'influencer les pratiques pour activer ces fonctionnalités et permettre une meilleure évolutivité et de meilleurs tests asynchrones pour nos partenaires.
Pour en savoir plus sur les dernières modifications apportées à ce document, consultez les notes de version.
Centre de test
Pour aider les partenaires à valider la conformité avec cette spécification, nous fournissons un outil de test sur les appareils Chromebox pour la visioconférence configurés en mode développeur.
Activez l'écriture dans le système de fichiers.
Ajoutez les lignes suivantes à /etc/chrome_dev.conf
:
--enable-logging
--log-level=0
Redémarrez l'appareil, connectez la caméra et un clavier USB, appuyez sur Ctrl-Alt-X
, et la conformité aux spécifications de la caméra active sera exercée et enregistrée dans /var/log/chrome/chrome
(ou /home/chronos/user/log/chrome
si vous utilisez une image signée).
Convention Little Endian
USB est une norme little-endian. Dans ce document :
- Les nombres multi-octets apparaissent en big-endian (et sont transmis en little-endian).
- Les tableaux d'octets sont dans la disposition de mémoire little-endian.
Par exemple, 0x12345678
est identique à [0x78, 0x56, 0x34, 0x12]
.
GUID de l'unité d'extension
Les unités d'extension compatibles avec cette spécification de contrôle Meet XU doivent utiliser ce GUID.
Unité d'extension | GUID |
---|---|
Peripheral Control XU | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Sélecteurs XU de contrôle des périphériques
Voici les sélecteurs XU de contrôle des périphériques définis.
Sélecteurs de commandes | Valeur |
---|---|
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 |
Type de demande de contrôle
Les types de requêtes de contrôle sont définis dans le chapitre 4 : "Class Specific Requests" (Requêtes spécifiques à la classe) de la spécification de la classe UVC 1.5.
Opération | Contrôle UVC |
---|---|
GET |
GET_CUR , GET_MIN , GET_MAX , GET_RES , GET_LEN , GET_INFO , GET_DEF |
SET |
SET_CUR |
Modes de caméras
Les modes caméra permettent de cadrer les personnes dans une salle de réunion. Ils sont tuple
de :
- Stratégie (vue de caméra)
- Biais (enceinte ou pièce)
- Flux (un ou plusieurs flux)
Chaque dimension peut prendre les valeurs décrites dans les sections suivantes.
Stratégie de cadrage automatique
Dans tous les modes de cadrage automatique, à l'exception de "Aucun", le panoramique, l'inclinaison et le zoom manuels sont désactivés.
Fonctionnalité | Description |
---|---|
Aucun | La caméra désactive toutes les fonctionnalités de cadrage intelligent et permet au client de contrôler librement les valeurs PTZ. Remarque : Lorsque cette stratégie de cadrage est définie, la caméra reste dans sa position actuelle de panoramique, d'inclinaison et de zoom. |
Cadrage continu (CAZ) | En fonction du biais de cadrage, la caméra suit en permanence les personnes présentes dans la pièce. |
Images fractionnées | La caméra crée autant de vues vidéo que nécessaire. En fonction de l'option Flux de recadrage automatique, il les compose en mosaïques dans un seul flux ou crée des flux vidéo distincts pour chaque vue. |
Vue dynamique | Une ou plusieurs caméras tentent de fournir la meilleure vue de la pièce. Il peut décider de combiner plusieurs flux en un seul ou de fournir une vue "intéressante" de la pièce actuelle. L'objectif de cette vue est de fournir la vue la plus équitable possible des participants à l'appel dans la salle. |
Privilégié par le fournisseur | Le système de caméras utilise sa propre logique pour déterminer la meilleure vue de la pièce. La stratégie de cadrage sous-jacente est susceptible d'être modifiée sans préavis. Par exemple, si le nombre de personnes dans la pièce change ou si la caméra peut faire la différence entre une réunion "Présentation à fort enjeu" et une réunion "Collaboration", le système est libre d'adapter ou de modifier la stratégie de cadrage comme il l'entend dans ce mode. Dans ce mode, l'appel getCur doit renvoyer VENDOR_PREFERRED, et non le mode d'encadrement sous-jacent sélectionné par le système. |
Biais de cadrage automatique
Fonctionnalité | Description |
---|---|
Présentateur à enjeu élevé (suivi de l'orateur) | La caméra tente de cadrer au mieux la personne qui parle dans la pièce. Dans ce scénario, la caméra doit être orientée vers le présentateur. Par exemple, un PDG qui fait une présentation dans une salle de réunion. |
Collaboration (suivi de salle) |
La caméra tente de cadrer au mieux tous les participants dans la salle. Dans ce cas, la caméra doit traiter chaque participant de manière équitable. |
Flux avec cadrage automatique
Fonctionnalité | Description |
---|---|
Flux unique | La caméra envoie un seul flux vidéo à l'appareil hôte. |
Multi-Stream (Work-In-Progress) |
La caméra divise le flux et crée plusieurs flux vidéo à envoyer à l'hôte. Remarque : La spécification complète et le comportement attendu de cette fonctionnalité sont en cours d'examen et ne sont pas pris en charge tant que ce document n'aura pas été révisé. |
Valeurs bitmap du mode de recadrage automatique
À l'exception de l'état par défaut None
, qui est représenté par un tableau d'octets vide, chaque bit du tableau d'octets représente un mode de caméra différent, qui est une combinaison spécifique de la stratégie de cadrage automatique, du biais de cadrage automatique et des flux de cadrage automatique.
Flux avec cadrage automatique | CAZ | Split-Frame | Dynamique | Privilégié par le fournisseur | Biais de cadrage automatique |
---|---|---|---|---|---|
Flux unique | D1 D2 |
- D3 |
D5 D7 |
D9 (enceinte ou salle) | Enceinte Pièce |
Multi-Stream | - - |
- D4 |
D6 D8 |
- | Enceinte Pièce |
Modes de frame | Valeur du mode Frame (octet le moins significatif) |
---|---|
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 |
Contrôle : GOOGXU_FRAME_STRATEGY
Cette commande permet d'obtenir ou de définir les modes de cadrage de la caméra, comme indiqué dans Valeurs bitmap du mode de cadrage automatique. Chaque mode est représenté par un bit dans sa bitmap respective. La commande GET_RES
renvoie un masque de bits de 8 octets avec une valeur de zéro (0) ou un (1) pour indiquer respectivement si la fonctionnalité n'est pas prise en charge ou si elle l'est par l'appareil. Par exemple, si une caméra est compatible avec CAZ, Speaker, Single-Stream
, Split-Frame, Room, Single-Stream
et Dynamic, Room, Multi-Stream
, mais pas avec d'autres modes, GET_RES
doit renvoyer 0x000000000000000085 (c'est-à-dire 0b10000101
suivi de sept octets zéro).
La commande SET_CUR
permet d'envoyer des bitmaps pour indiquer à la caméra quel mode SINGLE activer.
Sélecteur de commandes | 1 | |||
---|---|---|---|---|
Opération | GET / SET |
|||
wLength |
8 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bActiveMode |
8 | Bitmap | Définir ou renvoyer le mode Caméra active |
Remarques :
|
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | Description |
---|---|---|
GET_CUR |
Obtenir le mode caméra avec cadrage actif | |
GET_MIN |
Dépend de la caméra | |
GET_MAX |
Dépend de la caméra | |
GET_RES |
Renvoie un masque de bits de 8 octets de long des modes de caméras compatibles. | |
GET_LEN |
0x0008 | Longueur |
GET_INFO |
0x0B | Mise à jour automatique / Écriture / Lecture |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valeur par défaut |
SET_CUR |
Définir le mode de caméra "Cadrage actif" |
Contrôle : GOOGXU_REFRAME
Cette commande permet de déclencher le cadrage ponctuel, également appelé OTAZ. Lorsque le cadrage automatique est déclenché, la vue de la caméra se fixe sur la meilleure vue de la pièce. Le client peut ensuite à nouveau contrôler les valeurs PTZ. Si le cadrage ponctuel n'est pas pris en charge, la caméra ne doit pas définir cette commande.
Sélecteur de commandes | 2 | |||
---|---|---|---|---|
Opération | SET |
|||
wLength |
1 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bReframe |
1 | Nombre | 0x01 Exécuter la demande de recadrage |
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | Description |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | Écriture seule |
GET_DEF |
0x00 | |
SET_CUR |
Définir une requête pour le cadrage unique |
Comptage des occupations
Le comptage de l'occupation (OC, Occupancy Counting) est une fonctionnalité utilisée pour estimer le nombre de participants dans une salle de réunion, malgré la vue recadrée de la caméra.
Ce tableau indique le comportement attendu des commandes OC et leurs interactions avec le flux vidéo de la caméra et le voyant LED de la caméra.
Lorsque le comptage des occupants est | & le flux vidéo de la caméra est : | Le voyant LED de la caméra doit être | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR doit être |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR doit être |
---|---|---|---|---|
Activé | La diffusion n'est pas en cours et le son n'est pas coupé | Activé | 0x01 |
Nombre de personnes dans le champ de vision complet de la caméra. |
Activé | Streaming | Activé | 0x01 |
Nombre de personnes dans le champ de vision complet de la caméra. |
Activé | Leur son est coupé. | Désactivé | 0x01 |
Désactivées |
Désactivées | La diffusion n'est pas en cours et le son n'est pas coupé | Désactivé | 0x00 |
Désactivées |
Désactivées | Streaming | Activé | 0x00 |
Désactivées |
Désactivées | Leur son est coupé. | Désactivé | 0x00 |
Désactivées |
Contrôle : GOOGXU_OCCUPANCY_COUNTING_TOGGLE
Cette commande permet d'activer ou de désactiver la fonctionnalité de comptage des occupants dans une pièce. Si vous définissez la valeur sur zéro (0), cette fonctionnalité est désactivée. Si vous la définissez sur un (1), elle est activée. Si cette fonctionnalité n'est pas prise en charge, la caméra ne doit pas définir cette commande.
Sélecteur de commandes | 3 | |||
---|---|---|---|---|
Opération | GET / SET |
|||
wLength |
1 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bOccupancy |
1 | Booléen | Définir la fonction de comptage de l'occupation 0x00 Désactiver la fonction 0x01 Activer la fonction |
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | Description |
---|---|---|
GET_CUR |
Indique si la détection d'occupation est activée. | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | Mise à jour automatique / Écriture / Lecture |
GET_DEF |
0x00 | |
SET_CUR |
Activer ou désactiver la fonctionnalité de détection d'occupation |
Contrôle : GOOGXU_OCCUPANCY_COUNTING_READ
Cette commande permet de lire le nombre de participants dans une salle, tel qu'indiqué par la caméra lorsque le décompte de l'occupation est activé. Lorsque la détection d'occupation est désactivée, la caméra doit désactiver cette commande. Si le comptage du nombre de personnes n'est pas pris en charge, la caméra ne doit pas définir cette commande.
Sélecteur de commandes | 4 | |||
---|---|---|---|---|
Opération | GET |
|||
wLength |
2 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bNumPeople |
2 | Nombre | Nombre d'occupants détectés dans le champ de vision. (Lecture seule) |
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | Description |
---|---|---|
GET_CUR |
Renvoyer le nombre d'occupants détectés | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | Mise à jour automatique / Lecture |
GET_DEF |
0x0000 |
Télémétrie et diagnostics de l'appareil
Ces commandes sont destinées à encourager de meilleures pratiques de débogage avec le matériel Meet et ne sont généralement pas destinées aux utilisateurs.
Contrôle : GOOGXU_STATUS_INFO
Ce contrôle permet d'interroger les informations de la caméra hôte pour les partager avec les partenaires à des fins de débogage.
Sélecteur de commandes | 5 | |||
---|---|---|---|---|
Opération | GET |
|||
wLength |
8 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bNumCameras |
1 | Nombre | Nombre de caméras satellites supplémentaires connectées à la caméra principale, ce qui peut affecter le flux de caméras renvoyé à l'hôte. |
1 | bIsMoving |
1 | Bitmap | 0 lorsque la caméra est inactive et une valeur différente de zéro lorsque ses valeurs PTZ changent. Les fournisseurs sont libres de mapper différents axes ou moteurs à différents bits. |
2 | Undef |
6 | Undef | Sera étendu à l'avenir. |
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | 1 | 2 | Description |
---|---|---|---|---|
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 | Mise à jour automatique / Lecture | ||
GET_DEF |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
Contrôle : GOOGXU_SATELLITE_INFO
Cette commande permet d'interroger les appareils satellites connectés à ce système de caméras.
Sélecteur de commandes | 0x0A | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Opération | GET |
|||||||||||
wLength |
20 | |||||||||||
Décalage (offset) | Champ | Taille | Valeur | Description | ||||||||
0 | bSatelliteList |
20 | Bitmap | Liste des types de satellites associés au système. Comprend quatre emplacements de cinq octets distincts. Chacun des emplacements est décrit comme suit :
|
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | Description |
---|---|---|
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 octets |
GET_INFO |
0x09 | Mise à jour automatique / Lecture |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Contrôle : GOOGXU_STATUS_RESET
Cette commande permet d'envoyer une demande de réinitialisation à la caméra. Si vous définissez la valeur sur 1, la caméra est réinitialisée. La caméra renvoie zéro (0) si aucune demande de redémarrage n'a été envoyée depuis la dernière réinitialisation, et un (1) si elle est en cours de réinitialisation. La réinitialisation doit déclencher le redémarrage de la caméra. (Cette opération est nécessaire pour les appareils auto-alimentés, pour lesquels il n'est pas utile de forcer la déconnexion USB pour émuler un branchement à chaud.)
Sélecteur de commandes | 6 | |||
---|---|---|---|---|
Opération | GET / SET |
|||
wLength |
1 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bResetRequest |
1 | Booléen | Envoyez une demande de réinitialisation à l'hôte et aux caméras connectées. Renvoie 0x01 si une demande de réinitialisation a été émise depuis la dernière réinitialisation, ou 0x00 dans le cas contraire. |
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | Description |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | Écriture / Lecture |
GET_DEF |
0x00 |
Préréglages PTZ
Permet de configurer et de restaurer le champ de vision de la caméra sur une position prédéfinie.
Contrôle : GOOGXU_PRESETS
Cette commande permet de définir les valeurs de panoramique, d'inclinaison et de zoom (PTZ) de la caméra sur une configuration prédéfinie.
Preset Action
est utilisé pour indiquer l'action prévue de la commande. La valeur 1 permet de mapper les valeurs actuelles de panoramique, d'inclinaison et de zoom à un index de préréglage fourni. Si vous définissez la valeur sur deux (2), le panoramique, l'inclinaison et le zoom de la caméra doivent passer aux valeurs précédemment mappées pour l'index fourni, ou aux coordonnées d'usine par défaut (si elles n'ont pas été mappées précédemment). Si vous définissez la valeur sur trois (3), l'index est réinitialisé sur les coordonnées par défaut.
Preset Index
permet de spécifier les coordonnées PTZ mappées à l'index.
La valeur Preset index
zéro (0) est associée aux coordonnées de la position initiale et doit correspondre à la position par défaut de la caméra lors de la sortie de veille lorsque GOOGXU_FRAME_STRATEGY
est défini sur NONE
.
Sélecteur de commandes | 7 | |||
---|---|---|---|---|
Opération | SET |
|||
wLength |
2 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bPresetAction |
1 | Nombre | 0x01 : Enregistrer le préréglage 0x02 : Restaurer le préréglage 0x03 : Rétablir le préréglage par défaut. (La valeur par défaut doit être une coordonnée prédéfinie valide.) |
1 | bPresetIndex |
1 | Nombre | Index du préréglage actif. 0~N-1 Où 0 est considéré comme la position de départ par défaut de la caméra et N-1 est une constante définie par le fournisseur pour le nombre de préréglages. |
Voici le comportement des types de requêtes acceptés :
Décalage (offset) | 0 | 1 | Description |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | Nombre maximal de préréglages N pris en charge |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | Écriture seule | |
GET_DEF |
0x00 | 0x00 |
Mappage auxiliaire de panoramique et d'inclinaison
Certaines caméras sont dotées de composants spéciaux, comme des moteurs pour les caméras mécaniques ou des fonctionnalités PTZ numériques. Pour ceux-ci, utilisez les commandes V4L2 standards pour le panoramique, l'inclinaison et le zoom.
Contrôle : GOOGXU_PAN_TILT_ABSOLUTE
(obsolète)
Les commandes de mappage auxiliaires de panoramique et d'inclinaison sont définies dans le chapitre 4 : Requêtes spécifiques à la classe, section 4.2.2.1.14, Contrôle PanTilt (absolu) de la spécification de la classe UVC 1.5.
Contrôle : GOOGXU_PAN_TILT_RELATIVE
(obsolète)
Les commandes de mappage auxiliaires de panoramique et d'inclinaison sont définies dans le chapitre 4 : Requêtes spécifiques à la classe, section 4.2.2.1.15, Commande PanTilt (Relative) de la spécification de la classe UVC 1.5.
Articles associés
- Pilote Linux USB Video Class (UVC)
- Ensemble de documents Video Class v1.5
- Spécifications USB 2.0
- Centre d'aide pour le matériel Google Meet
- Section "Matériel Google Meet" du centre d'aide pour les administrateurs Google Workspace
Notes de version
Ces notes de version décrivent les améliorations et les nouvelles fonctionnalités apportées à chaque révision de ce document.
13 août 2025
- Correction des informations sur le centre de test.
27 janvier 2025
- Ajout de la stratégie de cadrage
Vendor-preferred
àGOOGXU_FRAME_STRATEGY
. - Ajout d'un nouveau contrôle :
GOOGXU_SATELLITE_INFO
.
21 mai 2024
- Suppression du script de test au profit du nouvel outil de test CfM, qui exerce
SET
et prend également en charge la validation des caméras Series One. - Clarification des champs dans
GOOGXU_STATUS_INFO
. - Clarification du comportement de
GOOGXU_STATUS_RESET
. - Obsolète :
GOOGXU_PAN_TILT_ABSOLUTE
etGOOGXU_PAN_TILT_RELATIVE
.
15 novembre 2023
Mise à jour du script de test pour vérifier et interpréter les modes de cadrage valides. Clarification des représentations d'octets.
21 juillet 2023
Ajout d'un script de test permettant aux partenaires de valider les implémentations pour vérifier leur conformité avec cette spécification.
25 mai 2023
Note corrigée
GOOGXU_PRESETS
concernant le nombre de préréglages. Il doit s'agir de N, et non de N-1.
17 avril 2023
Version initiale.