我们正在使用 AVAudioRecorder 录制音频,但是当我们收到任何来电时,录音就会停止。如果我们再次尝试恢复录制,那么它将从头开始。我检查了语音备忘录(iOS Apple 应用程序)并发现了同样的问题。我还检查了音频队列服务示例代码(SpeakHere)但同样的问题也存在。那么请帮助如何在来电后恢复录音?
注意:- 我知道有很多与录音有关的问题,但无法找到解决方案。所以请帮助,非常感谢您的帮助。提前致谢。
我们正在使用 AVAudioRecorder 录制音频,但是当我们收到任何来电时,录音就会停止。如果我们再次尝试恢复录制,那么它将从头开始。我检查了语音备忘录(iOS Apple 应用程序)并发现了同样的问题。我还检查了音频队列服务示例代码(SpeakHere)但同样的问题也存在。那么请帮助如何在来电后恢复录音?
注意:- 我知道有很多与录音有关的问题,但无法找到解决方案。所以请帮助,非常感谢您的帮助。提前致谢。
在 iOS 中可以在来电后恢复录音。这背后的基本概念是使用AVAudioSession和AudioQueue,当您在设备上收到来电时,它会给出一个kAudioSessionBeginInterruption 并且在断开呼叫时您会得到一个kAudioSessionEndInterruption ......收到来电时,只需暂停音频队列,然后 [[AVAudioSession sharedInstance]setActive:NO error:nil]; ......然后在kAudioSessionEndInterruption上,当通话结束时,只需恢复暂停的队列和[[AVAudioSession sharedInstance]setActive:YES error:nil];
这样就可以了……我已经成功运行程序,接到来电后可以继续录音……
希望对你有帮助.......
苹果AVAudioSessionInterruption
将观察者解释为一种处理中断的新方法。Apple 在此页面上用 Swift 解释了它,但对于搜索 Objective-c 代码的人来说,这个github 问题一定很有用。
您需要处理音频中断,例如
AVAudioSession *session = [AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(audioSessionInterruptionNotification:)
name:AVAudioSessionInterruptionNotification
object:session];
您的音频会话中断通知 AVAudioSessionInterruptionNotification 类似于
-(void)audioSessionInterruptionNotification:(NSNotification*)notification {
NSString* seccReason = @"";
//Check the type of notification, especially if you are sending multiple AVAudioSession events here
NSLog(@"Interruption notification name %@", notification.name);
if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) {
seccReason = @"Interruption notification received";
//Check to see if it was a Begin interruption
if ([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeBegan]]) {
seccReason = @"Interruption began";
} else if([[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] isEqualToNumber:[NSNumber numberWithInt:AVAudioSessionInterruptionTypeEnded]]){
seccReason = @"Interruption ended!";
//Resume your audio
}
}
}
您需要编写处理代码,然后中断开始和结束。
使用 AVFoundation 委托方法,
-(void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
[audiorecorder pause];
}
-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder
{
[audiorecorder record];
}