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

24

Das Bluetooth Audio Profile A2DP 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 verwendet werden, wenn der Empfänger sie nicht unterstützt. In diesem Fall greifen beide Geräte auf SBC zurück.

  1. Wie finde ich heraus, welche Codecs meine Hardware / ROM unterstützen?
  2. Wie finde ich heraus, welcher Codec derzeit verwendet wird? (Vielleicht hängt das auch vom Track ab, wenn er zum Beispiel MP3 / AAC-Dateien direkt ohne Neukodierung weitergibt.)
Endolith
quelle
In diesem Artikel heißt es: "Android-Benutzer haben Glück, da moderne Android-Telefone AptX unterstützen. Im Gegensatz zu Windows kann sogar überprüft werden, ob die Verbindung AptX verwendet!" Aber keine Erklärung dafür, wie.
Endolith

Antworten:

10

Auf meinem Cyanogen 10.1-Telefon (AOSP 4.2.2) ist es möglich, die Erfassung des Bluetooth-Verkehrs zu aktivieren. Anschließend können Sie dieses Capture in Wireshark laden und in der Aushandlungsphase ermitteln, welche Codecs das gekoppelte Audioausgabegerät unterstützt. Ich bin mir nicht sicher, welche Betriebssysteme dies unterstützen: Als ich diese Methode zum ersten Mal durchlief, behauptete sie, dass sie erst ab 4.4 unterstützt wird, bei CM auf einem Doubleshot ist dies jedoch eindeutig nicht der Fall. :-)

Angenommen, Sie haben das erforderliche Setup (rooted ~ 4.2.2 oder höher), dann 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 Einstellung BtSnoopLogOutput von ihrem Standardwert false in true. Hierzu verwende ich den ES Note Editor, der vom ES File Explorer aus gestartet wird, nachdem die Einstellung "Root Browser" aktiviert wurde.
  4. Starten Sie CatLog mit allen aktivierten Protokollierungstypen
  5. Aktivieren Sie Bluetooth auf Ihrem Telefon
  6. Spielen Sie nach dem Koppeln mit dem Ausgabegerät mit dem Player Ihrer Wahl ein Audiofragment ab (ich verwende Apollo). Zehn Sekunden oder so sollten reichen.
  7. Bluetooth wieder deaktivieren
  8. Beenden Sie die Protokollierung von CatLog und speichern Sie die Protokolldatei auf Ihrer SD-Karte
  9. [WICHTIG!] Bearbeiten Sie die Datei bt_stack.conf und setzen Sie BtSnoopLogOutput auf false zurück.
  10. Kopieren Sie das BT-Capture 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 von "btavdtp" (keine Anführungszeichen). Jetzt werden nur noch einige Pakete angezeigt. Suchen Sie nach der Antwort des Ausgabegeräts auf die AVDTP-Abfrage GetCapabilities, und Sie haben Ihre Antwort.

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

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

Ewedel
quelle
1
Vielen Dank. Das hat super funktioniert. Ich habe in den CatLog-Protokollen nichts gefunden, was für die Funktionen relevant wäre. Wie auch immer, probierte es auf Moto G (2013) mit CM 4.4.2 und mit LG HBS-730 Headset. Kein apt-X in den Logs, da CM dafür keine proprietären Libs hat.
DVIM
Danke, @Martynas, gut zu wissen. Hat es Unterstützung für MP3 enthalten? Ich frage mich, was ein gutes Ziel für den Test sein könnte, dass 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 hätte ich nicht gedacht, dass die eigentliche Codec-Liste so viel enthalten wäre, wie einige suggestive Meldungen, die zum Durchsuchen des Quellcodes verwendet werden könnten. Ein weiterer Tag ..
Mittwoch
1
Also eine Antwort auf Discoverdrei Audio-Senken zurück. Eine Antwort auf GetCapabilitiesfür ACP SEID [2 - Audio Sink]aufgenommen Service: Media Codec - Audio MPEG-1,2 Audiodenen hatte MP3: True. Ich habe die erfasste Protokolldatei auf github hochgeladen .
DVIM
Nochmals vielen Dank @Martynas. Obwohl das 730 bessere Bewertungen hat, schnappte sich ein LG HBS-750 zum Testen. Gleiche Suite von Codecs wie die 730. Have gegabelt Ihre Repo- und andere Capture hinzugefügt hier . Leider verwendet das Telefon in beiden unserer Erfassungen SBC anstelle von MP3. Sie sind sich nicht sicher, welchen Mediendateityp Sie verwendet haben, aber mein CM 4.2.2-Test verwendete VBR-MP3s mit 128 KBit / s (absichtlich kleine Bitrate, um die BT-Bandbreite nicht zu belasten). Es könnte sein, dass ce4 in Bezug auf das Lizenzproblem recht hat .
Mittwoch,
Das Bearbeiten von `/etc/bluetooth/bt_stack.conf` schien nicht zu funktionieren, aber ich hatte genau die gleichen Einstellungen in den Entwicklereinstellungen und das funktionierte. Dank Ihrer Antwort habe ich herausgefunden, dass Parrot Zik 2 die meiste Zeit SBC verwendet.
Null
8

In Bezug auf die Quelle gibt es mindestens 4 Codecs: SBC (obligatorisch), MP3 (MPEG12), AAC (MPEG24) und Sony 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 verfügt über eingeschränkte MP3-Funktionen.

Das Changelog für Version 3.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 Ankündigung in Version 3.25 . Die MP3-Unterstützung scheint von gstreamer abhängig zu sein, der auf Android nicht verfügbar ist. Ich schätze also, SBC ist die einzige Option für A2DP, um zu booten.

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

ce4
quelle
2
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 würde von der Hardware bereitgestellt? Android kann MP3s abspielen, daher bezweifle ich, dass es Patentbeschränkungen gibt.
Endolith
2
Ich glaube nicht, dass SBC einen dedizierten Hardware-Encoder für Android-Geräte hat. Es ist rechnerisch bescheiden, also denke ich, dass es in Software gemacht wird. Zumindest deuten die Quellen darauf hin. PS: Ich schaue auf die Quelle von Cyanogenmod, nicht auf die von HTC oder Samsung. PS2: Ich meinte die Audio-Sink-Geräte auf der anderen Seite mit Mangel an MP3 / AAC (Headsets, etc.)
CE4
7

Auf Geräten mit Nexus 4 (5.0.1) oder Nexus 7 (2012) (4.4.4) kann der Entwicklermodus zum Abrufen der Datei btsnoop_hci.log verwendet werden. "Bluetooth HCI Snoop Log aktivieren". Es ist nicht erforderlich, die Geräte zu rooten. Es scheint, dass beide Geräte kein Aptx anbieten. Ich teste dies mit Moto Stream (ohne Aptx) und Philips AEA2500 (mit Aptx).

prittstift69
quelle
1
Ich bin auf CM 12.1 und dieser Trank steht mir auch zur Verfügung. Möglicherweise ist es auf allen neuen Telefonen. Vielen Dank.
pedro_sland
4

[Diese Antwort geht hauptsächlich an ewedel, der mit Wireshark klarstellte, dass sich die Antwort in der Datei btsnoop_hci.log befindet. und prittstift69, um diese Protokolldatei auf einfache Weise zu erstellen.]

Dies ist ein einsteigerfreundliches, schrittweises Tutorial, in dem die bereits gegebenen Antworten zusammengefasst und die Ergebnisse von mir interpretiert werden.

Wie prittstift69 und andere erwähnten, können Sie unter Entwickleroptionen das "Bluetooth HCI Snoop Log aktivieren". Der komplizierteren Vorgehensweise von ewedel muss nicht gefolgt werden.

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

  2. Aktivieren Sie das Bluetooth-HCI-Snoop-Protokoll in den Entwickleroptionen.

  3. Schalten Sie Bluetooth am Telefon ein und verbinden Sie es mit dem Bluetooth-Empfänger (ich nenne es "Empfänger"). In diesem Schritt wird davon ausgegangen, dass der Empfänger zuvor mit dem Telefon gekoppelt wurde.

  4. Spielen Sie Musik auf Ihrem Handy ab (idealerweise eine unkomprimierte WAV- oder FLAC-Datei). Sie brauchen nur zehn Sekunden. (Wahrscheinlich noch weniger)

  5. Schalten Sie Bluetooth am Telefon aus.

  6. Deaktivieren Sie das Bluetooth-HCI-Snoop-Protokoll

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

  8. Filter for "btavdtp" (keine Anführungszeichen) Suche nach einer Nachricht vom Telefon an den Empfänger "Sent Command - SetConfiguration ...." Dies ist die Nachricht, die vom Telefon an den Empfänger mit der endgültigen Konfiguration gesendet wird, die für dieses Audio verwendet werden soll Nach dem Händeschütteln ist abgeschlossen. Der Text im Infofeld gibt Auskunft über die endgültige Konfiguration.

[SBC] Wenn es sich um SBC handelt, möchten Sie möglicherweise wissen, was der Bitpool ist. Entfernen Sie dazu den Filter für btavdtp, suchen Sie eine Nachricht mit dem Protokoll SBC und klicken Sie darauf. Erweitern Sie unten im Detailbereich die Informationen zum Bluetooth-SBC-Codec. Erweitern Sie dann einen beliebigen (oder alle) Frame-Daten. Dort sollte der von diesem Frame verwendete Bitpool deutlich angezeigt werden. Bei einer Samplerate von 35 ist die Wahrscheinlichkeit hoch, dass Ihre Samplerate 44,1 kHz beträgt, Sie verwenden Joint Stereo und das SBC-Audioprofil mittlerer Qualität ( 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 Sound Expert-Test ( http://soundexpert.org/encoders-224-kbps ) einen Wert von 4,68 ergibt, der mit mp3 bei 110-130 kbit / s vergleichbar ist.

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

klaberte
quelle
"idealerweise eine unkomprimierte WAV- oder FLAC-Datei" Möchten Sie nicht eine MP3 abspielen, um zu sehen, ob sie als MP3 usw. gesendet wird?
Endolith
2
Nur wenn Ihr Ziel ist zu sehen, ob A2DP MP3 auf beiden Seiten unterstützt (eine berechtigte Frage). Ich habe jedoch die Erfahrung gemacht, dass MP3-Unterstützung auf beiden Seiten selten ist (ich habe sie noch nie auf einem meiner Geräte gesehen, und ich hatte schon einige). Zumindest bei Android-Geräten sind SBC und APTX die wahrscheinlichsten Optionen für den A2DP-Codec. Bei der Wiedergabe einer nicht komprimierten Audiodatei muss das Telefon neu codiert werden.
Klaberte
Ich habe keine Antwort geschrieben
Endolith