Как определить, какие кодеки A2DP поддерживает/использует мой телефон в настоящее время?

Аудиопрофиль Bluetooth A2DP поддерживает несколько кодеков. Все устройства должны поддерживать SBC (кодек поддиапазона), затем они могут поддерживать дополнительные «дополнительные кодеки», такие как MP3 и AAC, или кодеки «не-A2DP», такие как apt-X.

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

  1. Как узнать, какие кодеки поддерживает мое оборудование/ПЗУ?
  2. Как узнать, какой кодек используется в данный момент? (Может быть, это зависит и от трека, например, если он передает файлы MP3/AAC напрямую без перекодирования)
В этой статье говорится: «Пользователям Android повезло, поскольку современные телефоны Android поддерживают AptX. В отличие от Windows, здесь даже можно проверить, использует ли соединение AptX!» Но без объяснения как.

Ответы (4)

На моем телефоне Cyanogen 10.1 (AOSP 4.2.2) есть возможность включить захват bluetooth-трафика. Затем вы можете загрузить этот захват в Wireshark и просмотреть этап согласования, чтобы определить, какие кодеки поддерживает сопряженное устройство вывода звука. Не уверен, какие операционные системы поддерживают это: когда я впервые столкнулся с этим методом, он утверждал, что поддерживает только начиная с 4.4, но явно не в случае с CM на Doubleshot. :-)

Предполагая, что у вас есть необходимые настройки (рут ~ 4.2.2 или новее), выполните следующие действия:

  1. подключите свой телефон к интересующему устройству A2DP
  2. отключить блютуз на телефоне
  3. отредактируйте этот файл: /etc/bluetooth/bt_stack.conf, изменив для параметра BtSnoopLogOutput значение по умолчанию false на true. Для этого я использую ES Note Editor, запускаемый из ES File Explorer после включения его настройки «Root Browser».
  4. запустить CatLog со всеми включенными типами ведения журнала
  5. включить блютуз на телефоне
  6. после того, как он соединится с устройством вывода, воспроизведите фрагмент аудио на выбранном вами проигрывателе (я использую Apollo). Десяти секунд или около того должно хватить.
  7. снова отключить блютуз
  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, чтобы искать наводящие на размышления записи в журнале. Я нашел пару и забыл включить их в заметки, на которых основан этот пост.

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

Спасибо. Это сработало отлично. В журналах CatLog я не нашел ничего, относящегося к возможностям. Во всяком случае, попробовал это на Moto G (2013) с CM 4.4.2 и гарнитурой LG HBS-730. В логах нет apt-X, потому что у CM нет для этого проприетарных библиотек.
Спасибо, @Martynas, приятно знать. Включена ли поддержка mp3? Мне интересно, что может быть хорошей целью для проверки того, что мой телефон поддерживает mp3. Автомобильного радио, к сожалению, нет, и я не нашел ни одного (!) продукта, документально подтверждающего поддержку кодека A2DP. Что касается CatLog, я не думал, что там будет фактический список кодеков, а несколько наводящих на размышления сообщений, которые можно использовать для поиска исходного кода. Еще один день..
Таким образом, в ответ на запрос Discoverвозвращено три звуковых приемника. Ответ GetCapabilitiesдля ACP SEID [2 - Audio Sink]включенного Service: Media Codec - Audio MPEG-1,2 Audio, который имел MP3: True. Я загрузил захваченный файл журнала на github .
Еще раз спасибо @Martynas. Несмотря на то, что 730 имеет лучшие отзывы, я взял LG HBS-750 для тестирования. Тот же набор кодеков, что и у 730. Разветвили ваше репо и добавили сюда еще один захват . К сожалению, в обоих наших снимках телефон использует SBC вместо mp3. Не уверен, какой тип медиафайла вы использовали, но в моем тесте CM 4.2.2 использовались mp3-файлы VBR со скоростью 128 кбит / с (намеренно малый битрейт, чтобы не нагружать пропускную способность BT). Начинаю думать, что ce4 может быть прав в вопросе лицензирования .
Изменение `/etc/bluetooth/bt_stack.conf`, похоже, не сработало, но у меня были точно такие же настройки в настройках разработчика, и это сработало. Благодаря вашему ответу мне удалось узнать, что Parrot Zik 2 большую часть времени использует SBC.

Глядя на источник, есть как минимум 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).

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

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

Я на CM 12.1 и это зелье мне тоже доступно. Пожалуй, это есть на всех последних телефонах. Спасибо.

Во многих случаях вам не нужно проходить этот процесс, так как valdikss теперь отслеживает многие результаты на своем веб-сайте.

https://btcodecs.valdikss.org.ru/codec-compatibility/ https://btcodecs.valdikss.org.ru/

Если у вас возникли проблемы с поиском файла btsnoop_hci.log, попробуйте решение, опубликованное здесь:

https://stackoverflow.com/questions/28445552/bluetooth-hci-snoop-log-not-generated/30352487#30352487

Как только вы найдете свой файл btsnoop_hci.log, начните с шага 7 предыдущего ответа ниже.

Предыдущий ответ: [За этот ответ в основном отвечает ewedel, который пояснил, что ответ находится в файле 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

  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 кбит/с 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 и т. Д.?
Только если ваша цель — узнать, поддерживает ли A2DP mp3 с обеих сторон (правильный вопрос). Однако, по моему опыту, поддержка мп3 с обеих сторон встречается редко (я ни разу не видел ее ни на одном из своих устройств, а их у меня было немало). Итак, по крайней мере, с устройствами Android наиболее вероятными вариантами кодека A2DP являются SBC и APTX. Воспроизведение несжатого аудиофайла заставляет телефон повторно кодировать.