Creación de miniaturas a partir de video: mejora del rendimiento de la velocidad - AVAsset - iPhone
Estoy utilizando código basado en el código en el siguiente hilo para generar una miniatura de video:
Obtención de una miniatura de una url de video o datos en iPhone SDK
Mi código es el siguiente:
<code>if (selectionType == kUserSelectedMedia) { NSURL * assetURL = [info objectForKey:UIImagePickerControllerReferenceURL]; AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:assetURL options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPreferredTrackTransform=TRUE; [asset release]; CMTime thumbTime = CMTimeMakeWithSeconds(0,30); //NSLog(@"Starting Async Queue"); AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){ if (result != AVAssetImageGeneratorSucceeded) { NSLog(@"couldn't generate thumbnail, error:%@", error); } //NSLog(@"Updating UI"); selectMediaButton.hidden = YES; selectedMedia.hidden = NO; cancelMediaChoiceButton.hidden = NO; whiteBackgroundMedia.hidden = NO; //Convert CGImage thumbnail to UIImage. UIImage * thumbnail = [UIImage imageWithCGImage:im]; int checkSizeW = thumbnail.size.width; int checkSizeH = thumbnail.size.height; NSLog(@"Image width is %d", checkSizeW); NSLog(@"Image height is %d", checkSizeH); if (checkSizeW >=checkSizeH) { //This is a landscape image or video. NSLog(@"This is a landscape image - will resize automatically"); } if (checkSizeH >=checkSizeW) { //This is a portrait image or video. selectedIntroHeight = thumbnail.size.height; } //Set the image once resized. selectedMedia.image = thumbnail; //Set out confirm button BOOL to YES and check if we need to display confirm button. mediaReady = YES; [self checkIfConfirmButtonShouldBeDisplayed]; //[button setImage:[UIImage imageWithCGImage:im] forState:UIControlStateNormal]; //thumbImg=[[UIImage imageWithCGImage:im] retain]; [generator release]; }; CGSize maxSize = CGSizeMake(320, 180); generator.maximumSize = maxSize; [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler]; } } </code>
El problema es que hay un retraso de unos 5-10 segundos en la generación de la imagen en miniatura. ¿Hay alguna forma en que pueda mejorar la velocidad de este código y generar la miniatura más rápido?
Gracias.