使用MPMoviePlayerController来生成缩略图足够简单,但是如果仅仅是是为了生成缩略图而不进行视频播放的话,此刻使用 MPMoviePlayerController就有点大材小用了。其实使用AVFundation框架中的AVAssetImageGenerator 就可以获取视频缩略图。使用AVAssetImageGenerator获取缩略图大致分为三个步骤:
- 创建AVURLAsset对象(此类主要用于获取媒体信息,包括视频、声音等)。
- 根据AVURLAsset创建AVAssetImageGenerator对象。
- 使用AVAssetImageGenerator的copyCGImageAtTime::方法获得指定时间点的截图。
引入AVFoundation.framework,#import <AVFoundation/AVFoundation.h>头文件
代码和效果截图如下:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// NSURL *url = [NSURL URLWithString:@"http://vf1.mtime.cn/Video/2012/04/23/mp4/120423212602431929.mp4"];
//获取第13.0s的缩略图
[self thumbnailImageRequest:13.0];
}
/**
* 取得网络文件路径
*
* @return 文件路径
*/
-(NSURL *)getNetworkUrl{
NSString *urlStr=@"http://vf1.mtime.cn/Video/2012/04/23/mp4/120423212602431929.mp4";
urlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:urlStr];
return url;
}
/**
* 截取指定时间的视频缩略图
*
* @param timeBySecond 时间点
*/
-(void)thumbnailImageRequest:(CGFloat )timeBySecond{
//创建url
NSURL *url = [self getNetworkUrl];
//根据url创建AVURLAsset
AVURLAsset *urlAsset = [AVURLAsset assetWithURL:url];
//根据AVURLAsset创建AVAssetImageGenerator
AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:urlAsset];
/*截图
* requestTime:缩略图创建时间
* actualTime:缩略图实际生成的时间
*/
NSError *error=nil;
//CMTime是表示电影时间信息的结构体,第一个参数表示是视频第几秒,第二个参数表示每秒帧数.(如果要活的某一秒的第几帧可以使用CMTimeMake方法)
CMTime time = CMTimeMakeWithSeconds(timeBySecond, 10);
CMTime actualTime;
CGImageRef cgImage = [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error];
if (error) {
NSLog(@"截取视频缩略图时发生错误,错误信息:%@",error.localizedDescription);
return;
}
CMTimeShow(actualTime);
//转化为UIImage
UIImage *image = [UIImage imageWithCGImage:cgImage];
//保存到相册
UIImageWriteToSavedPhotosAlbum(image,nil, nil, nil);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
效果截图