助聽器裝置 (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_Length
和minimum_CE_Length
參數。 - 一個中央都會將兩個 LE CoC 連線的資料總處理量,維持到兩個 LE CoC 連線 具有連線間隔和酬載的不同周邊裝置 音訊封包大小 格式和時間。
-
確認週邊裝置已設定
MaxRxOctets
和LL_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» |
|
撰寫回應,並預期透過以下方式傳送額外的狀態通知: AudioStatusPoint 特性。 |
指示週邊裝置重設轉碼器並啟動
播放影格 0。「codec」欄位代表要使用的轉碼器 ID
說明此播放內容
例如,轉碼器欄位是「1」適用於 G.722 (16k Hz)。 音訊類型位元欄位會指出當下的音訊類型 透過訊息串:
週邊裝置不得於 已收到 «Stop» 驗證碼。
|
2 «Stop» |
無 | 撰寫回應,並預期透過以下方式傳送額外的狀態通知: AudioStatusPoint 特性。 | 指示週邊裝置停止語音轉譯。新的音訊 安裝作業序列必須依序啟動 才能再次轉譯音訊 |
3 «Status» |
|
撰寫但不回覆 |
通知已連線的周邊裝置有狀態更新
和其他週邊裝置。已連結的欄位代表更新類型:
|
音訊狀態點
音訊控制點的狀態報告欄位
運算碼 | 說明 |
---|---|
0 | 狀態正常 |
-1 | 不明的指令 |
-2 | 無效參數 |
ASHA GATT 服務廣告
服務 UUID 必須位於 傳遞訊息無論是廣告或掃描作業 則週邊裝置必須具備「服務資料」:
位元組偏移 | 名稱 | 說明 |
---|---|---|
0 | 廣告長度 | >= 0 x 09 |
1 | 廣告類型 | 0x16 (服務資料 - 16 位元 UUID) |
2 到 3 項 | 服務 UUID |
0xFDF0 (小端子) 注意:這是臨時 ID, |
4 | 通訊協定版本 | 0x01 |
5 | 功能 |
|
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 個位元組 |
開始及停止音訊串流
開始音訊串流前,中央會查詢週邊裝置 並建立通用分母轉碼器訊息串 並按照以下順序進行:
- PSM,以及選用的 RenderDelay 會讀取。這些值 可能會由中央資源快取
- CoC L2CAP 頻道已開啟 - 週邊裝置應授予 8 點抵免額 最初
- 已發出連線更新,以切換參數的連結 對所選轉碼器的要求。中央區域可能會更新連線 建立第一個步驟。
- 中央裝置和周邊裝置主機都等待更新 事件。
-
重新啟動音訊編碼器,並將封包序列計數重設為 0。
包含相關參數的
«Start»
指令為 AudioControlPoint 上所發出中央會等候成功的狀態通知 請在串流前從週邊裝置使用上一個«Start»
指令。 這會讓週邊裝置 來準備音訊播放管道在音訊串流期間,備用資源 應該要能在每個連線事件中使用 備用資源的延遲時間可能為零 - 週邊裝置會從內部佇列接收第一個音訊封包 (序列編號 0) 並播放該版本。
中央發送 «Stop» 指令,關閉 音訊串流在執行這項指令後,每部裝置都不需要 連線事件。如要重新開始音訊串流,請逐一完成上述序列,從頭到尾 步驟 5:如果中心區域並非 串流音訊,但應繼續與 GATT 保持 LE 連線 免費 Google Cloud 服務
週邊裝置不得向中央區域發出連線更新。 為節省電力,充電中心可能會更新 週邊裝置 (如果不是串流播放音訊)。