相机在通话时打开应用程序时冻结

时间:2016-03-07 08:54:59

标签: ios objective-c avcapturesession avaudiosession

我使用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正在做同样的,我可以在通话时录制视频。

请帮助我,我怎样才能实现这一目标。 enter image description here enter image description here

1 个答案:

答案 0 :(得分:4)

您需要使用AVCaptureSessionWasInterruptedNotificationAVCaptureSessionInterruptionEndedNotification回调并在会话中断时断开音频捕获:

[[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)