Як визначити, які кодеки A2DP підтримує / використовує зараз телефон?


24

Звуковий профіль Bluetooth A2DP підтримує декілька кодеків. Усі пристрої повинні підтримувати SBC (піддіапазонний кодек), тоді вони можуть підтримувати додаткові "необов'язкові кодеки", такі як MP3 та AAC, або "не-A2DP" кодеки, як apt-X.

Звичайно, ці кодеки фактично не можуть бути використані, якщо приймач також не підтримує їх, і тоді обидва пристрої повертаються до SBC.

  1. Як дізнатися, які кодеки підтримують моє обладнання / ПЗУ?
  2. Як дізнатися, який кодек зараз використовується? (Можливо, це також залежить від доріжки, якщо, наприклад, він передає MP3 / AAC файли безпосередньо без перекодування)

У цій статті йдеться про те, що "Користувачам Android пощастило, оскільки сучасні телефони Android підтримують AptX. На відміну від Windows, навіть можна перевірити, чи використовується для зв'язку AptX!" Але ніяких пояснень як.
ендоліт

Відповіді:


10

На моєму телефоні Cyanogen 10.1 (AOSP 4.2.2) можна включити захоплення трафіку Bluetooth. Потім ви можете завантажити це захоплення у Wireshark і подивитися на етапі узгодження, щоб визначити, які кодеки підтримує парний аудіо вихідний пристрій. Не впевнений, які ОС підтримують це: коли я вперше зіткнувся з цим методом, він вимагав підтримки лише з 4.4, але очевидно, що це не стосується CM на подвоєному знімку. :-)

Якщо припустити, що у вас є необхідна установка (з кореневими ~ 4.2.2 або пізнішою версією), це такі кроки:

  1. з'єднайте телефон із цікавим пристроєм A2DP
  2. вимкнути Bluetooth на телефоні
  3. відредагуйте цей файл: /etc/bluetooth/bt_stack.conf, змінивши налаштування BtSnoopLogOutput зі свого за замовчуванням значення false на true. Для цього я використовую ES Note Editor, запущений із ES File Explorer після ввімкнення налаштування "Root Browser".
  4. запустіть CatLog, з увімкненими всіми типами журналу
  5. включити Bluetooth на телефоні
  6. після того, як він з'єднується з пристроєм виводу, відтворюйте фрагмент аудіо з вибором програвача (я використовую Apollo). Десять секунд або близько того повинно бути багато.
  7. знову відключити Bluetooth
  8. зупиніть журнал CatLog і збережіть його файл журналу на SD-картці
  9. [ВАЖЛИВО!] Редагуйте bt_stack.conf, змінивши BtSnoopLogOutput назад на false.
  10. скопіюйте знімок BT зі своєї SD-карти (/sdcard/btsnoop_hci.log) разом із збереженим файлом CatLog на комп'ютер із встановленою поточною копією Wireshark.
  11. завантажте файл захоплення у Wireshark і встановіть фільтр відображення Wireshark "btavdtp" (без лапок). Тепер ви побачите лише кілька пакетів, шукайте відповідь пристрою виводу на запит AVDTP GetCapatility і отримаєте свою відповідь.

Ви також можете вирівняти часові позначки зйомки за допомогою часових міток журналу CatLog, щоб шукати сугестивні записи журналу. Я знайшов пару і розумно забув включити їх у замітки, на яких ґрунтується цей пост.

Коли я ще трохи часу сподіваюся скоротити цей досить тривалий набір кроків до програми, але не впевнений, чи можливо це і не матиме часу ще на деякий час. Тим часом, пропозиції щодо вдосконалення вищезазначеного процесу вітаються.


1
Спасибі. Це спрацювало чудово. Я не знайшов нічого, що стосується можливостей у журналах CatLog. Як би там не було, спробував це на Moto G (2013), що працює на версії CM 4.4.2 та на гарнітурі LG HBS-730. У журналах немає apt-X, оскільки CM не має для цього власників.
dvim

Дякую, @Martynas, добре знати. Чи включала вона підтримку mp3? Мені цікаво, що може бути хорошою ціллю для тестування, щоб мій телефон підтримував mp3. На жаль, автомобільна радіо не знайшла жодного (!) Продукту, який би підтверджував підтримку кодеків A2DP. Що стосується CatLog, то я не думав, що фактичний список кодеків буде там настільки, як деякі пропозиції, які можна використати для пошуку вихідного коду. Ще один день ..
ewedel

1
Тож відповідь на Discoverповернуті три звукові раковини Відповідь на GetCapabilitiesдля ACP SEID [2 - Audio Sink]включені Service: Media Codec - Audio MPEG-1,2 Audioякі мали MP3: True. Я завантажив захоплений файл журналу в github .
dvim

Ще раз дякую @Martynas. Незважаючи на те, що 730 має кращі огляди, захопив LG HBS-750 для тестування. Той самий набір кодеків, що і 730. Розділили репо і додали тут ще одне захоплення . На жаль, в обох наших захопленнях телефон вирішує використовувати SBC замість mp3. Не впевнений, який тип медіафайлів ви використовували, але мій тест CM 4.2.2 використовував mp3-файли VBR 128 кбіт / с (навмисно невеликий бітрейт, щоб уникнути напруження пропускної здатності BT). Почавши думати, ce4 може бути правильним щодо питання ліцензування .
ewedel

Здавалося, що eiditing `/ etc / bluetooth / bt_stack.conf` не працює, але в налаштуваннях розробника були точно такі ж налаштування, і це спрацювало. Завдяки вашій відповіді мені вдалося з’ясувати, що Parrot Zik 2 більшість часу використовує SBC.
Нуль

8

Дивлячись на джерело, є щонайменше 4 кодеки: SBC (обов'язковий), MP3 (MPEG12), AAC (MPEG24) та 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

Основним програмним забезпеченням є стек "bluez" linux. Він підтримує SBC і має обмежені можливості MP3.

Журнал змін для v3.25 (2009?) Говорить: "Додати обмежену підтримку кодека MPEG12 / MP3".

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

Дивіться також оголошення v3.25 . Підтримка MP3, здається, залежить від gstreamer, який недоступний для Android, тому я просто здогадуюсь, що SBC - єдиний варіант для завантаження A2DP.

PS: Більшість пристроїв A2DP, здається, не підтримують MP3 / AAC через проблеми з патентами / ліцензуванням (включаючи Linux).


2
Це 3 необов'язкові кодеки, так, або він може використовувати інші кодеки, такі як Galaxy S III, використовуючи apt-X . Я думав, що кодування надається апаратним забезпеченням? Android може відтворювати MP3, тому я сумніваюся, що існують обмеження на патент.
ендоліт

2
Я не думаю, що SBC має спеціальний апаратний кодер на пристроях Android. Це обчислювально скромно, тому я думаю, що це робиться в програмному забезпеченні. Принаймні, джерела вказують на це. PS: Я дивлюсь на джерело Cyanogenmod, а не на HTC чи Samsung. PS2: Я мав на увазі аудіомобільні пристрої з іншого боку, де бракує mp3 / aac (гарнітури тощо)
ce4

7

З пристроями Nexus 4 (5.0.1) або Nexus 7 (2012) (4.4.4) можна використовувати режим розробника, щоб отримати btsnoop_hci.log. "Увімкнути журнал затримок Bluetooth HCI". Не потрібно викорінювати пристрої. Здається, що обидва пристрої не пропонують aptx. Я тестую це за допомогою Moto Stream (без aptx) та Philips AEA2500 (з aptx).


1
Я на CM 12.1, і це зілля мені також доступне. Можливо, воно є на всіх останніх телефонах. Спасибі.
pedro_sland

4

[Заслуга цієї відповіді здебільшого належить ewedel, який уточнив, що відповідь є у файлі btsnoop_hci.log, використовуючи Wireshark; і prittstift69, для обміну простим способом створення цього файлу журналу.]

Це полегшений для новачків покроковий посібник, узагальнюючи вже відповіді, з деякою інтерпретацією результатів.

Як згадували prittstift69 та інші, ви можете "Увімкнути журнал затримки Bluetooth HCI" у розділі "Параметри розробника". Не потрібно дотримуватися складнішого підходу, запропонованого Еведель.

  1. Почніть із вимкнення Bluetooth через Bluetooth на пристрої Android (я називаю це "телефоном").

  2. Увімкніть журнал затримки Bluetooth HCI у розділі Параметри розробника.

  3. Увімкніть Bluetooth на телефоні та підключіть його до приймача Bluetooth (я називатиму його «приймачем»). Цей крок передбачає, що приймач раніше був з'єднаний з телефоном.

  4. Відтворюйте музику на телефоні (в ідеалі нестиснений файл WAV або FLAC). Десять секунд - все, що вам потрібно. (Мабуть, навіть менше)

  5. Вимкніть Bluetooth на телефоні.

  6. Вимкніть журнал затримки Bluetooth HCI

  7. Перенесіть файл btsnoop_hci.log (я знайшов його в / sdcard / Android / Data /) на свій комп'ютер. Запустіть провід на своєму комп’ютері і відкрийте файл btsnoop_hci.log

  8. Фільтр для "btavdtp" (без лапок) Шукати повідомлення з телефону до приймача "Надіслана команда - SetConfiguration ...." Це повідомлення, надіслане телефоном до приймача з остаточною конфігурацією, яке буде використано для цього звуку після закінчення рукостискання. Текст у полі Інформація розповість, якою була остаточна конфігурація.

[SBC] Якщо це SBC, ви можете дізнатися, що таке бітпул. Для цього вийміть фільтр для btavdtp і знайдіть повідомлення з протоколом SBC і натисніть на нього. Нижче, у розділі деталей, розгорніть інформацію про кодек Bluetooth SBC Codec. Потім розгорніть будь-які (або всі) дані Frame. Там він повинен чітко показувати бітпул, який використовує цей кадр. Якщо це 35, є велика ймовірність, що частота дискретизації становить 44,1 кГц, ви використовуєте спільну стереосистему та використовуєте звуковий профіль SBC середньої якості ( http://soundexpert.org/news/-/blogs/bluetooth-audio -якість-a2dp ). Тоді бітрейт для стисненого звуку становить 229 кбіт / сек SBC, який набрав 4,68 у тестуванні Sound Expert ( http://soundexpert.org/encoders-224-kbps ), що порівняно з mp3 у межах 110-130 кбіт / сек.

[APT-X] Якщо це APT-X, то і ваш телефон, і приймач підтримують APT-X, і це те, що він використовується. Припускаючи 16-бітний, 44,1 кГц, кодек працює на швидкості 352 кбіт / с.


"в ідеалі нестиснений файл WAV або FLAC" Чи не хочете ви відтворити MP3, щоб побачити, чи він надсилає його як MP3 тощо?
ендоліт

2
Тільки якщо ваша мета - побачити, чи підтримує A2DP mp3 з обох сторін (правильне питання). Однак мій досвід полягає в тому, що підтримка mp3 з обох сторін зустрічається рідко (я жодного разу не бачив її на жодному зі своїх пристроїв, і у мене було досить багато). Тож, принаймні, на пристроях Android, найімовірнішими варіантами кодека A2DP є SBC та APTX. Відтворення нестисненого аудіофайлу змушує телефон повторно кодувати.
klaberte

Я не писав відповіді
ендоліт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.