Как изменить стек Bluetooth для Android, чтобы включить A2dp Sink

Я работаю над приложением звукозаписывающего устройства, которое использует микрофон bluetooth для записи звука на устройство Android (Nexus 7 – корневой Android 4.4.2). В настоящее время он реализован на HFP, и все работает нормально. Микрофон bluetooth реализован с модулем Bluetooth Bluegiga WT32 + микрофонный вход, качество звука через HFP невелика, но на данный момент этого достаточно.

Тем не менее, теперь я пытаюсь изменить профиль Bluetooth на A2dp, так как есть два микрофонных входа (L / R), а WT32 поддерживает A2dp (источник). После долгих исследований я обнаружил, что Android Android не поддерживает A2dp (раковина), и можно изменить стек Bluetooth bluetooth, чтобы включить A2dp (раковина).

Я не понимаю, как можно получить доступ и изменить стек bluetooth. Было бы неплохо, если бы кто-то с ответом смог разбить шаги для достижения этого.

Я попытался ответить на этот вопрос: получить аудио через Bluetooth в Android , но я не могу найти подходящий файл для изменения. На самом деле, я даже не знаю, смотрю ли я в правильную папку. Я просмотрел файл с помощью Android-студии DDMS-File Explorer.

Ps, я все еще довольно новичок в разработке приложений для Android, поэтому я, возможно, неправильно использовал некоторые термины, и я извиняюсь за это заранее.

Solutions Collecting From Web of "Как изменить стек Bluetooth для Android, чтобы включить A2dp Sink"

Это на самом деле то, что я пытаюсь сделать в течение длительного времени … Причина, по которой вы не можете найти файл конфигурации, заключается в том, что Google заменил стек Bluetooth от BlueZ на новый стек, созданный Google и Broadcom. Новый стек использует другой файл конфигурации, который я не знаю, как возиться.

Если вы серьезно относитесь к этому, ближайшая вещь, с которой я столкнулся, – это официальное введение для платформы bluetooth на Android: https://source.android.com/devices/bluetooth.html

Таким образом, приведенный выше ответ не совсем корректен.

Ниже описывается, как он ломается:

HAL – это уровень абстракции аппаратного обеспечения, который реализует фактические машины состояния Bluetooth в коде c / cpp, поэтому он управляет различными авторами состояний для служб A2dp, HFP, GATT, SPP, AVRCP и т. Д. Каждая из этих служб также ссылается на файлы SMP и ATT для управления фактическими базами данных Bluetooth или клиентов, и там безопасность.

HCI, где происходит фактическая работа. HAL на самом деле ничего не делает , он собирает сложные сообщения данных, которые отправляются по последовательному tty (либо spi, либо UART) в межсетевой подключенный чип на PCBA с помощью методов, используемых в слое HCI, что может Можно найти в слое «BTE» в каталоге / external / bluetooth / bluedroid / для андроида, компилирующего магистраль от AOSP 4.2.2 до текущего. – В настоящее время существует несколько производителей этих чипов, но в основном это все компоненты на базе Broadcom, упакованные в двойной или тройной пакет радиосвязи, в котором есть беспроводной интернет, Bluetooth 4.0 Smart и Bluetooth 4.0.

Вы можете делать то, что вы пытаетесь сделать, но вам нужно будет включить hardware.so и bluetooth_jni.so в пакет / проект NDK / JNI, который входит в ваши приложения, и регистрируется через вызовы из файлов .cpp Для каждой из услуг Bluetooth, найденных в «Пакетах / Приложениях / Bluetooth / jni», вы затем обрабатываете регистрацию в своей библиотеке NDK «com_android_bluetooth_a2dp.cpp» и «com_android_bluetooth_avrcp.cpp» в качестве их типично типизированных объектов.

Другая проблема заключается в том, что вам нужно будет реализовать свой собственный стек A2DP, поскольку в стеке Android Bluedroid есть только бит и часть роли Sink, реализованная в рамках, в то время как роль A2DP имеет полную реализацию роли Source . Кроме того, в зависимости от того, что вы на самом деле собираетесь делать с вашей реализацией Sink для A2DP, вам также понадобится реализовать AVRCP – как в Bluetooth SIG (группа специальных интересов), между устройствами Bluetooth существуют требования к соединению, что приведет к серьезным проблемам Если вы реализуете роль приемника, без AVRCP «целевого устройства дистанционного управления» и «устройства управления дистанционным управлением», поскольку команды ATT роли приемника из Bluetooth через A2DP (или любой сервис / профиль Bluetooth) выполняют определенные рукопожатия во время процесса обнаружения службы, когда Связанный с ним шлюз (соединительное устройство), выполняет запрос возможностей, ожидается, что служба A2DP будет реализовывать возможности ввода-вывода для команд «Старт-стоп» и, возможно, команды пропустить / отслеживать.

Кроме того, при реализации A2DP вам нужно будет выбрать, будете ли вы обрабатывать потоки PCM или потоки AAC. Если вы обрабатываете потоки AAC (или DRM-защищенные потоки PCM, если что-то вроде Pandora, spotify и т. Д.), Вам нужно реализовать SBC Encoder или Decoder, подходящий для вас, иначе все, что у вас будет, это связка Зашифрованных данных. Кроме того, не забудьте реализовать битрейт с соответствующей скоростью для реализации вашего устройства AudioManager, некоторые телефоны используют 48,000hZ, а некоторые из нас – 44,100hZ, это важно, если вы хотите высококачественное аудио, как правило, большинство реализаций PCM A2DP, которые используют Surround Sound 7.1 + Потребуется 48 000 Гц, а также кодирование / декодирование AAC.

Надеюсь, это даст вам некоторое представление.

https://android-review.googlesource.com/#/c/98161/ реализует мойку A2DP. Он работает на Nexus 5. Вы можете попробовать.