2010-07-16 4 views
2

La création d'une vignette à partir d'une vidéo à l'aide du sélecteur est simple. Cependant, lorsque j'appuie sur PLAY dans le sélecteur et que je choisis la vidéo, ma vignette est toujours noire. J'espérais qu'il fait une capture d'écran - cependant cette méthode ne prend que la première image de la vidéo - et seulement si elle n'a pas été jouée!Création d'une miniature à partir d'une vidéo - Choix de l'image à utiliser lors de l'aperçu

Comment puis-je créer une miniature à n'importe quelle position de la vidéo?

Voici le code « normal » J'utilise pour les vignettes, où la vidéo n'a pas été joué:

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection { 

    CGSize size = viewImage.size; 
    CGFloat ratio = 0; 
    if (size.width > size.height) { 
     ratio = 80.0/size.width; 
    } else { 
     ratio = 80.0/size.height; 
    } 
    CGRect rectForthumbnail = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height); 

    UIGraphicsBeginImageContext(rectForthumbnail.size); 

    CGRect clipRect = CGRectMake(0.0, 0.0,74,74); 
    [viewImage drawInRect:clipRect]; 
    dance.thumbnailImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

Après avoir appuyé sur « PLAY », malheureusement, la vignette créée est noire (ne montre que la partie supérieure de l'écran de l'iphone où le roulis vidéo et la position de lecture actuelle sont affichés), le reste de la vignette est toujours noir. Comme dit, dans d'autres cas cela fonctionne bien.

Merci beaucoup!

+0

Salut geforce, pourriez-vous s'il vous plaît mettre cela comme une réponse aussi (et pas seulement un commentaire) donc je peux vérifier que résolu - Je suis sûr que c'est ce que je cherchais ... – user387184

Répondre

3

Vérifiez le paramètre MPMoviePlayerController doku: link. Theres un « thumbnailImageAtTime: timeOption: » fonction qui renvoie un UIImage .. Espoir qui aide

1

Si vous utilisez MPMoviePlayerController vous pouvez essayer cette

- (void)getThumbnailImage 
{ 
UIImage *thumbnailImage = [player thumbnailImageAtTime:player.currentPlaybackTime timeOption:MPMovieTimeOptionExact]; 
} 
1

Vous pouvez utiliser la méthode MPMoviePlayerController thumbnailImageAtTime:timeOption si vous utilisez MPMoviePlayer.

-(UIImage *)thumbnailImageFromVideo:(NSString *)videoPath 
{ 
    NSURL *videoURL = [NSURL fileURLWithPath:videoPath]; 
    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 
    UIImage *thumbnailImage = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]; 

    //Player autoplays audio on init 
    [player stop]; 
    return thumbnailImage; 
} 

ou vous pouvez obtenir manuellement l'image miniature de la vidéo en utilisant la méthode suivante -

-(UIImage *)thumbnailCreationForVideo:(NSString *)videoPath 
{ 
    NSURL *videoURL = [[NSURL alloc] initFileURLWithPath:videoPath]; 
    AVURLAsset *myAsset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; 
    AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:myAsset]; 
    NSError *err = NULL; 
    Float64 durationSeconds = CMTimeGetSeconds([myAsset duration]); 
    CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600); 
    CGImageRef imgRef = [generate copyCGImageAtTime:midpoint actualTime:NULL error:&err]; 
    UIImage *thumbnailImage = [[UIImage alloc] initWithCGImage:imgRef]; 
    return thumbnailImage; 
} 
Questions connexes