iOS: использование аудиовыхода Bluetooth (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput) AudioSession

У меня есть несколько вопросов к платформе CoreAudio AudioSession, связанных с несколькими задачами Bluetooth, и я надеюсь, что кто-то может помочь мне с этими проблемами или, по крайней мере, подтвердить мои последние выводы. Usecase - это навигационное приложение, которое хочет подключиться к радио с поддержкой Bluetooth, которое поддерживает HFP и A2DP. Я полностью прочитал Руководство по программированию AudioSession, но у меня все еще есть некоторые открытые проблемы, особенно при использовании аудиовыхода через Bluetooth.

  1. Аудиовыход HFP Bluetooth (kAudioSessionOutputRoute_Bluetooth HFP) возможен только в случае AudioSession. KAudioSessionCategory_PlayAndRecord установлен, и вы переопределяете следующее свойство: kAudioSessionProperty_OverrideCategoryEnableBluetoothInput. Это правда? Если нет, то как я могу маршрутизировать в качестве примера с сеансом MediaPlayback к маршруту kAudioSessionOutputRoute_Bluetooth HFP.

  2. Вывод звука в фоновом режиме невозможен с категорией kAudioSessionCategory_PlayAndRecord. Поэтому я не могу воспроизвести звук по маршруту Bluetooth HFP, если я нахожусь в фоновом режиме. Это правда? Есть ли способ, как отправить аудио через протокол Bluetooth HFP, если приложение находится в фоновом режиме?

  3. Если доступно устройство с поддержкой A2DP, мой аудио маршрут всегда будет автоматически переключаться на маршрут kAudioSessionOutputRoute_BluetoothA2DP. Как я могу предотвратить изменение этого маршрута? Кроме того, как я могу указать выходной маршрут, который я хочу иметь в данный момент. С iOS5 можно запросить все эти назначения маршрута через флаг kAudioSessionProperty_AudioRouteDescription, но я не представляю, как его установить, так как я хочу его получить. Можно ли как-то этого добиться?

Я надеюсь, что некоторые из вас могут помочь мне с этими вопросами. Это действительно помогло бы мне в целом понять CoreAudio, особенно инфраструктуру AudioSession.

2 ответа

Решение

AudioSession - сложный бизнес.

1.Bluetooth HFP аудиовыход (kAudioSessionOutputRoute_BluetoothHFP) возможен только в случае AudioSession. KAudioSessionCategory_PlayAndRecord установлен, и вы переопределяете следующее свойство: kAudioSessionProperty_OverrideCategoryEnableBluetoothInput. Это правда? Если нет, то как я могу маршрутизировать в качестве примера с сеансом MediaPlayback к маршруту kAudioSessionOutputRoute_BluetoothHFP.

Если у вас подключена гарнитура Bluetooth, то это правда. Вам понадобится и набор аудио сеансов kAudioSessionCategory_PlayAndRecord и набор kAudioSessionProperty_OverrideCategoryEnableBluetoothInput для воспроизведения звука из гарнитуры Bluetooth. EnableBluetoothInput влияет на вход и выход в соответствии с этим. Также помните, что звук будет воспроизводиться с частотой 8000 Гц из-за ограничений устройств ввода Bluetooth. Для подключенного устройства, которое поддерживает A2DP, вы можете оставить его в аудио сеансе kAudioSessionCategoryMediaPlayback, и оно будет воспроизводиться с частотой дискретизации 44100 Гц.

2. Вывод звука в фоновом режиме невозможен с категорией kAudioSessionCategory_PlayAndRecord. Поэтому я не могу воспроизвести звук по маршруту Bluetooth HFP, если я нахожусь в фоновом режиме. Это правда? Есть ли способ, как отправить аудио через протокол Bluetooth HFP, если приложение находится в фоновом режиме?

Воспроизведение аудио через HFP через Bluetooth возможно в фоновом режиме, если вы установили клавишу режима фонового звука в списке приложений. Подробнее здесь.

3. Если доступно устройство с поддержкой A2DP, мой аудио маршрут всегда будет автоматически переключаться на маршрут kAudioSessionOutputRoute_BluetoothA2DP. Как я могу предотвратить изменение этого маршрута? Кроме того, как я могу указать выходной маршрут, который я хочу иметь в данный момент. С iOS5 можно запросить все эти назначения маршрута через флаг kAudioSessionProperty_AudioRouteDescription, но я не представляю, как его установить, так как я хочу его получить. Можно ли как-то этого добиться?

Где вы хотите аудио вместо этого? Вы можете попытаться установить аудиосеанс на PlayAndRecord, чтобы предотвратить переход на A2DP. Это может быть вне вашего контроля, хотя Audio Session будет использовать то, что он считает интуитивно понятным для пользователя. Если они только что подключили устройство A2DP и ​​вы только выводите звук, будет использоваться устройство A2DP.

Они упомянули, что это будет только для аксессуаров USB.

http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html

Другие вопросы по тегам