오디오 스위치
사용자가 일상적인 작업을 수행하기 위해 여러 오디오 소스 기기를 사용하는 경우가 점점 늘어나면서 기기 전반에서 헤드셋 사용을 관리하는 더 간단한 솔루션에 대한 수요가 증가하고 있습니다. 오디오 전환은 사용자 활동 (예: 영화 시작) 및 우선순위가 지정된 이벤트 (예: 수신 전화)에 따라 기기 간에 헤드셋 연결을 원활하게 전환합니다.
UX 원칙
- 연결 전환은 빠르고 사용자 작업에 기반해야 합니다.
- 연결 전환은 사용자에게 투명하게 이루어져야 하며, 사용자가 원하지 않는 전환이 발생하면 이를 제어하거나 되돌릴 수 있어야 합니다.
- 전환 시 사용자 개인 정보 보호를 고려해야 합니다.
역할
오디오 스위치 시커: 시커는 오디오 소스 기기 (예: 휴대전화 또는 태블릿)로, 해당하는 경우 연결할 주변 헤드셋을 찾습니다.
오디오 스위치 제공업체: 제공업체는 일반적으로 탐색자가 전환 결정을 내릴 수 있도록 자신의 존재와 연결 상태를 광고하는 헤드셋입니다.
요구사항 개요
스마트 전환을 사용하려면 제공업체가 다음 요구사항을 준수해야 합니다.
이름 | 설명 | 요구사항 | 필수 여부 |
---|---|---|---|
페이지 스캔 | 기존 연결이 있는 경우 다른 검색자의 새 연결 요청을 수락합니다. 단일 지점 제공업체의 경우:
|
성능을 개선하려면 지연 시간이 짧은 페이지 스캔 모드 (스캔 간격은 640ms 이하여야 함)가 필요합니다. 배터리 수명과 전환 성능 간에 절충하기 위해 제공업체는 대부분의 경우 기본 페이지 스캔 모드 (저전력 모드, 스캔 간격은 1280ms 이하여야 함)를 사용할 수 있습니다. 하지만 다음과 같은 상황에서는 짧은 지연 시간 모드를 사용해야 합니다.
|
필수 |
연결 기록 | 이전 연결로 다시 전환하고 해당하는 경우 재생을 재개합니다. 다시 전환은 Message Stream API를 통한 통신에 의해 트리거됩니다. 재생을 재개하려면 해당하는 경우 오디오 일시중지 이벤트를 레코드에 포함해야 합니다. |
연결 기록을 유지하고 Message Stream API를 구현합니다. | 필수 |
연결 상태 | 검색자가 연결 전환 판단을 수행합니다. 연결 상태에는 다음이 포함됩니다.
|
BLE 광고 및 메시지 스트림에 연결 상태를 포함합니다. | 필수 |
런타임 기능 변경 | 오디오 스위치는 제공업체에서 펌웨어를 업그레이드하여 사용 설정할 수 있으므로 런타임에 이 기능을 검색자와 제공업체 간에 동기화해야 합니다. | Message Stream API를 구현하여 런타임 기능에 액세스합니다. | 필수 |
구성 가능한 전환 규칙 | 시커가 사용자 환경설정 설정을 통해 기존 활성 오디오 스트리밍과 새 오디오 스트리밍 요청 간의 우선순위를 구성하도록 허용합니다. 예를 들어 오디오 스위치 시커는 사용자가 미디어 스트리밍과 통화 간에 자동 전환을 사용 설정/사용 중지할 수 있는 UI 설정을 제공할 수 있습니다. 오디오 전환 시커는 메시지 스트림을 통해 전환 규칙을 설정하고 가져옵니다. |
멀티포인트 제공업체만 해당. Message Stream API를 구현하여 연결된 기기 간의 전환 규칙을 구성할 수 있도록 합니다. |
선택사항 |
활성 기기 전환 | 오디오 스위치 시커가 연결된 기기 간의 오디오 전환을 시뮬레이션하도록 합니다. 오디오 스위치 시커 측에는 사용자가 연결된 기기 간에 쉽게 전환할 수 있는 UI가 있을 수 있습니다. |
멀티포인트 제공자만 해당. 오디오 전환 시커가 연결된 기기 간에 활성 오디오 소스를 결정할 수 있도록 Message Stream API를 구현합니다. |
필수 |
멀티포인트 전환 알림 | 오디오 전환 시커가 전환 알림을 표시하도록 합니다. | 멀티포인트 제공자만 해당. Message Stream API를 구현하여 멀티포인트 전환이 진행될 때 연결된 오디오 전환 시커에게 알립니다. |
필수 |
광고 페이로드
제공업체는 광고: 검색할 수 없는 경우에 설명된 빠른 페어링 계정 데이터를 기반으로 빌드된 현재 연결 상태를 광고에 포함해야 합니다.
표 4.2의 버전은 0x1입니다.
연결 상태 필드
옥텟 | 데이터 유형 | 설명 | 값 | 필수 여부 |
---|---|---|---|---|
0 | uint8 |
필드 길이 및 유형 0bLLLLTTTT
|
0bLLLL0101
|
필수 |
1 | uint8 |
연결 상태 0bHAFRSSSS
|
0bHAFRSSSS |
필수 |
2 | uint8 |
맞춤 데이터 현재는 현재 오디오 스트리밍의 사용을 설명하는 데 사용되는 콘텐츠 유형만 포함되어 있습니다. 검색자가 제공업체에 전송합니다. |
이 값은 현재 활성 스트리밍의 검색자로부터 메시지 스트림을 통해 제공업체로 전송됩니다. 현재 활성 스트리밍이 시커에서 발생하지 않은 경우 0입니다. | 필수 |
3 - var | 연결된 기기 비트맵 현재 제공업체에 연결된 기기를 보여주는 비트맵입니다. 모든 결합된 기기는 결합된 기기당 1비트씩 순서대로 배열됩니다. 길이는 제공업체의 결합된 기기 수에 따라 다릅니다. |
기기가 현재 제공업체에 연결되어 있으면 매핑된 비트가 1로 설정되고, 그렇지 않으면 0으로 설정됩니다. 자세한 내용은 연결된 기기 비트맵을 참고하세요. |
선택사항 |
표 4.1: 연결 상태 필드 원시 데이터
연결 플래그
0bH = 착용 감지
- 1, on head now
- 0(머리에 없거나 OHD 센서가 없음)
0bA = 연결 가용성
- 1, 사용 가능한 연결이 있음
- 0(그 외의 경우)
0bF = 집중 모드
- 1. 이제 포커스 모드에서 미디어 사용 시 연결 전환이 허용되지 않습니다. 즉, A2DP에서 A2DP로 전환할 수 없습니다.
- 0(그 외의 경우)
0bR = 자동으로 다시 연결됨
- 1: 현재 연결이 제공업체에 의해 자동으로 다시 연결된 경우입니다. 즉, 사용자가 연결하지 않았습니다. 다중점의 경우 기존 연결 중 하나가 자동으로 다시 연결되면 1로 설정해야 합니다.
- 0(그 외의 경우)
연결 상태
- 0x0: 연결되지 않음
- 0x1: 페이징
- 0x2: 연결되었지만 데이터 전송이 없음
- 0x3: 오디오가 아닌 데이터 전송 (전환 가능한 경우에만, 그렇지 않은 경우 0xF 사용)
- 0x4: A2DP 스트리밍, AVRCP는 해당되지 않음
- 0x5: A2DP 스트리밍 및 AVRCP 재생
- 0x6: 인밴드 및 인밴드 외 벨소리 등 HFP (전화/VoIP 통화) 스트리밍
- 0x7: LE 오디오 - 제어 없이 미디어 스트리밍
- 0x8: LE 오디오 - 제어 기능이 있는 미디어 스트리밍
- 0x9: LE 오디오 - 통화 스트리밍
- 0xA: LE 오디오 - 브로드캐스트
- 0xF: 연결 스위치 일시적으로 사용 중지 (예: 펌웨어 업데이트)
LE 오디오 컨텍스트 유형 및 연결 상태
LE 오디오 제공업체가 할당된 번호 6.12.3에 지정된 모든 컨텍스트 유형을 처리해야 하며(제공업체가 특정 컨텍스트 유형을 명시적으로 지원하지 않는 경우 제외) 아래와 같이 컨텍스트 유형을 연결 상태에 매핑하는 것이 좋습니다.
- 대화형: 0x9
- 미디어: 0x8
- 게임: 0x7
- 안내: 0x7
- 음성 어시스턴트: 0x9
- 실시간: 0x9
- 음향 효과: 0x2
- 알림: 0x2
- 벨소리: 0x9
- 알림: 0x7
- 응급 상황 알림: 0x9
통화 중에 미디어를 재생하는 것과 같은 혼합 LE 오디오 컨텍스트 유형 시나리오의 경우 제공업체는 가장 높은 우선순위의 연결 상태를 사용해야 합니다. 즉, 위 시나리오에서는 0x8 (미디어) 대신 0x9 (통화)를 사용해야 합니다.
연결된 기기 비트맵
원치 않는 연결 전환을 방지하려면 시커가 헤드셋이 현재 연결되어 있는 기기를 알아야 할 수 있습니다. 예를 들어 헤드셋이 휴대전화에 연결되어 있을 때 가족 구성원 중 한 명이 태블릿에서 YouTube를 시작하면 연결 전환으로 인해 중단되는 것을 원하지 않습니다.
이 비트맵은 익명이므로 검색자는 제공업체와 결합된 다른 기기를 알 수 없습니다. 예를 들어 결합된 기기가 5대 있다고 가정해 보겠습니다.
- 0: 노트북 (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: 태블릿 (0b000x0000)
- 4: TV (0b0000x000)
현재 연결된 기기가 노트북과 태블릿인 경우 비트맵의 값은 0b10010000입니다. 사용자가 헤드셋을 초기화하거나 결합된 기기 수가 상한에 도달하는 등 불가피한 경우 주문 변경이 허용됩니다.
무작위로 해결 가능한 광고
추적을 방지하고 사용자 개인 정보를 보호하려면 제공업체는 AES-CTR을 사용하여 계정 키로 필드를 순환하고 암호화해야 합니다.
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
어디서
키는 다음 섹션에 정의된 사용 중인 계정 키에서 파생됩니다.
키는 SHA-256 해시 함수를 사용하여 HKDF 함수(IETF RFC 5869)에 의해 생성됩니다.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
여기서 제공업체는 원래 계정 키를 사용해야 합니다. 즉, 키의 첫 번째 바이트는 0x04이며 사용 패턴에 포함되지 않습니다.
IV (초기 벡터)는 0 패딩이 있는 계정 키 데이터의 2바이트 솔트입니다. 즉, IV는 concat(salt, 14-byte ZEROs)입니다.
연결 상태 원시 데이터는 표 4.1에 정의되어 있습니다. 연결 상태가 변경되면 동일한 광고 기간에 소금과 RPA를 재생성해야 합니다.
이렇게 하면 암호화된 연결 상태 필드가 계정 키 데이터가 순환할 때 동시에 순환합니다.
BLE 광고는 다음과 같이 구성됩니다.
옥텟 | 데이터 유형 | 설명 | 값 | 필수 여부 |
---|---|---|---|---|
0 | uint8 |
버전 및 플래그 | 0x10 | 필수 |
1 - t | 계정 키 데이터 | 다름 | 필수 | |
t+1 - s | 배터리 데이터 | 다름 | 선택사항 | |
s+1 - var | 무작위로 결정 가능한 데이터 | 다름 | 계정 키 목록이 비어 있지 않은 경우 필수사항이고, 그렇지 않으면 제외됩니다. |
표 4.2: 임의의 resolvable 데이터가 포함된 BLE 광고
랜덤 리졸브 가능한 데이터에는 다음이 포함됩니다.
옥텟 | 데이터 유형 | 설명 | 값 | 필수 여부 |
---|---|---|---|---|
0 | uint8 |
필드 길이 및 유형 0bLLLLTTTT
|
0bLLLL0110
|
필수 |
1 - var | 암호화된 데이터 | 다름 | 필수 |
표 4.2.1: 임의의 해결 가능한 데이터
예를 들어 랜덤 리졸브 가능한 데이터에 암호화된 연결 상태 필드가 포함되어 있으면 복호화된 결과는 연결 상태 필드입니다.
조작을 방지하기 위해 무작위로 결정 가능한 데이터가 광고에 포함된 경우 위의 계정 키 데이터를 약간 수정해야 합니다. 일반적으로 계정 키 필터를 빌드할 때 계정 키 필터를 솔트와 결합하여 값 V가 생성됩니다. 대신 랜덤 리졸브 가능한 데이터도 광고되는 경우 값 V는 다음과 같이 구성되어야 합니다.
V = concat(account_key, salt, random_resolvable_data)
배터리 데이터와 무작위로 해결 가능한 데이터가 모두 광고되는 경우 V는 다음과 같이 구성되어야 합니다.
V = concat(account_key, salt, battery_data, random_resolvable_data)
사용 중인 계정 키
연결 전환은 계정 기반이므로 제공업체는 BLE 광고에 현재 연결의 계정 정보를 포함해야 합니다. 현재 연결된 기기가 오디오 스위치 시커인 경우 제공업체는 이 시커와 연결된 계정 키를 가져와 이 계정 키를 사용하여 연결 상태 필드를 암호화할 수 있어야 합니다. 연결된 오디오 소스가 오디오 스위치 시커가 아닌 경우 제공업체는 가장 최근에 사용한 계정 키를 사용해야 합니다.
계정 키 필터를 계산하기 전에 제공업체는 사용 패턴에 다음 중 하나를 포함하도록 계정 키의 첫 번째 바이트를 수정해야 합니다.
- 0b00000100
이 계정 키는 사용되지 않습니다.
기본 키입니다 (계정 키 참고). - 0b00000101
이 계정 키는 가장 최근에 사용된 계정 키입니다.
연결 상태 필드는 이 계정 키로 암호화됩니다. 현재 연결 상태의 계정 키 정보가 없습니다. 연결된 기기가 없거나 연결된 기기가 오디오 스위치 시커가 아닐 수 있습니다. - 0b00000110
이 계정 키는 사용 중인 계정 키입니다.
연결 상태 필드는 이 계정 키로 암호화되며 현재 연결된 기기는 이 계정 키와 연결됩니다.
오디오 스위치 페이로드의 회로도
아래 그림은 오디오 스위치 페이로드의 스키마를 보여줍니다.

메시지
연결된 경우 검색자와 제공업체는 메시지 스트림을 사용하여 오디오 스위치 기능을 동기화하고, 연결 스위치를 트리거하고, 전환 환경설정을 설정 및 가져오고, 연결 상태를 알리는 등의 작업을 할 수 있습니다. 아래와 같이 오디오 스위치에 관한 메시지 그룹과 메시지 코드를 만듭니다.
메시지 그룹 이름 | 값 |
---|---|
오디오 전환 | 0x07 |
각 메시지 코드에 관한 추가 세부정보는 다음 섹션에 포함되어 있습니다.
메시지 코드 이름 | 값 | 멀티포인트만 | 보내는 사람 | Responder | 암호화 | MAC | 확인 |
---|---|---|---|---|---|---|---|
오디오 스위치 기능 가져오기 | 0x10 | N | 둘 다 | 둘 다(코드 0x11 사용) | N | 아니요 | N |
오디오 전환 기능 알림 | 0x11 | N | 둘 다 | 둘 다 | N | 예 | Y |
멀티포인트 상태 설정 | 0x12 | Y | 구직자 | 제공업체 | N | 예 | Y |
전환 환경설정 지정하기 | 0x20 | Y | 구직자 | 제공업체 | N | 예 | Y |
전환 환경설정 가져오기 | 0x21 | Y | 구직자 | 제공업체(코드 0x22 사용) | N | 아니요 | N |
전환 알림 환경설정 | 0x22 | Y | 제공업체 | 구직자 | N | 아니요 | N |
활성 오디오 소스 전환(연결된 기기로) | 0x30 | Y | 구직자 | 제공업체 | N | 예 | Y |
다시 전환 | 0x31 | N | 구직자 | 제공업체 | N | 예 | Y |
멀티포인트 스위치 이벤트 알림 | 0x32 | Y | 제공업체 | 구직자 | N | 아니요 | N |
연결 상태 가져오기 | 0x33 | Y | 구직자 | 제공업체(코드 0x34 사용) | N | 아니요 | N |
연결 상태 알림 | 0x34 | Y | 제공업체 | 구직자 | Y | 아니요 | N |
오디오 스위치가 연결을 시작했음을 알림 | 0x40 | N | 구직자 | 제공업체 | N | 예 | Y |
사용 중인 계정 키 표시 | 0x41 | N | 구직자 | 제공업체 | N | 예 | Y |
맞춤 데이터 전송 | 0x42 | N | 구직자 | 제공업체 | N | 예 | Y |
연결 삭제 타겟 설정 | 0x43 | Y | 구직자 | 제공업체 | N | 예 | Y |
표 4.3: 오디오 전환 메시지
오디오 스위치 메시지의 MAC
메시지 인증을 제공하려면 검색자에서 제공업체로 전송되는 추가 데이터가 포함된 모든 오디오 스위치 메시지에 메시지 인증 코드가 필요합니다. MAC가 포함된 메시지가 수신되면 탐색자가 제공업체가 메시지에 반응했는지 여부를 알 수 있도록 확인되어야 합니다.
메시지 인증에 성공하면 제공업체는 메시지에 대한 ACK를 전송해야 합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 확인 | 0xFF |
1 | uint8 | 확인 | 0x01 |
2~3 | uint16 | 추가 데이터 길이 | 다름 |
4 | uint8 | 오디오 전환 | 0x07 |
5 | uint8 | 오디오 전환 메시지 코드 | 다름 |
6 - 초 | 추가 데이터 | 다름 |
실패하면 제공업체는 메시지에 대한 NAK를 전송해야 합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 확인 | 0xFF |
1 | uint8 | NAK | 0x02 |
2~3 | uint16 | 추가 데이터 길이 | 0x0003 |
4 | uint8 | 오류 이유 | 다름 |
5 | uint8 | 오디오 전환 | 0x07 |
6 | uint8 | 오디오 전환 메시지 코드 | 다름 |
제공업체가 발신자인 경우 MAC은 필요하지 않습니다.
오디오 전환 기능 가져오기
오디오 스위치 제공업체와 시커 모두 아래 메시지를 사용하여 연결된 빠른 페어링 시커/제공업체가 오디오 스위치를 지원하는지 확인할 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 오디오 전환 기능 가져오기 | 0x10 |
2~3 | uint16 | 추가 데이터 길이 | 0 |
표 4.3.1.0: 오디오 전환 기능 가져오기
오디오 전환 기능 알림
get capability of Audio switch 메시지 코드를 수신하면 오디오 스위치 시커/제공업체는 다음 플래그 중 하나로 응답합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 오디오 전환 기능 알림 | 0x11 |
2~3 | uint16 | 추가 데이터 길이 | 검색자가 전송한 경우 20, 제공업체가 전송한 경우 4 |
4~5 | uint16 | 오디오 전환 버전 코드 | 0이 아닌 값은 오디오 스위치를 지원함을 의미합니다. 현재 버전 (보안 개선사항 포함) 코드는 0x0102입니다. 0x0000 또는 1초 이내에 응답이 없으면 이 기기에서 오디오 스위치가 지원되지 않는 것입니다. |
6 - 7 | flags | 제공업체의 오디오 스위치 기능 플래그 시커가 전송하는 경우 이 두 바이트를 무시해야 합니다. |
다름 오디오 스위치 기능 플래그를 참고하세요. |
8~15 | 메시지 nonce 탐색자가 전송하는 경우에만 필요 |
다름 | |
16~23 | 메시지 인증 코드 탐색자가 전송하는 경우에만 필요 |
다름 |
표 4.3.1.1: 오디오 스위치의 알림 기능
오디오 전환 기능 플래그
비트 0 (옥텟 6, MSB): 오디오 전환 상태
- 1, 오디오 전환 상태가 켜져 있는 경우
- 0(그 외의 경우)
비트 1: 멀티포인트 구성 가능 여부
- 1: 기기가 멀티포인트를 지원하고 멀티포인트를 사용 설정/사용 중지할 수 있는 경우
- 0 (그렇지 않은 경우: 멀티포인트를 지원하지 않거나 멀티포인트가 항상 사용 설정됨)
비트 2: 멀티포인트 현재 상태
- 1(멀티포인트가 사용 설정된 경우)
- 0(그 외의 경우)
비트 3: 착용 감지
- 1, 이 기기에서 착용 감지를 지원하는 경우 (현재 착용 감지가 사용 중지되어 있더라도)
- 0(그 외의 경우)
비트 4: 착용 감지 현재 상태
- 1(온헤드 감지가 사용 설정된 경우)
- 0 (그렇지 않은 경우: 착용 감지를 지원하지 않거나 착용 감지가 사용 중지됨)
다른 모든 비트는 예약되어 있으며 기본값은 0입니다.
멀티포인트 상태 설정
오디오 스위치 시커에서는 사용자가 멀티포인트 기능을 사용 설정/중지할 수 있는 설정을 제공할 수 있습니다. 시커는 아래 메시지를 사용하여 멀티포인트 상태를 제공업체에 설정합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 멀티포인트 상태 설정 | 0x12 |
2~3 | uint16 | 추가 데이터 길이 | 17 |
4 | uint8 | 멀티포인트 상태 | 0: 멀티포인트 사용 중지 1: 멀티포인트 사용 설정 |
5~12 | 메시지 nonce | 다름 | |
13~20 | 메시지 인증 코드 | 다름 |
표 4.3.1.2: 멀티포인트 상태 설정
전환 환경설정 지정
오디오 스위치 시커는 아래 메시지를 사용하여 멀티포인트의 전환 환경설정을 수정하고 공급자에게 설정할 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 전환 환경설정 지정 | 0x20 |
2~3 | uint16 | 추가 데이터 길이 | 18 |
4 | flags | 전환 환경설정 | 다름 멀티포인트 전환 환경설정 플래그를 참고하세요. |
5 | 고급 전환 설정 이 바이트는 예약되어 있으며 기본값은 0입니다. |
다름 | |
6~13세 | 메시지 nonce | 다름 | |
14~21세 | 메시지 인증 코드 | 다름 |
표 4.3.2.0: 전환 환경설정 설정
멀티포인트 전환 환경설정 플래그
- 비트 0 (MSB): A2DP 대 A2DP (기본값 0)
- 비트 1: HFP 대 HFP (기본값 0)
- 비트 2: A2DP 대 HFP (기본값 0)
- 비트 3: HFP 대 A2DP (기본값 1)
- 비트 4~7: 예약됨
- 위의 예시에서는 '새 프로필 요청'과 '현재 활성 프로필'을 보여줍니다.
- 전환하지 않은 경우 0
- 전환: 1
전환 환경설정 가져오기
오디오 스위치 시커는 아래 메시지를 사용하여 제공업체에 멀티포인트의 전환 환경설정을 쿼리할 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 전환 구성 가져오기 | 0x21 |
2~3 | uint16 | 추가 데이터 길이 | 0 |
표 4.3.2.1: 전환 환경설정 가져오기
전환 환경설정 알림
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 전환 환경설정 알림 | 0x22 |
2~3 | uint16 | 추가 데이터 길이 | 2 |
4 | flags | 환경설정 플래그 전환 | 다름 멀티포인트 전환 환경설정 플래그를 참고하세요. |
5 | 고급 전환 설정 이 바이트는 예약되어 있으며 기본값은 0이어야 합니다. |
다름 |
표 4.3.2.2: 전환 환경설정 알림
활성 오디오 소스 전환 (연결된 기기로)
오디오 스위치 시커는 아래 메시지를 사용하여 연결된 기기 간에 활성 오디오 소스를 전환하도록 멀티포인트 제공업체에 요청할 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 활성 오디오 소스 전환 (연결된 기기로) | 0x30 |
2~3 | uint16 | 추가 데이터 길이 | 17 |
4 | flags | 활성 오디오 소스 이벤트 플래그 전환 | 다름 활성 오디오 소스 전환 이벤트를 참고하세요. |
5~12 | 메시지 nonce | 다름 | |
13~20 | 메시지 인증 코드 | 다름 |
표 4.3.3.0: 활성 오디오 소스 전환 (연결된 기기로)
활성 오디오 소스 전환 이벤트
- 비트 0 (MSB): 1: 이 기기로 전환, 0: 연결된 두 번째 기기로 전환
- 비트 1: 전환 후 기기로 전환 시 재생을 재개하면 1이고 그렇지 않으면 0입니다. 재생을 재개한다는 것은 제공업체가 AVRCP 프로필을 통해 검색자에게 재생 알림을 전송한다는 의미입니다. 이전 상태 (전환 전)가 재생이 아니었다면 제공업체는 이 플래그를 무시해야 합니다.
- 비트 2: 전환된 기기에서 SCO를 거부하면 1이고 그렇지 않으면 0입니다.
- 비트 3: 1: 스위치 어웨이 기기에서 블루투스 연결 해제, 0: 그 외의 경우
- 비트 4~7: 예약됨
오디오 스위치 시커가 항상 자신의 상태를 정확하게 알지 못할 수 있으므로 시커가 이미 활성 기기인 경우에도 제공업체가 '이 기기로 전환' 메시지를 수신할 수 있습니다. 이 경우 시커에 올바른 UI를 표시하기 위해 제공업체는 오류 이유 0x4 - 중복 기기 작업과 함께 NAK를 보낼 수 있습니다.
세트 구성원이 두 개 이상인 LE 오디오 제공업체의 경우 제공업체는 시커에서 모든 구성원을 연결 해제해야 합니다. 그러지 않으면 시커의 블루투스 스택이 제공업체에 다시 연결됩니다.
다시 전환 (연결 해제된 기기로)
연결 전환이 원치 않는 경우 사용자는 전환을 되돌릴 수 있으며, 특정 시나리오에서는 오디오 연결을 복원하여 서비스 중단을 최소화하는 것이 좋습니다. 검색자는 아래 메시지를 사용하여 다시 전환을 트리거합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 다시 전환 (연결 해제된 기기로) | 0x31 |
2~3 | uint16 | 추가 데이터 길이 | 17 |
4 | uint8 | 전환 취소 이벤트 | 다양함 0x01: 다시 전환 0x02: 다시 전환하고 재생 재개 |
5~12 | 메시지 nonce | 다름 | |
13~20 | 메시지 인증 코드 | 다름 |
표 4.3.3.1: 다시 전환 (연결 해제된 기기로)
멀티포인트 제공업체의 경우 연결을 전환하기 위해 제공업체가 한 오디오 소스 기기와의 연결을 끊고 다른 오디오 소스에서 오디오 세션을 일시중지할 수 있습니다. 예를 들어 멀티포인트 헤드셋이 태블릿과 지원되는 서드 파티 오디오 스위치 기기에 연결되어 있다고 가정해 보겠습니다. 사용자가 태블릿에서 동영상을 시청하는 중에 휴대전화에 수신 전화가 옵니다. 휴대전화는 헤드셋의 연결 스위치를 트리거합니다. 이 스위치는 휴대전화에 연결하기 위해 서드 파티 기기의 연결을 끊어야 하며, 태블릿에서 미디어 세션을 일시중지하여 휴대전화에서 벨소리를 가져와야 합니다. 사용자가 전화를 거부하면 휴대전화에서 헤드셋에 '다시 전환하고 재생을 재개'하도록 요청할 수 있습니다. 이 요청을 수신하면 헤드셋은 서드 파티 기기에 다시 연결하고 태블릿에서 일시중지된 동영상 재생을 재개해야 합니다.
멀티포인트 전환 이벤트 알림
오디오 스위치 시커는 사용자에게 멀티포인트 스위치 이벤트가 발생했음을 알리기 위해 사용자에게 알림을 표시할 수 있습니다. 제공업체는 연결된 오디오 스위치 시커에게 전환 이벤트를 알리도록 해야 합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 멀티포인트 전환 이벤트 알림 제공업체는 오디오 전환 시커에서 오디오 전환 외 시커로의 전환, 오디오 전환 외 시커에서 오디오 전환 시커로의 전환, 오디오 전환 시커에서 오디오 전환 시커로의 전환을 비롯한 모든 전환에서 전송해야 합니다. |
0x32 |
2~3 | uint16 | 추가 데이터 길이 | 다름 |
4 | uint8 | 전환 이유 이 값은 연결 상태를 기반으로 결정해야 합니다. LE Audio 사용 사례의 경우 LE Audio 컨텍스트 유형과 연결 상태 간의 매핑을 살펴보는 것이 유용할 수 있습니다. 예를 들어 음성 어시스턴트에 해당하는 연결 상태는 0x9(LE 오디오 - 통화 스트리밍)입니다. 따라서 음성 어시스턴트에서 시작한 전환의 전환 이유는 0x02여야 합니다. |
다양함 0x00: 지정되지 않음 0x01: 미디어 (예: A2DP 스트리밍, LEA 미디어 스트리밍) 0x02: 통화 (예: HFP 스트리밍, LEA 통화 스트리밍) |
5 | uint8 | 대상 기기 | 다양함 0x01: 이 기기 0x02: 다른 연결된 기기 |
6 - n | utf8 | 타겟 기기 이름 : 타겟 기기가 오디오 스위치 시커인 경우 시커가 전송한 이름을 사용하고, 그렇지 않은 경우에는 BT 이름을 사용합니다. 해당되지 않는 경우에는 주소의 마지막 2바이트를 사용합니다. |
다름 |
표 4.3.3.2: 멀티포인트 스위치 이벤트 알림
연결 상태 가져오기
검색자는 제공업체에서 현재 연결 상태를 가져올 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 연결 상태 가져오기 | 0x33 |
2~3 | uint16 | 추가 데이터 길이 | 0 |
표 4.3.3.3: 연결 상태 가져오기
이 메시지를 수신하면 제공업체는 메시지 코드 0x34, 연결 상태 알림으로 응답해야 합니다.
연결 상태 알림
BLE 광고 페이로드에 정의된 대로 다중점 제공자의 경우 광고 패킷 변경을 제외하고 연결 상태가 변경되면 제공자는 동일한 계정 키를 사용하는 연결된 검색자에게도 변경사항을 알려야 합니다. 제공업체가 오디오 스위치 시커와 오디오 스위치 이외의 시커에 연결되어 있는 경우, 오디오 스위치 이외의 시커가 활성 상태인 경우 제공업체는 연결된 오디오 스위치 시커에게도 연결 상태를 알림 (시커의 계정 키 사용)해야 합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 연결 상태 알림 | 0x34 |
2~3 | uint16 | 추가 데이터 길이 | 다름 |
4 | uint8 | 활성 기기 플래그 | 다양함 0x00: 이 시커는 수동 상태이고 활성 기기는 동일한 계정 키를 사용합니다. 0x01: 이 시커가 활성 기기입니다. 0x02: 이 시커는 수동 상태이고 활성 기기는 오디오 스위치 시커가 아닙니다. |
5~n | 암호화된 연결 상태 | 다름 | |
n+1 - n+8 | 메시지 nonce | 다름 |
표 4.3.3.4: 연결 상태 알림
암호화된 연결 상태 메시지
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
각 항목의 의미는 다음과 같습니다.
키는 사용 중인 계정 키에서 파생됩니다. 해결 가능한 임의 광고를 참고하세요.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV는 concat(Session_nonce, Message_nonce)입니다.
connection_status_raw_data = concat(connection_state, custom_data, connected_devices)는 BLE 광고 페이로드에 정의되어 있습니다. 여기에는 메시지 코드와 데이터 길이가 있으므로 필드 길이와 유형의 바이트는 포함되어서는 안 됩니다.
오디오 전환이 시작된 연결 알림
오디오 스위치 제공업체는 오디오 스위치에 의해 연결 전환이 트리거되는지 여부를 알아야 다른 반응을 보일 수 있습니다(예: 오디오 스위치 이벤트의 이어콘 사용 중지). 검색자는 이 연결이 오디오 스위치에서 시작된 연결임을 제공업체에 알리는 메시지를 전송합니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 오디오 전환이 시작된 연결 알림 | 0x40 |
2~3 | uint16 | 추가 데이터 길이 | 17 |
4 | uint8 | 오디오 스위치에서 시작된 연결 표시 | 다양함 0: 이 연결은 오디오 스위치에 의해 트리거되지 않았습니다. 1: 오디오 스위치에서 시작된 연결입니다. |
5~12 | 메시지 nonce | 다름 | |
13~20 | 메시지 인증 코드 | 다름 |
표 4.3.4.0: 오디오 스위치에서 시작된 연결 알림
사용 중인 계정 키 표시
검색자의 여러 계정 키 (예: 다중 사용자)가 제공업체와 연결된 경우 검색자는 아래 메시지를 사용하여 사용 중인 계정 키를 나타냅니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 사용 중인 계정 키 표시 | 0x41 |
2~3 | uint16 | 추가 데이터 길이 | 22 |
4~9명 | utf8 | 사용 중인 문자열 | UTF8 ('사용 중') |
10 - 17 | 메시지 nonce | 다름 | |
18~25세 | 메시지 인증 코드 | 다름 |
표 4.3.4.1: 사용 중인 계정 키 표시
이 메시지를 수신하면 제공업체는 메시지 인증 코드를 확인하여 사용 중인 계정 키를 알 수 있습니다.
맞춤 데이터 전송
활성 오디오 스위치 시커는 오디오 스트림의 정보 (예: 오디오 사용량)를 맞춤 데이터 바이트로 캡슐화하고 아래 메시지를 사용하여 제공업체에 전송할 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 맞춤 데이터 전송 | 0x42 |
2~3 | uint16 | 추가 데이터 길이 | 17 |
4 | uint8 | 맞춤 데이터 | 다름 |
5~12 | 메시지 nonce | 다름 | |
13~20 | 메시지 인증 코드 | 다름 |
표 4.3.4.2: 맞춤 데이터 전송
맞춤 데이터를 수신하면 제공업체는 맞춤 데이터를 포함하도록 광고 패킷을 업데이트합니다. 다중 포인트 제공자의 경우 동일한 계정 키를 사용하여 연결된 다른 검색자에게도 연결 상태 변경을 알림으로 전송해야 합니다.
연결 삭제 타겟 설정
멀티포인트 헤드셋에서 연결을 해제할 기본 연결이 가장 최근에 사용되지 않은 연결이 아닌 경우 오디오 스위치 시커는 아래 메시지를 사용하여 제공업체에 어떤 기기를 해제할지 알릴 수 있습니다.
옥텟 | 데이터 유형 | 설명 | 값 |
---|---|---|---|
0 | uint8 | 오디오 전환 | 0x07 |
1 | uint8 | 연결 삭제 타겟 설정 | 0x43 |
2~3 | uint16 | 추가 데이터 길이 | 17 |
4 | uint8 | 연결된 대상 기기 삭제 | 다름 1: 이 기기 |
5~12 | 메시지 nonce | 다름 | |
13~20 | 메시지 인증 코드 | 다름 |
표 4.3.4.3: 연결 삭제 타겟 설정