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

时间:2012-05-06 17:25:14

标签: ios avcapturesession avaudiosession

我正在尝试在视图控制器中运行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也不起作用。但是,如果我从我的viewcontroller中取出调用libpd的代码,并将其放在didFinishLaunchingWithOptions中的app委托中,那么它就会很好地启动,并且两个会话似乎共存而不会崩溃。

我是否错过了有关AVCaptureSession和混音的内容?我如何兼顾两个会话?我没有使用AVCapture来捕获音频,只使用摄像头输入,所以我不应该以某种方式同时进行这两种操作吗?

2 个答案:

答案 0 :(得分:4)

启动摄像头会话后,启动音频会话(可以设置为支持混音)。我尝试过,你需要等待相机在开始音频会话之前进行设置(例如等待几秒钟)

答案 1 :(得分:0)

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

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

我猜这个库的作者没有包含正在进行的音频会话的功能......但是只要您的应用总是点击就可以轻松地在那里潜水并注释掉初始化行该函数调用正在运行的音频会话(否则只需检查一个if语句,看看你是否有音频会话,如果你没有,初始化一个,等等。)