Как определить, какие кодеки 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 на Doubleshot. :-)

Предполагая, что у вас есть необходимые настройки (с корнем ~ 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 GetCapabilities, и вы получите свой ответ.

Вы также можете выровнять временные метки захвата с временными метками журнала CatLog, чтобы искать предполагаемые записи журнала. Я нашел пару и ловко забыл включить их в заметки, на которых основан этот пост.

Как только у меня будет немного времени, я надеюсь сократить этот довольно длинный набор шагов до приложения, но не уверен, если это возможно, и у меня все равно не будет времени. Между тем, предложения по улучшению вышеуказанного процесса приветствуются.

ewedel
источник
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. Have раздвоенный ваш репозиторий и добавил еще один захват здесь . К сожалению, в обоих наших снимках телефон предпочитает использовать SBC вместо mp3. Не знаю, какой тип медиа-файлов вы использовали, но в моем тесте CM 4.2.2 использовались файлы VBR mp3 со скоростью 128 кбит / с (намеренно небольшой битрейт, чтобы избежать нагрузки на полосу пропускания BT). Начинаю думать, что ce4 может быть прав насчет вопроса лицензирования .
ewedel
Создание `/ etc / bluetooth / bt_stack.conf`, похоже, не сработало, но у меня были точно такие же настройки в настройках разработчика, и это сработало. Благодаря вашему ответу мне удалось узнать, что Parrot Zik 2 использует SBC большую часть времени.
Ноль
8

Если посмотреть на источник, то есть как минимум 4 кодека: SBC (обязательный), MP3 (MPEG12), AAC (MPEG24) и 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

Базовым программным обеспечением является стек "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).

CE4
источник
2
Это 3 дополнительных кодека, да, или он может использовать другие кодеки, такие как Galaxy S III, используя apt-X . Я думал, что кодирование было обеспечено оборудованием, хотя? Android может воспроизводить MP3, поэтому я сомневаюсь, что есть какие-то патентные ограничения.
эндолит
2
Я не думаю, что у SBC есть специальный аппаратный кодер в устройствах Android. Это вычислительно скромно, поэтому я думаю, что это сделано в программном обеспечении. По крайней мере, источники указывают на это. PS: я смотрю на источник Cyanogenmod, а не HTC или Samsung. PS2: я имел в виду устройства
аудиоотвода
7

На устройствах Nexus 4 (5.0.1) или Nexus 7 (2012) (4.4.4) можно использовать режим разработчика для получения btsnoop_hci.log. Msgstr "Включить журнал отслеживания Bluetooth HCI". Нет необходимости рутировать устройства. Кажется, что оба устройства не предлагают aptx. Я тестирую это с Moto Stream (без aptx) и Philips AEA2500 (с aptx).

prittstift69
источник
1
Я нахожусь на CM 12.1, и это зелье также доступно для меня. Возможно, это на всех последних телефонах. Спасибо.
pedro_sland
4

[Благодарность за этот ответ в основном идет Эведелю, который пояснил, что ответ находится в файле btsnoop_hci.log, используя Wireshark; и prittstift69, чтобы поделиться простым способом создания этого файла журнала.]

Это пошаговое руководство для новичков, в котором кратко изложены ответы, которые уже даны, с некоторой интерпретацией полученных мной результатов.

Как уже упоминалось, prittstift69 и другие, вы можете «Включить журнал отслеживания Bluetooth HCI» в разделе «Параметры разработчика». Нет необходимости следовать более сложному подходу, предложенному ewedel.

  1. Начните с выключения Bluetooth на устройстве Android (я назову это «телефон»).

  2. Включите журнал отслеживания Bluetooth HCI в разделе «Параметры разработчика».

  3. Включите Bluetooth на телефоне и подключите его к приемнику Bluetooth (я назову его «приемник»). Этот шаг предполагает, что приемник ранее был связан с телефоном.

  4. Воспроизведите музыку на своем телефоне (в идеале, в несжатом формате WAV или FLAC). Десять секунд - это все, что тебе нужно. (Возможно, даже меньше)

  5. Выключите Bluetooth на телефоне.

  6. Отключить Bluetooth HCI Snoop Log

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

  8. Фильтр для "btavdtp" (без кавычек) Поиск сообщения от телефона получателю "Sent Command - SetConfiguration ...." Это сообщение, отправленное телефоном получателю с окончательной конфигурацией, которая будет использоваться для этого аудио после того, как рукопожатие завершено. Текст в поле «Информация» скажет вам, какой была окончательная конфигурация.

[SBC] Если это SBC, вы можете узнать, что такое битпул. Для этого удалите Фильтр для btavdtp и найдите сообщение с протоколом SBC и нажмите на него. Ниже в разделе сведений разверните информацию о кодеке Bluetooth SBC. Затем разверните все (или все) данные фрейма. Там он должен четко показывать битпул, используемый этим кадром. Если это 35, есть большая вероятность, что ваша частота дискретизации составляет 44,1 кГц, вы используете Joint Stereo и используете аудио-профиль SBC среднего качества ( http://soundexpert.org/news/-/blogs/bluetooth-audio -качество-a2dp ). Скорость передачи для сжатого аудио составляет 229 кбит / с, что соответствует 4,68 в тестировании Sound Expert ( http://soundexpert.org/encoders-224-kbps ), что сравнимо с mp3 около 110-130 кбит / с.

[APT-X] Если это APT-X, то и ваш телефон, и приемник поддерживают APT-X, и именно это он и использует. Предполагая 16-битную частоту 44,1 кГц, кодек работает на скорости 352 кбит / с.

klaberte
источник
«в идеале - несжатый файл WAV или FLAC». Разве вы не хотите воспроизвести MP3, чтобы увидеть, отправляет ли он его как MP3 и т. д.?
эндолиты
2
Только если ваша цель - проверить, поддерживает ли A2DP mp3 с обеих сторон (правильный вопрос). Тем не менее, мой опыт показывает, что поддержка mp3 с обеих сторон редка (я никогда не видел ее ни на одном из своих устройств, и у меня их было немало). Так что, по крайней мере, на устройствах Android, вашими наиболее вероятными вариантами кодека A2DP являются SBC и APTX. Воспроизведение несжатого аудиофайла заставляет телефон перекодировать.
Klaberte
Я не написать ответ
эндолиты