Google Meet 하드웨어 USB 동영상 클래스 확장 단위 API

이 문서에서는 Google Meet 회의 시스템에서 스마트 카메라 기능을 사용 설정하는 데 사용하는 지원되는 USB 동영상 클래스 확장 단위 (XU) API를 간략히 설명합니다. 이 사양을 만드는 목적은 이러한 기능을 사용 설정하는 방식에 영향을 주고 파트너가 더 나은 비동기 확장성과 테스트를 수행할 수 있도록 하는 것입니다.

이 문서의 최신 변경사항에 관한 자세한 내용은 출시 노트를 참고하세요.

테스트 시설

파트너가 이 사양을 준수하는지 확인할 수 있도록 개발자 모드로 설정된 회의용 Chromebox 기기에 테스트 시설을 제공합니다. 파일 시스템에 쓰기를 사용 설정합니다. /etc/chrome_dev.conf에 다음 줄을 추가합니다.

--enable-logging
--log-level=0

기기를 다시 시작하고 카메라와 USB 키보드를 연결한 다음 Ctrl-Alt-X를 누르면 활성 카메라의 사양 준수가 실행되고 /home/chronos/user/log/chrome에 로깅됩니다.

Little-endian 규칙

USB는 리틀 엔디언 표준입니다. 이 문서의 내용:

  • 멀티바이트 숫자는 Big Endian으로 표시되며 little-endian으로 전송됩니다.
  • 바이트 배열은 리틀 엔디언 메모리 레이아웃에 있습니다.

예를 들어 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가 사용 중지됩니다.
프레임 분할 카메라는 필요에 따라 동영상 뷰를 만듭니다. 자동 프레이밍 피드 옵션에 따라 단일 스트림의 타일로 구성하거나 뷰별로 별도의 동영상 스트림을 만듭니다.
참고: 이 모드에서는 PTZ가 사용 중지됩니다.
동적 뷰 하나 이상의 카메라가 객실을 가장 잘 볼 수 있도록 합니다. 여러 피드를 하나의 피드로 구성할지 또는 현재 방의 '재미있는' 뷰를 제공할지 여부를 결정할 수 있습니다.
이 보기의 목적은 통화에 참여하는 방 안의 참가자를 가장 공정하게 보여주는 것입니다.
참고:
  • 대부분의 회의에서는 이 전략을 사용해야 합니다.
  • 이 모드에서는 PTZ가 사용 중지됩니다.

자동 프레이밍 편향

기능 설명
중대한 사안을 다루는 발표자 (발표자 추적) 카메라는 회의실에서 말하는 사람을 가장 잘 담으려고 합니다.
이 시나리오에서는 카메라가 발표자를 향해야 합니다. 예를 들어 회의실에서 CEO가 프레젠테이션하는 장면을 촬영할 수 있습니다.
공동작업
(회의실 추적)
카메라는 회의실에 있는 모든 참여자의 프레임을 최적화하려고 시도합니다. 이 시나리오에서 카메라는 모든 참여자를 동등하게 대해야 합니다. 대부분의 회의에 이 전략을 사용해야 합니다.

자동 프레이밍 피드

기능 설명
단일 스트림 카메라는 호스트 기기에 단일 동영상 스트림을 전송합니다.
다중 스트림
(진행 중)
카메라는 스트림을 분할하고 여러 동영상 스트림을 만들어 호스트로 전송합니다.
참고: 이 기능의 전체 사양 및 예상 동작은 검토 대기 중이며 이 문서의 이후 버전이 수정될 때까지 지원되지 않습니다.

자동 프레이밍 모드 비트맵 값

빈 바이트 배열로 표시되는 기본 상태 None를 제외하고 바이트 배열의 각 비트는 자동 프레이밍 전략, 자동 프레이밍 편향, 자동 프레이밍 피드의 특정 조합인 서로 다른 카메라 모드를 나타냅니다.

비트 색인 CAZ 분할 프레임 동적 -
스피커 D1
-
-
-
D5
D6
단일 스트림
멀티 스트림
Room D2
-
3일
일 4일
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 명령어는 값이 0 또는 1인 8바이트 길이의 비트 마스크를 반환하여 기기에서 기능이 지원되는지 여부를 각각 나타냅니다. 예를 들어 카메라가 CAZ, Speaker, Single-Stream, Split-Frame, Room, Single-Stream, Dynamic, Room, Multi-Stream를 지원하지만 다른 모드는 지원하지 않는 경우 GET_RES는 0x000000000000000085 (0b10000101 뒤에 0 바이트 7개)를 반환해야 합니다.

SET_CUR 명령어는 비트맵을 전송하여 카메라에 사용 설정할 단일 카메라 모드를 알려주는 데 사용됩니다.

컨트롤 선택기 1
작업 GET / SET
wLength 8
오프셋 필드 크기 설명
0 bActiveMode 8 비트맵 활성 카메라 모드 설정 또는 반환
참고:

지원되는 요청 유형의 동작은 다음과 같습니다.

오프셋 0 설명
GET_CUR 능동 프레이밍 카메라 모드 가져오기
GET_MIN 카메라에 따라 다름
GET_MAX 카메라에 따라 다름
GET_RES 지원되는 카메라 모드의 8바이트 길이 비트 마스크를 반환합니다.
GET_LEN 0x0008 길이
GET_INFO 0x0B 자동 업데이트 / 쓰기 / 읽기
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 사용 중지됨
사용 중지됨 스트리밍되지 않고 음소거되지 않음 사용 안함 0x00 사용 중지됨
사용 중지됨 스트리밍 사용 0x00 사용 중지됨
사용 중지됨 음소거됨 사용 안함 0x00 사용 중지됨

컨트롤: 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 자동 업데이트 / 쓰기 / 읽기
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_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_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 (지원 중단됨)

이동 및 기울기 보조 매핑 컨트롤은 4장: 클래스별 요청 섹션 4.2.2.1.14 UVC 1.5 클래스 사양의 PanTilt (절대) 제어에 정의되어 있습니다.

제어: GOOGXU_PAN_TILT_RELATIVE (지원 중단됨)

팬 및 기울기 보조 매핑 컨트롤은 4장: 클래스별 요청 섹션 4.2.2.1.15 UVC 1.5 클래스 사양의 PanTilt (상대) 제어에 정의되어 있습니다.

출시 노트

이 출시 노트에는 이 문서 각 버전의 개선사항 및 새로운 기능이 반영되어 있습니다.

2024년 5월 21일

2023년 11월 15일

유효한 프레이밍 모드를 확인하고 해석하도록 테스트 스크립트를 업데이트했습니다. 바이트 표현을 명확히 했습니다.

2023년 7월 21일

파트너가 이 사양을 준수하는지 구현을 검증할 수 있는 테스트 스크립트를 추가했습니다.

2023년 5월 25일

사전 설정 수와 관련된 GOOGXU_PRESETS 메모를 수정했습니다. N-1이 아닌 N이어야 합니다.

2023년 4월 17일

첫 출시입니다.