来电后恢复录音?
Posted
技术标签:
【中文标题】来电后恢复录音?【英文标题】:Resume audio recording after incoming call? 【发布时间】:2013-10-24 07:09:18 【问题描述】:我们正在使用 AVAudioRecorder 录制音频,但是当我们收到任何来电时,录制会停止。如果我们再次尝试恢复录制,那么它将从头开始。我检查了语音备忘录(ios Apple 应用程序)并发现了同样的问题。我还检查了音频队列服务示例代码(SpeakHere)但同样的问题也存在。 那么请帮忙在来电后如何恢复录音?
注意:- 我知道有很多与录音有关的问题但无法找到解决方案。所以请帮助,非常感谢您的帮助。提前致谢。
【问题讨论】:
请向我们提供任何小提示或非常有用的链接。 你能得到这篇文章的解决方案吗? 【参考方案1】:在 iOS 中可以在来电后恢复录音。这背后的基本概念是使用 AVAudioSession 和 AudioQueue ,当您收到来电时在您的设备上,它会发出 kAudioSessionBeginInterruption 并在断开呼叫时收到 kAudioSessionEndInterruption......在收到来电时,只需暂停音频队列,然后[[AVAudioSession sharedInstance]setActive:NO error:nil]; ......然后在 kAudioSessionEndInterruption 上,当通话结束时,只需恢复暂停的队列和 [[AVAudioSession sharedInstance]setActive:YES error:nil];
这样就可以了……我已经成功运行程序,接到来电后可以继续录音……
希望对你有所帮助.......
【讨论】:
问题是,如果您拒绝来自 iphone 的呼叫,则它会重置为 0。当您停止来自呼叫方的呼叫时很好。【参考方案2】:Apple 将AVAudioSessionInterruption
观察者解释为一种处理中断的新方法。 Apple 在 this 页面用 Swift 解释它,但对于搜索 Objective-c 代码的人来说,这个 github issue 一定很有用。
您需要处理音频中断,例如
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
您需要编写处理代码,然后才能开始和结束中断。
【讨论】:
【参考方案3】:使用 AVFoundation 委托方法,
-(void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
[audiorecorder pause];
-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder
[audiorecorder record];
【讨论】:
它不工作,它将开始另一个录音。以上是关于来电后恢复录音?的主要内容,如果未能解决你的问题,请参考以下文章