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

使用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也是这样做的 ,而且我可以在我打电话时录制视频。

请帮助我,我该如何做到这一点。 在这里输入图像描述在这里输入图像描述


您需要使用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似乎不可能:电话通话结束时回拨? (恢复AVCaptureSession)

链接地址: http://www.djcxy.com/p/32787.html

上一篇: Camera Freeze when open app while call is running

下一篇: what is the proper way to create a swagger web service in TypeScript