このドキュメントでは、Google Meet 会議システムでインテリジェントなカメラ機能を有効にするために使用される、サポートされている USB Video Class Extension Unit(XU)API について概説します。この仕様の作成目的は、これらの機能を有効にする方法に影響を与え、パートナーが非同期スケーラビリティとテストを改善できるようにすることです。
このドキュメントの最新の変更内容については、リリースノートをご覧ください。
テスト施設
パートナーがこの仕様に準拠していることを確認できるように、デベロッパー モードで設定された Chromebox-for-Meetings デバイスにテスト機能を用意しています。ファイル システムへの書き込みを有効にします。/etc/chrome_dev.conf
に次の行を追加します。
--enable-logging
--log-level=0
デバイスを再起動し、カメラと USB キーボードを接続して Ctrl-Alt-X
を押すと、アクティブなカメラの仕様への準拠が確認され、/home/chronos/user/log/chrome
に記録されます。
リトル エンディアン規則
USB はリトル エンディアン標準です。このドキュメント内:
- マルチバイト数はビッグエンディアンで表示され(リトルエンディアンで送信されます)。
- バイト配列はリトル エンディアンのメモリ レイアウトです。
たとえば、0x12345678
は [0x78, 0x56, 0x34, 0x12]
と同じです。
拡張ユニットの GUID
この Meet XU コントロール仕様をサポートする拡張ユニットは、この GUID を使用する必要があります。
拡張ユニット | GUID |
---|---|
周辺機器制御 XU | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
周辺機器制御の XU セレクタ
これらは、定義されたペリフェラル制御 XU セレクタです。
コントロール セレクタ | 値 |
---|---|
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 |
コントロール リクエストのタイプ
制御リクエストのタイプは、UVC 1.5 クラス仕様の第 4 章「クラス固有のリクエスト」で定義されています。
オペレーション | UVC コントロール |
---|---|
GET |
GET_CUR 、GET_MIN 、GET_MAX 、GET_RES 、GET_LEN 、GET_INFO 、GET_DEF |
SET |
SET_CUR |
カメラモード
カメラモードは、会議室内の個人をフレームに収めるために使用され、次のいずれかのtuple
です。
- 戦略(カメラビュー)
- バイアス(スピーカーまたは部屋)
- フィード(単一または複数のストリーム)
各ディメンションには、次のセクションで説明する値を指定できます。
オート フレーミング戦略
機能 | 説明 |
---|---|
なし | カメラでは、すべてのインテリジェント フレーミング機能が無効になり、クライアントは PTZ 値を自由に制御できます。 注: このフレーミング戦略に設定すると、カメラの現在のパン、チルト、ズームの位置が維持されます。 |
追尾フレーミング(CAZ) | フレーミング バイアスに基づいて、カメラは部屋内の人物を継続的に追跡します。 注: このモードでは PTZ は無効になります。 |
分割フレーム | カメラは、必要な数の動画ビューを作成します。[フィードのオート フレーミング] オプションに基づいて、フィードを 1 つのストリームでタイルに分割するか、視聴ごとに個別の動画ストリームを作成します。 注: このモードでは PTZ は無効になります。 |
動的ビュー | 1 つ以上のカメラが部屋のベストショットを撮影しようとします。複数のフィードを 1 つに合成するか、現在の部屋の「興味深い」視点を提供するかを決定できます。 このビューの目的は、会議に参加している部屋内の参加者を最も公平に表示することです。 注:
|
オート フレーミングのバイアス
機能 | 説明 |
---|---|
ハイステークス プレゼンター(スピーカー トラッキング) | カメラは、部屋の中で発言している人を最適なフレーム内に収めようとします。 このシナリオでは、カメラはプレゼンターの方を向ける必要があります。たとえば、会議室でプレゼンテーションを行う CEO などです。 |
コラボレーション (部屋の追跡) |
カメラは、部屋内のすべての参加者をフレームに収めようとします。このシナリオでは、カメラはすべての参加者を公平に扱う必要があります。ほとんどの会議でこの戦略を使用する必要があります。 |
オート フレーミング フィード
機能 | 説明 |
---|---|
シングル ストリーム | カメラは単一の動画ストリームをホストデバイスに送信します。 |
マルチストリーム (開発中) |
カメラはストリームを分割し、複数の動画ストリームを作成してホストに送信します。 注: この機能の完全な仕様と想定される動作は審査中であり、このドキュメントの今後の改訂版までサポートされていません。 |
オート フレーミング モードのビットマップ値
空のバイト配列で表されるデフォルトの状態 None
を除き、バイト配列の各ビットは、自動フレーミング戦略、自動フレーミング バイアス、自動フレーミング フィードの特定の組み合わせである、異なるカメラモードを表します。
ビット インデックス | CAZ | スプリット フレーム | ダイナミック | - |
---|---|---|---|---|
スピーカー | D1 - |
- - |
D5 D6 |
シングル ストリーム マルチ ストリーム |
Room | D2 - |
D3 D4 |
D7 D8 |
[シングルストリーム] [マルチストリーム] |
フレームモード | フレームモード値(最下位バイト) |
---|---|
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 |
コントロール: GOOGXU_FRAME_STRATEGY
このコントロールは、自動フレーミング モードのビットマップ値に記載されているように、カメラのフレーミング モードを取得または設定するために使用されます。各モードは、それぞれのビットマップ内のビットで表されます。コマンド GET_RES
は、8 バイトの長さのビットマスクを返します。このビットマスクの値は 0 または 1 で、デバイスで機能がサポートされているかどうかを示します。たとえば、カメラが CAZ, Speaker, Single-Stream
、Split-Frame, Room, Single-Stream
、Dynamic, Room, Multi-Stream
をサポートしていて、他のモードはサポートしていない場合、GET_RES
は 0x000000000000000085 を返します(つまり、0b10000101
の後に 0 バイトが 7 つ続きます)。
コマンド SET_CUR
は、ビットマップを送信し、どの SINGLE カメラモードを有効にするかをカメラに伝えるために使われます。
コントロール セレクタ | 1 | |||
---|---|---|---|---|
オペレーション | GET / SET |
|||
wLength |
8 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bActiveMode |
8 | ビットマップ | アクティブ カメラ モードを設定または復元する |
注:
|
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
GET_CUR |
アクティブ フレーミング カメラ モードを取得する | |
GET_MIN |
カメラに依存 | |
GET_MAX |
カメラに依存 | |
GET_RES |
サポートされているカメラモードの 8 バイトの長さのビットマスクを返します。 | |
GET_LEN |
0x0008 | 長さ |
GET_INFO |
0x0B | AutoUpdate / Write / Read |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
デフォルト値 |
SET_CUR |
アクティブ フレーミング カメラモードを設定する |
コントロール: GOOGXU_REFRAME
このコントロールは、ワンショット フレーミング(OTAZ)をトリガーするために使用されます。OTAZ がトリガーされると、カメラ ビューは部屋のベスト ビューにスナップされます。その後、クライアントは PTZ 値を再び制御できるようになります。ワンショット フレーミングがサポートされていない場合、カメラでこのコントロールを定義しないでください。
コントロール セレクタ | 2 | |||
---|---|---|---|---|
オペレーション | SET |
|||
wLength |
1 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bReframe |
1 | 数値 | 0x01 再フレーム リクエストの実行 |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | 書き込みのみ |
GET_DEF |
0x00 | |
SET_CUR |
ワンショット フレーミングのリクエストを設定する |
在室人数のカウント
座席数カウント(OC)は、カメラの切り抜きビューに関係なく、会議室の参加者数を推定する機能です。
次の表に、OC コントロールの想定される動作と、カメラの動画ストリームとカメラの LED インジケータとの相互作用を示します。
利用人数のカウントが | カメラの動画ストリームが次の状態である場合: | カメラの LED インジケーターは | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR は |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR は |
---|---|---|---|---|
有効 | ストリーミングされておらず、ミュートされていない | オン | 0x01 |
カメラの全視野に写っている人物の数。 |
有効 | ストリーミング | オン | 0x01 |
カメラの全視野に写っている人物の数。 |
有効 | ミュート中 | オフ | 0x01 |
通知 OFF |
通知 OFF | ストリーミングされておらず、ミュートされていない | オフ | 0x00 |
通知 OFF |
通知 OFF | ストリーミング | オン | 0x00 |
通知 OFF |
通知 OFF | ミュート中 | オフ | 0x00 |
通知 OFF |
コントロール: GOOGXU_OCCUPANCY_COUNTING_TOGGLE
このコントロールは、部屋の居住者をカウントする機能を有効または無効にするために使用します。値を 0 に設定するとこの機能は無効になり、1 に設定するとこの機能が有効になります。この機能がサポートされていない場合、カメラはこのコントロールを定義しないでください。
コントロール セレクタ | 3 | |||
---|---|---|---|---|
オペレーション | GET / SET |
|||
wLength |
1 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bOccupancy |
1 | ブール値 | 在室人数カウント機能を設定 0x00 機能をオフ 0x01 機能をオン |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
GET_CUR |
利用人数のカウントがオンかどうかを返します | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | AutoUpdate / Write / Read |
GET_DEF |
0x00 | |
SET_CUR |
占有者数カウント機能を有効または無効にする |
コントロール: GOOGXU_OCCUPANCY_COUNTING_READ
このコントロールは、利用人数のカウントが有効になっているときに、カメラから報告される部屋内の参加者数を読み取るために使用されます。利用人数のカウントが無効になっている場合、カメラはこのコントロールを無効にする必要があります。在室人数のカウントがサポートされていない場合、カメラはこのコントロールを定義しないでください。
コントロール セレクタ | 4 | |||
---|---|---|---|---|
オペレーション | GET |
|||
wLength |
2 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bNumPeople |
2 | 数値 | 検出された室内にいる人数。(読み取り専用) |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
GET_CUR |
検出された居住者の数を返す | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | AutoUpdate / Read |
GET_DEF |
0x0000 |
デバイスのテレメトリーと診断
これらのコントロールは、Meet ハードウェアでより優れたデバッグ方法を促進することを目的としており、通常はユーザー向けではありません。
コントロール: GOOGXU_STATUS_INFO
このコントロールは、ホストカメラから情報をクエリして、デバッグのためにパートナーと共有するために使用されます。
コントロール セレクタ | 5 | |||
---|---|---|---|---|
オペレーション | GET |
|||
wLength |
8 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bNumCameras |
1 | 数値 | ホストに返されるカメラ ストリームに影響する可能性がある、メインカメラに接続されている追加の衛星の数。 |
1 | bIsMoving |
1 | ビットマップ | カメラがアイドル状態のときは 0、PTZ 値が変化しているときはゼロ以外です。ベンダーは、異なる軸やモーターを異なるビットに自由にマッピングできます。 |
2 | Undef |
6 | 未定義 | 今後延長予定。 |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 1 | 2 | 説明 |
---|---|---|---|---|
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 |
コントロール: GOOGXU_STATUS_RESET
このコントロールは、カメラにリセット リクエストを発行するために使用されます。値を 1 に設定すると、カメラの再起動がリクエストされます。前回の再起動以降にカメラの再起動リクエストがない場合、カメラはゼロ(0)を返します。再起動中の場合は 1 を返します。リセットによってカメラの再起動がトリガーされる必要があります。(これは、USB 接続を強制的に切断してホットプラグをエミュレートしても意味がない自給型デバイスに必要です)。
コントロール セレクタ | 6 | |||
---|---|---|---|---|
オペレーション | GET / SET |
|||
wLength |
1 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bResetRequest |
1 | ブール値 | ホストと接続されたカメラにリセット リクエストを送信します。 前回の再起動以降にリセット リクエストが発行された場合は 0x01、それ以外の場合は 0x00 を返します。 |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | 書き込み / 読み取り |
GET_DEF |
0x00 |
PTZ プリセット
カメラの画角を構成して、プリセットの位置に復元するために使用します。
コントロール: GOOGXU_PRESETS
このコントロールは、カメラのパン、チルト、ズーム(PTZ)の値をプリセット構成に設定するために使用します。
Preset Action
は、コマンドの目的のアクションを指定するために使用されます。値を 1 に設定すると、現在のパン、チルト、ズームの値が指定されたプリセット インデックスにマッピングされます。値を 2 に設定すると、カメラのパン、チルト、ズームが、指定されたインデックスに対して以前にマッピングされた値、またはデフォルトの工場座標(まだマッピングされていない場合)に移行されます。値を 3 に設定すると、インデックスは出荷時のデフォルトの座標にリセットされます。
Preset Index
は、インデックスにマッピングされた PTZ 座標を指定するために使用されます。Preset index
がゼロ(0)の場合、ホーム座標にマッピングされ、GOOGXU_FRAME_STRATEGY
が NONE
に設定されている場合、カメラの起動時のデフォルトの位置になります。
コントロール セレクタ | 7 | |||
---|---|---|---|---|
オペレーション | SET |
|||
wLength |
2 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bPresetAction |
1 | 数値 | 0x01: プリセット を保存します。 0x02: プリセット を復元します。 0x03: プリセットをデフォルトにリセットします。(デフォルトは有効なプリセット座標です)。 |
1 | bPresetIndex |
1 | 数値 | アクティブなプリセットのインデックス。0 ~ N-1 。0 はデフォルトのカメラ開始位置と見なされ、N-1 はプリセット数のベンダー定義定数です。 |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 1 | 説明 |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | サポートされる最大プリセット数 |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | 書き込みのみ | |
GET_DEF |
0x00 | 0x00 |
パンとチルトの補助マッピング
カメラによっては、メカニカル カメラ用のモーターやデジタル PTZ 機能など、特別なコンポーネントが搭載されています。これらに対応するには、パン、チルト、ズームに標準の V4L2 コントロールを使用します。
コントロール: GOOGXU_PAN_TILT_ABSOLUTE
(非推奨)
パンとチルトの補助マッピング コントロールは、UVC 1.5 クラス仕様の第 4 章: クラス固有のリクエスト セクション 4.2.2.1.14 パンチルト(絶対)コントロールで定義されています。
コントロール: GOOGXU_PAN_TILT_RELATIVE
(非推奨)
パンとチルトの補助マッピング コントロールは、UVC 1.5 クラス仕様の第 4 章: クラス固有のリクエスト、セクション 4.2.2.1.15 パンチルト(相対)コントロールで定義されています。
関連トピック
- Linux USB Video Class(UVC)ドライバ
- Video Class v1.5 ドキュメント セット
- USB 2.0 仕様
- Google Meet ハードウェア ヘルプセンター
- Google Workspace 管理者ヘルプセンターの Google Meet ハードウェア セクション
リリースノート
これらのリリースノートには、このドキュメントの各リビジョンにおける改善点と新機能が反映されています。
2024 年 5 月 21 日
- テスト スクリプトを削除し、新しい CfM テスト機能に置き換えました。この機能は
SET
を実行し、Series One カメラの検証もサポートします。 GOOGXU_STATUS_INFO
のフィールドを明確にしました。GOOGXU_STATUS_RESET
の動作を明確にしました。GOOGXU_PAN_TILT_ABSOLUTE
とGOOGXU_PAN_TILT_RELATIVE
を非推奨にしました。
2023 年 11 月 15 日
有効なフレーミング モードを確認して解釈するようにテスト スクリプトを更新しました。バイト表現を明確にしました。
2023 年 7 月 21 日
パートナーがこの仕様に準拠しているかどうか実装を検証するためのテスト スクリプトを追加しました。
2023 年 5 月 25 日
プリセットの数に関する GOOGXU_PRESETS
の注記を修正しました。N-1 ではなく N にする必要があります。
2023 年 4 月 17 日
初回リリース。