Ich benutze AVFoundation Framework in meiner iPad App um Videos aufzunehmen. Wenn die Aufnahme eines Videos abgeschlossen ist, erstelle ich ein Vorschaubild für dasselbe Video mit AVFoundation.Aber wenn ich zwei Videos ohne viel aufnehmen Zeitverzögerung dazwischen, dann wird das Vorschaubild nicht richtig erstellt. Klar dauert es einige Verzögerung. Wie zu vermeiden, oder zumindest wie kann ich wissen, wenn das Thumbnail des vorherigen Videos vollständig erstellt wurde, so dass ich ein 'Wait' Symbol auf dem zeigen kann Benutzer für diesen Zeitraum?AVFoundation Framework benötigt Verzögerung um Miniaturbilder zu erstellen
Bitte helfen Sie mir, da ich keine Ahnung habe, um das Problem zu lösen.
//delegate method which gets called when recording ends.
//Here I create the thumb and store it in self.thumb
-(void)recorder:(AVCamRecorder *)recorder recordingDidFinishToOutputFileURL:(NSURL *)outputFileURL error:(NSError *)error
{
self.thumb=nil;
AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:outputFileURL options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform=TRUE;
[asset release];
CMTime thumbTime = CMTimeMakeWithSeconds(0,1);
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
if (result != AVAssetImageGeneratorSucceeded) {
NSLog(@"couldn't generate thumbnail, error:%@", error);
}
self.thumb=[UIImage imageWithCGImage:im];
[generator release];
};
CGSize maxSize = CGSizeMake(320, 180);
generator.maximumSize = maxSize;
[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler];
if ([[UIDevice currentDevice] isMultitaskingSupported]) {
[[UIApplication sharedApplication] endBackgroundTask:[self backgroundRecordingID]];
}
if ([[self delegate] respondsToSelector:@selector(captureManagerRecordingFinished:)]) {
[[self delegate] captureManagerRecordingFinished:self];
}
}
[self copyFileToDocuments:outputFileURL];
}
//Save video and thumbnail to documents
- (void) copyFileToDocuments:(NSURL *)fileURL
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd_HH-mm-ss"];
NSString *destinationPath = [documentsDirectory stringByAppendingFormat:@"/output_%@.mov", [dateFormatter stringFromDate:[NSDate date]]];
[dateFormatter release];
NSError *error;
if (![[NSFileManager defaultManager] copyItemAtURL:fileURL toURL:[NSURL fileURLWithPath:destinationPath] error:&error]) {
if ([[self delegate] respondsToSelector:@selector(captureManager:didFailWithError:)]) {
[[self delegate] captureManager:self didFailWithError:error];
}
}
else
{
destinationPath=[[destinationPath lastPathComponent]stringByDeletingPathExtension];
[self saveImage:self.thumb withName:destinationPath];
}
}
//Method Where I save self.thumb in app documents
-(void) saveImage:(UIImage*)image withName:(NSString*)fileName
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//Save Image
NSData *imageData = UIImagePNGRepresentation(image); //convert image into .png format.
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",fileName]];
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
}
Oben ist mein Code. Aber self.thumb wird nicht richtig gespeichert, wenn ich keine Verzögerung in zwei Aufnahmen gebe.
Können Sie bitte Ihren Code posten? –
Ich habe meine Frage mit Code aktualisiert. – Yogi
Ich habe festgestellt, dass eine Zeit von Null lange dauert, um ein Thumbnail zu erzeugen. Versuchen Sie es mit einer Zeit von 'CMTimeMakeWithSeconds (1,1)', es sei denn, der Clip ist kürzer. – jessecurry