这个问题纠结了我一天两夜..终于给解决了.解决方法如下:
现象:
通过IPHONE的摄像头进行音频与视频功能的录制,同时进行播放MP3功能.只要一开始录制音视频,就会出现摄像头图像卡死.只有当MP3播放完成后.才恢复正常.
分析
观察发现.并不是因为主线程阻塞造成的.因为在卡死的过程中..界面上的按钮还可以正常使用.仔细观察发现:
AVCaptureAudioDataOutput *videoOut = [[AVCaptureAudioDataOutput alloc] init];
if ([captureSession canAddOutput:audioOut])
[captureSession addOutput:audioOut];
由于已经在进行视频的录制和音频的录制(如上代码表示把音频输出口放入到会话通道中),然后又去播放MP3的话 就会占用它的音频录制的通道这样有可能整个录制就将停止(本人是这样理解的).
解决:
通过AVAudioSession共享实例中的参数进行设置,并在后台播放.
- (void)setupAudioSession {
//audioSession是否已经初始化
static BOOL audioSessionSetup = NO;
if (audioSessionSetup) {
return;
}
//AVAudioSessionCategoryPlayback类别的作用是确保屏幕锁定时,继续播放。
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 doSetProperty = 1;
//AVAudioSession参数的设置
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
//使设置的参数生效
[[AVAudioSession sharedInstance] setActive: YES error: nil];
audioSessionSetup = YES;
}
最后说明一点:在录制和播放的过程中..最好新开一个线程或者使用NSOperatonQueue进行播放..效果更佳转载于:https://blog.51cto.com/2119784/932969