Android-устройство в качестве приемника для профиля A2DP

В принципе, то, что я пытаюсь сделать прямо сейчас, - это использовать устройство Android в качестве приемника A2DP, и, когда установлено соединение, андроид воспроизводит звук, полученный от передатчика. Я беспокоюсь, что если я использую профиль STP, это может вызвать задержку потоковой передачи. Итак, я хочу использовать A2DP, но можно ли использовать устройство Android в качестве приемника A2DP? а как это сделать?

8
задан 04 янв. '15 в 11:23
источник поделиться
3 ответов

Так как Android L, стек BlueDriod поддерживает A2DP-приемник, но по умолчанию он отключен.

Чтобы включить его, выполните следующие действия:

/* Enable bluetooth av sink. */
#define BTA_AV_SINK_INCLUDED TRUE

в /external/bluetooth/bluedroid/include/bt_target.h. Это позволяет поддерживать приемник в стеке bluetooth.

Также вы должны сделать это изменение:

<!-- Enable sink support. -->
<bool name="profile_supported_a2dp_sink">true</bool>

в /packages/apps/Bluetooth/res/values/config.xml. Это позволяет конкретный пользовательский интерфейс.

Теперь вы можете соединить свои устройства и начать потоковое вещание. К сожалению, вы не услышите звук, хотя вы получите пакеты. Причина в том, что нет аудиодорожки для раковины A2DP. В сообщении о фиксации этого патча https://android-review.googlesource.com/#/c/98161/ вы можете найти пример реализации, чтобы исправить это.

Вот список этих изменений:

9
ответ дан 16 июля '15 в 18:51
источник

Да. Возможно. Я сделал это в JB. Android внутренне использует стек "Bluedroid" из Broadcomm для Bluetooth. Ранее этот стек не поддерживал роль A2DP Sink Role (который вы упомянули как получатель). Из релиза Lollipop в Bluedroid добавлен профиль роли A2DP Sink. Но он не может использоваться фреймворком/верхним слоем (Application). Вам необходимо внести изменения в структуру, чтобы включить ее или использовать ее. Вы можете обратиться к следующим файлам и соответствующим файлам в исходном коде Android, чтобы включить его.

audio.h - put a new audio source
audio_policy.conf - put a new input source for a2dp 'inputs'
AudioManager.java
AudioPolicyManagerBase.cpp
AudioService.java
AudioSystem.java
BluetoothA2dp.java
MediaRecorder.java
A2DPStateMachine.java

и т.д.. и реализовать его (этот список файлов не является исчерпывающим, но вы можете понять это, если у вас есть опыт в соответствующей области). Когда будет установлено какое-либо соединение с потоком, вы получите обратный вызов в машине состояния a2dp, и оттуда вы должны начать поток, чтобы прочитать декодированные байты PCM из "нового" источника звука и отправить его на ваш медиаплеер. SBC-кодек для PCM-декодирования будет выполняться на уровне "bluedroid" sbc-декодера.

Постройте его и запустите на свой телефон и наслаждайтесь музыкой.

EDIT: Кроме того, вы можете внести изменения в запись A2DP SDP в стеке Bluedroid для рекламы роли S2DP Sink.

2
ответ дан 06 марта '15 в 8:38
источник

Возможно, вы не сможете сделать это вручную между двумя телефонами, потому что для потоковой передачи на одном устройстве должна быть раковина A2DP и ​​другой другой источник A2DP, телефоны обычно являются только источниками (источник потока, который может передавать потоковые устройства), Sinks - Гарнитуры или громкоговорители Bluetooth.

1
ответ дан 05 дек. '17 в 13:33
источник

Другие вопросы по меткам или Задайте вопрос