J'essaie d'obtenir la première image de la vidéo sélectionnée dans un UIImagePickerController
pour afficher dans un UIImageView
, mais je ne sais pas si c'est possible. Si c'est le cas, comment le ferais-je?Saisir la première image d'une vidéo à partir de UIImagePickerController?
Répondre
Vous pouvez le faire de deux façons. La première est d'utiliser le MPMoviePlayerController
pour saisir la miniature:
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]
initWithContentURL:videoURL];
moviePlayer.shouldAutoplay = NO;
UIImage *thumbnail = [moviePlayer thumbnailImageAtTime:time
timeOption:MPMovieTimeOptionNearestKeyFrame];
Cela fonctionne, mais MPMoviePlayerController
est pas un objet particulièrement léger et pas particulièrement rapide saisissant les vignettes.
La méthode préférée consiste à utiliser le nouveau AVAssetImageGenerator
dans AVFoundation. C'est rapide, léger et plus flexible que l'ancienne. Voici une méthode d'assistance qui retournera une image auto-libérée de la vidéo.
+ (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;
}
utilisation Asynchronous
- (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);
});
});
}
Vous devez également ajouter le cadre "Core Media" à votre cible. –
+1 Mon collègue n'a pas pu écrire quelque chose comme ça, mais merci à vous ... –
pour les autres qui essaient d'utiliser ceci: faites attention si videoURL a été créé par fileURLWithPath ou URLWithString (quand vous avez le chemin dans NSString *) – user1105951
- 1. Obtenir la première image vidéo en javascript
- 2. Afficher la première image de la vidéo dans WPF MediaElement
- 3. Capturer la première image d'une vidéo avec WPF
- 4. UIImagePickerController Cueillir plus d'une image
- 5. Image d'étirement à quartz sélectionnée à partir de imagePickerController
- 6. Comment autoriser uniquement l'enregistreur vidéo de l'iPhone 3GS à utiliser la classe UIImagePickerController
- 7. Ouvrir la première image Fancybox automatiquement
- 8. Enregistrement de la vidéo de UIImagePickerController vers les données de base sur iPhone OS
- 9. Cueillette de vidéos à partir de PhotoLibrary avec UIImagePickerController dans OS 3.1
- 10. UIImagePickerController
- 11. bannière aléatoire que l'affichage de la première image
- 12. Comment rendre la vidéo à partir d'images brutes dans WPF?
- 13. Prendre une vidéo à partir d'une caméra vidéo et l'afficher avec MPMoviePlayerController IPhone SDK
- 14. Comment ajouter background-image sur la première option d'un dropdownlist
- 15. Saisir un nombre à partir d'une chaîne non numérique
- 16. vue bibliothèque de photos reste à l'écran après avoir choisi une image UIImagePickerController
- 17. Obtenir la première date de la semaine à partir de la date fournie
- 18. iPhone - UIImagePickerController - Comment permettre à l'utilisateur de choisir la source?
- 19. Récupérer des images aléatoires de la vidéo et créer une image gif - Java
- 20. Image à partir de PDF avec ZendFramework
- 21. App_Themes image demandée à partir de css
- 22. Comment saisir un octet [] d'une image en java?
- 23. comment puis-je récupérer de la vidéo à partir de la capture vidéo USB + appareil DVB avec Gstreamer?
- 24. Petite animation iPhone: séquence vidéo ou image?
- 25. La méthode la plus rapide pour gérer la compression UIImagePickerController
- 26. UIImagePickerController crash après 5 à 7 images - encore
- 27. Création d'une nouvelle image à partir d'une image recadrée
- 28. Enregistrer une présentation vidéo à partir de mon ordinateur
- 29. Obtention de la première propriété JSON
- 30. Quelle est la meilleure façon de créer des vignettes à partir de la vidéo en PHP?
question similaire http://stackoverflow.com/questions/1347562/getting-thumbnail-from-a-video-url-or-data-in-iphone-sdk –