Сохраняйте звук Bluetooth при инициализации AVAudioSession

Я собираюсь сойти с ума.

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

Я хочу, чтобы все оставалось по-прежнему, несмотря ни на что. Даже когда я начинаю запись, если пользователь слушает что-то через Bluetooth-динамик, продолжайте это делать. У пользователя есть наушники? Держите музыку там. Просто оставьте все как есть.

Вот как я сейчас инициализирую свою сессию:

[[AVAudioSession sharedInstance]
    setCategory:AVAudioSessionCategoryPlayAndRecord
    withOptions:AVAudioSessionCategoryOptionMixWithOthers | AudioSessionCategoryOptionAllowBluetooth
    error: nil];

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

Спасибо

ИЗМЕНИТЬ 30 мая

Мне удалось получить что-то лучше, но все еще чего-то не хватает.

Если я добавлю эту строку:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];

Музыка остается на устройстве Bluetooth, НО звучит ужасно.

Согласно этому ответу: https://stackoverflow.com/a/18541874/517688 это потому, что

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

Таким образом, нет никакого способа сохранить все то же самое, не искажая звук при использовании устройства Bluetooth??


person Jan    schedule 27.05.2014    source источник
comment
Может, следующий ответ поможет вам .. @Jan   -  person Ashish Kakkad    schedule 06.06.2014
comment
Если вы все еще на SO, можете ли вы проверить мой вопрос от 09.04.2018 и сказать мне, является ли это той же/похожей проблемой? Спасибо!!   -  person Nerdy Bunz    schedule 09.04.2018
comment
@BooberBunz нет, к сожалению, это не имеет ничего общего с тем, что вы испытываете...   -  person Jan    schedule 09.04.2018
comment
@BooberBunz, но я ответил на твой вопрос!   -  person Jan    schedule 09.04.2018


Ответы (2)


В iOS 10 Apple добавила опцию AVAudioSessionCategoryOptionAllowBluetoothA2DP. Они также изменили значение AudioSessionCategoryOptionAllowBluetooth, чтобы разрешить вывод только с использованием профиля Bluetooth HFP, где вы получаете аудиовыход низкого качества.

Если вы используете этот новый параметр вместо параметра AudioSessionCategoryOptionAllowBluetooth в своем фрагменте кода, он позволит выводить высококачественный звук, но запретит вывод звука низкого качества.

Вот онлайн-документация по параметрам, но, к сожалению, в Интернете нет описания новых параметров iOS 10. Вы можете увидеть более подробную информацию в документации по коду для AVAudioSession.h. https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions?language=objc

person Jay Whitsitt    schedule 04.10.2016
comment
Будет ли это работать для передачи звука через кабель молнии? то есть Mac через кабель к динамику iPhone в качестве входа - person Surz; 25.06.2017
comment
@Suraya, параметры категории, которые я упомянул, относятся только к Bluetooth. - person Jay Whitsitt; 26.06.2017
comment
@Сурая, извини, что нет. Я бы порекомендовал создать новую тему, так как она не имеет отношения к вопросу ОП. - person Jay Whitsitt; 29.06.2017
comment
Спасибо за комментарий по поводу документа в коде. Это очень помогает. - person Michal Cichon; 03.10.2018

К сожалению, я получил этот ответ непосредственно от службы технической поддержки Apple.

Не существует поддерживаемого способа достижения желаемой функциональности с учетом поставляемых в настоящее время конфигураций системы. Если вы хотите, чтобы Apple рассмотрела вопрос о добавлении поддержки таких функций в будущем, отправьте запрос на улучшение с помощью инструмента Bug Reporter по адресу http://bugreport.apple.com.

Ну это все...

person Jan    schedule 20.06.2014