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.
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:
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.
Discover
zurückgegebene drei Audiosenken. Eine Antwort auf GetCapabilities
fü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 .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.
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).
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.
Schalten Sie zunächst Bluetooth auf dem Android-Gerät aus (ich nenne es "Telefon").
Aktivieren Sie das Bluetooth HCI-Snoop-Protokoll unter Entwickleroptionen.
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.
Spielen Sie Musik auf Ihrem Telefon ab (idealerweise eine unkomprimierte WAV- oder FLAC-Datei). Zehn Sekunden sind alles, was Sie brauchen. (Wahrscheinlich noch weniger)
Schalten Sie Bluetooth auf dem Telefon AUS.
Deaktivieren Sie das Bluetooth HCI-Snoop-Protokoll
Ü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
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.
Endolith