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

如何解决iOS中的AVCaptureSession v AVAudioSession冲突?,ios,avcapturesession,avaudiosession,Ios,Avcapturesession,Avaudiosession,我试图在视图控制器中运行AVCaptureSession,但在同一个控制器中,我还从使用AVAudioSession的库中调用了一个函数。我似乎无法从调试器中获得太多信息,只是在调用这个特定库的函数时调试器崩溃了。图书馆名为libpd: 它将音频会话称为sharedInstance。我将libpd称为: [self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mi

我试图在视图控制器中运行AVCaptureSession,但在同一个控制器中,我还从使用AVAudioSession的库中调用了一个函数。我似乎无法从调试器中获得太多信息,只是在调用这个特定库的函数时调试器崩溃了。图书馆名为libpd:

它将音频会话称为sharedInstance。我将libpd称为:

[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:YES]
所以混合是启用的,但为了以防万一,我重新编译了它,这样当它初始化时,我会:

    UInt32 doSetProperty = 1;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,  sizeof(doSetProperty), &doSetProperty);
但是,没有运气。将对libpd的调用移动到视图将出现在视图控制器中也不起作用。但是,如果我将调用libpd的代码从viewcontroller中取出,并将其放入didFinishLaunchingWithOptions中的应用程序委托中,那么它就可以正常启动,并且这两个会话似乎共存而不会崩溃


我是否遗漏了一些关于AVCaptureSession和混音的内容?我如何同时进行这两个课程?我没有使用AVCapture来捕获音频,只使用摄像头输入,所以我不应该以某种方式同时进行这两种操作吗?

库是否可能假定没有其他音频会话处于活动状态,并调用
AudioSessionInitialize

Per“您可以根据需要激活和停用音频会话(请参阅AudioSessionSetActive),但只能初始化一次。”


我猜这个库的作者没有为正在进行的音频会话提供功能。。。但是,只要你的应用程序总是在运行音频会话时点击该函数调用(否则只需使用
if
语句检查你是否有音频会话,如果没有,初始化一个,等等),就可以很容易地跳入其中并注释掉初始化行。

启动音频会话(可设置为支持混音)在您启动摄像头会话后。我尝试过,您需要等待摄像头设置完成后再启动音频会话(例如,等待几秒钟)

我一直无法实现这一点,尽管我可以通过将我的AVAudioSession从AvaudioSessionCategoryPlay和Record主动切换到AvaudioSessionCategoryByent,并在调用AVCaptureSession上的startRunning和在切换音频sess之前调用CaptureSession上的stopRunning来来回切换ion返回播放和录制…啊,但在尝试混合AVAudioSession之前,也许我应该等待AVCaptureSessionIDStartRunningNotification发布?