2

使用选择器从视频中制作缩略图是直截了当的。但是,当我在选择器中按 PLAY 然后选择视频时,我的缩略图总是黑色的。我希望它能截取屏幕截图——但是这种方法只拍摄视频的第一张图片——而且只有在没有播放的情况下!

如何在视频的任何位置制作缩略图?

这是我用于缩略图的“正常”代码,其中视频尚未播放:

- (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();

不幸的是,按下“PLAY”后,创建的缩略图是黑色的(仅显示显示视频滚动和当前播放位置的iphone屏幕顶部),剩余的缩略图始终是黑色的。如前所述,在其他情况下效果很好。

非常感谢!

4

3 回答 3

3

检查 MPMoviePlayerController doku: link。有一个返回 UIImage 的“thumbnailImageAtTime:timeOption:”函数。希望对您有所帮助

于 2011-04-11T08:46:53.897 回答
1

如果你使用 MPMoviePlayerController 你可以试试这个

- (void)getThumbnailImage
{
UIImage *thumbnailImage = [player thumbnailImageAtTime:player.currentPlaybackTime timeOption:MPMovieTimeOptionExact];
}
于 2011-04-11T08:54:00.523 回答
1

MPMoviePlayerController thumbnailImageAtTime:timeOption如果您使用的是 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;
}

或者您可以使用以下方法手动从视频中获取缩略图 -

-(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;
}
于 2015-06-08T09:35:08.413 回答