如何解决iOS中的AVCaptureSession v AVAudioSession冲突?

我试图在视图控制器中运行一个AVCaptureSession,但在同一个,我也从一个库使用AVAudioSession调用一个函数。 我似乎无法从debugging器中获得更多的信息,除了当我调用这个特定的库函数时崩溃。 该库是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的代码从viewcontroller中取出,并将其放入didFinishLaunchingWithOptions中的应用程序委托中,则它将启动得很好,两个会话似乎并不会崩溃。

我是否缺less关于AVCaptureSession和混合的东西? 我如何去两个会议共存? 我没有使用AVCapture捕捉audio,只有相机input,所以我不应该能够以某种方式进行?

启动相机会话后,启动audio会话(可以设置为支持混合)。 我试过了,在开始audio会话之前,您需要等待摄像机的设置(例如,等待几秒钟)

有没有可能库假定没有其他audio会话处于活动状态并调用AudioSessionInitialize

根据文档 “您可以根据需要激活和停用audio会话(请参阅AudioSessionSetActive),但应只初始化一次。”

我想这个库的作者并没有包含正在进行的audio会话的function……但是,只要你的应用总是碰到那个函数调用与正在运行的audio会话(否则只是检查与if语句,看看你是否有一个audio会话,如果你不,初始化等)