我使用AVCaptureSession 创建了相机。我为照片和视频录制模式配置了。
相机和应用程序运行正常。此外,我允许背景音乐播放 (如果用户在iPhone中使用音乐应用播放歌曲) ,同时打开相机或录制视频。它也工作正常。 (附图2)
我在此代码的帮助下允许背景音乐播放
AVAudioSession *session1 = [AVAudioSession sharedInstance];
[session1 setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers|AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth error:nil];
[session1 setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
现在,如果我接到一个电话,请点按“主页”按钮并打开应用并尽量打开相机屏幕以捕获图像/录制视频,从而最小化通话屏幕,它会打开,但会冻结图像(附图(1))。
现在我的要求是,我想在通话时捕捉图像/录制视频。我找了另外一个应用程序, Snapchat正在做同样的,我可以在通话时录制视频。
请帮助我,我怎样才能实现这一目标。答案 0 :(得分:4)
您需要使用AVCaptureSessionWasInterruptedNotification
和AVCaptureSessionInterruptionEndedNotification
回调并在会话中断时断开音频捕获:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sessionWasInterrupted:) name:AVCaptureSessionWasInterruptedNotification object:self.session];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sessionInterruptionEnded:) name:AVCaptureSessionInterruptionEndedNotification object:self.session];
// note that self.session is an AVCaptureSession
-
- (void)sessionWasInterrupted:(NSNotification *)notification {
NSLog(@"session was interrupted");
AVCaptureDevice *device = [[self audioInput] device];
if ([device hasMediaType:AVMediaTypeAudio]) {
[[self session] removeInput:[self audioInput]];
[self setAudioInput:nil];
}
}
- (void)sessionInterruptionEnded:(NSNotification *)notification {
NSLog(@"session interuption ended");
}
// note that [self audioInput] is a getter for an AVCaptureDeviceInput
这将允许相机继续运行并允许它捕捉静止/静音视频
现在关于如何在通话结束后重新连接音频..让我知道你是否弄明白,从iOS 10开始似乎不可能:Callback when phone call ends? (to resume AVCaptureSession)