Аудиопрофиль Bluetooth A2DP поддерживает несколько кодеков. Все устройства должны поддерживать SBC (кодек поддиапазона), затем они могут поддерживать дополнительные «дополнительные кодеки», такие как MP3 и AAC, или кодеки «не-A2DP», такие как apt-X.
Конечно, эти кодеки нельзя использовать, если ресивер их не поддерживает, и в этом случае оба устройства возвращаются к SBC.
На моем телефоне Cyanogen 10.1 (AOSP 4.2.2) есть возможность включить захват bluetooth-трафика. Затем вы можете загрузить этот захват в Wireshark и просмотреть этап согласования, чтобы определить, какие кодеки поддерживает сопряженное устройство вывода звука. Не уверен, какие операционные системы поддерживают это: когда я впервые столкнулся с этим методом, он утверждал, что поддерживает только начиная с 4.4, но явно не в случае с CM на Doubleshot. :-)
Предполагая, что у вас есть необходимые настройки (рут ~ 4.2.2 или новее), выполните следующие действия:
Вы также можете выровнять временные метки захвата с временными метками журнала CatLog, чтобы искать наводящие на размышления записи в журнале. Я нашел пару и забыл включить их в заметки, на которых основан этот пост.
Когда у меня будет больше времени, я надеюсь сократить этот довольно длинный набор шагов до приложения, но не уверен, что это возможно, и в любом случае у меня пока не будет времени. Между тем, предложения по улучшению вышеуказанного процесса приветствуются.
Discover
возвращено три звуковых приемника. Ответ GetCapabilities
для ACP SEID [2 - Audio Sink]
включенного Service: Media Codec - Audio MPEG-1,2 Audio
, который имел MP3: True
. Я загрузил захваченный файл журнала на github .Глядя на источник, есть как минимум 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).
На устройствах Nexus 4 (5.0.1) или Nexus 7 (2012) (4.4.4) можно использовать режим разработчика для получения файла btsnoop_hci.log. «Включить журнал отслеживания Bluetooth HCI». Нет необходимости рутировать устройства. Кажется, что оба устройства не предлагают aptx. Я тестировал это с Moto Stream (без aptx) и Philips AEA2500 (с aptx).
Во многих случаях вам не нужно проходить этот процесс, так как 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.
Начните с отключения Bluetooth на устройстве Android (я назову его «телефон»).
Включите журнал отслеживания Bluetooth HCI в разделе «Параметры разработчика».
Включите Bluetooth на телефоне и подключите его к приемнику Bluetooth (я назову его «приемник»). Этот шаг предполагает, что приемник ранее был сопряжен с телефоном.
Воспроизведите музыку на своем телефоне (в идеале несжатый файл WAV или FLAC). Десять секунд — это все, что вам нужно. (Наверное, даже меньше)
Выключите Bluetooth на телефоне.
Отключите журнал отслеживания Bluetooth HCI
Перенесите файл btsnoop_hci.log (я нашел его в /sdcard/Android/Data/) на свой компьютер. Запустите wireshark на своем компьютере и откройте файл btsnoop_hci.log.
Фильтр по "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 кбит/с.
эндолит