Wie kann ich feststellen, welche A2DP-Codecs mein Telefon unterstützt/derzeit verwendet?

Das Audioprofil A2DP von Bluetooth unterstützt mehrere Codecs. Alle Geräte müssen SBC (Subband-Codec) unterstützen, dann können sie zusätzliche „optionale Codecs“ wie MP3 und AAC oder „Nicht-A2DP“-Codecs wie apt-X unterstützen.

Natürlich können diese Codecs nicht wirklich verwendet werden, wenn der Receiver sie nicht auch unterstützt, dann greifen beide Geräte auf SBC zurück.

  1. Wie finde ich heraus, welche Codecs meine Hardware/ROM unterstützt?
  2. Wie finde ich heraus, welcher Codec gerade verwendet wird? (Vielleicht hängt das auch vom Track ab, ob er beispielsweise MP3/AAC-Dateien direkt ohne Neukodierung weitergibt)
In diesem Artikel heißt es: „Android-Benutzer haben Glück, da moderne Android-Telefone AptX unterstützen. Im Gegensatz zu Windows ist es sogar möglich zu überprüfen, ob die Verbindung AptX verwendet!“ Aber keine Erklärung wie.

Antworten (4)

Auf meinem Cyanogen 10.1-Telefon (AOSP 4.2.2) ist es möglich, eine Erfassung des Bluetooth-Datenverkehrs zu aktivieren. Sie können diese Aufnahme dann in Wireshark laden und sich die Verhandlungsphase ansehen, um festzustellen, welche Codecs das gekoppelte Audioausgabegerät unterstützt. Ich bin mir nicht sicher, welche Betriebssysteme dies unterstützen: Als ich zum ersten Mal auf diese Methode stieß, beanspruchte sie Unterstützung erst ab 4.4, aber das ist bei CM auf einem Doubleshot eindeutig nicht der Fall. :-)

Angenommen, Sie haben das erforderliche Setup (gerootet ~ 4.2.2 oder höher), sind dies die Schritte:

  1. Koppeln Sie Ihr Telefon mit dem gewünschten A2DP-Gerät
  2. deaktivieren Sie Bluetooth auf Ihrem Telefon
  3. Bearbeiten Sie diese Datei: /etc/bluetooth/bt_stack.conf und ändern Sie die BtSnoopLogOutput-Einstellung von ihrem Standardwert „false“ in „true“. Dazu verwende ich den ES Note Editor, der vom ES File Explorer gestartet wird, nachdem die Einstellung „Root Browser“ aktiviert wurde.
  4. Starten Sie CatLog mit allen aktivierten Logging-Typen
  5. Aktivieren Sie Bluetooth auf Ihrem Telefon
  6. Spielen Sie nach der Kopplung mit dem Ausgabegerät einen Audioausschnitt mit dem Player Ihrer Wahl ab (ich verwende Apollo). Etwa zehn Sekunden sollten ausreichen.
  7. Bluetooth wieder deaktivieren
  8. Stoppen Sie die Protokollierung von CatLog und speichern Sie die Protokolldatei auf Ihrer SD-Karte
  9. [WICHTIG!] Bearbeiten Sie bt_stack.conf und ändern Sie BtSnoopLogOutput wieder auf „false“.
  10. Kopieren Sie die BT-Erfassung von Ihrer SD-Karte (/sdcard/btsnoop_hci.log) zusammen mit der gespeicherten CatLog-Datei auf einen Computer, auf dem eine aktuelle Kopie von Wireshark installiert ist.
  11. Laden Sie die Capture-Datei in Wireshark und setzen Sie einen Wireshark-Anzeigefilter auf „btavdtp“ (keine Anführungszeichen). Sie sehen jetzt nur noch wenige Pakete, suchen Sie nach der Antwort des Ausgabegeräts auf die AVDTP-GetCapabilities-Abfrage und Sie haben Ihre Antwort.

Sie können die Erfassungszeitstempel auch mit den Zeitstempeln des CatLog-Protokolls ausrichten, um nach sinnvollen Protokolleinträgen zu suchen. Ich habe ein paar gefunden und geschickt vergessen, sie in die Notizen aufzunehmen, auf denen dieser Beitrag basiert.

Sobald ich etwas mehr Zeit habe, hoffe ich, diese ziemlich langwierigen Schritte auf eine App zu reduzieren, bin mir aber nicht sicher, ob es möglich ist, und werde sowieso noch eine Weile nicht die Zeit haben. In der Zwischenzeit sind Vorschläge zur Verbesserung des oben genannten Prozesses willkommen.

Danke. Das hat super funktioniert. Ich habe in den CatLog-Protokollen nichts Relevantes zu den Fähigkeiten gefunden. Wie auch immer, versuchte es auf Moto G (2013) mit CM 4.4.2 und mit LG HBS-730 Headset. Kein apt-X in den Protokollen, da CM dafür keine proprietären Bibliotheken hat.
Danke, @Martynas, gut zu wissen. Hat es Unterstützung für mp3 enthalten? Ich frage mich, was ein gutes Ziel sein könnte, um zu testen, ob mein Telefon mp3 unterstützt. Autoradio leider nicht, und ich habe kein (!) Produkt gefunden, das seine A2DP-Codec-Unterstützung dokumentiert. In Bezug auf CatLog dachte ich nicht, dass die eigentliche Codec-Liste dort enthalten sein würde, sondern einige suggestive Meldungen, die zum Durchsuchen des Quellcodes verwendet werden könnten. Ein anderer Tag..
Eine Antwort auf Discoverzurückgegebene drei Audiosenken. Eine Antwort auf GetCapabilitiesfür ACP SEID [2 - Audio Sink]enthalten Service: Media Codec - Audio MPEG-1,2 Audio, die MP3: True. Ich habe die erfasste Protokolldatei auf github hochgeladen .
Nochmals vielen Dank @Martynas. Obwohl das 730 bessere Bewertungen hat, habe ich zum Testen ein LG HBS-750 geschnappt. Dieselbe Suite von Codecs wie die 730. Habe Ihr Repo geforkt und hier eine weitere Aufnahme hinzugefügt . Leider verwendet das Telefon in unseren beiden Aufnahmen SBC anstelle von mp3. Ich bin mir nicht sicher, welchen Mediendateityp Sie verwendet haben, aber mein CM 4.2.2-Test verwendete VBR-MP3s mit 128 kb/s (absichtlich kleine Bitrate, um die BT-Bandbreite nicht zu belasten). Langsam denke ich , dass ce4 in Bezug auf die Lizenzierungsfrage Recht haben könnte .
Das Bearbeiten von ` /etc/bluetooth/bt_stack.conf` schien nicht zu funktionieren, aber ich hatte genau die gleiche Einstellung in den Entwicklereinstellungen und das hat funktioniert. Dank Ihrer Antwort konnte ich herausfinden, dass Parrot Zik 2 die meiste Zeit SBC verwendet.

Wenn man sich die Quelle ansieht, gibt es mindestens 4 Codecs: SBC (obligatorisch), MP3 (MPEG12), AAC (MPEG24) und Sonys ATRAC.

./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

Die zugrunde liegende Software ist der „Bluez“-Stack von Linux. Es unterstützt SBC und hat eingeschränkte MP3-Fähigkeiten.

Das Änderungsprotokoll für v3.25 (2009?) lautet: „Eingeschränkte Unterstützung für MPEG12/MP3-Codec hinzufügen“.

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

Siehe auch die v3.25- Ankündigung . Die MP3-Unterstützung scheint von gstreamer abzuhängen, das auf Android nicht verfügbar ist, also denke ich, dass SBC die einzige Option für A2DP zum Booten ist.

PS: Die meisten A2DP-Geräte scheinen aufgrund von Patent-/Lizenzproblemen (einschließlich Linux) keine Unterstützung für MP3/AAC zu haben.

Das sind 3 optionale Codecs, ja, oder es können andere Codecs wie das Galaxy S III mit apt-X verwendet werden . Ich dachte, die Codierung wurde jedoch von der Hardware bereitgestellt? Android kann MP3s abspielen, daher bezweifle ich, dass es Patentbeschränkungen gibt.
Ich glaube nicht, dass SBC einen dedizierten Hardware-Encoder in Android-Geräten hat. Es ist rechnerisch bescheiden, also denke ich, dass es in Software gemacht wird. Darauf deuten zumindest die Quellen hin. PS: Ich schaue mir die Quelle von Cyanogenmod an, nicht die von HTC oder Samsung. PS2: Ich meinte die Audiosenkengeräte auf der anderen Seite mit fehlendem mp3/aac (Headsets usw.)

Bei Geräten mit Nexus 4 (5.0.1) oder Nexus 7 (2012) (4.4.4) ist es möglich, den Entwicklermodus zu verwenden, um btsnoop_hci.log abzurufen. "Bluetooth HCI-Snoop-Protokoll aktivieren". Es ist nicht notwendig, die Geräte zu rooten. Anscheinend bieten beide Geräte kein aptx. Ich teste das mit Moto Stream (ohne aptx) und Philips AEA2500 (mit aptx).

Ich bin auf CM 12.1 und dieser Trank steht mir auch zur Verfügung. Vielleicht ist es auf allen neueren Telefonen. Danke.

In vielen Fällen müssen Sie diesen Prozess nicht durchlaufen, da valdikss jetzt viele der beigetragenen Ergebnisse auf seiner Website verfolgt

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

Wenn Sie Probleme haben, Ihre btsnoop_hci.log-Datei zu finden, versuchen Sie bitte die hier gepostete Lösung:

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

Sobald Sie Ihre btsnoop_hci.log gefunden haben, beginnen Sie bitte mit Schritt 7 in der vorherigen Antwort unten.

Vorherige Antwort: [Die Anerkennung für diese Antwort geht hauptsächlich an ewedel, der klargestellt hat, dass die Antwort in der Datei btsnoop_hci.log mithilfe von Wireshark enthalten ist; und prittstift69 für das Teilen der einfachen Möglichkeit, diese Protokolldatei zu erstellen.]

Dies ist ein Anfänger-freundliches Schritt-für-Schritt-Tutorial, das die bereits gegebenen Antworten zusammenfasst, mit einigen Interpretationen der Ergebnisse von mir.

Wie prittstift69 und andere erwähnt haben, können Sie unter Entwickleroptionen „Bluetooth HCI-Snoop-Protokoll aktivieren“. Sie müssen nicht dem komplizierteren Ansatz folgen, den ewedel vorschlägt.

  1. Schalten Sie zunächst Bluetooth auf dem Android-Gerät aus (ich nenne es "Telefon").

  2. Aktivieren Sie das Bluetooth HCI-Snoop-Protokoll unter Entwickleroptionen.

  3. Schalten Sie Bluetooth am Telefon ein und verbinden Sie es mit dem Bluetooth-Empfänger (ich nenne es „Empfänger“). Dieser Schritt setzt voraus, dass der Empfänger zuvor mit dem Telefon gekoppelt wurde.

  4. Spielen Sie Musik auf Ihrem Telefon ab (idealerweise eine unkomprimierte WAV- oder FLAC-Datei). Zehn Sekunden sind alles, was Sie brauchen. (Wahrscheinlich noch weniger)

  5. Schalten Sie Bluetooth auf dem Telefon AUS.

  6. Deaktivieren Sie das Bluetooth HCI-Snoop-Protokoll

  7. Übertragen Sie die Datei btsnoop_hci.log (ich fand sie in /sdcard/Android/Data/) auf Ihren Computer. Führen Sie Wireshark auf Ihrem Computer aus und öffnen Sie die Datei btsnoop_hci.log

  8. Filtern Sie nach „btavdtp“ (ohne Anführungszeichen) Suchen Sie nach einer Nachricht vom Telefon an den Empfänger „Sent Command – SetConfiguration ....“ Dies ist die vom Telefon an den Empfänger gesendete Nachricht mit der endgültigen Konfiguration, die für dieses Audio verwendet werden soll nachdem der Handshake abgeschlossen ist. Der Text im Info-Feld sagt Ihnen, wie die endgültige Konfiguration war.

[SBC] Wenn es sich um SBC handelt, möchten Sie vielleicht wissen, was der Bitpool ist. Entfernen Sie dazu den Filter für btavdtp und suchen Sie nach einer Nachricht mit Protocol SBC und klicken Sie darauf. Erweitern Sie unten im Abschnitt „Details“ die Informationen zum Bluetooth-SBC-Codec. Erweitern Sie dann einige (oder alle) Frame-Daten. Dort sollte der von diesem Frame verwendete Bitpool deutlich angezeigt werden. Wenn es 35 ist, besteht eine gute Chance, dass Ihre Abtastrate 44,1 kHz beträgt, Sie Joint Stereo verwenden und das SBC-Audioprofil Mittlere Qualität verwenden ( http://soundexpert.org/news/-/blogs/bluetooth-audio -Qualität-a2dp ). Die Bitrate für das komprimierte Audio beträgt dann 229 kbit/s SBC, was im Test von Sound Expert ( http://soundexpert.org/encoders-224-kbps ) eine 4,68 erzielt, was mit mp3 um 110-130 kbit/s vergleichbar ist.

[APT-X] Wenn es sich um APT-X handelt, unterstützen sowohl Ihr Telefon als auch Ihr Empfänger APT-X, und das wird auch verwendet. Unter der Annahme von 16 Bit, 44,1 kHz läuft der Codec mit 352 kbit/s.

"idealerweise eine unkomprimierte WAV- oder FLAC-Datei" Möchten Sie nicht eine MP3 abspielen, um zu sehen, ob sie als MP3 usw. gesendet wird?
Nur wenn Sie sehen möchten, ob A2DP MP3 auf beiden Seiten unterstützt (eine gültige Frage). Meine Erfahrung ist jedoch, dass MP3-Unterstützung auf beiden Seiten selten ist (ich habe es noch nie auf einem meiner Geräte gesehen, und ich hatte einige). Zumindest bei Android-Geräten sind Ihre wahrscheinlichsten A2DP-Codec-Optionen SBC und APTX. Das Abspielen einer unkomprimierten Audiodatei zwingt das Telefon zur Neucodierung.