24 votes

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

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

Évidemment, ces codecs ne peuvent pas être réellement utilisés si le récepteur ne les prend pas en charge, auquel cas les deux appareils reviennent au SBC.

  1. Comment puis-je savoir quels codecs sont pris en charge par mon matériel/ROM?
  2. Comment puis-je savoir quel codec est actuellement utilisé? (Peut-être que cela dépend aussi de la piste, si elle passe directement des fichiers MP3/AAC sans ré-encodage, par exemple)

0 votes

Cet article dit "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 pas d'explication sur comment.

10voto

ewedel Points 101

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 examiner la phase de négociation pour déterminer quels codecs l'appareil de sortie audio apparié prend en charge. Je ne suis pas certain quelles OS prennent en charge ceci : quand j'ai découvert cette méthode pour la première fois, elle prétendait être prise en charge uniquement à partir de la version 4.4, mais clairement ce n'est pas le cas avec CM sur un Doubleshot. :-)

En supposant que vous avez la configuration requise (rooté ~ 4.2.2 ou plus récent), voici les étapes :

  1. appariez votre téléphone avec l'appareil A2DP qui vous intéresse
  2. désactivez le bluetooth sur votre téléphone
  3. modifiez ce fichier : /etc/bluetooth/bt_stack.conf, en changeant le paramètre BtSnoopLogOutput de sa valeur par défaut de 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émarrez CatLog, avec tous les types de journalisation activés
  5. activez le bluetooth sur votre téléphone
  6. après qu'il se soit apparié avec l'appareil de sortie, jouez un extrait audio avec le lecteur de votre choix (j'utilise Apollo). Une dizaine de secondes devraient suffire.
  7. désactivez à nouveau le bluetooth
  8. arrêtez la journalisation de CatLog et enregistrez son fichier journal sur votre carte SD
  9. [IMPORTANT !] modifiez bt_stack.conf, en changeant BtSnoopLogOutput à nouveau en false.
  10. copiez la capture BT depuis votre carte SD (/sdcard/btsnoop_hci.log), ainsi que le fichier CatLog enregistré, sur un ordinateur avec une copie récente de Wireshark installée.
  11. chargez le fichier de capture dans Wireshark et définissez un filtre d'affichage Wireshark de "btavdtp" (sans guillemets). Vous verrez alors quelques paquets seulement, cherchez la réponse de l'appareil de sortie à la requête GetCapabilities de l'AVDTP et vous aurez votre réponse.

Vous pouvez également aligner les horodatages de la capture avec les horodatages du journal CatLog pour rechercher des entrées de journal suggestives. J'en ai trouvé quelques-unes et malicieusement oublié de les inclure dans les notes sur lesquelles est basée ce message.

Une fois que j'aurai un peu plus de temps, j'espère réduire cette série d'étapes plutôt longue à une application, mais je ne suis pas sûr que ce soit possible et je n'aurai de toute façon pas le temps pour un moment. En attendant, les suggestions pour améliorer le processus ci-dessus sont les bienvenues.

1 votes

Merci. Cela a très bien fonctionné. Je n'ai rien trouvé de pertinent concernant les capacités dans les journaux CatLog. Quoi qu'il en soit, je l'ai essayé sur Moto G (2013) sous CM 4.4.2 et avec un casque LG HBS-730. Pas d'apt-X dans les journaux, car CM n'a pas de bibliothèques propriétaires pour cela.

0 votes

Merci, @Martynas, c'est bon à savoir. Est-ce que cela incluait le support pour les fichiers mp3? Je me demande quel serait une bonne cible pour tester si mon téléphone supporte les mp3. Malheureusement, la radio de ma voiture ne le fait pas, et je n'ai trouvé aucun produit qui documente le support de son codec A2DP. En ce qui concerne CatLog, je ne pensais pas vraiment que la liste des codecs réels serait là-dedans, mais plutôt quelques messages suggestifs qui pourraient être utilisés pour rechercher le code source. Une autre journée..

1 votes

Donc, une réponse à Découvrir a renvoyé trois sink audio. Une réponse à GetCapabilities pour ACP SEID [2 - Sink audio] incluait Service: Media Codec - Audio MPEG-1,2 Audio qui avait MP3: Vrai. J'ai téléchargé le fichier journal capturé sur github.

8voto

ce4 Points 14264

En regardant le code source, il y a 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 limitées en MP3.

Le journal des modifications pour la version 3.25 (2009?) indique : "Ajouter un support limité pour le codec MPEG12/MP3".

./android/external/bluetooth/bluez/ChangeLog:
ver 3.25:
    Ajouter un support limité pour le profil mains-libres.
    Ajouter un support limité pour le codec MPEG12/MP3.

Voir également l'annonce de la version 3.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 le démarrage de l'A2DP.

PS : La plupart des appareils A2DP semblent manquer de support pour le MP3/AAC en raison de problèmes de brevets/licences (y compris Linux).

2 votes

Ce sont 3 codecs facultatifs, 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 les MP3 donc je doute qu'il y ait des limitations de brevet.

2 votes

Je ne pense pas que SBC dispose d'un encodeur matériel dédié dans les appareils Android. C'est modeste du point de vue calculatoire donc je suppose que ça se fait en logiciel. Du moins c'est ce que la source indique. PS : Je consulte la source de Cyanogenmod, pas celle de HTC ou de Samsung. PS2 : Je pensais aux appareils de réception audio de l'autre côté qui manquent de mp3/aac (casques, etc.)

8voto

The Code Pimp Points 713

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 d'espionnage Bluetooth HCI". Il n'est pas nécessaire de rooter les appareils. Il semble que les deux appareils ne proposent pas aptx. Je teste cela avec Moto Stream (pas d'aptx) et Philips AEA2500 (avec aptx).

1 votes

Je suis sur CM 12.1 et cette potion est également disponible pour moi. Peut-être qu'elle est disponible sur tous les téléphones récents. Merci.

4voto

klaberte Points 71

Dans de nombreux cas, vous n'avez pas besoin de passer par ce processus, car valdikss tient désormais compte de nombreux résultats contribués sur son site Web

https://btcodecs.valdikss.org.ru/codec-compatibility/ https://btcodecs.valdikss.org.ru/

Si vous avez du mal à trouver votre fichier bt_snoop_hci.log, veuillez essayer la solution postée ici :

https://stackoverflow.com/questions/28445552/bluetooth-hci-snoop-log-not-generated/30352487#30352487

Une fois que vous avez trouvé votre fichier bt_snoop_hci.log, veuillez commencer à l'étape 7 dans la Réponse précédente ci-dessous.

Réponse précédente : [Le crédit pour cette réponse va principalement à ewedel, qui a précisé que la réponse se trouvait dans le fichier bt_snoop_hci.log, en utilisant Wireshark ; et prittstift69, pour avoir partagé la méthode facile pour 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 interprétation des résultats de ma part.

Comme l'ont mentionné prittstift69 et d'autres, vous pouvez "Activer le journal d'espionnage Bluetooth HCI" dans les options pour les développeurs. Pas besoin de suivre l'approche plus compliquée suggérée par ewedel.

  1. Commencez par désactiver le bluetooth sur l'appareil Android (je vais l'appeler 'téléphone').

  2. Activez le journal d'espionnage Bluetooth HCI dans les Options pour les développeurs.

  3. Allumez le Bluetooth sur le téléphone et connectez-le au récepteur Bluetooth (je vais l'appeler 'récepteur'). Cette étape suppose que le récepteur a été précédemment associé au téléphone.

  4. Lancez de la musique sur votre téléphone (idéalement un fichier WAV ou FLAC non compressé). Dix secondes suffisent. (Probablement même moins)

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

  6. Désactivez le journal d'espionnage Bluetooth HCI.

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

  8. Filtrez pour "btavdtp" (sans guillemets) Cherchez un message du téléphone vers le récepteur "Commande envoyée - SetConfiguration ...." C'est le message envoyé par le téléphone au récepteur avec la configuration finale à utiliser pour cet audio une fois l'authentification terminée. Le texte dans le champ Info vous dira quelle était la configuration finale.

[SBC] S'il s'agit du SBC, vous voudrez peut-être savoir quel est le bitpool. Pour ce faire, supprimez le filtre pour btavdtp et cherchez un message avec le protocole SBC et cliquez dessus. En dessous, dans la section détails, développez les informations sur le codec SBC Bluetooth. Ensuite, développez n'importe quelle (ou toutes) des données de trame. Là, il devrait clairement montrer le Bitpool utilisé par cette trame. S'il s'agit de 35, il y a de fortes chances que votre taux d'échantillonnage soit de 44,1 kHz, que vous utilisiez la Stéréo Joint, et que vous utilisiez le profil audio SBC de qualité moyenne (http://soundexpert.org/news/-/blogs/bluetooth-audio-quality-a2dp). Le débit binaire pour l'audio compressé est alors de 229 kbits/s SBC, ce qui obtient un score de 4,68 dans les tests de Sound Expert (http://soundexpert.org/encoders-224-kbps), ce qui est comparable au mp3 autour de 110-130 kbits/s.

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

0 votes

"idéalement un fichier WAV ou FLAC non compressé" Ne voudriez-vous pas jouer un MP3 pour voir s'il l'envoie en tant que MP3, etc?

2 votes

Seulement si votre objectif est de voir si A2DP prend en charge les fichiers mp3 des deux côtés (une question valide). Cependant, d'après mon expérience, la prise en charge des fichiers mp3 des deux côtés est rare (je ne l'ai jamais vue sur aucun de mes appareils, et j'en ai eu pas mal). Ainsi, avec des appareils Android, vos options de codec A2DP les plus probables sont le SBC et l'APTX. Lorsque vous lisez un fichier audio non compressé, cela force le téléphone à réencoder.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X