Проблемы с производительностью при использовании громкоговорителя Bluetooth в приложении Android NDK - PullRequest
0 голосов
/ 20 декабря 2018

В своем приложении для Android я использую Android NDK для воспроизведения музыки, выполняя следующие действия:

  • извлекает аудиосэмплы из файла OGG с помощью библиотеки Vorbis
  • обработать аудиосэмплы
  • перенаправить обработанные сэмплы на аудиовыход с помощью библиотеки Гобой

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

Но по какой-то причине, когда я соединяю свое устройство с динамиком Bluetooth и когда я играю музыку, у меня есть то, что на некоторых устройствах кажется недостаточным.как Samsung S7 или Nokia 1 (но не на каждом устройстве).

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

Кто-нибудь испытывал нечто подобное?Должен ли я что-то сделать в своем коде для обработки соединения Bluetooth, чтобы он не использовал процессор (например, чтобы избежать повторной дискретизации звука)?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 21 декабря 2018

Android + Bluetooth аудио это мир боли.Главное, что следует отметить в Bluetooth, это то, что приемник звука работает с частотой, не зависящей от других аудиоустройств, поэтому родной медиаплеер будет выполнять такие вещи, как отображение видео, в соответствии с любой частотой, с которой подключенное аудиоустройство потребляет сэмплы, по существу подчиняясь себе.часы аудиоустройства BT.Если вы хотите управлять скоростью с Android (т. Е. С помощью временной шкалы SystemClock), вам нужно использовать AudioTrack, растягивающий время.(Это может быть сделано, но поддержка драйверов нестабильна и общая стабильность системы).

Во-первых, вы хотите устранить проблемы с самими устройствами.Можете ли вы без проблем воспроизводить файлы ogg в медиаплеере на динамике Bluetooth от S7 или Nokia 1?Если это так, то это ваш код!

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

Наконец, аудио Bluetooth, по крайней мере A2DP, в отличие от прямогоПотоковое воспроизведение MP3 потребует некоторой обработки для повторного сжатия аудио во время его отправки, но для этих устройств должно быть достаточно места для этого, возможно, даже специальные DSP.Я делал это одновременно с воспроизведением видео 1080P, и он начинает разваливаться сразу с двумя видео!

...