2015-04-28 1 views
1

Чтобы начать звонок, наше приложение 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?

ответ

1

Это ожидаемое поведение в документации developer, должно быть возвращено nil, если невозможно переключить источники. Таким образом, Apple действительно не позволяет ничего плохого произойти с помощью mis-config, но источник-источник также может дать неправильную идею. Надеюсь это поможет.

Discussion 
The value of this property is nil if switching between multiple input 
sources is not currently possible. This feature is supported only on 
certain devices and peripherals–for example, on an iPhone equipped with 
both front- and rear-facing microphones. 
+0

Спасибо, это несколько возникает вопрос, хотя ... только вызов начинается, я могу изменить маршрут от приемника к спикеру с AVAudioSessionCategoryOptionDefaultToSpeaker. Но это имеет побочный эффект от переключения микрофона с микрофона «Нижний» на микрофон «Фронт». Если во время разговора я не могу добраться до других микрофонов (например, через inputDataSource и т. Д.), То кажется, что я не могу воспользоваться преимуществами функций (например, кардиоидного направленного микрофона). –

+0

Вы поднимаете хороший момент. Поскольку эти API-интерфейсы находятся в разработке (в соответствии с заголовками doc), я бы установил радар (https://developer.apple.com/bug-reporting/) со всеми подробностями, фрагментами кода и условиями для воспроизведения «не принимая» преимущество "hw. –

+1

Дополнительные эксперименты показывают, что у меня нет этой проблемы при использовании RemoteIO Audio Unit, только при использовании модуля ввода-вывода для голосовой обработки. Мой опыт показывает, что, когда VPIO используется, Apple блокирует/исправляет некоторые функции на пути обработки аудио, что, вероятно, обеспечит работу эхоподавления и других расширенных функций. –