Déterminer les codecs supportés par un casque Bluetooth sous macOS

En faisant des essais sur le Bluetooth, je suis (re)tombé sur un problème énervant : le manque d’informations sur les codecs. Dans le meilleur des cas, le fabricant indique les codecs supportés, et il faut le croire. J’ai cherché longtemps une méthode simple pour déterminer ce que supporte un périphérique… sans succès. Je n’ai qu’une méthode compliquée et pas tout à fait efficace (je vais y revenir à la fin). Mais elle fonctionne dans la majorité des cas.

Vous aurez besoin des outils de développement de macOS et éventuellement de Wireshark. Pour les outils Apple, c’est à cette adresse, normalement c’est accessible si vous avez un compte Apple. Il faut chercher les Additional Tools for Xcode. Si vous voulez les outils Bluetooth, la version 11.4 est obligatoire, dans notre cas, la version 12 (plus récente) marche aussi.

Ensuite, dans le fichier, il faut lancer PacketLogger qui se trouve dans le dossier Hardware. Il va demander le mot de passe, puis se lancer. Je vous conseille de commencer par presser Stop, puis Clear. Avant de commencer, il faut déconnecter le casque (avec le menu Bluetooth). Ensuite, quand vous êtes prêt, il faut presser Start, et ça va commencer à défiler.

L’outil d’Apple

Maintenant, sortez votre casque (vos écouteurs, enceintes, etc.) et connectez-le au Mac avec le menu Bluetooth. Vous pouvez par exemple lancer quelques secondes de musique, bien vérifier si ça fonctionne. Une fois que c’est fait, dans PacketLogger, faites Stop. Maintenant, il faut exporter le résultat en BTSnoop (File -> Export -> BTSnoop).

Dans la majorité des cas, vous venez de capturer la liaison entre le Mac et le casque, avec les informations nécessaires pour la liste des codecs supportés. Il y a un cas précis où ça ne fonctionne pas : avec les casques Apple récents sous macOS Big Sur. Le changement automatique doit sûrement utiliser une autre méthode de connexion, et je n’ai pas réussi à obtenir un résultat.

Exploiter les données

La première méthode est la plus simple, mais elle demande de faire confiance à un site Internet. Il faut uploader le fichier sur ce site , qui va analyser les données et vous donner le résultat.

Cet adaptateur supporte pas mal de codecs

Si vous obtenez ça, vous avez raté la capture.

La seconde méthode évite d’envoyer les données sur Internet. Il faut lancer Wireshark, ouvrir le fichier de log et mettre ce filtre : btavdtp.signal_id. Les lignes GetAllCapabilities indiquent les codecs supportés. Dans le cas de l’adaptateur dans la capture, on peut par exemple voir l’aptX HD.

Pour les lignes qui indiquent uniquement Audio non-A2DP, Wireshark ne peut pas déterminer le codec. Il faut donc faire un double clic, afficher les informations complètes et investiguer. Dans ce cas précis, vous avez Qualcomm en développeur (0x0000000a) et 0x0001 en codec, ce qui correspond a priori à l’aptX LL. Vous trouverez quelques infos sur ce site, et le site proposé juste au-dessus indique que c’est justement l’aptX LL.

Quelques essais

J’ai donc vérifié qu’un casque supportait bien le MP3 (je le savais), qu’un boîtier de salon supporte le FastStream (alors qu’il n’a pas de microphone…) ou que la majorité des appareils indiquent se limiter à un bitpool (une valeur liée au débit) de 53 en SBC, même si en pratique ils acceptent souvent plus. On peut aussi indirectement vérifier si la voix passe en « HD » en regardant les fréquences d’échantillonnages supportées en SBC : il faut du 16 kHz pour la voix. Il y a des trucs particuliers sur les appareils Apple, dans un autre article qui devrait être publié séparément.

Un adaptateur compatible aptx LL


Un vieux casque avec du MP3


Un casque Creative avec du FastStream


Un casque Jabra qui ne prend que le SBC