Estoy tratando de obtener el primer fotograma del video seleccionado en un UIImagePickerController
para mostrar en un UIImageView
, pero no sé si es posible. Si es así, ¿cómo lo haría?¿Tomar el primer fotograma de un video de UIImagePickerController?
Respuesta
Puede hacerlo de dos maneras. La primera forma es utilizar el MPMoviePlayerController
para agarrar la miniatura:
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]
initWithContentURL:videoURL];
moviePlayer.shouldAutoplay = NO;
UIImage *thumbnail = [moviePlayer thumbnailImageAtTime:time
timeOption:MPMovieTimeOptionNearestKeyFrame];
Esto funciona, pero MPMoviePlayerController
no es un objeto especialmente ligero y no particularmente agarrar rápido miniaturas.
La forma preferida es utilizar el nuevo AVAssetImageGenerator
en AVFoundation. Esto es rápido, ligero y más flexible que en el pasado. Aquí hay un método de ayuda que devolverá una imagen autorrebectada del video.
+ (UIImage *)thumbnailImageForVideo:(NSURL *)videoURL
atTime:(NSTimeInterval)time
{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
NSParameterAssert(asset);
AVAssetImageGenerator *assetIG =
[[AVAssetImageGenerator alloc] initWithAsset:asset];
assetIG.appliesPreferredTrackTransform = YES;
assetIG.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
CGImageRef thumbnailImageRef = NULL;
CFTimeInterval thumbnailImageTime = time;
NSError *igError = nil;
thumbnailImageRef =
[assetIG copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)
actualTime:NULL
error:&igError];
if (!thumbnailImageRef)
NSLog(@"thumbnailImageGenerationError %@", igError);
UIImage *thumbnailImage = thumbnailImageRef
? [[UIImage alloc] initWithCGImage:thumbnailImageRef]
: nil;
return thumbnailImage;
}
uso asíncrono
- (void)thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time completion:(void (^)(UIImage *)) completion
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
NSParameterAssert(asset);
AVAssetImageGenerator *assetIG =
[[AVAssetImageGenerator alloc] initWithAsset:asset];
assetIG.appliesPreferredTrackTransform = YES;
assetIG.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
CGImageRef thumbnailImageRef = NULL;
CFTimeInterval thumbnailImageTime = time;
NSError *igError = nil;
thumbnailImageRef =
[assetIG copyCGImageAtTime:CMTimeMake(thumbnailImageTime, 60)
actualTime:NULL
error:&igError];
if (!thumbnailImageRef)
NSLog(@"thumbnailImageGenerationError %@", igError);
UIImage *thumbnailImage = thumbnailImageRef
? [[UIImage alloc] initWithCGImage:thumbnailImageRef]
: nil;
dispatch_async(dispatch_get_main_queue(), ^{
completion(thumbnailImage);
});
});
}
También debe agregar el marco "Core Media" a su objetivo. –
+1 Mi colega no pudo escribir algo como esto, pero gracias a ti ... –
para otros que intenten usar esto: presta atención si el videoURL fue creado por fileURLWithPath o URLWithString (cuando tienes la ruta en NSString *) – user1105951
- 1. Primer fotograma de un video con AVFoundation
- 2. ¿Utiliza dinámicamente el primer fotograma como póster en video HTML5?
- 3. Capturar el primer fotograma de un video - Resolución de miniaturas - iPhone
- 4. MediaMetadataRetriever.getFrameAtTime() devuelve solo el primer fotograma
- 5. ¿Utiliza FFMpeg para obtener el fotograma medio de un video?
- 6. ¿Cómo puedo guardar el primer fotograma de un video como imagen?
- 7. Obtener imagen de un fotograma de video en iPhone
- 8. Cómo adjuntar metadatos a cada fotograma de un video
- 9. UIImagePickerController: cómo tomar> 1 foto?
- 10. Evite la compresión de video mientras selecciona video usando uiimagepickercontroller
- 11. Mostrar el primer cuadro de video en WPF MediaElement
- 12. Cómo seleccionar un archivo de video o película de UIImagePickerController
- 13. UIImagePickerController con cámara fuente: el recorte de video no funciona
- 14. Cómo tomar un primer carácter de la cadena
- 15. UIImagePickerController - Establecimiento de una duración máxima de video
- 16. UIImagePickerController miniatura del video que se recupera de la biblioteca
- 17. Cómo deshabilitar la captura de video en UIImagePickerController
- 18. ¿Puedo obtener el número del fotograma actual en un video HTML5?
- 19. mediaelement.js - reproducir otro video al final del primer video
- 20. ffmpeg extracción de fotograma clave
- 21. Obtener el primer fotograma de una imagen GIF sin descargar todos los demás fotogramas
- 22. Vuelca el último fotograma del archivo de video usando ffmpeg/mencoder/transcode et. Al
- 23. Permitir a UIImagePickerController editar video pero no imágenes
- 24. UIImagePickerController con fuente de cámara con permite la edición sí: el recorte de video no funciona
- 25. AS3: forma simple de obtener el número de fotograma de una etiqueta de fotograma
- 26. UIImagePickerController tutorial?
- 27. Cómo "simplificar" UIImagePickerController
- 28. Obtener UIImage del CALayer conectado a AVPlayer (extraer fotograma de reproducción de video)
- 29. Cómo tomar el primer nombre de archivo de una carpeta en C#
- 30. UIImagePickerController para la película de película Artículo
pregunta similar http://stackoverflow.com/questions/1347562/getting-thumbnail-from-a-video-url-or-data-in-iphone-sdk –