La génération de vignette de la vidéo - ios7
Je suis à l'aide de cette référence: Obtenir des vignettes à partir d'une url de la vidéo ou de données dans le SDK de l'IPhone
La méthode est à l'aide de la MPMoviePlayerController classe au lieu de la AVFoundation, et je pense que je veux l'utiliser comme bien parce que les gens ont dit que MPMoviePlayer méthode est plus rapide que la AVFoundation façon.
Le problème, c'est la méthode utilisée pour créer les miniatures, [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]
est obsolète dans iOS 7.0.
En regardant la pomme docs, le reste pris en charge façons pour créer les vignettes sont par les méthodes (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option
et (void)cancelAllThumbnailImageRequests
. Mais, comme les signatures de méthode dicter, ces méthodes renvoient rien. Alors, comment puis-je accéder à la UIImage
miniature créée par ces méthodes?
Si ça aide, c'est ce que j'ai à ce jour en termes de code:
self.videoURL = info[UIImagePickerControllerMediaURL];
NSData *videoData = [NSData dataWithContentsOfURL:self.videoURL];
//Create thumbnail image
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL];
[player requestThumbnailImagesAtTimes:@[@1] timeOption:MPMovieTimeOptionNearestKeyFrame];
//UIImage *thumbnail = ???
Comment puis-je obtenir une UIImage de référence de la vignette?
MODIFIER
J'ai compris comment créer une notification pour la vignette de l'image demande (à l'aide de cette question comme référence). Cependant, je me rends compte que cette méthode fonctionne de manière asynchrone à partir du thread principal, et donc, mon gestionnaire de notification de la méthode ne semble pas toujours être appelé.
C'est ce que j'ai maintenant.
self.videoURL = info[UIImagePickerControllerMediaURL];
NSData *videoData = [NSData dataWithContentsOfURL:self.videoURL];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:self.videoURL];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleThumbnailImageRequestFinishNotification:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:player];
[player requestThumbnailImagesAtTimes:@[@1] timeOption:MPMovieTimeOptionNearestKeyFrame];
Et puis ma méthode de gestionnaire d':
-(void)handleThumbnailImageRequestFinishNotification:(NSNotification*)notification
{
NSDictionary *userinfo = [notification userInfo];
NSError* value = [userinfo objectForKey:MPMoviePlayerThumbnailErrorKey];
if (value != nil)
{
NSLog(@"Error creating video thumbnail image. Details: %@", [value debugDescription]);
}
else
{
UIImage *thumbnail = [userinfo valueForKey:MPMoviePlayerThumbnailImageKey];
}
Mais le maître n'est jamais appelé (ou ce qu'il paraît).
Vous devez vous connecter pour publier un commentaire.
Essayer de cette façon.
dans *.h
dans *.m
Voici un code pour faire une miniature de la vidéo et enregistrer les images de la DocumentDirectory..
Si votre URL est une adresse HTTP en direct et en streaming, il n'y aura pas de retour quoi que ce soit, par les docs. Pour une URL de fichier, j'ai trouvé que je devais commencer à la demande après la lecture du film, ou elle n'est jamais appelée.