在錄製音頻與視頻時,並進行音頻播放時,攝像頭卡死的解決辦法
這個問題糾結了我一天兩夜..終於給解決了.解決方法如下:
現象:
通過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進行播放..效果更佳
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.