Generación de miniaturas de videos creados con AVAssetWriter

Estoy grabando video + audio usando AVAssetWriter y la captureOutput llamada captureOutput . El problema es que en aproximadamente el 5% de los casos no puedo generar una miniatura del segundo cero (si trato de ir más allá en el video, entonces no hay problema). El error que recibo es:

Error Domain = AVFoundationErrorDomain Code = -11832 "No se puede abrir" UserInfo = 0x4b31b0 {NSLocalizedFailureReason = Este medio no se puede usar., NSUnderlyingError = 0x4effb0 "No se pudo completar la operación. (Error de estado -12431.)", NSLocalizedDescription = No se puede abrir }

Aquí está el código que estoy usando:

 AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:url options:nil]; AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; generator.appliesPrefernetworkingTrackTransform=TRUE; [asset release]; CMTime thumbTime = CMTimeMakeWithSeconds(0,30); AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) { if (result != AVAssetImageGeneratorSucceeded) { [self NSLogPrint:[NSString stringWithFormat:@"couldn't generate thumbnail, error:%@", error]]; } UIImage *thumbImg=[[UIImage imageWithCGImage:im] retain]; [image setImage:thumbImg]; [thumbImg release]; [generator release]; }; CGSize maxSize = CGSizeMake(177, 100); generator.maximumSize = maxSize; [generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:thumbTime]] completionHandler:handler]; 

Aquí es cómo configuro mi video AVAssetWriterInput :

 - (BOOL) setupAssetWriterVideoInput:(CMFormatDescriptionRef)currentFormatDescription { float bitsPerPixel; CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(currentFormatDescription); int numPixels = dimensions.width * dimensions.height; int bitsPerSecond; // Assume that lower-than-SD resolutions are intended for streaming, and use a lower bitrate if ( numPixels < (640 * 480) ) bitsPerPixel = 4.05; // This bitrate matches the quality produced by AVCaptureSessionPresetMedium or Low. else bitsPerPixel = 11.04; // This bitrate matches the quality produced by AVCaptureSessionPresetHigh. bitsPerSecond = numPixels * bitsPerPixel; NSDictionary *videoCompressionSettings = [NSDictionary dictionaryWithObjectsAndKeys: AVVideoCodecH264, AVVideoCodecKey, [NSNumber numberWithInteger:dimensions.width], AVVideoWidthKey, [NSNumber numberWithInteger:dimensions.height], AVVideoHeightKey, [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInteger:bitsPerSecond], AVVideoAverageBitRateKey, [NSNumber numberWithInteger:30], AVVideoMaxKeyFrameIntervalKey, nil], AVVideoCompressionPropertiesKey, nil]; if ([_videoWriter canApplyOutputSettings:videoCompressionSettings forMediaType:AVMediaTypeVideo]) { self._videoWriterInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:videoCompressionSettings]; self._videoWriterInput.expectsMediaDataInRealTime = YES; self._videoWriterInput.transform = [self returnOrientation]; if ([_videoWriter canAddInput:self._videoWriterInput]) [_videoWriter addInput:self._videoWriterInput]; else { NSLog(@"Couldn't add asset writer video input."); return NO; } } else { NSLog(@"Couldn't apply video output settings."); return NO; } return YES; } 

Sé que el error significa que no hay image en ese momento, pero ¿por qué sucede esto?

También he probado la grabación usando AVCaptureMovieFileOutput y las miniaturas siempre se generan. Además, si exporto el video al rollo de la camera, la vista previa tampoco está disponible en Fotos.

PS: También he leído en algún sitio que esto puede tener algo que ver con el intervalo de fotogtwigs key, pero no estoy seguro de cómo hacerlo.

En cierto modo solucioné mi problema. Me estaba ejecutando en iOS 4.2.1, y decidí actualizar a iOS 5.1.1 y el problema desapareció.