Ce document décrit les API USB Video Class Extension Unit (XU) compatibles utilisées par les systèmes de conférence Google Meet pour activer les fonctionnalités d'appareil photo intelligentes. L'objectif de cette spécification est d'influencer les pratiques pour activer ces fonctionnalités et de permettre une meilleure évolutivité et des tests asynchrones pour nos partenaires.
Pour en savoir plus sur les dernières modifications apportées à ce document, consultez les notes de version.
Installation de test
Pour aider les partenaires à valider la conformité avec cette spécification, nous mettons à leur disposition une plate-forme 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 testée et enregistrée dans /home/chronos/user/log/chrome
.
Convention Little-endian
L'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 mise en page 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 commande Meet XU doivent utiliser ce GUID.
Unité d'extension | GUID |
---|---|
XU de contrôle des périphériques | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Sélecteurs XU de contrôle des périphériques
Il s'agit des sélecteurs XU de contrôle des périphériques définis.
Sélecteurs de commande | 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 : "Requêtes spécifiques à la classe" de la spécification de 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 l'appareil photo
Les modes d'appareil photo permettent de cadrer des personnes dans une salle de réunion. Ils sont tuple
:
- Stratégie (vue de la 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 vous utilisez cette stratégie de cadrage, 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. |
Cadres fractionnés | La caméra crée autant de vues vidéo que nécessaire. En fonction de l'option Flux de cadrage automatique, il les compose en tuiles 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 possible 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 des participants à l'appel dans la pièce. |
Préféré 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 détecter la différence entre une réunion "Présentateur important" et une réunion "Collaboration", le système est libre d'adapter ou de modifier la stratégie de cadrage comme il le souhaite dans ce mode. Dans ce mode, l'appel de getCur doit renvoyer VENDOR_PREFERRED, et non le mode de cadrage sous-jacent sélectionné par le système. |
Biais de cadrage automatique
Fonctionnalité | Description |
---|---|
Présentateur important (suivi des intervenants) | 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, le PDG qui fait une présentation dans une salle de conférence. |
Collaboration (suivi des salles) |
La caméra tente de cadrer au mieux tous les participants dans la salle. Dans ce scénario, la caméra doit traiter tous les participants de manière équitable. |
Flux de cadrage automatique
Fonctionnalité | Description |
---|---|
Flux unique | La caméra envoie un seul flux vidéo à l'appareil hôte. |
multiflux(en cours de développement) |
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 jusqu'aux versions ultérieures de ce document. |
Valeurs bitmap du mode de cadrage automatique
À l'exception de l'état par défaut de None
représenté par un tableau d'octets vide, chaque bit du tableau d'octets représente un mode d'appareil photo 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 de cadrage automatique | CAZ | Split-Frame | Dynamique | Préféré par le fournisseur | Biais de cadrage automatique |
---|---|---|---|---|---|
Single-Stream | D1 D2 |
- D3 |
D5 D7 |
D9 (enceinte ou salon) | Enceinte Pièce |
Multi-flux | - - |
- D4 |
D6 D8 |
- | Enceinte Pièce |
Modes de frame | Valeur du mode de trame (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 la section Valeurs bitmap du mode de cadrage automatique. Chaque mode est représenté par un bit dans son bitmap respectif. 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é est compatible ou non avec l'appareil. Par exemple, si une caméra prend en charge CAZ, Speaker, Single-Stream
, Split-Frame, Room, Single-Stream
et Dynamic, Room, Multi-Stream
, mais aucun autre mode, GET_RES
doit renvoyer 0x000000000000000085 (c'est-à-dire 0b10000101
suivi de sept octets de zéro).
La commande SET_CUR
permet d'envoyer des bitmaps pour indiquer à l'appareil photo le mode SINGLE (SIMPLE) à 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 rétablir le mode Caméra active |
Remarques
|
Le comportement des types de requêtes acceptés est le suivant:
Décalage (offset) | 0 | Description |
---|---|---|
GET_CUR |
Obtenir le mode de 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 des modes d'appareil photo compatibles. | |
GET_LEN |
0x0008 | Longueur |
GET_INFO |
0x0B | AutoUpdate / Write / Read |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valeur par défaut |
SET_CUR |
Définir le mode de cadrage actif de la caméra |
Contrôle: GOOGXU_REFRAME
Ce contrôle permet de déclencher le cadrage à un seul coup, également appelé OTAZ. Lorsque l'OTAZ est déclenché, la vue de la caméra se fige sur la meilleure vue de la pièce. Le client peut ensuite à nouveau contrôler les valeurs PTZ. Si le cadrage en une seule prise de vue 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 requête de recadrage |
Le comportement des types de requêtes acceptés est le suivant:
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 la requête pour le cadrage unique |
Comptage de l'occupation
Le comptage de l'occupation est une fonctionnalité qui permet d'estimer le nombre de participants dans une salle de réunion, malgré le recadrage de la caméra.
Ce tableau présente le comportement attendu des commandes OC et leurs interactions avec le flux vidéo de la caméra et l'indicateur LED de la caméra.
Lorsque le comptage d'occupation 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é | Pas de diffusion et son activé | 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 | Pas de diffusion et pas de mise en sourdine | 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
Ce bouton bascule 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 définissez la valeur sur un (1), cette fonctionnalité 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 |
Le comportement des types de requêtes acceptés est le suivant:
Décalage (offset) | 0 | Description |
---|---|---|
GET_CUR |
Renvoie si la détection d'occupation est activée | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | AutoUpdate / Write / Read |
GET_DEF |
0x00 | |
SET_CUR |
Activer ou désactiver la fonctionnalité de comptage de l'occupation |
Contrôle: GOOGXU_OCCUPANCY_COUNTING_READ
Ce paramètre permet de lire le nombre de participants dans une salle indiqué par la caméra lorsque le comptage 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 de l'occupation 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) |
Le comportement des types de requêtes acceptés est le suivant:
Décalage (offset) | 0 | Description |
---|---|---|
GET_CUR |
Renvoie le nombre d'occupants détectés | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | AutoUpdate / Read |
GET_DEF |
0x0000 |
Télémétrie et diagnostics de l'appareil
Ces commandes visent à 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 paramètre permet d'interroger les informations de la caméra hôte à partager avec les partenaires à des fins de débogage.
Sélecteur de commande | 5 | |||
---|---|---|---|---|
Opération | GET |
|||
wLength |
8 | |||
Décalage (offset) | Champ | Taille | Valeur | Description |
0 | bNumCameras |
1 | Nombre | Nombre de satellites supplémentaires associés à la caméra principale pouvant affecter le flux de la caméra renvoyé à l'hôte. |
1 | bIsMoving |
1 | Bitmap | 0 lorsque la caméra est inactive et une valeur non nulle lorsque ses valeurs PTZ changent. Les fournisseurs sont libres de mapper différents axes ou moteurs sur différents bits. |
2 | Undef |
6 | Undef | À étendre à l'avenir. |
Le comportement des types de requêtes acceptés est le suivant:
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 | AutoUpdate / Read | ||
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. Inclut quatre emplacements de 5 octets distincts. Chacun des emplacements est décrit comme suit:
|
Le comportement des types de requêtes acceptés est le suivant:
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 | AutoUpdate / Read |
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 requête de réinitialisation à la caméra. Si vous définissez la valeur sur un (1), la caméra est réinitialisée. La caméra renvoie zéro (0) si aucune demande de redémarrage de la caméra n'a été effectué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. (Cela est nécessaire pour les appareils autoalimentés où forcer une déconnexion USB pour émuler un hotplug n'est pas utile.)
Sélecteur de commande | 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é envoyée depuis la dernière réinitialisation, sinon 0x00. |
Le comportement des types de requêtes acceptés est le suivant:
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 à 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
permet d'indiquer l'action prévue de la commande. Définir une valeur de un (1) permet de mapper les valeurs de panoramique, d'inclinaison et de zoom actuelles à un index prédéfini 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 d'usine.
Preset Index
permet de spécifier les coordonnées PTZ mappées sur l'index.
La valeur Preset index
de zéro (0) est mappée sur les coordonnées de la position initiale et doit être la position par défaut de la caméra au réveil lorsque GOOGXU_FRAME_STRATEGY
est défini sur NONE
.
Sélecteur de commande | 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 | Indice 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. |
Le comportement des types de requêtes acceptés est le suivant:
Décalage (offset) | 0 | 1 | Description |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | N préréglages maximaux compatibles |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | Écriture seule | |
GET_DEF |
0x00 | 0x00 |
Déplacer et incliner la carte auxiliaire
Certaines caméras disposent de composants spéciaux, comme les moteurs pour les caméras mécaniques ou les fonctionnalités PTZ numériques. Pour ce faire, 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 de basculement sont définies dans le chapitre 4 : "Demandes spécifiques à la classe", section 4.2.2.1.14 "Commande PanTilt (absolue)" de la spécification de classe UVC 1.5.
Contrôle: GOOGXU_PAN_TILT_RELATIVE
(obsolète)
Les commandes de mappage auxiliaires de panoramique et de basculement sont définies dans le chapitre 4 : "Demandes spécifiques à la classe", section 4.2.2.1.15 "Commande (relative) de panoramique et de basculement" de la spécification de classe UVC 1.5.
Articles associés
- Pilote Linux USB Video Class (UVC)
- Ensemble de documents de la classe vidéo 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.
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 de la nouvelle installation de test CfM, qui exécute
SET
et permet également de valider les caméras Series One. - Clarification des champs dans
GOOGXU_STATUS_INFO
. - Clarification du comportement de
GOOGXU_STATUS_RESET
. GOOGXU_PAN_TILT_ABSOLUTE
etGOOGXU_PAN_TILT_RELATIVE
sont obsolètes.
15 novembre 2023
Mise à jour du script de test pour vérifier et interpréter les modes de cadrage valides. Clarifications apportées aux représentations d'octets.
21 juillet 2023
Ajout d'un script de test permettant aux partenaires de valider la conformité des implémentations avec cette spécification.
25 mai 2023
Correction de la note 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.