Google Meet ハードウェア USB Video Class Extension Unit API

このドキュメントでは、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_CURGET_MINGET_MAXGET_RESGET_LENGET_INFOGET_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-StreamSplit-Frame, Room, Single-StreamDynamic, 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 この衛星タイプの数量。
1-2 この衛星タイプのベンダー ID。
3~4 この衛星タイプのプロダクト ID。

サポートされているリクエスト タイプの動作は次のとおりです。

オフセット 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_STRATEGYNONE に設定されている場合、ウェイクアップ時のカメラのデフォルトの位置になります。

コントロール セレクタ 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(相対)コントロールで定義されています。

リリースノート

このリリースノートでは、このドキュメントの各改訂版の改善点や新機能をご紹介します。

2025 年 8 月 13 日

2025 年 1 月 27 日

2024 年 5 月 21 日

2023 年 11 月 15 日

有効なフレーミング モードをチェックして解釈するようテスト スクリプトを更新しました。バイト表現を明確にしました。

2023 年 7 月 21 日

パートナーがこの仕様への準拠に関する実装を検証するためのテスト スクリプトを追加しました。

2023 年 5 月 25 日

プリセットの数に関するGOOGXU_PRESETS注記を修正しました。N-1 ではなく N にする必要があります。

2023 年 4 月 17 日

初回リリース。