Чтобы начать звонок, наше приложение VOIP настраивает AVAudioSession, затем строит, инициализирует и запускает AUGraph.Свойства AVAudioSession после инициализации AUGraph
Во время разговора мы позволяем пользователю переключаться между режимом громкой связи с использованием кода, таких как:
avSession = [AVAudioSession sharedInstance];
AVAudioSessionCategoryOptions categoryOptions = [avSession categoryOptions];
categoryOptions |= AVAudioSessionCategoryOptionDefaultToSpeaker;
NSLog(@"AudioService:setSpeaker:setProperty:DefaultToSpeaker=1 categoryOptions = %lx", (unsigned long)categoryOptions);
BOOL success = [avSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:categoryOptions error:&error];
, который работает просто отлично. Но если мы попытаемся на некоторые запросы AVAudioSession после AUGraph инициализирован, например:
AVAudioSessionDataSourceDescription *myInputDataSource = [avSession inputDataSource];
результат нулевой. Выполнение одной и той же строки кода перед выполнением AUGraphInitialize дает правильный ненулевой результат. Может ли кто-нибудь объяснить, что здесь происходит и как правильно получить доступ к свойствам/методам AVAudioSession при использовании AUGraph?
Спасибо, это несколько возникает вопрос, хотя ... только вызов начинается, я могу изменить маршрут от приемника к спикеру с AVAudioSessionCategoryOptionDefaultToSpeaker. Но это имеет побочный эффект от переключения микрофона с микрофона «Нижний» на микрофон «Фронт». Если во время разговора я не могу добраться до других микрофонов (например, через inputDataSource и т. Д.), То кажется, что я не могу воспользоваться преимуществами функций (например, кардиоидного направленного микрофона). –
Вы поднимаете хороший момент. Поскольку эти API-интерфейсы находятся в разработке (в соответствии с заголовками doc), я бы установил радар (https://developer.apple.com/bug-reporting/) со всеми подробностями, фрагментами кода и условиями для воспроизведения «не принимая» преимущество "hw. –
Дополнительные эксперименты показывают, что у меня нет этой проблемы при использовании RemoteIO Audio Unit, только при использовании модуля ввода-вывода для голосовой обработки. Мой опыт показывает, что, когда VPIO используется, Apple блокирует/исправляет некоторые функции на пути обработки аудио, что, вероятно, обеспечит работу эхоподавления и других расширенных функций. –