如何解决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会话,如果你不,初始化等)
- 接收没有audio的遥控事件
- 在UILocalNotification声音比AVAudioPlayer在最大音量
- 与AVAudioSessionCategoryPlayAndRecord组合在一起的低录音量
- AVAudioRecorder / AVAudioSession与苹果Airpods
- AVAudioSessionManager availableInputs“端口iPhone麦克风的未知选定数据源”
- 在iOS7和更高版本的接收器和扬声器之间切换audio输出?
- iOS AudioUnits通过
- AVPlayer不会在iPhone上的结束中断时继续播放,但在iPad上也是如此
- audio会话中断结束后,AVAudioRecorder不能在后台录音