从后台返回后的AVCapturesession处理

我正在使用AVCaptureSession实现VideoRecorder。 我开始AVCaptureSession在viewWillAppear并撕毁在viewWillDisappear这个问题的build议AVCaptureSession从后台返回时失败 。 现在当video是录音和应用程序去背景我想停止录制和暂停捕捉会议。 但是,每次应用程序在这一点上前景,我会得到以下一个

  1. 捕获会话没有暂停,但录制和预览层不断更新
  2. 捕获会话提供黑屏的预览层在这一点上的应用程序可能会或可能不会崩溃。

在这一点上处理AVCaptureSession的任何build议。 我想只显示logging在previewLayer上的最后一帧,一旦录制停止。

我遇到过类似的情况,根据我的经验,我发现viewWillDisappear:不会被调用。 我真的不知道为什么,但我通过订阅应用程序不活动时的通知来解决这个问题。 这是一个例子:

有鉴于此,

// Detect this for ending recording [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appInactive:) name:UIApplicationWillResignActiveNotification object:[UIApplication sharedApplication]]; 

和适当的callback方法:

 - (void)appInactive:(NSNotification *)notification { NSLog(@"App going inactive, stopping recording..."); taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler: ^{ [[UIApplication sharedApplication] endBackgroundTask:taskId]; taskId = UIBackgroundTaskInvalid; }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ question.prepTimeRemaining = [prepEndTime timeIntervalSinceNow]; // Stop camera stuff if (recording) [self stopRecording]; // Method to handle shutting down the session, any other cleanup, etc. // End task [[UIApplication sharedApplication] endBackgroundTask:taskId]; taskId = UIBackgroundTaskInvalid; }); } 

在viewWillDisappear:

 [[NSNotificationCenter defaultCenter] removeObserver:self]; 

当我检测到这个时,我马上转到下一个视图,所以我不确定它在预览图层上留下了什么,但我怀疑它会做你想做的。 希望这可以帮助!

这是晚了,但我正在经历一些相同的。 为了解决这个问题,你首先必须意识到,ViewWillAppear和ViewWillDisappear严格适用于从一个View Controller到另一个View Controller的应用程序转换。 它们不适用于前景到背景,并且不能再转换。 我上面使用了类似的修复:

 //application became active [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnteredForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; //application went into background [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecameActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; 

在select器的方法只是停止和开始你的相机会话,并作为其他stackoverflow后build议,这是一个好主意,懒惰实例化您的avcapturesession,以便您的应用程序是记忆保守