Я хотел бы записывать видео со звуком, используя 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];
другой звук останавливается, несмотря на флаг опций. Ошибок не возникает.
У меня все те же проблемы. Буквально. Любые новости об этом? – ancajic
Для вашего последнего примера, когда звук перестает играть, несмотря на флаг опций. Аудио продолжает воспроизведение, если вы деактивируете сеанс аудио ('[[AVAudioSession sharedInstance] setActive: NO withOptions: AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error: nil];') перед установкой категории '[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions: AVAudioSessionCategoryOptionMixWith Other | Ошибка AVAudioSessionCategoryOptionDefaultToSpeaker: nil]; '. И повторно активировать после ('[[AVAudioSession sharedInstance] setActive: YES error: nil];') – ancajic
Также, имея те же проблемы, все время пытался использовать 'PlayAndRecord': http://stackoverflow.com/questions/35496563/avcapturesession-addinput вызывающего-глюк-в-фон аудио. Также пробовали работать, изменив категорию с «Ambient» при начале записи: http://stackoverflow.com/questions/35615707/avaudiosession-setcategory-not-working. Пожалуйста, дайте мне знать, если вы нашли решение для любого метода – Cbas