音訊切換按鈕
隨著使用者越來越常使用多個音訊來源裝置來執行日常工作,他們對透過簡單解決方案管理多個裝置的耳機使用需求也越來越高。音訊自動切換功能會根據使用者活動 (例如開始播放電影) 和優先活動 (例如來電),在裝置之間流暢切換耳機連線。
使用者體驗原則
- 連線切換應快速且以使用者操作為依據。
- 連線切換應對使用者保持透明,讓使用者在連線切換不如預期時,可以控制/還原連線。
- 切換時應尊重使用者隱私。
角色
Audio Switch Seeker:Seeker 是音訊來源裝置 (例如手機或平板電腦),會在適用情況下尋找附近的耳機進行連線。
音訊切換提供者:提供者通常是宣傳其存在和連線狀態的耳機,以便尋找者決定是否切換。
需求總覽
如要實現智慧切換功能,供應者必須遵守下列規定:
名稱 | 說明 | 需求條件 | 是否必要? |
---|---|---|---|
頁面掃描 | 在已有連線的情況下,接受其他 Seeker 的新連線要求。 單點供應者:
|
您必須使用低延遲的頁面掃描模式 (掃描間隔不得超過 640 毫秒),才能提升效能。 為了在電池續航力和切換效能之間取得平衡,供應器可為多數情況設定預設的頁面掃描模式 (低耗電模式,掃描間隔不得超過 1280 毫秒)。但在下列情況下,必須使用低延遲模式:
|
必填 |
連線記錄 | 切換回先前的連線,並在適用情況下繼續播放。 透過 Message Stream API 的通訊會觸發切換回連線。 如果適用,請在記錄中加入暫停音訊的事件,以便繼續播放。 |
保留連線記錄並實作 Message Stream API。 | 必填 |
連線狀態 | 讓 Seeker 判斷連線是否切換。連線狀態包括:
|
在 BLE 廣告和訊息串流中加入連線狀態。 | 必填 |
執行階段功能變更 | 您可以透過升級提供者的韌體來啟用音訊切換功能,因此在執行階段時,Seeker 和 Provider 之間需要同步這些功能。 | 實作 Message Stream API 以存取執行階段功能。 | 必填 |
可設定的切換規則 | 讓 Seeker 透過使用者偏好設定,設定現有有效音訊串流和新音訊串流要求的優先順序。 舉例來說,音訊切換 Seeker 可能會提供 UI 設定,讓使用者啟用/停用媒體串流和通話之間的自動切換功能。 音訊切換 Seeker 會透過訊息串流設定及取得切換規則。 |
僅限多點供應商。 實作 Message Stream API,讓使用者可設定連線裝置之間的切換規則。 |
選用 |
使用中的裝置切換 | 讓 Audio switch Seeker 模擬在連線裝置之間切換音訊。 在 Audio switch Seeker 方面,可能會有使用者可輕鬆在連線裝置之間切換的 UI。 |
僅限多點供應商。 為音訊切換 Seeker 實作訊息串流 API,以便判斷已連結裝置之間的有效音訊來源。 |
必填 |
多點切換通知 | 讓音訊切換 Seeker 顯示切換通知。 | 僅限多點供應商。 實作 Message Stream API,在發生多點切換時通知已連線的 Audio switch Seeker。 |
必填 |
廣告酬載
供應商應在廣告中加入目前的連線狀態,並在「廣告:無法偵測到」一節所述的快速配對帳戶資料上方建立。
請注意,table 4.2 的版本為 0x1。
連線狀態欄位
Octet | 資料類型 | 說明 | 值 | 是否必要? |
---|---|---|---|---|
0 | uint8 |
欄位長度和類型 0bLLLLTTTT
|
0bLLLL0101
|
必填 |
1 | uint8 |
連線狀態 0bHAFRSSSS
|
0bHAFRSSSS |
必填 |
2 | uint8 |
自訂資料 目前只包含用於描述目前音訊串流用量的內容類型。尋求者會將該資料傳送給供應者。 |
這個值會透過訊息串流,從目前的 Seeker 傳送至提供者。如果目前的有效串流不是來自 Seeker,則為 0。 | 必填 |
3 - var | 已連結裝置的位圖 這個位圖會顯示目前連線至供應者的裝置。所有已綁定的裝置都會依序排列,每個已綁定的裝置占用一個位元。長度取決於供應商的綁定裝置數量。 |
如果裝置目前已連上提供者,則對應位元會設為 1,否則設為 0。 詳情請參閱「連結裝置點陣圖」 |
選用 |
表 4.1:連線狀態欄位原始資料
連線標記
0bH = 配戴偵測
- 1, 正在進行中
- 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 Audio - 通話串流
- 0xA:LE Audio - 廣播
- 0xF:暫時停用連線切換功能 (例如韌體更新)
LE Audio 內容類型和連線狀態
建議 LE Audio 供應器應處理 Assigned Numbers 6.12.3 中指定的所有內容類型 (除非供應器明確不支援特定內容類型),並將內容類型對應至下列連線狀態。
- 對話式:0x9
- 媒體:0x8
- 遊戲:0x7
- 指示:0x7
- 語音助理:0x9
- 直播:0x9
- 音效:0x2
- 通知:0x2
- 鈴聲:0x9
- 警示:0x7
- 緊急警報:0x9
對於混合式 LE Audio 情境類型 (例如在通話期間播放媒體),供應器應使用最高優先順序的連線狀態,也就是在上述情境中使用 0x9 (通話),而非 0x8 (媒體)。
已連結的裝置點陣圖
為避免發生不必要的連線切換,Seeker 可能需要知道目前連線至耳機的裝置。舉例來說,當耳機連上手機時,如果有家庭成員在平板電腦上啟動 YouTube,使用者不希望連線切換會造成干擾。
請注意,這個位元組圖片是匿名的,Seeker 無法得知哪些其他裝置與提供者配對。舉例來說,假設有 5 個已綁定的裝置:
- 0:筆記型電腦 (0bx0000000)
- 1:phoneA (0b0x000000)
- 2:phoneB (0b00x00000)
- 3:平板電腦 (0b000x0000)
- 4:電視 (0b0000x000)
如果目前連線的裝置是筆電和平板電腦,位圖的值會是 0b10010000。如果無法避免,例如使用者將耳機恢復原廠設定,或是已配對裝置的數量達到上限,則可以變更訂單。
隨機可解決廣告
為避免追蹤並尊重使用者隱私,供應商應使用 AES-CTR 輪替並加密帳戶金鑰欄位:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
媒介
索引鍵是從使用中的帳戶金鑰衍生而來,後者會在下一節中定義。
金鑰是由 HKDF 函式 (IETF RFC 5869) 使用 SHA-256 雜湊函式產生。
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
供應者應在此處使用原始帳戶金鑰,也就是金鑰的第一個位元組為 0x04,不包含在使用模式中。
IV (初始向量) 是帳戶金鑰資料的 2 位元組鹽值,並加上零填充,也就是說,IV 是 concat(salt, 14-byte ZEROs)。
連線狀態原始資料的定義請參閱 表 4.1,如果連線狀態有所變更,則應在相同的廣告時間範圍內重新產生鹽值和 RPA。
這樣一來,加密連線狀態欄位會在帳戶金鑰資料輪替時一併輪替。
BLE 廣告的結構如下:
Octet | 資料類型 | 說明 | 值 | 是否必要? |
---|---|---|---|---|
0 | uint8 |
版本和標記 | 0x10 | 必填 |
1 - t | 帳戶金鑰資料 | 視情況而定 | 必填 | |
t+1 - s | 電池資料 | 視情況而定 | 選用 | |
s+1 - var | 隨機可解資料 | 視情況而定 | 如果帳戶金鑰清單不為空白,則為必要欄位;否則為排除欄位。 |
表 4.2:含有隨機可解資料的 BLE 廣告
隨機可解資料包含:
Octet | 資料類型 | 說明 | 值 | 是否必要? |
---|---|---|---|---|
0 | uint8 |
欄位長度和類型 0bLLLLTTTT
|
0bLLLL0110
|
必填 |
1 - var | 加密資料 | 視情況而定 | 必填 |
表 4.2.1:隨機可解析資料
舉例來說,如果隨機可解析資料包含加密的連線狀態欄位,解密結果就會是 連線狀態欄位。
為避免竄改,如果廣告中包含隨機可解資料,請稍微修改上述帳戶金鑰資料。通常,建立帳戶金鑰篩選器時,系統會將帳戶金鑰篩選器與鹽值結合,產生值 V。相反地,如果也宣傳了隨機可解資料,則應以以下方式建構值 V:
V = concat(account_key, salt, random_resolvable_data)
如果同時宣告 Battery Data 和 Random Resolvable Data,則應將 V 建構為:
V = concat(account_key, salt, battery_data, random_resolvable_data)
在「使用帳戶金鑰」中
連線切換功能是以帳戶為基礎,因此供應器應在 BLE 廣告中加入目前連線的帳戶資訊。如果目前已連線的裝置是 Audio switch Seeker,供應器應可取得與此 Seeker 相關聯的帳戶金鑰,並使用這組帳戶金鑰加密連線狀態欄位。如果連結的音訊來源不是 Audio switch Seeker,提供者應使用最近使用的帳戶金鑰。
在計算帳戶金鑰篩選器之前,供應器應修改帳戶金鑰的第一個位元組,在使用模式中加入下列其中一個:
- 0b00000100
這個帳戶金鑰未使用。
這是預設值 (請參閱「帳戶金鑰」)。 - 0b00000101
這是最近使用的帳戶金鑰。
連線狀態欄位會由這個帳戶金鑰加密。沒有目前連線狀態的帳戶索引鍵資訊,可能表示沒有連線的裝置,或是連線的裝置不是 Audio switch Seeker。 - 0b00000110
這個帳戶金鑰是目前使用的帳戶金鑰。
連線狀態欄位會由這個帳戶金鑰加密,目前連線的裝置會與這個帳戶金鑰建立關聯。
音訊切換酬載的示意圖
下圖顯示音訊切換酬載的示意圖。

訊息
連線後,Seeker 和 Provider 可以使用訊息串流同步處理音訊切換功能、觸發連線切換、設定及取得切換偏好設定,以及通知連線狀態等。我們會建立專屬於 Audio 切換鈕的訊息群組和訊息代碼,如下所示。
訊息群組名稱 | 值 |
---|---|
音訊切換 | 0x07 |
以下各節將說明各個訊息代碼的其他詳細資訊。
訊息代碼名稱 | 值 | 僅限多點連線 | 寄件者 | Responder | 加密 | MAC | ACK |
---|---|---|---|---|---|---|---|
取得音訊切換功能 | 0x10 | 否 | 兩者皆有 | 兩者皆可,透過 0x11 程式碼 | 否 | 否 | 否 |
通知音訊自動切換功能 | 0x11 | 否 | 兩者皆有 | 兩者皆有 | 否 | 是 | 是 |
設定多點狀態 | 0x12 | 是 | Seeker | 供應商 | 否 | 是 | 是 |
設定切換偏好設定 | 0x20 | 是 | Seeker | 供應商 | 否 | 是 | 是 |
取得切換偏好設定 | 0x21 | 是 | Seeker | 供應商,透過代碼 0x22 | 否 | 否 | 否 |
通知切換偏好設定 | 0x22 | 是 | 供應商 | Seeker | 否 | 否 | 否 |
切換有效音訊來源(切換至已連結的裝置) | 0x30 | 是 | Seeker | 供應商 | 否 | 是 | 是 |
切換回原先的設定 | 0x31 | 否 | Seeker | 供應商 | 否 | 是 | 是 |
通知多點切換事件 | 0x32 | 是 | 供應商 | Seeker | 否 | 否 | 否 |
取得連線狀態 | 0x33 | 是 | Seeker | 供應商,透過 0x34 程式碼 | 否 | 否 | 否 |
通知連線狀態 | 0x34 | 是 | 供應商 | Seeker | 是 | 否 | 否 |
通知 Audio Switch 已啟動連線 | 0x40 | 否 | Seeker | 供應商 | 否 | 是 | 是 |
在使用中帳戶金鑰中標示 | 0x41 | 否 | Seeker | 供應商 | 否 | 是 | 是 |
傳送自訂資料 | 0x42 | 否 | Seeker | 供應商 | 否 | 是 | 是 |
設定連線目標 | 0x43 | 是 | Seeker | 供應商 | 否 | 是 | 是 |
表 4.3:音訊自動切換訊息
音訊切換訊息的 MAC
為提供訊息驗證,所有從 Seeker 傳送至 Provider 的附加資料音訊切換訊息都需要 訊息驗證碼。收到含有 MAC 的訊息時,應確認,讓 Seeker 知道 Provider 是否已回應訊息。
如果訊息驗證成功,供應商應傳送訊息的 ACK:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 確認聲明 | 0xFF |
1 | uint8 | ACK | 0x01 |
2 - 3 | uint16 | 額外資料長度 | 視情況而定 |
4 | uint8 | 音訊切換 | 0x07 |
5 | uint8 | 音訊切換訊息代碼 | 視情況而定 |
6 - s | 額外資料 | 視情況而定 |
如果失敗,供應商應傳送 NAK 訊息:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 確認聲明 | 0xFF |
1 | uint8 | NAK | 0x02 |
2 - 3 | uint16 | 額外資料長度 | 0x0003 |
4 | uint8 | 錯誤原因 | 視情況而定 |
5 | uint8 | 音訊切換 | 0x07 |
6 | uint8 | 音訊切換訊息代碼 | 視情況而定 |
請注意,如果提供者是寄件者,則不需要 MAC。
取得音訊自動切換功能
音訊切換供應端和 Seeker 都能使用下列訊息,檢查已連線的 Fast Pair Seeker/供應端是否支援音訊切換:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 取得音訊自動切換功能 | 0x10 |
2 - 3 | uint16 | 額外資料長度 | 0 |
表 4.3.1.0:取得音訊自動切換功能
通知音訊自動切換功能
收到「get capability of Audio switch」訊息代碼後,Audio switch Seeker/Provider 會回應下列其中一個標記:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 通知音訊自動切換功能 | 0x11 |
2 - 3 | uint16 | 額外資料長度 | 由 Seeker 傳送:20 由 Provider 傳送:4 |
4 - 5 | uint16 | 音訊切換版本代碼 | 值不為零表示支援音訊切換功能。目前的版本 (含安全性強化功能) 代碼為 0x0102。 0x0000 或 1 秒內未回應,表示此裝置不支援音訊切換功能 |
6 - 7 | flags | 供應者的音訊切換功能標記 如果這是由 Seeker 傳送,則應忽略這兩個位元組。 |
可能不同 請參閱「音訊自動切換功能標記」 |
8 到 15 歲 | 訊息 Nonce 只有在 Seeker 傳送訊息時才需要 |
視情況而定 | |
16 到 23 歲 | 訊息驗證碼 僅在訊息由 Seeker 傳送時才需要 |
視情況而定 |
表 4.3.1.1:通知音訊自動切換功能
音訊自動切換功能標記
位元 0 (位元組 6,MSB):音訊切換狀態
- 1,如果音訊自動切換功能已開啟
- 否則為 0
位元 1:多點設定功能
- 1、如果裝置支援多點連線,且可切換為開啟和關閉狀態
- 0,否則 (不支援多點或多點一律開啟)
位元 2:多點目前狀態
- 1,如果多點連線功能已開啟
- 否則為 0
位元 3:頭戴偵測
- 1,如果裝置支援頭戴偵測功能 (即使目前已關閉頭戴偵測功能)
- 否則為 0
位元 4:頭戴偵測目前狀態
- 1,如果已開啟配戴偵測功能
- 0,否則為 0 (不支援配戴偵測或已停用配戴偵測)
所有其他位元均為保留位元,預設值為 0。
設定多點狀態
在 Audio switch Seekers 上,我們可能會提供設定,讓使用者開啟/關閉多點功能。Seeker 會使用以下訊息,將多點狀態設為 Provider:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 設定多點狀態 | 0x12 |
2 - 3 | uint16 | 額外資料長度 | 17 |
4 | uint8 | 多點狀態 | 0:關閉多點連線 1:開啟多點連線 |
5 到 12 歲 | 訊息 Nonce | 視情況而定 | |
13 到 20 | 訊息驗證碼 | 視情況而定 |
表 4.3.1.2:設定多點狀態
設定切換偏好設定
音訊切換 Seeker 可修改多點連線的切換偏好設定,並使用以下訊息將其設為提供者:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 設定切換偏好設定 | 0x20 |
2 - 3 | uint16 | 額外資料長度 | 18 |
4 | flags | 切換偏好設定 | varies 請參閱多點切換偏好設定標記 |
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 代表切換
取得切換偏好設定
音訊切換器尋找者可以使用以下訊息,向供應商查詢多點的切換偏好設定:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 取得切換設定 | 0x21 |
2 - 3 | uint16 | 額外資料長度 | 0 |
表 4.3.2.1:取得切換偏好設定
通知切換偏好設定
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 通知切換偏好設定 | 0x22 |
2 - 3 | uint16 | 額外資料長度 | 2 |
4 | flags | 切換偏好設定旗標 | varies 請參閱多點切換偏好設定標記 |
5 | 進階切換設定 這個位元組是保留值,預設值應為 0 |
視情況而定 |
表 4.3.2.2:通知切換偏好設定
切換有效音訊來源 (切換至已連結的裝置)
音訊切換 Seeker 可以使用以下訊息,要求多點供應商在已連線裝置之間切換有效音訊來源:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 切換有效音訊來源 (切換至已連結的裝置) | 0x30 |
2 - 3 | uint16 | 額外資料長度 | 17 |
4 | flags | 切換有效音訊來源事件標記 | varies 請參閱「切換有效音訊來源事件」 |
5 到 12 歲 | 訊息 Nonce | 視情況而定 | |
13 到 20 | 訊息驗證碼 | 視情況而定 |
表 4.3.3.0:切換有效音訊來源 (切換至已連結的裝置)
切換使用中的音訊來源事件
- 位元 0 (MSB):1 切換至此裝置,0 切換至第二個已連結的裝置
- 位元 1:1 表示切換至裝置後會繼續播放,否則為 0。繼續播放表示供應者透過 AVRCP 設定檔向 Seeker 傳送 PLAY 通知。如果先前的狀態 (切換前) 不是 PLAY,供應器應忽略此標記。
- 位元 2:1 表示在切換裝置時拒絕使用 SCO,否則為 0
- 位元 3:1 表示在切換裝置時中斷藍牙連線,否則為 0。
- 位元 4 到 7:保留。
音訊切換 Seeker 可能無法正確瞭解自身狀態,因此當 Seeker 已是啟用裝置時,提供者就可能會收到「切換至此裝置」訊息。在這種情況下,為了在 Seeker 上顯示正確的 UI,供應者可以傳送 NAK,並附上錯誤原因 0x4 - 重複的裝置動作。
如果 LE Audio 供應器有多個集合成員,供應器應將所有成員與 Seeker 中斷連線,否則 Seeker 的藍牙堆疊會重新連線至供應器。
切換回 (至未連線的裝置)
如果不想切換連線,使用者可以還原切換,在某些情況下,還原音訊連線可減少中斷情形。Seeker 會使用以下訊息觸發切換回來:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 切換回 (至未連線的裝置) | 0x31 |
2 - 3 | uint16 | 額外資料長度 | 17 |
4 | uint8 | 切換回事件 | varies 0x01: 切換回 0x02: 切換回並繼續播放 |
5 到 12 歲 | 訊息 Nonce | 視情況而定 | |
13 到 20 | 訊息驗證碼 | 視情況而定 |
表 4.3.3.1:切換回 (至已中斷連線的裝置)
對於多點供應商,為了進行連線切換,供應商可能會中斷與一個音訊來源裝置的連線,並暫停另一個音訊來源的音訊工作階段。舉例來說,假設多點連線耳機已連線至平板電腦和支援音訊切換功能的第三方裝置。使用者在平板電腦上觀看影片時,手機有來電。手機會觸發耳機的連線切換,而耳機必須中斷第三方裝置的連線,才能連線至手機,同時還要暫停平板電腦上的媒體工作階段,才能從手機取得鈴聲。如果使用者拒接來電,手機可能會要求耳機「切換回來並繼續播放」。收到這項要求後,耳機必須重新連線至第三方裝置,並在平板電腦上繼續播放暫停的影片。
通知多點切換事件
為讓使用者知道發生多點切換事件,Audio switch Seeker 可能會向使用者顯示通知。供應者應通知已連結的 Audio switch Seeker 關於切換事件。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 通知多點切換事件 供應器應在每次切換時傳送這項資訊,包括音訊自動切換 Seeker 到非音訊自動切換 Seeker、非音訊自動切換 Seeker 到音訊自動切換 Seeker,以及音訊自動切換 Seeker 到音訊自動切換 Seeker |
0x32 |
2 - 3 | uint16 | 額外資料長度 | 視情況而定 |
4 | uint8 | 切換原因 這個值應根據連線狀態決定。對於 LE Audio 用途,您可能需要檢查 LE Audio 內容類型和連線狀態之間的對應關係。舉例來說,對應至語音助理的連線狀態為 0x9(LE 音訊 - 通話串流)。因此,由語音助理啟動的切換原因應為 0x02。 |
varies 0x00: 未指定 0x01: 媒體 (例如 A2DP 串流、LEA 媒體串流) 0x02: 通話 (例如 HFP 串流、LEA 通話串流) |
5 | uint8 | 目標裝置 | varies 0x01: 本裝置 0x02: 其他已連結的裝置 |
6 - n | utf8 | 目標裝置名稱 如果目標裝置是音訊切換 Seeker,請使用 Seeker 傳送的名稱,否則使用 BT 名稱,如果不適用,請使用其位址的最後 2 個位元組 |
視情況而定 |
表 4.3.3.2:通知多點切換事件
取得連線狀態
尋求者可以從提供者取得目前的連線狀態:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 取得連線狀態 | 0x33 |
2 - 3 | uint16 | 額外資料長度 | 0 |
表 4.3.3.3:取得連線狀態
收到這則訊息後,供應器應回應訊息代碼 0x34,並通知連線狀態。
通知連線狀態
如 BLE 廣告酬載所定義,對於多點供應器,如果連線狀態有所變更,除了變更廣告封包外,供應器也應通知使用相同帳戶金鑰的已連線 Seeker。如果提供者與音訊切換 Seeker 和非音訊切換 Seeker 連線,且非音訊切換 Seeker 處於活動狀態,提供者也應通知已連線的音訊切換 Seeker 連線狀態 (使用 Seeker 的帳戶金鑰)。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 通知連線狀態 | 0x34 |
2 - 3 | uint16 | 額外資料長度 | 視情況而定 |
4 | uint8 | 使用中裝置標記 | varies 0x00:此 Seeker 為閒置狀態,且活動裝置使用相同的帳戶金鑰 0x01:此 Seeker 為活動裝置 0x02:此 Seeker 為閒置狀態,且活動裝置為非音訊切換 Seeker。 |
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 廣告酬載中定義的函式。請注意,由於我們在這裡有訊息代碼和資料長度,因此不應納入欄位長度和類型的位元組。
通知 Audio Switch 已啟動連線
音訊切換供應商可能需要知道是否由音訊切換觸發連線切換,以便做出不同的反應,例如為音訊切換事件停用耳機提示音。尋求者會傳送訊息通知提供者,指出這項連線是由音訊切換器啟動。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 通知 Audio Switch 已啟動連線 | 0x40 |
2 - 3 | uint16 | 額外資料長度 | 17 |
4 | uint8 | 音訊自動切換啟動連線指示 | varies 0:此連線並非由音訊切換功能觸發 1:這是由音訊切換功能啟動的連線 |
5 到 12 歲 | 訊息 Nonce | 視情況而定 | |
13 到 20 | 訊息驗證碼 | 視情況而定 |
表 4.3.4.0:通知 Audio Switch 已啟動連線
在使用帳戶金鑰中標示
如果 Seeker 上有多個帳戶索引鍵 (例如多位使用者) 與提供者相關聯,Seeker 會使用以下訊息指出目前使用的帳戶索引鍵。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 在使用帳戶金鑰中標示 | 0x41 |
2 - 3 | uint16 | 額外資料長度 | 22 |
4 - 9 | utf8 | 使用中字串 | UTF8 (「正在使用中」) |
10 到 17 歲 | 訊息 Nonce | 視情況而定 | |
18 - 25 歲 | 訊息驗證碼 | 視情況而定 |
表 4.3.4.1:在使用帳戶金鑰中標示
收到這則訊息後,供應商可以驗證訊息驗證碼,得知目前使用的帳戶金鑰。
傳送自訂資料
啟用的 Audio switch Seeker 可在自訂資料位元組中封裝音訊串流的資訊 (例如音訊用途),並使用以下訊息傳送至提供者:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 傳送自訂資料 | 0x42 |
2 - 3 | uint16 | 額外資料長度 | 17 |
4 | uint8 | 自訂資料 | 視情況而定 |
5 到 12 歲 | 訊息 Nonce | 視情況而定 | |
13 到 20 | 訊息驗證碼 | 視情況而定 |
表 4.3.4.2:傳送自訂資料
收到自訂資料後,供應器會更新廣告封包,納入自訂資料。對於多點提供者,它也應將連線狀態變更通知給使用相同帳戶金鑰的其他已連線 Seeker。
設定放置連線目標
在多點耳機上,如果要捨棄的偏好連線不是最近最少使用的連線,音訊切換尋找者可以使用以下訊息,告訴供應器要捨棄哪個裝置:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 音訊切換 | 0x07 |
1 | uint8 | 設定放置連線目標 | 0x43 |
2 - 3 | uint16 | 額外資料長度 | 17 |
4 | uint8 | 要捨棄的目標連結裝置 | varies 1: 這部裝置 |
5 到 12 歲 | 訊息 Nonce | 視情況而定 | |
13 到 20 | 訊息驗證碼 | 視情況而定 |
表 4.3.4.3:設定捨棄連線目標