9

Я хотел бы записывать видео со звуком, используя AVCaptureSession. Для этого мне нужна AudioSessionCategory AVAudioSessionCategoryPlayAndRecord, так как мое приложение также воспроизводит видео со звуком.AVAudioSession AVAudioSessionCategoryPlayAndRecord glitch

Я хочу, чтобы звук звучал из динамика по умолчанию, и я хочу, чтобы он смешивался с другим аудио. Поэтому мне нужны варианты AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers.

Если я делаю следующее в то время как другие аудио воспроизведения есть четкий звуковой глюк в аудио из другого приложения:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

Есть ли способ, чтобы избавиться от этого глюка?

Похоже на то, что есть AVAudioSessionRouteChangeReasonRouteConfigurationChange, как указано в AVAudioSessionRouteChangeReasonCategoryChange, без микрофонного входа, на микрофонный вход.

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

Обратите внимание, что это поведение легко воспроизводится, загружая пример AVCamManual от Apple. Добавьте следующий к viewDidLoad из AAPLCameraViewController.m:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
… 
session.usesApplicationAudioSession = YES; 
session.automaticallyConfiguresApplicationAudioSession = NO; 

Некоторых других странных вещей, которые могут быть связаны:

Установите аудио категории в AVAudioSessionCategoryAmbient первую и активировать его:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:0 error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

, а затем изменение категории:

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

другой звук останавливается, несмотря на флаг опций. Ошибок не возникает.

+0

У меня все те же проблемы. Буквально. Любые новости об этом? – ancajic

+0

Для вашего последнего примера, когда звук перестает играть, несмотря на флаг опций. Аудио продолжает воспроизведение, если вы деактивируете сеанс аудио ('[[AVAudioSession sharedInstance] setActive: NO withOptions: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error: nil];') перед установкой категории '[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions: AVAudioSessionCategoryOptionMixWith Other | Ошибка AVAudioSessionCategoryOptionDefaultToSpeaker: nil]; '. И повторно активировать после ('[[AVAudioSession sharedInstance] setActive: YES error: nil];') – ancajic

+0

Также, имея те же проблемы, все время пытался использовать 'PlayAndRecord': http://stackoverflow.com/questions/35496563/avcapturesession-addinput вызывающего-глюк-в-фон аудио. Также пробовали работать, изменив категорию с «Ambient» при начале записи: http://stackoverflow.com/questions/35615707/avaudiosession-setcategory-not-working. Пожалуйста, дайте мне знать, если вы нашли решение для любого метода – Cbas

ответ

0

Как отметил @Cbas в комментариях, Apple Staff подтвердил наличие сбоев при переключении с выходных только на вход + маршруты вывода и что для этого не существует обходного пути, возможным обходным путем является полное исключение переключаясь с выхода только на маршруты ввода-вывода, всегда используйте категорию AVAudioSessionCategoryPlayAndRecord, даже если приложение не записывает. Кроме того, не устанавливайте категорию аудиосеанса еще раз, если она уже установлена ​​в AVAudioSessionCategoryPlayAndRecord или произойдет сбой.

Смежные вопросы