Я поторопил массу времени, поэтому я подумал, что буду репонировать.AVCaptureSession didFinishRecordingToOutputFileAtURL: не вызывается, когда происходит прерывание (например, центр управления)
Я использую AVCaptureSession с AVCaptureMovieFileOutput, чтобы пользователи могли записывать видео, предоставляя кнопку записи паузы.
Это прекрасно работает до тех пор, пока приложение не будет вставлено на задний план, центр управления не будет поднят или не произойдет перерыв, например, будильник/звонок. В зависимости от аппаратного обеспечения устройства мы видим различную ошибку.
- На старых устройствах сеанс захвата не сможет начать запись после такого события, даже если мы повторно инициализируем captureSession.
- На новых устройствах существующее видео, если оно существует, будет прекрасным, но любые последующие попытки возобновить запись либо прекратятся, либо не будут записывать звук.
В первой ситуации didStartRecordingToOutputFileAtURL: никогда не будет вызван. Во второй ситуации будет вызываться didStartRecordingToOutputFileAtURL: но didFinishRecordingToOutputFileAtURL: не будет.
В настоящее время мы делаем это:
- (void)viewDidLoad {
[self initializeCaptureSessionAndOutputData]; //based on your requirements
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.captureSession startRunning];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(interruptionDidOccur)
name:UIApplicationWillResignActiveNotification
object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.captureSession stopRunning];
[[NSNotificationCenter] defaultCenter] removeObserver:self];
}
- (void)interruptionDidOccur {
[self.movieFileOutput stopRecording]; //expect didFinishRecordingToOutputFileAtURL to be called
}