使用选择器从视频制作缩略图是直截了当的。但是,当我在选择器中按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屏幕的顶部,其中显示视频滚动和当前播放位置),缩略图的剩余部分始终为黑色。如上所述,在其他情况下,它运作良好。
非常感谢!
答案 0 :(得分:3)
检查MPMoviePlayerController doku:link。有一个“thumbnailImageAtTime:timeOption:”函数返回一个UIImage ..希望有所帮助
答案 1 :(得分:1)
如果您正在使用MPMoviePlayerController,可以试试这个
- (void)getThumbnailImage
{
UIImage *thumbnailImage = [player thumbnailImageAtTime:player.currentPlaybackTime timeOption:MPMovieTimeOptionExact];
}
答案 2 :(得分:1)
如果您使用的是MPMoviePlayer,则可以使用MPMoviePlayerController thumbnailImageAtTime:timeOption
方法。
-(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;
}