Jak mogę ustalić, które kodeki A2DP są obsługiwane przez mój telefon?

24

Profil audio A2DP Bluetooth obsługuje wiele kodeków. Wszystkie urządzenia muszą obsługiwać SBC (kodek podpasmowy), a następnie mogą obsługiwać dodatkowe „opcjonalne kodeki”, takie jak MP3 i AAC, lub kodeki „inne niż A2DP”, takie jak apt-X.

Oczywiście tych kodeków nie można faktycznie użyć, jeśli odbiornik również ich nie obsługuje, w którym to przypadku oba urządzenia wracają do SBC.

  1. Jak sprawdzić, które kodeki obsługują mój sprzęt / pamięć ROM?
  2. Jak sprawdzić, który kodek jest aktualnie używany? (Być może zależy to również od ścieżki, jeśli na przykład przekazuje ona pliki MP3 / AAC bezpośrednio bez ponownego kodowania)
endolit
źródło
W tym artykule jest napisane: „Użytkownicy Androida mają szczęście, ponieważ nowoczesne telefony z Androidem obsługują AptX. W przeciwieństwie do Windows, można nawet sprawdzić, czy połączenie używa AptX!” Ale nie ma wyjaśnienia, jak to zrobić.
endolith

Odpowiedzi:

10

Na moim telefonie Cyanogen 10.1 (AOSP 4.2.2) można włączyć przechwytywanie ruchu Bluetooth. Następnie możesz załadować to przechwycenie do Wireshark i spojrzeć na fazę negocjacji, aby określić, które kodeki obsługuje sparowane urządzenie wyjściowe audio. Nie jestem pewien, jakie systemy operacyjne to obsługują: kiedy po raz pierwszy natknąłem się na tę metodę, domagał się wsparcia już od 4.4, ale najwyraźniej nie w przypadku CM na Doubleshot. :-)

Zakładając, że masz wymaganą konfigurację (zrootowaną ~ 4.2.2 lub nowszą), są to następujące kroki:

  1. sparuj swój telefon z interesującym urządzeniem A2DP
  2. wyłącz bluetooth w swoim telefonie
  3. edytuj ten plik: /etc/bluetooth/bt_stack.conf, zmieniając ustawienie BtSnoopLogOutput z wartości domyślnej false na true. Do tego używam ES Note Editor, uruchomionego z ES File Explorer po włączeniu jego ustawienia „Root Browser”.
  4. uruchom CatLog z włączonymi wszystkimi typami rejestrowania
  5. włącz bluetooth w swoim telefonie
  6. po sparowaniu z urządzeniem wyjściowym, odtwórz fragment audio z wybranym odtwarzaczem (używam Apollo). Około dziesięciu sekund powinno wystarczyć.
  7. ponownie wyłącz bluetooth
  8. zatrzymaj rejestrowanie CatLog i zapisz plik dziennika na karcie SD
  9. [WAŻNE!] Edytuj bt_stack.conf, zmieniając BtSnoopLogOutput z powrotem na false.
  10. skopiuj przechwycenie BT z karty SD (/sdcard/btsnoop_hci.log) wraz z zapisanym plikiem CatLog na komputer z zainstalowaną bieżącą kopią Wireshark.
  11. załaduj plik przechwytywania do Wireshark i ustaw filtr wyświetlania Wireshark na „btavdtp” (bez cudzysłowów). Zobaczysz teraz tylko kilka pakietów, poszukaj odpowiedzi urządzenia wyjściowego na zapytanie AVDTP GetCapabilities, a otrzymasz odpowiedź.

Możesz także ustawić znaczniki czasu przechwytywania w linii ze znacznikami czasu dziennika CatLog, aby wyszukać sugestywne wpisy w dzienniku. Znalazłem parę i sprytnie zapomniałem dołączyć je do notatek, na których oparty jest ten post.

Kiedy będę miał więcej czasu, mam nadzieję zredukować ten dość długi zestaw kroków do aplikacji, ale nie jestem pewien, czy jest to możliwe i i tak jeszcze nie będzie czasu. Tymczasem mile widziane są sugestie ulepszenia powyższego procesu.

ewedel
źródło
1
Dzięki. To działało świetnie. W dziennikach CatLog nie znalazłem nic istotnego dla możliwości. W każdym razie wypróbowałem to na Moto G (2013) z systemem CM 4.4.2 i zestawem słuchawkowym LG HBS-730. Brak apt-X w logach, ponieważ CM nie ma do tego zastrzeżonych bibliotek lib.
dvim
Dzięki, @Martynas, dobrze wiedzieć. Czy zawiera wsparcie dla mp3? Zastanawiam się, co może być dobrym celem do testowania, czy mój telefon obsługuje mp3. Radio samochodowe niestety nie znalazło i nie znalazłem żadnego (!) Produktu, który dokumentowałby jego obsługę kodeków A2DP. Jeśli chodzi o CatLog, to nie myślałem, że będzie tam rzeczywista lista kodeków, a niektóre sugestywne komunikaty, których można użyć do przeszukiwania kodu źródłowego. Kolejny dzień ..
Ewedel,
1
Tak więc odpowiedź na Discoverzwrócone trzy zlewy audio. Odpowiedź GetCapabilitiesna ACP SEID [2 - Audio Sink]włączone, Service: Media Codec - Audio MPEG-1,2 Audioktóre miały MP3: True. Przesłałem przechwycony plik dziennika do github .
dvim
Jeszcze raz dziękuję @Martynas. Mimo że 730 ma lepsze recenzje, chwycił LG HBS-750 do testowania. Ten sam zestaw kodeków, co 730. Rozwinęliśmy swoje repozytorium i dodaliśmy tutaj kolejne przechwytywanie . Niestety, w obu naszych rejestrach telefon wybiera użycie SBC zamiast mp3. Nie jestem pewien, jakiego typu pliku multimedialnego użyłeś, ale w moim teście CM 4.2.2 wykorzystałem pliki mp3 VBR 128 kb / s (celowo mały przepływność, aby uniknąć obciążenia pasma BT). Zaczynając myśleć, że ce4 może mieć rację w kwestii licencji .
ewedel
Eiditing `/ etc / bluetooth / bt_stack.conf` nie działał, ale miałem dokładnie to samo ustawienie w ustawieniach programisty i to działało. Dzięki twojej odpowiedzi udało mi się dowiedzieć, że Parrot Zik 2 przez większość czasu używa SBC.
Zero
8

Patrząc na źródło, istnieją co najmniej 4 kodeki: SBC (obowiązkowe), MP3 (MPEG12), AAC (MPEG24) i ATRAC 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

Podstawowym oprogramowaniem jest stos „bluez” linuksa. Obsługuje SBC i ma ograniczone możliwości MP3.

Dziennik zmian dla wersji 3.25 (2009?) Brzmi: „Dodaj ograniczone wsparcie dla kodeka MPEG12 / MP3”.

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

Zobacz także ogłoszenie v3.25 . Obsługa MP3 wydaje się zależeć od gstreamera, który nie jest dostępny na Androidzie, więc domyślam się, że SBC jest jedyną opcją do uruchomienia A2DP.

PS: Większość urządzeń A2DP wydaje się nie obsługiwać MP3 / AAC z powodu problemów z patentami / licencjonowaniem (w tym Linux).

ce4
źródło
2
Są to 3 opcjonalne kodeki, tak, lub mogą one używać innych kodeków, takich jak Galaxy S III za pomocą apt-X . Myślałem, że kodowanie jest zapewnione przez sprzęt? Android może odtwarzać pliki MP3, więc wątpię, czy istnieją jakieś ograniczenia patentowe.
endolith
2
Nie sądzę, że SBC ma dedykowany koder sprzętowy w urządzeniach z Androidem. Jest skromny obliczeniowo, więc sądzę, że zrobiono to w oprogramowaniu. Przynajmniej wskazują na to źródła. PS: Patrzę na źródło Cyanogenmod, a nie HTC czy Samsung. PS2: Miałem na myśli urządzenia audio po drugiej stronie z brakiem mp3 / aac (zestawy słuchawkowe itp.)
ce4
7

W urządzeniach Nexus 4 (5.0.1) lub Nexus 7 (2012) (4.4.4) można użyć trybu programisty, aby uzyskać plik btsnoop_hci.log. „Włącz dziennik snoop Bluetooth HCI”. Zrootowanie urządzeń nie jest konieczne. Wygląda na to, że oba urządzenia nie oferują aptx. Testuję to z Moto Stream (bez aptx) i Philips AEA2500 (z aptx).

prittstift69
źródło
1
Jestem na CM 12.1 i ta mikstura jest dla mnie dostępna. Być może jest na wszystkich najnowszych telefonach. Dzięki.
pedro_sland
4

[Podziękowania za tę odpowiedź należą głównie do ewedel, który wyjaśnił, że odpowiedź znajduje się w pliku btsnoop_hci.log, używając Wireshark; i prittstift69, za udostępnienie łatwego sposobu utworzenia tego pliku dziennika.]

Jest to przyjazny dla początkujących samouczek krok po kroku, podsumowujący już udzielone odpowiedzi, z pewną interpretacją moich wyników.

Jak wspomniano prittstift69 i inne, możesz „włączyć dziennik snoop Bluetooth HCI” w opcjach programisty. Nie trzeba stosować bardziej skomplikowanego podejścia sugerowanego przez ewedel.

  1. Zacznij od wyłączenia Bluetooth na urządzeniu z Androidem (nazywam to „telefonem”).

  2. Włącz dziennik snoop Bluetooth HCI w Opcjach programisty.

  3. Włącz Bluetooth w telefonie i podłącz go do odbiornika Bluetooth (nazywam go „odbiornikiem”). W tym kroku założono, że odbiornik został wcześniej sparowany z telefonem.

  4. Odtwarzaj muzykę na swoim telefonie (najlepiej nieskompresowany plik WAV lub FLAC). Dziesięć sekund to wszystko, czego potrzebujesz. (Prawdopodobnie nawet mniej)

  5. Wyłącz Bluetooth w telefonie.

  6. Wyłącz dziennik snoop Bluetooth HCI

  7. Przenieś plik btsnoop_hci.log (znalazłem go w / sdcard / Android / Data /) na swój komputer. Uruchom wireshark na swoim komputerze i otwórz plik btsnoop_hci.log

  8. Filtr „btavdtp” (bez cudzysłowów) Wyszukaj wiadomość z telefonu do odbiornika „Wysłane polecenie - SetConfiguration ....” Jest to wiadomość wysłana przez telefon do odbiornika z ostateczną konfiguracją, która zostanie użyta dla tego dźwięku po zakończeniu uzgadniania. Tekst w polu Informacje powie ci, jaka była ostateczna konfiguracja.

[SBC] Jeśli to jest SBC, możesz chcieć wiedzieć, co to jest pula bitów. Aby to zrobić, usuń Filtr dla btavdtp i poszukaj komunikatu w protokole SBC i kliknij go. Poniżej, w sekcji szczegółów, rozwiń informacje o kodeku Bluetooth SBC. Następnie rozwiń dowolne (lub wszystkie) dane ramki. Tam powinien wyraźnie pokazać Bitpool używany przez tę ramkę. Jeśli jest to 35, istnieje duża szansa, że ​​częstotliwość próbkowania wynosi 44,1 kHz, używasz Joint Stereo i używasz profilu audio SBC o średniej jakości ( http://soundexpert.org/news/-/blogs/bluetooth-audio -quality-a2dp ). Szybkość transmisji skompresowanego dźwięku wynosi wtedy 229 kb / s SBC, co daje 4,68 w testach Sound Expert ( http://soundexpert.org/encoders-224-kbps ), co jest porównywalne z mp3 około 110-130 kb / s.

[APT-X] Jeśli jest to APT-X, zarówno telefon, jak i odbiornik obsługują APT-X i właśnie z tego korzysta. Zakładając, że 16-bit, 44,1 kHz, kodek działa z prędkością 352 kb / s.

klaberte
źródło
„idealnie nieskompresowany plik WAV lub FLAC” Czy nie chcesz odtwarzać plików MP3, aby sprawdzić, czy są one wysyłane jako pliki MP3 itp.?
endolith,
2
Tylko jeśli Twoim celem jest sprawdzenie, czy A2DP obsługuje mp3 po obu stronach (ważne pytanie). Jednak moje doświadczenie jest takie, że obsługa mp3 po obu stronach jest rzadka (nigdy nie widziałem go na żadnym z moich urządzeń, a miałem całkiem sporo). Tak więc, przynajmniej w przypadku urządzeń z Androidem, najbardziej prawdopodobnymi opcjami kodeków A2DP są SBC i APTX. Odtwarzanie nieskompresowanego pliku audio zmusza telefon do ponownego zakodowania.
klaberte
Nie napisałem odpowiedzi
endolith