Как разрешить конфликт AVCaptureSession и AVAudioSession в iOS?

Я пытаюсь запустить AVCaptureSession в контроллере представления, но внутри него я также вызываю функцию из библиотеки, которая использует AVAudioSession. Кажется, я не могу получить много информации от отладчика, кроме того, что он падает именно тогда, когда я вызываю функцию этой конкретной библиотеки. Библиотека libpd:

https://github.com/libpd

и он вызывает AVAudioSession как sharedInstance. Я вызываю libpd как:

[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:YES]

поэтому микширование включено, но на всякий случай я перекомпилировал его так, что при запуске я делаю:

    UInt32 doSetProperty = 1;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,  sizeof(doSetProperty), &doSetProperty);

но, не повезло. Перемещение вызовов libpd в viewWillAppear внутри контроллера представления также не сработало. Однако, если я возьму код, вызывающий libpd, из моего контроллера представления и поместлю его в делегат приложения в didFinishLaunchingWithOptions, он запустится нормально, и два сеанса, кажется, сосуществуют без сбоев.

Я что-то упустил в AVCaptureSession и микшировании? Как сделать, чтобы оба сеанса сосуществовали? Я не использую AVCapture для захвата звука, только вход с камеры, так что не должен ли я как-то иметь оба варианта?


person pland    schedule 06.05.2012    source источник


Ответы (2)


Запустите аудиосеанс (который можно настроить для поддержки микширования) после того, как вы запустили сеанс камеры. Я пытался, и вам нужно дождаться настройки камеры, прежде чем начать аудиосессию (например, подождать пару секунд)

person mored    schedule 11.05.2012
comment
Мне не удалось заставить это работать, хотя я могу переключаться туда и обратно, активно переключая мой AVAudioSession с AVAudioSessionCategoryPlayAndRecord на AVAudioSessionCategoryAmbient и устанавливая его активным перед вызовом startRunning в моем AVCaptureSession и вызывая stopRunning в сеансе захвата перед переключением аудиосеанса. вернуться к воспроизведению и записи ... Ах, но, может быть, мне следует дождаться публикации AVCaptureSessionDidStartRunningNotification, прежде чем пытаться микшировать AVAudioSession? - person qix; 25.05.2013

Возможно ли, что библиотека предполагает, что нет других активных аудиосессий, и вызывает AudioSessionInitialize?

Согласно документам, "вы можете активируйте и деактивируйте ваш аудио сеанс по мере необходимости (см. AudioSessionSetActive), но инициализируйте его только один раз».

Я предполагаю, что авторы этой библиотеки не включили функциональность для текущего аудио сеанса... но было бы достаточно легко погрузиться туда и прокомментировать строки инициализации, если ваше приложение всегда выполняет вызов этой функции. с запущенным аудиосеансом (в противном случае просто проверьте с помощью оператора if, есть ли у вас аудиосеанс, если нет, инициализируйте его и т. д.)

person buildsucceeded    schedule 11.05.2012