//获取视频url地址
NSURL *url=[NSURL URLWithString:[@"http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4"
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
//根据地址初始化AVURLAsset
AVURLAsset *urlAsset=[AVURLAsset assetWithURL:url];
//初始化AVAssetImageGenerator
AVAssetImageGenerator *imageGenerator=[AVAssetImageGenerator assetImageGeneratorWithAsset:urlAsset];
NSError *error=nil;
//获取视频第5秒,每秒10帧
CMTime time=CMTimeMakeWithSeconds(5, 10);
CMTime actualTime;
//通过copyCGImageAtTime获取第5秒时间的图片 actualTime可传可不传
CGImageRef cgImage= [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error];
if(error){
//打印时间
CMTimeShow(actualTime);
//获取图片
UIImage *image=[UIImage imageWithCGImage:cgImage];
//释放
CGImageRelease(cgImage);
}
下面详细介绍这几个类的结构和使用:
AVURLAsset:继承与AVAsset,它是AVFoundation框架用来表示媒体的主要类,AVAsset实例是一个或多个媒体数据(音频和视频轨道)的集合的聚合表示,它提供语音作为整合的集合的信息,例如标题,持续时间等等。AVAsset是用于URL和媒体创建asset实例并创建新和成的其他类的超类。
CMTime:
AVAssetImageGenerator: 是用来提供视频的缩略图或预览视频的帧的类(有文章说图片生成的真正时间可能在requestedTimeToleranceBefore
和
requestedTimeToleranceAfter之间,也可能和请求时间无关)。
copyCGImageAtTime:actualTime:error: 这个方法的三个参数意义如下,
第一个代表想要获取那个时间点的图片(每秒的帧不同,获取的图片也不通)。
第二个代表返回的时间,官方文档说如果不需要,可传NULL
第三个代表错误信息,如果有错误信息说明未生成图片。