透過藍牙 LE 支援助聽器音訊

助聽器裝置 (HA) 可改善以下項目的無障礙功能: 使用連線導向 L2CAP 的 Android 行動裝置 透過藍牙低功耗 (BLE) 上的頻道 (CoC)。CoC 採用彈性的 來維持穩定的音訊流動 遇到封包遺失的情況這個緩衝區可為 助聽器裝置會犧牲延遲。

CoC 的設計參考了 藍牙 核心規格 5 (BT)。為了符合核心規格,所有多位元組 應以小端序表示

術語

  • 中央 - 會掃描掃描標籤的 Android 裝置 透過藍牙投放廣告
  • 週邊裝置 - 用於傳送 透過藍牙傳送通告封包

網路拓撲和系統架構

使用 CoC 搭配助聽器時,網路拓撲會假設 中央和兩部周邊裝置,一個左側和一個右側,如 圖 1.藍牙音訊系統左側視角 並將右側週邊裝置當做一個音訊接收器如果週邊裝置 由於單體貼合或連線中斷,導致 中央會混合左右聲道並傳輸音訊 其餘週邊裝置。如果中央伺服器與 接著,中央區域會考量連至音訊接收器的連結 但損失。在這些情況下,中央會轉送音訊到另一個輸出。


圖 1.與助聽器配對的拓撲 使用 CoC over BLE 的 Android 行動裝置

中央主機未將音訊資料串流至週邊裝置時, BLE 連線時,中央區域不應與 。維持連線狀態有助於資料通訊 。

配對及連接助聽器時,中央區域會:

  • 追蹤最近配對的左右週邊裝置。
  • 如果週邊裝置有有效的配對,請假設這些裝置正在使用中。 中央會嘗試與配對的配對連線或重新連線 裝置。
  • 如果配對刪除,然後假設週邊裝置已不再使用。

在上述情況中,pairing 是指 使用指定的 UUID 註冊一組助聽器 作業系統的左/右設計器,而非藍牙配對程序。

系統需求

為了正確實作 CoC 以提供良好的使用者體驗,藍牙 中央和周邊裝置的系統應:

  • 請實作符合規定的 BT 4.2 以上版本控制器。LE 安全連線為 (強烈建議使用)
  • 需要中央支援至少 2 個同時運作的 LE 連結,以及 詳見音訊封包 格式和時間。
  • 週邊裝置支援至少有 1 個 LE 連結及參數 詳見音訊封包 格式和時間。
  • 具有以 LE 信貸為基礎的流量控制 [BT Vol 3, Part A, Sec 10.1]。 裝置的 MTU 和 MPS 大小至少須為 167 個位元組 可傳輸最多 8 個封包。
  • 具有 LE 資料長度的延伸 [BT Vol 6, Part B, Sec 5.1.9], 至少 167 個位元組的酬載
  • 中央裝置支援 HCI LE Connection Update 指令 並且遵守非零的 maximum_CE_Lengthminimum_CE_Length 參數。
  • 一個中央都會將兩個 LE CoC 連線的資料總處理量,維持到兩個 LE CoC 連線 具有連線間隔和酬載的不同周邊裝置 音訊封包大小 格式和時間。
  • 確認週邊裝置已設定 MaxRxOctetsLL_LENGTH_REQ 中的 MaxRxTime 參數 或 LL_LENGTH_RSP 個影格做為最小值 所需特殊的 Pod如此一來 將時間排程器最佳化 接收影格

強烈建議中央和周邊裝置支援 2MB PHY, 如 BT 5.0 規格中所指定之。 中央應支援以下音訊連結: 100 萬和 200 萬個 PHY 上至少為 64 kbit/秒。不得使用 BLE 長範圍 PHY。

CoC 使用標準藍牙機制來加密連結層 以及頻率跳躍

ASHA GATT 服務

週邊裝置應執行助聽器音訊串流功能 (ASHA) GATT 伺服器服務,如下所述。週邊裝置 在一般可搜索模式下通告此服務 及辨識音訊接收器任何 LE 音訊串流作業 必須進行加密。BLE 音訊串流是由 下列特性:

特色 屬性 說明
唯讀屬性 已讀 請參閱「ReadOnlyProperties」。
音訊控制點 撰寫及撰寫但不回應 音訊串流的控制點。詳情請見 AudioControlPoint
音訊狀態點 讀取/通知 音訊控制點的狀態報告欄位。詳情請見 AudioStatusPoint
音量 撰寫但不回應 介於 -128 和 0 之間的位元組,表示要套用的權重 串流音訊訊號,範圍介於 -48 分貝至 0 分貝之間。設定 -128 應視為完全靜音,也就是最低的非靜音音量 等級為 -127,相當於 -47.625 dB 亮度。設定 0 時, 以串流方式輸出的邊欄語氣量應代表輸入大小為 100 dBSPL 和聽覺器等方面的資訊中央區應該慢慢串流播放 然後使用這個變數設定所需的呈現層級 輸入周邊裝置
LE_PSM_OUT 已讀 用於連接音訊聲道的 PSM。若要從 動態範圍 [BT Vol 3,第 A 部分,第 4.22 節]

指派給服務和特性的 UUID:

服務 UUID{0xFDF0}

特色 UUID
唯讀屬性 {6333651e-c481-4a3e-9169-7c902aad37bb}
音訊控制點 {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
音訊狀態 {38663f1a-e711-4cac-b641-326b56404837}
音量 {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

除了 ASHA GATT 服務外,週邊裝置也應 實作裝置資訊服務,讓中央主機偵測 週邊裝置的製造商名稱和裝置名稱。

唯讀屬性

ReadOnlyProperties 包含下列值:

位元組 說明
0 版本 - 必須是 0x01
1 請參閱裝置功能
2-9 請參閱 HiSyncId
10 請參閱 FeatureMap
11-12 RenderDelay。這是指從 週邊裝置在周邊裝置顯示前都會收到音訊影格 輸出內容這類位元組可用來 與音訊同步
13-14 保留供日後使用。初始化為零。
15-16 支援的轉碼器 ID。這是位元遮罩 。位元位置中的 1 代表 支援的轉碼器。例如,0x0002 代表 G.722 (16 kHz) 。所有其他位元都應設為 0。

裝置功能

位元 說明
0 裝置端 (0: 左、1: 右)
1 說明裝置是否為獨立裝置並接收單聲道資料,或 是一組裝置 (0:單聲道, 1: 雙聲道)
2 裝置支援 CSIS (0: 不支援、1: 支援)
3-7 已保留 (設為 0)

HiSyncID

此欄位在所有二進位裝置中皆不可重複,但必須 也就是左右兩部分的

位元組 說明
0-1 製造商 ID。第一種是 公司 由 BTSIG 指派的 ID
2-7 用於識別助聽器組合的專屬 ID。必須設定這個 ID 左右兩邊的每部裝置都套用相同的設定

特徵對應

位元 說明
0 支援 LE CoC 音訊輸出串流 (是/否)。
1-7 保留 (設為 0)。

轉碼器 ID

如果已設定位元,就表示該特定轉碼器可支援。

證件號碼(&H) 轉碼器和取樣率 所需位元率 影格時間 強制使用中央 (C) 或週邊裝置 (P)
0 保留 保留 保留 保留
1 G.722 @ 16 kHz 64 KB/秒 變數 C 和 P
此為 2-15 的保留值。
0 也已保留。

音訊控制點

LE CoC 關閉時無法使用這個控制點。詳情請見 廣告開始日期和 停止音訊串流

運算碼 引數 GATT 子採購程序 說明
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
撰寫回應,並預期透過以下方式傳送額外的狀態通知: AudioStatusPoint 特性。 指示週邊裝置重設轉碼器並啟動 播放影格 0。「codec」欄位代表要使用的轉碼器 ID 說明此播放內容 例如,轉碼器欄位是「1」適用於 G.722 (16k Hz)。

音訊類型位元欄位會指出當下的音訊類型 透過訊息串:
  • 0 - 不明
  • 1 - 鈴聲
  • 2 - 電話
  • 3 - 媒體
,瞭解如何調查及移除這項存取權。 otherstate 欄位表示二元組的另一邊 個裝置已連線。 當其他週邊裝置連線時,欄位值為 1。 否則該值為 0。

週邊裝置不得於 已收到 «Stop» 驗證碼。
2 «Stop» 撰寫回應,並預期透過以下方式傳送額外的狀態通知: AudioStatusPoint 特性。 指示週邊裝置停止語音轉譯。新的音訊 安裝作業序列必須依序啟動 才能再次轉譯音訊
3 «Status»
  • uint8_t connected
撰寫但不回覆 通知已連線的周邊裝置有狀態更新 和其他週邊裝置。已連結的欄位代表更新類型:
  • 0 - 其他週邊裝置已中斷連線
  • 1 - 已連接其他週邊裝置
  • 2 - 發生 LE Connection 參數更新 連線時

音訊狀態點

音訊控制點的狀態報告欄位

運算碼 說明
0 狀態正常
-1 不明的指令
-2 無效參數

ASHA GATT 服務廣告

服務 UUID 必須位於 傳遞訊息無論是廣告或掃描作業 則週邊裝置必須具備「服務資料」:

位元組偏移 名稱 說明
0 廣告長度 >= 0 x 09
1 廣告類型 0x16 (服務資料 - 16 位元 UUID)
2 到 3 項 服務 UUID 0xFDF0 (小端子)

注意:這是臨時 ID,
4 通訊協定版本 0x01
5 功能
  • 0 - 左 (0) 或右側 (1)
  • 1 - 一 (0) 或雙 (1) 裝置。
  • 2 - 裝置支援 CSIS (<0: not supported, 1: supported)
  • 3-7 - 保留。這些位元必須為零。
6-9 HiSyncID 已截斷 HiSyncId。這些位元組應為 ID 中最隨機的部分。

週邊裝置必須具備完整當地名稱 表示助聽器名稱的資料類型。這個名稱會 用於行動裝置的使用者介面 正確裝置名稱不得指出左側或右側 因為這項資訊是在 裝置功能

如果週邊裝置將名稱和 ASHA 服務資料類型置於相同類型 封包類型 (ADV 或 SCAN RESP),然後提供兩種資料類型 (「完整本地名稱」) 和「ASHA 服務的服務資料」), 在同一畫面內。讓行動裝置掃描器取得這兩組資料 同一筆掃描結果中

初次配對時,請確認週邊裝置 廣告速度要夠快,讓行動裝置能快速載入 找出並連結週邊裝置

同步處理左右週邊裝置

如要在 Android 行動裝置和周邊裝置上使用藍牙功能 必須負責確保這些資料正確同步。播放內容 左右週邊裝置的睡眠都必須保持同步 讓應用程式從可以最快做出回應的位置 回應使用者要求兩部周邊裝置都必須播放

週邊裝置可以使用序列來同步處理時間 附加在音訊酬載的每個封包之前。中央 確保應在同一處播放的音訊封包 每個週邊設備的時間都具有相同的序號。序列 則會在一個音訊封包後 1 開始遞增。每個序列 長度為 8 位元,因此序號在 256 後重複 音訊封包由於每個音訊封包的大小和取樣率都是固定的 這兩個週邊裝置可以推斷 遊戲時間。如要進一步瞭解音訊封包,請參閱 音訊封包格式和 時間

中央程序可在同步作業時,為二進位裝置提供觸發條件 而非自動化系統這些觸發條件會通知每個週邊裝置的 隨時保持連線狀態 可能會影響同步處理作業。 觸發條件如下:

  • 在 AudioControlPoint 的 «Start» 指令中, 兩端目前的連線狀態 指定的裝置。
  • 如果發生連線、中斷連線或連線狀態, 對一個週邊裝置的連線參數更新作業 AudioControlPoint 的 «Status» 指令會傳送至 兩邊的另一面

音訊封包格式和時間

將音訊影格 (取樣區塊) 封裝至封包中, 檢測方式會從連結層時間錨點獲取時間。目的地: 簡化導入程序:

  • 音訊影格應一律與連線間隔時間相符。 舉例來說,如果連線間隔為 20 毫秒,取樣率為 16 kHz,則音訊影格會包含 320 個樣本。
  • 系統取樣率僅限 8kHz 的倍數至 影格中的樣本一律都是整數數量 影格時間或連線間隔
  • 序列位元組應在音訊影格前面。序列位元組 須經過環繞處理,讓週邊裝置能夠 偵測緩衝區不符或反向溢位
  • 音訊影格一律必須納入單一 LE 封包。音訊 影格應做為個別 L2CAP 封包傳送LE 的大小 LL PDU 應為:
    音訊酬載大小 + 1 (序列計數器) + 6 (4 個 L2CAP 標頭,2 代表 SDU)
  • 連線事件應一律足以包含 2 個音訊 和 2 個空白封包,供 ACK 保留頻寬給 也就是重新傳輸請注意,音訊封包可能是按 中央的藍牙控制器週邊裝置必須能接收 每個連線事件有超過 2 個片段化的音訊封包。

為了給予中央一定彈性,G.722 封包長度並非 。G.722 封包長度可能因連線而異 中間的間隔。

G.722 輸出八位元格式參照了 推薦ITU-T G.722 (2012 年 9 月) 第 1.4.4 節「多工器」

對於週邊裝置支援的所有轉碼器,週邊裝置應 支援下列連線參數這份清單僅列舉部分內容 中央位置可實作的設定項目

轉碼器 位元率 連線時間間隔 CE 長度 (100 萬/200 萬 (菲律賓)) 音訊酬載大小
G.722 @ 16 kHz 64 KB/秒 20 毫秒 5000/3750 (我們) 160 個位元組

開始及停止音訊串流

開始音訊串流前,中央會查詢週邊裝置 並建立通用分母轉碼器訊息串 並按照以下順序進行:

  1. PSM,以及選用的 RenderDelay 會讀取。這些值 可能會由中央資源快取
  2. CoC L2CAP 頻道已開啟 - 週邊裝置應授予 8 點抵免額 最初
  3. 已發出連線更新,以切換參數的連結 對所選轉碼器的要求。中央區域可能會更新連線 建立第一個步驟。
  4. 中央裝置和周邊裝置主機都等待更新 事件。
  5. 重新啟動音訊編碼器,並將封包序列計數重設為 0。 包含相關參數的 «Start» 指令為 AudioControlPoint 上所發出中央會等候成功的狀態通知 請在串流前從週邊裝置使用上一個 «Start» 指令。 這會讓週邊裝置 來準備音訊播放管道在音訊串流期間,備用資源 應該要能在每個連線事件中使用 備用資源的延遲時間可能為零
  6. 週邊裝置會從內部佇列接收第一個音訊封包 (序列編號 0) 並播放該版本。

中央發送 «Stop» 指令,關閉 音訊串流在執行這項指令後,每部裝置都不需要 連線事件。如要重新開始音訊串流,請逐一完成上述序列,從頭到尾 步驟 5:如果中心區域並非 串流音訊,但應繼續與 GATT 保持 LE 連線 免費 Google Cloud 服務

週邊裝置不得向中央區域發出連線更新。 為節省電力,充電中心可能會更新 週邊裝置 (如果不是串流播放音訊)。