Comment déterminer les codecs A2DP que mon téléphone prend en charge / utilise actuellement?

24

Le profil audio Bluetooth A2DP prend en charge plusieurs codecs. Tous les appareils doivent prendre en charge SBC (codec de sous-bande), puis ils peuvent prendre en charge des "codecs optionnels" supplémentaires comme MP3 et AAC, ou des codecs "non A2DP" comme apt-X.

Bien sûr, ces codecs ne peuvent pas être utilisés si le récepteur ne les prend pas en charge, auquel cas les deux appareils retombent sur SBC.

  1. Comment savoir quels codecs mon matériel / ROM prend en charge?
  2. Comment savoir quel codec est actuellement utilisé? (Peut-être que cela dépend aussi de la piste, s'il passe des fichiers MP3 / AAC directement sans ré-encodage, par exemple)
endolith
la source
Cet article dit que "les utilisateurs d'Android ont de la chance, car les téléphones Android modernes prennent en charge AptX. Contrairement à Windows, il est même possible de vérifier si la connexion utilise AptX!" Mais aucune explication de comment.
endolith

Réponses:

10

Sur mon téléphone Cyanogen 10.1 (AOSP 4.2.2), il est possible d'activer une capture du trafic Bluetooth. Vous pouvez ensuite charger cette capture dans Wireshark et regarder la phase de négociation pour déterminer les codecs pris en charge par le périphérique de sortie audio couplé. Je ne sais pas quels OS prennent en charge cela: lorsque j'ai rencontré cette méthode pour la première fois, elle ne revendiquait la prise en charge qu'à partir de la version 4.4, mais ce n'est clairement pas le cas avec CM sur un Double Shot. :-)

En supposant que vous disposez de la configuration requise (enracinée ~ 4.2.2 ou version ultérieure), voici les étapes:

  1. associez votre téléphone à l'appareil A2DP qui vous intéresse
  2. désactiver le bluetooth sur votre téléphone
  3. éditez ce fichier: /etc/bluetooth/bt_stack.conf, en changeant le paramètre BtSnoopLogOutput de sa valeur par défaut false à true. Pour cela, j'utilise ES Note Editor, lancé depuis ES File Explorer après avoir activé son paramètre "Root Browser".
  4. démarrer CatLog, avec tous les types de journalisation activés
  5. activer le bluetooth sur votre téléphone
  6. une fois couplé avec le périphérique de sortie, lisez un extrait audio avec le lecteur de votre choix (j'utilise Apollo). Une dizaine de secondes devrait suffire.
  7. désactiver à nouveau le bluetooth
  8. arrêtez la journalisation de CatLog et enregistrez son fichier journal sur votre carte SD
  9. [IMPORTANT!] Éditez bt_stack.conf, en changeant BtSnoopLogOutput en false.
  10. copiez la capture BT de votre carte SD (/sdcard/btsnoop_hci.log), avec le fichier CatLog enregistré, sur un ordinateur sur lequel une copie actuelle de Wireshark est installée.
  11. charger le fichier de capture dans Wireshark et définir un filtre d'affichage Wireshark de "btavdtp" (sans guillemets). Vous ne verrez maintenant que quelques paquets, recherchez la réponse du périphérique de sortie à la requête AVDTP GetCapabilities et vous aurez votre réponse.

Vous pouvez également aligner les horodatages de capture avec les horodatages du journal CatLog pour rechercher des entrées de journal suggestives. J'ai trouvé un couple et j'ai intelligemment oublié de les inclure dans les notes sur lesquelles ce post est basé.

Une fois que j'aurai encore du temps, j'espère réduire cet ensemble assez long d'étapes à une application, mais je ne sais pas si c'est possible et je n'aurai pas encore le temps pendant un certain temps. En attendant, les suggestions pour améliorer le processus ci-dessus sont les bienvenues.

ewedel
la source
1
Merci. Cela a très bien fonctionné. Je n'ai trouvé rien de pertinent pour les capacités dans les journaux CatLog. Quoi qu'il en soit, je l'ai essayé sur Moto G (2013) avec CM 4.4.2 et avec le casque LG HBS-730. Pas d'apt-X dans les journaux, car CM n'a pas de bibliothèques propriétaires pour cela.
dvim
Merci, @Martynas, bon à savoir. A-t-il inclus le support du mp3? Je me demande quelle pourrait être une bonne cible pour tester que mon téléphone prend en charge le mp3. L'autoradio ne le fait malheureusement pas et je n'ai trouvé aucun produit (!) Qui documente son support du codec A2DP. En ce qui concerne CatLog, je ne pensais pas que la liste réelle des codecs serait là, autant que des messages suggestifs qui pourraient être utilisés pour rechercher le code source. Un autre jour ..
ewedel
1
Donc, une réponse à Discoverrenvoyé trois récepteurs audio. Une réponse à GetCapabilitiespour ACP SEID [2 - Audio Sink]inclus Service: Media Codec - Audio MPEG-1,2 Audioqui avait MP3: True. J'ai téléchargé le fichier journal capturé sur github .
dvim
Merci encore @Martynas. Même si le 730 a de meilleures critiques, a pris un LG HBS-750 pour les tests. Même suite de codecs que le 730. Vous avez bifurqué votre dépôt et ajouté une autre capture ici . Malheureusement, dans nos deux captures, le téléphone choisit d'utiliser SBC au lieu de mp3. Je ne sais pas quel type de fichier multimédia vous avez utilisé, mais mon test CM 4.2.2 a utilisé des mp3 VBR à 128 kb / s (délibérément petit débit pour éviter de stresser la bande passante BT). Commencer à penser que ce4 pourrait avoir raison sur la question des licences .
ewedel
L'édition de `/ etc / bluetooth / bt_stack.conf` ne semblait pas fonctionner, mais j'avais exactement le même paramètre dans les paramètres du développeur et cela fonctionnait. Grâce à votre réponse, j'ai réussi à découvrir que le Parrot Zik 2 utilise SBC la plupart du temps.
Zero
8

En regardant la source, il existe au moins 4 codecs: SBC (obligatoire), MP3 (MPEG12), AAC (MPEG24) et ATRAC de Sony.

./android/external/bluetooth/bluez/audio/a2dp.h:  
#define A2DP_CODEC_SBC          0x00
#define A2DP_CODEC_MPEG12       0x01
#define A2DP_CODEC_MPEG24       0x02
#define A2DP_CODEC_ATRAC        0x03

Le logiciel sous-jacent est la pile "bluez" de linux. Il prend en charge SBC et a des capacités MP3 limitées.

Le journal des modifications pour v3.25 (2009?) Se lit comme suit: "Ajouter un support limité pour le codec MPEG12 / MP3".

./android/external/bluetooth/bluez/ChangeLog:
ver 3.25:
    Add limited support for Handsfree profile.
    Add limited support for MPEG12/MP3 codec.

Voir également l' annonce v3.25 . Le support MP3 semble dépendre de gstreamer qui n'est pas disponible sur Android, donc je suppose que SBC est la seule option pour A2DP pour démarrer.

PS: la plupart des appareils A2DP semblent ne pas prendre en charge MP3 / AAC en raison de problèmes de brevets / licences (y compris Linux).

ce4
la source
2
Ce sont 3 codecs optionnels, oui, ou il peut utiliser d'autres codecs comme le Galaxy S III utilisant apt-X . Je pensais que l'encodage était fourni par le matériel, cependant? Android peut lire des MP3, donc je doute qu'il y ait des limitations de brevets.
endolith
2
Je ne pense pas que SBC dispose d'un encodeur matériel dédié dans les appareils Android. C'est modeste sur le plan informatique, donc je suppose que cela se fait dans le logiciel. Au moins, les sources l'indiquent. PS: je regarde la source de Cyanogenmod, pas celle de HTC ou Samsung. PS2: Je voulais
parler des appareils récepteurs
7

Avec les appareils Nexus 4 (5.0.1) ou Nexus 7 (2012) (4.4.4), il est possible d'utiliser le mode développeur pour obtenir le btsnoop_hci.log. "Activer le journal de surveillance Bluetooth HCI". Il n'est pas nécessaire de rooter les appareils. Il semble que les deux appareils n'offrent pas d'aptx. Je teste cela avec Moto Stream (pas d'aptx) et Philips AEA2500 (avec aptx).

prittstift69
la source
1
Je suis sur CM 12.1 et cette potion est également disponible pour moi. C'est peut-être sur tous les téléphones récents. Merci.
pedro_sland
4

[Le mérite de cette réponse revient surtout à ewedel, qui a précisé que la réponse se trouve dans le fichier btsnoop_hci.log, en utilisant Wireshark; et prittstift69, pour partager le moyen facile de créer ce fichier journal.]

Il s'agit d'un tutoriel étape par étape, convivial pour les débutants, résumant les réponses déjà données, avec une certaine interprétation des résultats de ma part.

Comme prittstift69 et d'autres l'ont mentionné, vous pouvez «Activer le journal de surveillance Bluetooth HCI» sous Options du développeur. Pas besoin de suivre l'approche plus compliquée suggérée par ewedel.

  1. Commencez par désactiver Bluetooth sur l'appareil Android (je l'appellerai «téléphone»).

  2. Activez le journal de surveillance Bluetooth HCI sous Options du développeur.

  3. Activez Bluetooth sur le téléphone et connectez-le au récepteur Bluetooth (je l'appellerai «récepteur»). Cette étape suppose que le récepteur a été préalablement couplé avec le téléphone.

  4. Écoutez de la musique sur votre téléphone (idéalement un fichier WAV ou FLAC non compressé). Dix secondes suffisent. (Probablement encore moins)

  5. Désactivez Bluetooth sur le téléphone.

  6. Désactiver le journal de surveillance Bluetooth HCI

  7. Transférez le fichier btsnoop_hci.log (je l'ai trouvé dans / sdcard / Android / Data /) sur votre ordinateur. Exécutez Wireshark sur votre ordinateur et ouvrez le fichier btsnoop_hci.log

  8. Filtrer pour "btavdtp" (sans guillemets) Rechercher un message du téléphone au récepteur "Commande envoyée - SetConfiguration ...." Il s'agit du message envoyé par le téléphone au récepteur avec la configuration finale à utiliser pour cet audio une fois la négociation terminée. Le texte du champ Info vous indiquera quelle était la configuration finale.

[SBC] Si c'est SBC, vous voudrez peut-être savoir ce qu'est le bitpool. Pour ce faire, supprimez le filtre pour btavdtp et recherchez un message avec le protocole SBC et cliquez dessus. Ci-dessous, dans la section des détails, développez les informations du codec Bluetooth SBC. Développez ensuite une partie ou la totalité des données de trame. Là, il devrait clairement montrer le Bitpool utilisé par ce cadre. S'il est de 35, il y a de fortes chances que votre fréquence d'échantillonnage soit de 44,1 kHz, vous utilisez Joint Stereo et utilisez le profil audio SBC de qualité moyenne ( http://soundexpert.org/news/-/blogs/bluetooth-audio -qualité-a2dp ). Le débit binaire pour l'audio compressé est alors de 229 kbits / sec SBC, ce qui marque un 4.68 dans les tests de Sound Expert ( http://soundexpert.org/encoders-224-kbps ) qui est comparable au mp3 autour de 110-130 kbits / sec.

[APT-X] S'il s'agit d'APT-X, alors votre téléphone et votre récepteur prennent en charge APT-X, et c'est ce qu'il utilise. En supposant 16 bits, 44,1 kHz, le codec fonctionne à 352 kbits / s.

klaberte
la source
"idéalement un fichier WAV ou FLAC non compressé" Ne voudriez-vous pas lire un MP3 pour voir s'il l'envoie au format MP3, etc.?
endolith
2
Seulement si votre objectif est de voir si A2DP prend en charge le mp3 des deux côtés (une question valide). Cependant, mon expérience est que le support mp3 des deux côtés est rare (je ne l'ai jamais vu sur aucun de mes appareils, et j'en ai eu pas mal). Ainsi, au moins avec les appareils Android, vos options de codec A2DP les plus probables sont SBC et APTX. La lecture d'un fichier audio non compressé force le téléphone à ré-encoder.
klaberte
Je n'ai pas écrit de réponse
endolith