このドキュメントでは、Google Meet 会議システムがインテリジェント カメラ機能を有効にするために使用する、サポートされている USB ビデオ クラス拡張ユニット(XU)API について説明します。この仕様を作成する目的は、これらの機能を有効にするためのプラクティスに影響を与え、パートナーが非同期のスケーラビリティとテストを改善できるようにすることです。
このドキュメントの最新の変更内容については、リリースノートをご覧ください。
テスト施設
パートナーがこの仕様への準拠を検証できるように、デベロッパー モードに設定された Chromebox for Meetings デバイスでテスト施設を提供しています。ファイルシステムへの書き込みを有効にします。/etc/chrome_dev.conf
に次の行を追加します。
--enable-logging
--log-level=0
デバイスを再起動し、カメラと USB キーボードを接続して Ctrl-Alt-X
を押すと、アクティブなカメラの仕様準拠が実行され、/var/log/chrome/chrome
(署名付きイメージを使用している場合は /home/chronos/user/log/chrome
)に記録されます。
リトル エンディアンの規則
USB はリトルエンディアン規格です。このドキュメントでは、次の内容について説明します。
- マルチバイト数はビッグエンディアンで表示されます(リトルエンディアンで送信されます)。
- バイト配列はリトル エンディアンのメモリ レイアウトです。
たとえば、0x12345678
は [0x78, 0x56, 0x34, 0x12]
と同じです。
拡張ユニットの GUID
この Meet XU コントロール仕様をサポートする拡張ユニットは、この GUID を使用する必要があります。
拡張ユニット | GUID |
---|---|
Peripheral Control 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 |
GOOGXU_SATELLITE_INFO |
0x0A |
制御リクエストのタイプ
制御リクエスト タイプは、UVC 1.5 クラス仕様の第 4 章「クラス固有のリクエスト」で定義されています。
オペレーション | UVC コントロール |
---|---|
GET |
GET_CUR 、GET_MIN 、GET_MAX 、GET_RES 、GET_LEN 、GET_INFO 、GET_DEF |
SET |
SET_CUR |
カメラモード
カメラモードは、会議室内の個人をフレームに収めるために使用され、次の tuple
です。
- 戦略(カメラビュー)
- バイアス(発言者または部屋)
- フィード(1 つまたは複数のストリーム)
各ディメンションは、以降のセクションで説明する値を取ることができます。
オート フレーミング戦略
「なし」以外のすべての自動フレーミング モードでは、手動のパン、チルト、ズームが無効になります。
機能 | 説明 |
---|---|
なし | カメラはインテリジェント フレーム機能すべてを無効にし、クライアントが PTZ 値を自由に制御できるようにします。 注: このフレーミング戦略に設定すると、カメラは現在のパン、ティルト、ズームの位置を維持します。 |
追尾フレーミング(CAZ) | フレーミングのバイアスに基づいて、カメラは部屋内の人物を継続的に追跡します。 |
分割フレーム | カメラは必要に応じて動画ビューを作成します。[自動フレーミング フィード] オプションに基づいて、1 つのストリームのタイルに合成するか、各ビューの個別の動画ストリームを作成します。 |
動的ビュー | 1 台以上のカメラが、部屋の最適なビューを提供しようとします。複数のフィードを 1 つに合成するか、現在の部屋の「興味深い」ビューを提供するかどうかを決定できます。 このビューの目的は、会議室の参加者を最も公平に表示することです。 |
ベンダー優先 | カメラ システムは独自のロジックを使用して、部屋の最適なビューを決定します。基盤となるフレーミング戦略は予告なく変更されることがあります。たとえば、会議室の人数が変化した場合や、カメラが「重要なプレゼンテーション」と「コラボレーション」の会議の違いを検出した場合、このモードでは、システムは必要に応じてフレーミング戦略を適応または変更できます。このモードでは、getCur を呼び出すと、システムによって選択された基盤となるフレーミング モードではなく、VENDOR_PREFERRED が返される必要があります。 |
オート フレーミング バイアス
機能 | 説明 |
---|---|
重要なプレゼンター(スピーカー トラッキング) | カメラは、会議室で発言中の人物を最適なフレームで捉えようとします。 このシナリオでは、カメラは発表者に焦点を合わせる必要があります。たとえば、会議室でプレゼンテーションを行う CEO などです。 |
コラボレーション (ルーム トラッキング) |
カメラは、会議室内のすべての参加者がフレームに収まるように調整します。このシナリオでは、カメラはすべての参加者を公平に扱う必要があります。 |
オート フレーミング フィード
機能 | 説明 |
---|---|
シングル ストリーム | カメラは 1 つの動画ストリームをホストデバイスに送信します。 |
マルチストリーム (開発中) |
カメラはストリームを分割し、複数の動画ストリームを作成してホストに送信します。 注: この機能の完全な仕様と想定される動作は審査中で、このドキュメントの改訂版が公開されるまでサポートされません。 |
自動フレーミング モードのビットマップ値
空のバイト配列で表される None
のデフォルトの状態を除き、バイト配列の各ビットは、自動フレーミング戦略、自動フレーミング バイアス、自動フレーミング フィードの特定の組み合わせである、異なるカメラモードを表します。
オート フレーミング フィード | CAZ | スプリット フレーム | ダイナミック | ベンダー優先 | オート フレーミング バイアス |
---|---|---|---|---|---|
Single-Stream | D1 D2 |
- D3 |
D5 D7 |
D9(発言者または会議室) | スピーカー 部屋 |
マルチストリーム | - - |
- D4 |
D6 D8 |
- | スピーカー 部屋 |
フレームモード | フレームモード値(最下位バイト) |
---|---|
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 |
コントロール: 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
の後に 7 つのゼロバイト)を返します。
コマンド SET_CUR
は、どの SINGLE カメラモードを有効にするかをカメラに伝えるために、ビットマップを送信するために使用されます。
コントロール セレクタ | 1 | |||
---|---|---|---|---|
オペレーション | GET / SET |
|||
wLength |
8 | |||
オフセット | フィールド | サイズ | 値 | 説明 |
0 | bActiveMode |
8 | ビットマップ | アクティブ カメラモードを設定または返す |
注:
|
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
GET_CUR |
アクティブ フレーミング カメラモードを取得する | |
GET_MIN |
カメラ依存 | |
GET_MAX |
カメラ依存 | |
GET_RES |
サポートされているカメラモードの 8 バイトの long ビットマスクを返します | |
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 値が変化しているときは 0 以外。ベンダーは、さまざまな軸やモーターをさまざまなビットに自由にマッピングできます。 |
2 | Undef |
6 | Undef | 今後拡張予定。 |
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 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_SATELLITE_INFO
このコントロールは、このカメラ システムに接続されているサテライト デバイスをクエリするために使用されます。
コントロール セレクタ | 0x0A | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
オペレーション | GET |
|||||||||||
wLength |
20 | |||||||||||
オフセット | フィールド | サイズ | 値 | 説明 | ||||||||
0 | bSatelliteList |
20 | ビットマップ | システムに接続されている衛星タイプのリスト。4 つの 5 バイト スロットが含まれます。各スロットは次のように説明されます。
|
サポートされているリクエスト タイプの動作は次のとおりです。
オフセット | 0 | 説明 |
---|---|---|
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 バイト |
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 |
コントロール: 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 座標を指定するために使用されます。ゼロ(0)の Preset index
はホーム座標にマッピングされ、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 | サポートされている N 個の最大プリセット |
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 PanTilt(絶対)コントロールで定義されています。
制御: GOOGXU_PAN_TILT_RELATIVE
(非推奨)
パンとチルトの補助マッピング コントロールは、UVC 1.5 クラス仕様の第 4 章: クラス固有のリクエストのセクション 4.2.2.1.15 PanTilt(相対)コントロールで定義されています。
関連トピック
- Linux USB Video Class(UVC)ドライバ
- Video Class v1.5 ドキュメント セット
- USB 2.0 仕様
- Google Meet ハードウェア ヘルプセンター
- Google Workspace 管理者用ヘルプセンターの Google Meet ハードウェア セクション
リリースノート
このリリースノートでは、このドキュメントの各改訂版の改善点や新機能をご紹介します。
2025 年 8 月 13 日
- テスト施設の詳細を修正しました。
2025 年 1 月 27 日
GOOGXU_FRAME_STRATEGY
にVendor-preferred
フレーミング戦略を追加しました。- 新しいコントロール
GOOGXU_SATELLITE_INFO
を追加しました。
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 日
初回リリース。