【发布时间】:2015-03-13 15:34:52
【问题描述】:
我正在我的应用中录制前台和后台的音频。我还处理 AVAudioSessionInterruptionNotification 以在中断开始时停止录制并在结束时重新开始。尽管在前台它按预期工作,但当应用程序在后台录制并且我接到电话时,它不会在通话结束后再次开始录制。我的代码如下:
- (void)p_handleAudioSessionInterruptionNotification:(NSNotification *)notification
{
NSUInteger interruptionType = [[[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
if (interruptionType == AVAudioSessionInterruptionTypeBegan) {
if (self.isRecording && !self.interruptedWhileRecording) {
[self.recorder stop];
self.interruptedWhileRecording = YES;
return;
}
}
if (interruptionType == AVAudioSessionInterruptionTypeEnded) {
if (self.interruptedWhileRecording) {
NSError *error = nil;
[[AVAudioSession sharedInstance] setActive:YES error:&error];
NSDictionary *settings = @{
AVEncoderAudioQualityKey: @(AVAudioQualityMax),
AVSampleRateKey: @8000,
AVFormatIDKey: @(kAudioFormatLinearPCM),
AVNumberOfChannelsKey: @1,
AVLinearPCMBitDepthKey: @16,
AVLinearPCMIsBigEndianKey: @NO,
AVLinearPCMIsFloatKey: @NO
};
_recorder = [[AVAudioRecorder alloc] initWithURL:fileURL settings:settings error:nil];
[self.recorder record];
self.interruptedWhileRecording = NO;
return;
}
}
}
请注意,fileURL 指向 NSDocumentDirectory 子目录中的新 caf 文件。背景模式音频已配置。我也试过 voip 和 play静默,都没有成功。
AVAudioSessionInterruptionTypeEnded 块中的 NSError 是 OSStatus 错误 560557684,我还没有找到解决方法。
任何帮助将不胜感激。
【问题讨论】:
标签: ios objective-c xcode avaudiorecorder avaudiosession