Я разрабатываю приложение камеры, используя AVCaptureMovieFileOutput.
Я записываю видео с
[movieFileOutput_ startRecordingToOutputFileURL:url recordingDelegate:self];
и я нажал кнопку домой или кнопку питания, чтобы приостановить приложение.
Чтобы остановить и сохранить видео перед приостановкой приложения, я реализовал applicationWillResignActive следующим образом.
NSNotificationCenter *notify = [NSNotificationCenter defaultCenter];
[notify addObserver:self selector:@selector(applicationWillResignActive)
name:UIApplicationWillResignActiveNotification object:NULL];
- (void)applicationWillResignActive{
isApplicationActive_ = NO;
if(self.isRecordingVideo == NO){
return;
}
backgroundVideoSavingId_ = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (backgroundVideoSavingId_ != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:backgroundVideoSavingId_];
backgroundVideoSavingId_ = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
[videoElapsedTimer_ invalidate];
videoElapsedTimeLabel_.text = @"";
[movieFileOutput_ stopRecording];
});
while(backgroundVideoSavingId_ != UIBackgroundTaskInvalid ||
isApplicationActive_){
[NSThread sleepForTimeInterval:1];
}
//[self playVideoBeepSound];
backgroundRecordingId_ = UIBackgroundTaskInvalid;
backgroundVideoSavingId_ = UIBackgroundTaskInvalid;
});
}
И вывод захвата такой,
/*!
* did finish recording
*/
- (void) captureOutput:(AVCaptureFileOutput *)captureOutput
didFinishRecordingToOutputFileAtURL:(NSURL *)anOutputFileURL
fromConnections:(NSArray *)connections
error:(NSError *)error
{
if([self.delegate respondsToSelector:@selector(cameraController:didFinishRecordingVideoToOutputFileURL:error:)]){
currentVideoURL_ = nil;
[self.delegate cameraController:self didFinishRecordingVideoToOutputFileURL:anOutputFileURL error:error];
}
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[[UIApplication sharedApplication] endBackgroundTask:backgroundVideoSavingId_];
backgroundVideoSavingId_ = UIBackgroundTaskInvalid;
}
}
И проблема в том, что часто я получаю ошибку
-Error Domain=NSOSStatusErrorDomain Code=-12894 "The operation couldn't be completed. (OSStatus error -12894.)"
`` `
Я многое сделал, чтобы понять эту проблему, и я не мог ...
Что не так с моим кодом ...?
Любая помощь приветствуется. Спасибо.