2014-01-14 3 views
11

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

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

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

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

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

+0

Возможный дубликат [устройства Android в качестве приемника для профиля A2DP] (http://stackoverflow.com/questions/27763756/android-device-as-a-receiver-for-a2dp-profile) – virtualxtc

ответ

4

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

Если вы серьезно относитесь к ней, ближе всего я нашел, чтобы начать с официальным введением в рамках Bluetooth On Android: https://source.android.com/devices/bluetooth.html

+0

Возможно ли замените его на a2dp-приемник на работающем Android-устройстве или я должен изменить исходный код с официального сайта и перезапустить новый ролик. –

10

Так выше ответ не совсем правильно.

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

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

HCI, где выполняется фактическая работа. HAL не действительно do что-нибудь, он собирает сложные сообщения данных, которые отправляются по последовательному каналу 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 имеет полное осуществление Источник роль. Кроме того, в зависимости от того, что вы на самом деле собираетесь делать с вашей реализацией Sink для A2DP, вам также понадобится реализовать AVRCP - как в Bluetooth SIG (группа специальных интересов), между устройствами Bluetooth существуют требования к соединению, что приведет к серьезным проблемам если вы реализуете роль приемника, без AVRCP «целевого устройства дистанционного управления» и «устройства управления дистанционным управлением», поскольку роли ATT-роли ATX от Bluetooth через A2DP (или любой сервис/профиль Bluetooth) выполняют определенные рукопожатия во время процесса обнаружения службы, когда связанный с ним шлюз (соединительное устройство), выполняет запрос возможностей, по которому ожидается, что служба A2DP будет реализовывать возможности ввода-вывода для команд «Старт-стоп» и, возможно, команды пропустить/отслеживать.

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

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

+0

Я нашел это очень полезным! Спасибо! –

+0

Мне было интересно, можете ли вы установить новые jn-файлы bluetooth из приложения, если телефон укоренен или вам нужно заново создать новое ПЗУ с скомпилированными измененными файлами. –

8

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

+0

Прохладный человек, но ваши изменения не проверяются для объединения в AOSP. Почему вы не следили? – deimus

+0

У Google есть аналогичное решение, которое вы можете найти в L. Но Google официально не выпускает решение. –

+0

да, его не выставлено на 'android.bluetooth.BluetoothA2dp' api. Также для HF-роли профиля HFP. – deimus