3

我正在尝试在视图控制器中运行 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 来捕获音频,只有相机输入,所以我不应该能够以某种方式同时进行吗?

4

2 回答 2

4

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

于 2012-05-11T22:32:20.200 回答
0

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

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

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

于 2012-05-11T18:42:04.217 回答