截取视频的第一帧
- AVURLAsset:AVAsset的子类,此类主要用于获取多媒体的信息,包括视频、音频的类型、时长、每秒帧数,其实还可以用来获取视频的指定位置的缩略图。
- CMTime:CMTime一个用于描述多媒体帧数和播放速率的结构体,可以通过 CMTimeMake(int64_t value, int32_t timescale) 来生成一个CMTime变量,value视频的总帧数,timescale是指每秒视频播放的帧数,视频播放速率,(value / timescale)才是视频实际的秒数时长,timescale一般情况下不改变,截取视频长度通过改变value的值。
或者通过 CMTimeMakeWithSeconds(Float64 seconds, int32_t preferredTimeScale) 方法也可以,这里的seconds对应的是平时说的秒数,preferredTimeScale是每秒播放的帧数。
- AVAssetImageGenerator 是用来提供视频的缩略图或预览视频的帧的类。
{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoPath options:nil];
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0.0, 600);
NSError *error = nil;
CMTime actualTime;
CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
UIImage *img = [[[UIImage alloc] initWithCGImage:image] autorelease];
CGImageRelease(image);
return img;
}
- 如果是固定视频 还是叫服务器把图片截取了发过来
- 这样截取视频的第一帧 加载速度比较缓慢
- 因为有比较多的视频情况下 会有点卡顿
- 建议是从服务器获取或者缓存后保存下来