Слуховые аппараты (СА) могут быть улучшены в плане доступности на мобильных устройствах Android благодаря использованию каналов L2CAP с установлением соединения (CoC) по Bluetooth Low Energy (BLE). CoC использует эластичный буфер из нескольких аудиопакетов для поддержания стабильного потока аудиосигнала даже при потере пакетов. Этот буфер обеспечивает качество звука для слуховых аппаратов за счёт задержки.
Архитектура CoC соответствует спецификации Bluetooth Core версии 5 (BT). Чтобы соответствовать основным спецификациям, все многобайтовые значения на этой странице следует читать с прямым порядком байтов.
Терминология
- центральный
- Устройство Android, сканирующее рекламу по Bluetooth.
- периферийный
- Слуховой аппарат, отправляющий рекламные пакеты по Bluetooth.
Топология сети и архитектура системы
При использовании CoC для слуховых аппаратов топология сети предполагает наличие одного центрального устройства и двух периферийных устройств: левого и правого, как показано на рисунке 1. Аудиосистема Bluetooth воспринимает левое и правое периферийные устройства как один аудиоприемник. Если периферийное устройство отсутствует из-за монофонического подключения или потери соединения, центральное устройство смешивает левый и правый аудиоканалы и передает звук оставшемуся периферийному устройству. Если центральное устройство теряет соединение с обоими периферийными устройствами, оно считает связь с аудиоприемником потерянной. В этих случаях центральное устройство направляет звук на другой выход.
Рисунок 1. Топология сопряжения слуховых аппаратов с мобильными устройствами Android с использованием CoC по BLE.
Когда центральное устройство не передаёт аудиоданные на периферийное устройство и может поддерживать соединение BLE, центральное устройство не должно отключаться от периферийного устройства. Поддержание соединения позволяет передавать данные на сервер GATT, расположенный на периферийном устройстве.
При сопряжении и подключении слуховых аппаратов центральный аппарат должен:
- Отслеживайте последние сопряженные левые и правые периферийные устройства.
- При наличии корректного сопряжения предполагается, что периферийные устройства используются. При потере соединения центральный узел должен попытаться подключиться или переподключиться к сопряженному устройству.
- Предположим, что периферийные устройства больше не используются, если сопряжение удалено.
В приведенных выше случаях сопряжение означает регистрацию набора слуховых аппаратов с заданным UUID и обозначениями левого/правого наушника в ОС, а не процесс сопряжения по Bluetooth.
Системные требования
Для надлежащей реализации CoC и обеспечения хорошего пользовательского опыта системы Bluetooth в центральных и периферийных устройствах должны:
- Реализуйте совместимый контроллер BT 4.2 или выше. Настоятельно рекомендуется использовать LE Secure Connections.
- иметь центральную поддержку не менее 2 одновременных каналов LE с параметрами, описанными в разделе Формат и синхронизация аудиопакетов .
- иметь периферийное устройство, поддерживающее по крайней мере 1 канал LE с параметрами, описанными в разделе Формат и синхронизация аудиопакетов .
- Иметь управление потоком на основе кредита LE [BT Vol 3, Part A, Sec 10.1]. Устройства должны поддерживать размер MTU и MPS не менее 167 байт в CoC и иметь возможность буферизации до 8 пакетов.
- иметь расширение длины данных LE [BT Vol 6, Part B, Sec 5.1.9] с полезной нагрузкой не менее 167 байт.
- центральное устройство должно поддерживать команду обновления соединения HCI LE и соответствовать ненулевым параметрам
maximum_CE_Length
иminimum_CE_Length
. - иметь центральное управление для поддержки пропускной способности данных для двух соединений LE CoC с двумя различными периферийными устройствами с интервалами соединения и размерами полезной нагрузки в формате аудиопакета и синхронизации .
- Периферийное устройство устанавливает параметры
MaxRxOctets
иMaxRxTime
в кадрахLL_LENGTH_REQ
илиLL_LENGTH_RSP
на минимально необходимые значения, соответствующие данным спецификациям. Это позволяет центральному устройству оптимизировать свой планировщик времени при расчете времени, необходимого для получения кадра.
Настоятельно рекомендуется, чтобы центральный узел и периферийное устройство поддерживали физический уровень 2 Мбит/с, как указано в спецификации BT 5.0. Центральный узел должен поддерживать аудиоканалы со скоростью не менее 64 кбит/с как на физическом уровне 1 Мбит/с, так и на физическом уровне 2 Мбит/с. Физический уровень BLE большой дальности использовать нельзя.
CoC использует стандартные механизмы Bluetooth для шифрования на уровне канала и скачкообразной перестройки частоты.
Услуги ASHA GATT
Периферийное устройство должно реализовывать серверную службу потоковой передачи аудиосигнала для слуховых аппаратов (ASHA), описанную ниже. Периферийное устройство должно рекламировать эту службу в режиме общего обнаружения, чтобы центральное устройство могло распознать приемник аудиосигнала. Любые операции потоковой передачи аудиосигнала LE должны требовать шифрования. Потоковая передача аудиосигнала BLE характеризуется следующими характеристиками:
Характеристика | Характеристики | Описание |
---|---|---|
ReadOnlyProperties | Читать | См. ReadOnlyProperties . |
AudioControlPoint | Пишите и пишите без ответа | Точка управления аудиопотоком. См. AudioControlPoint . |
AudioStatusPoint | Читать/Уведомить | Поле отчёта о состоянии точки управления звуком. См. AudioStatusPoint . |
Объем | Написать без ответа | Байт между -128 и 0, указывающий величину ослабления, применяемого к потоковому аудиосигналу, в диапазоне от -48 дБ до 0 дБ. Значение -128 следует интерпретировать как полное отключение звука, то есть минимальный уровень громкости без отключения звука равен -127, что эквивалентно ослаблению -47,625 дБ. При значении 0 передаваемый синусоидальный тон с полным диапазоном частот должен соответствовать входному уровню 100 дБ звукового давления (SPL) на слуховом аппарате. Центральный аппарат должен передавать поток в номинальном полном диапазоне и использовать эту переменную для установки желаемого уровня сигнала на периферийном аппарате. |
LE_PSM_OUT | Читать | PSM для подключения аудиоканала. Выбирается из динамического диапазона [BT Vol 3, Часть A, Раздел 4.22]. |
Идентификаторы UUID, присвоенные услуге, и характеристики:
UUID службы : {0xFDF0}
Характеристика | UUID |
---|---|
ReadOnlyProperties | {6333651e-c481-4a3e-9169-7c902aad37bb} |
AudioControlPoint | {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
ReadOnlyProperties имеют следующие значения:
Байт | Описание |
---|---|
0 | Версия - должна быть 0x01 |
1 | См. Возможности устройства . |
2-9 | См. HiSyncId . |
10 | См. FeatureMap . |
11-12 | RenderDelay (задержка рендеринга). Это время (в миллисекундах) с момента получения периферийным устройством аудиокадра до момента рендеринга выходного сигнала. Эти байты можно использовать для задержки видео для синхронизации со звуком. |
13-14 | Зарезервировано для использования в будущем. Инициализируйте нулями. |
15-16 | Поддерживаемые идентификаторы кодеков . Это битовая маска идентификаторов поддерживаемых кодеков. 1 в позиции бита соответствует поддерживаемому кодеку. Например, 0x0002 означает, что поддерживается G.722 на частоте 16 кГц. Все остальные биты должны быть установлены в 0. |
Возможности устройства
Кусочек | Описание |
---|---|
0 | Сторона устройства (0: левая, 1: правая) |
1 | Указывает, является ли устройство автономным и принимает моноданные или является частью набора (0: монофоническое, 1: бинауральное) |
2 | Устройство поддерживает CSIS (0: не поддерживается, 1: поддерживается) |
3-7 | Зарезервировано (установлено на 0) |
HiSyncID
Это поле должно быть уникальным для всех бинауральных устройств, но должно быть одинаковым для левого и правого комплекта.
Байт | Описание |
---|---|
0-1 | Идентификатор производителя. Это идентификатор компании , присвоенный BTSIG. |
2-7 | Уникальный идентификатор слухового аппарата. Этот идентификатор должен быть установлен одинаково как на левом, так и на правом периферийном наушнике. |
FeatureMap
Кусочек | Описание |
---|---|
0 | Поддерживается потоковая передача аудиосигнала LE CoC (Да/Нет). |
1-7 | Зарезервировано (установлено на 0). |
Идентификаторы кодеков
Если бит установлен, то данный кодек поддерживается.
Идентификатор / Номер бита | Кодек и частота дискретизации | Требуемый битрейт | Время кадра | Обязательно на центральном (Ц) или периферическом (П) уровне |
---|---|---|---|---|
0 | Сдержанный | Сдержанный | Сдержанный | Сдержанный |
1 | G.722 @ 16 кГц | 64 кбит/с | Переменная | С и П |
2-15 зарезервированы. 0 также зарезервирован. |
AudioControlPoint
Эту контрольную точку невозможно использовать, если LE CoC закрыт. Описание процедуры см. в разделе «Запуск и остановка аудиопотока» .
Код операции | Аргументы | Подпроцедура ГАТТ | Описание |
---|---|---|---|
1 «Start» |
| Напишите ответ и ожидайте дополнительного уведомления о статусе через характеристику AudioStatusPoint . | Даёт указание периферийному устройству сбросить настройки кодека и начать воспроизведение кадра 0. Поле «Кодек» указывает идентификатор кодека, который будет использоваться для этого воспроизведения. Например, для G.722 с частотой 16 кГц поле «Кодек» равно «1». Поле бита типа звука указывает тип(ы) звука, присутствующие в потоке:
Периферийное устройство не должно запрашивать обновления соединения до получения кода операции «Stop» . |
2 «Stop» | Никто | Напишите ответ и ожидайте дополнительного уведомления о статусе через характеристику AudioStatusPoint . | Даёт указание периферийному устройству прекратить обработку звука. После этой остановки необходимо запустить новую последовательность настройки звука, чтобы возобновить обработку звука. |
3 «Status» |
| Написать без ответа | Информирует подключенное периферийное устройство об обновлении статуса другого периферийного устройства. В поле «Подключено» указан тип обновления:
|
AudioStatusPoint
Поле отчета о состоянии точки управления аудио
Коды операций | Описание |
---|---|
0 | Статус ОК |
-1 | Неизвестная команда |
-2 | Недопустимые параметры |
Реклама услуг ASHA GATT
UUID сервиса должен быть указан в пакете объявления. В пакете объявления или в кадре ответа сканирования периферийные устройства должны иметь данные сервиса:
Смещение байта | Имя | Описание |
---|---|---|
0 | Длина объявления | >= 0x09 |
1 | Тип объявления | 0x16 (служебные данные - 16-битный UUID) |
2-3 | UUID службы | 0xFDF0 (от младшего к старшему) Примечание: это временный идентификатор. |
4 | Версия протокола | 0x01 |
5 | Возможность |
|
6-9 | Усеченный HiSyncID | Четыре старших байта HiSyncId . Эти байты должны быть наиболее случайной частью идентификатора. |
Периферийные устройства должны иметь тип данных «Полное локальное имя» , который указывает название слухового аппарата. Это название будет использоваться в пользовательском интерфейсе мобильного устройства, чтобы пользователь мог выбрать нужное устройство. Название не должно указывать на левый или правый канал, так как эта информация указана в DeviceCapabilities .
Если периферийные устройства помещают имя и типы данных службы ASHA в один и тот же тип кадра (ADV или SCAN RESP), то оба типа данных («Полное локальное имя» и «Служебные данные для службы ASHA») должны присутствовать в одном кадре. Это позволяет сканеру мобильных устройств получать оба типа данных в одном результате сканирования.
Во время первоначального сопряжения важно, чтобы периферийные устройства оповещали друг друга с достаточно высокой скоростью, чтобы мобильное устройство могло быстро обнаружить периферийные устройства и подключиться к ним.
Синхронизировать левые и правые периферийные устройства
Для работы Bluetooth на мобильных устройствах Android периферийные устройства должны обеспечивать синхронизацию. Воспроизведение на левом и правом периферийных устройствах должно быть синхронизировано по времени. Оба периферийных устройства должны воспроизводить аудиофрагменты с источника одновременно.
Периферийные устройства могут синхронизировать своё время, используя порядковый номер, добавляемый к каждому пакету аудиоданных. Центральный процессор гарантирует, что аудиопакеты, предназначенные для одновременного воспроизведения на каждом периферийном устройстве, имеют одинаковый порядковый номер. Порядковый номер увеличивается на единицу после каждого аудиопакета. Длина каждого порядкового номера составляет 8 бит, поэтому порядковые номера будут повторяться после 256 аудиопакетов. Поскольку размер и частота дискретизации каждого аудиопакета фиксированы для каждого соединения, два периферийных устройства могут определить относительное время воспроизведения. Подробнее об аудиопакете см. в разделе Формат и синхронизация аудиопакетов .
Центральный блок управления помогает, подавая сигналы бинауральным устройствам, когда может потребоваться синхронизация. Эти сигналы информируют каждое периферийное устройство о состоянии сопряженного с ним периферийного устройства при возникновении какой-либо операции, которая может повлиять на синхронизацию. Триггеры:
- В рамках команды
«Start»
AudioControlPoint указывается текущее состояние подключения другой стороны бинауральных устройств. - Всякий раз, когда на одном периферийном устройстве происходит подключение, отключение или обновление параметров подключения, на другую сторону бинауральных устройств отправляется команда
«Status»
AudioControlPoint.
Формат и синхронизация аудиопакетов
Упаковка аудиокадров (блоков сэмплов) в пакеты позволяет слуховому аппарату получать синхронизацию с помощью временных опор канального уровня. Для упрощения реализации:
- Аудиокадр всегда должен соответствовать интервалу соединения по времени. Например, если интервал соединения составляет 20 мс, а частота дискретизации — 16 кГц, то аудиокадр должен содержать 320 сэмплов.
- Частота дискретизации в системе ограничена значениями, кратными 8 кГц, чтобы всегда иметь целое число выборок в кадре независимо от времени кадра или интервала соединения.
- Последовательный байт должен предварять аудиокадры. Последовательный байт должен быть подсчитан с циклическим переносом и позволять периферийному устройству обнаруживать несоответствие или опустошение буфера.
- Аудиокадр всегда должен помещаться в один пакет LE. Аудиокадр должен быть отправлен как отдельный пакет L2CAP. Размер LE LL PDU должен быть:
Размер аудиоданных + 1 (счетчик последовательностей) + 6 (4 для заголовка L2CAP, 2 для SDU) - Событие подключения всегда должно быть достаточно большим, чтобы содержать 2 аудиопакета и 2 пустых пакета для подтверждения (ACK) для резервирования полосы пропускания для повторных передач. Обратите внимание, что аудиопакет может быть фрагментирован Bluetooth-контроллером центрального устройства. Периферийное устройство должно иметь возможность принимать более 2 фрагментированных аудиопакетов за одно событие подключения.
Чтобы обеспечить центральному коммутатору некоторую гибкость, длина пакета G.722 не указывается. Она может меняться в зависимости от интервала соединения, установленного центральным коммутатором.
Выходной формат октета G.722 соответствует разделу 1.4.4 «Мультиплексор» Рекомендации МСЭ-Т G.722 (09/2012).
Для всех поддерживаемых периферийным устройством кодеков оно должно поддерживать указанные ниже параметры подключения. Это неполный список конфигураций, которые может реализовать центральное устройство.
Кодек | Битрейт | Интервал соединения | Длина CE (1M/2M PHY) | Размер аудиоданных |
---|---|---|---|---|
G.722 @ 16 кГц | 64 кбит/с | 20 мс | 5000/3750 нас | 160 байт |
Запуск и остановка аудиопотока
Перед запуском аудиопотока центральный процессор опрашивает периферийные устройства и устанавливает общий кодек. Настройка потока выполняется в следующей последовательности:
- Считывается PSM и, опционально, RenderDelay. Эти значения могут быть кэшированы центральным сервером.
- Канал CoC L2CAP открыт — периферийное устройство должно изначально предоставить 8 кредитов.
- Обновление соединения выдаётся для переключения канала на параметры, необходимые для выбранного кодека. Центральный узел может выполнить это обновление до подключения CoC на предыдущем шаге.
- И центральный, и периферийный хост ждут события завершения обновления.
- Перезапустите аудиокодер и сбросьте счётчик последовательности пакетов до 0. На AudioControlPoint выдаётся команда
«Start»
с соответствующими параметрами. Центральный узел ожидает от периферийного устройства уведомления об успешном выполнении предыдущей команды«Start»
перед началом потоковой передачи. Это время ожидания даёт периферийному устройству время подготовить свой конвейер воспроизведения звука. Во время потоковой передачи реплика должна быть доступна при каждом подключении, даже если текущая задержка реплики может быть ненулевой. - Периферийное устройство берет первый аудиопакет из своей внутренней очереди (порядковый номер 0) и воспроизводит его.
Центральный узел выдаёт команду «Stop» для завершения аудиопотока. После этой команды периферийное устройство не обязательно должно быть доступно при каждом подключении. Чтобы возобновить аудиопоток, выполните описанную выше последовательность действий, начиная с шага 5. Когда центральный узел не транслирует аудио, он должен поддерживать LE-соединение для служб GATT.
Периферийное устройство не должно отправлять обновления соединения центральному устройству. Для экономии энергии центральное устройство может отправлять обновления соединения периферийному устройству, когда оно не транслирует аудио.