Fondamentalmente, quello che sto cercando di fare adesso è utilizzare un dispositivo Android come ricevitore A2DP e quando l'associazione è stabilita, Android riproduce il suono che viene ricevuto da un trasmettitore. Mi preoccupa il fatto che se utilizzo il profilo STP, potrebbe causare un ritardo dello streaming. Quindi, voglio usare A2DP ma è possibile utilizzare un dispositivo Android come ricevitore di A2DP? E come si fa?Dispositivo Android come ricevitore per il profilo A2DP
risposta
Poiché Android L lo stack BlueDriod supporta il sink A2DP, ma è disabilitato per impostazione predefinita.
per consentirgli effettuare le seguenti operazioni:
/* Enable bluetooth av sink. */
#define BTA_AV_SINK_INCLUDED TRUE
in /external/bluetooth/bluedroid/include/bt_target.h. Abilita il supporto sink nello stack Bluetooth.
Inoltre si hanno a che fare questo cambiamento:
<!-- Enable sink support. -->
<bool name="profile_supported_a2dp_sink">true</bool>
in /packages/apps/Bluetooth/res/values/config.xml. Questo abilita la particolare interfaccia utente.
Ora è possibile accoppiare i dispositivi e avviare lo streaming. Sfortunatamente non sentirai alcun suono anche se riceverai i pacchetti. Il motivo è che non esiste una via audio per il sink A2DP. Nel messaggio di commit di questa patch https://android-review.googlesource.com/#/c/98161/ è possibile trovare un'implementazione di esempio su come risolvere questo problema.
Ecco un elenco di questi cambiamenti:
Sai se è abilitato in Android 6? – rob
La patch @nilo che hai postato è per 'android android-4.4_r1', nelle classi Android L 'base' (a cui è contro la patch) è diverso. Es: nel file 'platform/external/bluetooth/bluedroid/audio_a2dp_hw/audio_a2dp_hw.c' c'è già' struct a2dp_stream_in * input; '[audio_a2dp_hw.c linea 87] (https://android.googlesource.com/platform/external /bluetooth/bluedroid/+/android-5.0.0_r1/audio_a2dp_hw/audio_a2dp_hw.c) – tchelidze
Questo vale anche per esp-idf per ESP32 IC anche se non so se la funzionalità sink è implementata negli strati superiori dello stack. –
Sì. È possibile. L'ho fatto in JB. Android utilizza internamente stack "Bluedroid" di Broadcomm per Bluetooth. In precedenza questo stack non supportava il ruolo di sink A2DP (che hai citato come ricevitore). Dalla versione di Lollipop, il profilo di ruolo A2DP Sink è stato aggiunto in Bluedroid. Tuttavia, non è abilitato per essere utilizzato da framework/livello superiore (Applicazione). È necessario apportare modifiche nel framework per abilitarlo o "utilizzarlo". È possibile fare riferimento ai seguenti file e file pertinenti nel codice sorgente Android per abilitarlo.
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
ecc e la sua attuazione (questo elenco di file non è completo, ma si può capire se si dispone di esperienza nel settore in questione). Quando viene stabilita una connessione di streaming, si otterrà la richiamata nella macchina a2dp e da lì si dovrà avviare una discussione per leggere i byte PCM decodificati dalla "nuova" sorgente audio e inviarla al proprio lettore multimediale. La decodifica SBC da codec a PCM verrà eseguita sul livello del decodificatore sbc bluedroid.
Costruisci e accendi il tuo telefono e goditi la musica.
MODIFICA: Inoltre, è possibile apportare modifiche nel record SDP A2DP nello stack Bluedroid per annunciare il ruolo di sink A2DP.
Puoi mettere insieme un piccolo codice di esempio per questo . Non ho "l'esperienza nel campo pertinente", ma posso compilare e scrivere app. Gradirei il feedback e anche un pm. –
Si può-non b E in grado di farlo manualmente tra 2 telefoni perché per lo streaming di un dispositivo deve essere A2DP sink e altra altra fonte A2DP, i telefoni sono in genere solo dispositivi di origine (sorgente del flusso che può scorrere per affondare i dispositivi), i sink sono cuffie o altoparlanti Bluetooth .
Possibile duplicato di [Ricevi audio tramite Bluetooth in Android] (http://stackoverflow.com/questions/15557933/receive-audio-via-bluetooth-in-android) – virtualxtc