web-dev-qa-db-fra.com

Android comme récepteur pour le profil A2DP

Fondamentalement, ce que j'essaie de faire en ce moment, c'est d'utiliser un appareil Android comme récepteur A2DP et lors du couplage établi, Android joue le son reçu d'un émetteur. Je crains que si j'utilise le profil STP, cela puisse retarder la diffusion. Donc, je veux utiliser A2DP mais est-ce possible d'utiliser un appareil Android comme récepteur d'A2DP? et comment faire?

13
Heewon Hwang

Depuis Android L la pile BlueDriod prend en charge le récepteur A2DP, mais elle est désactivée par défaut.

Pour l'activer, procédez comme suit:

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

dans / external/bluetooth/bluedroid/include/bt_target.h . Cela permet la prise en charge de l'évier dans la pile Bluetooth.

Vous devez également effectuer ce changement:

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

dans / packages/apps/Bluetooth/res/values ​​/ config.xml . Cela active l'interface utilisateur particulière.

Vous pouvez maintenant coupler vos appareils et commencer à diffuser. Malheureusement, vous n'entendrez aucun son bien que vous receviez les paquets. La raison en est qu'il n'y a pas de route audio pour le récepteur A2DP. Dans le message de validation de ce correctif https://Android-review.googlesource.com/#/c/98161/ vous pouvez trouver un exemple d'implémentation sur la façon de résoudre ce problème.

Voici une liste de ces changements:

15
nilo

Oui. C'est possible. Je l'ai fait dans JB. Android utilise en interne la pile "Bluedroid" de Broadcomm pour Bluetooth. Auparavant, cette pile ne prenait pas en charge le rôle A2DP Sink (que vous avez mentionné en tant que récepteur). Depuis la version Lollipop, le profil de rôle A2DP Sink a ajouté dans Bluedroid. Mais, il n'est pas activé pour être utilisé par le framework/la couche supérieure (Application). Vous devez apporter des modifications au framework pour l'activer ou "l'utiliser". Vous pouvez vous référer aux fichiers suivants et aux fichiers pertinents dans Android code source pour l'activer.

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

etc. et l'implémenter (cette liste de fichiers n'est pas exhaustive, mais vous pouvez la découvrir si vous avez de l'expérience dans le domaine concerné). Lorsqu'une connexion de flux est établie, vous obtiendrez un rappel dans la machine d'état a2dp et à partir de là, vous devez démarrer un thread pour lire les octets PCM décodés à partir de la `` nouvelle '' source audio et l'envoyer à votre lecteur multimédia. Le décodage du codec SBC en PCM sera effectué au niveau de la couche de décodeur sbc "bluedroid".

Construisez-le et flashez-le sur votre téléphone et profitez de la musique.

EDIT: En outre, vous pouvez avoir apporté des modifications à l'enregistrement A2DP SDP dans la pile Bluedroid pour annoncer le rôle A2DP Sink.

4
theangrylama

Vous ne pourrez peut-être pas le faire manuellement entre 2 téléphones, car pour diffuser un appareil doit être un récepteur A2DP et une autre source A2DP, les téléphones ne sont généralement que des périphériques source (source du flux qui peut diffuser vers des périphériques récepteur), les récepteurs sont Casques ou haut-parleurs Bluetooth.

2
Muahmmad Tayyib