您的位置:首页 > 产品设计 > UI/UE

iOS 播放视频进行滑动获取每一帧图片并且通过UIImageView展示出来

2017-04-04 20:43 676 查看
先在这扯些题外话,最近在公司里面人心惶惶,因为制度的改变,员工抵制情绪很大,所以离职的人也比较多,所以为了让自己更值钱,才自发的去学习点东西,知道自己水平很菜,但是还是得提升啊。下面严归正传,开始上干货,我也是在网上搜索,在查看官方API,看了某些大神的源码,自己总结的东西,希望对一些人有用。

//取消快速滑动时 尚未提供的图像 如果不添加此方法 在快速滑动时 会一贞一贞的解析出预览图 增加内存消耗 太过耗时
[self.imageGenerator cancelAllCGImageGeneration];
//设置缩略图的方向       self.imageGenerator.appliesPreferredTrackTransform = YES;
//设置缩略图的最大宽高
self.imageGenerator.maximumSize = self.imageView.frame.size;
//异步获取缩略图
//有三种结果
// AVAssetImageGeneratorSucceeded, 成功
// AVAssetImageGeneratorFailed, 失败
// AVAssetImageGeneratorCancelled, 取消
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef im, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){
//当结果为不成功时,可以设置预览图
if (result != AVAssetImageGeneratorSucceeded) {
dispatch_async(dispatch_get_main_queue(), ^{

});
} else {
//结果成功时,获取到缩略图,转换成UIImage 对象
UIImage *thumbImg = [UIImage imageWithCGImage:im];
//该方法主要用主线程来修改页面UI的状态。   把不断获取到的UIImage 对象 通过此方法传递出去 在主线程中显示出不断获取到的缩略图
[self performSelectorOnMainThread:@selector(movieImage:) withObject:thumbImg waitUntilDone:YES];
}
};
//因为滑动的时候不止一个时间,是有很多个时间 所以滑动时间就有一个数组, 滑动到哪一个时间 就有一个CMTime 上面的block块 就是当图像请求完成时调用, 也就是说 滑动到哪个时间 就会有个图像  通过上面的block 来请求解析 缩略图
[self.imageGenerator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:dragedCTime]] completionHandler:handler];
}

- (void)movieImage:(UIImage *)image
{
self.imageView.image = image;
}


这里主要提几点。

1.

[self.imageGenerator cancelAllCGImageGeneration];


取消快速滑动时 尚未提供的图像 不进行显示 如果不添加此方法 在快速滑动时 直接执行下面的方法会一帧一帧的解析出预览图,如果快速滑动,会全部解析出来,内存会暴涨,所以必须执行此方法,降低内存消耗。

2.

//结果成功时,获取到缩略图,转换成UIImage 对象
UIImage *thumbImg = [UIImage imageWithCGImage:im];
//该方法主要用主线程来修改页面UI的状态。   把不断获取到的UIImage 对象 通过此方法传递出去 在主线程中显示出不断获取到的缩略图
[self performSelectorOnMainThread:@selector(movieImage:) withObject:thumbImg waitUntilDone:YES];


当通过异步方法不断的获取到 CGImageRef 时,就需要通过上面的UIImage 方法转换成 UIImage 对象 然后进行展示,因为是异步获取的,所以获取要把不断获取到的UIImage 对象 通过上述的方法 在主线程中进行展示,当时参考看了ZF大神的源码,就卡在进行展示的这一步,怪自己学艺不精,没有看懂大神的思路,就自己在网上百度,通过上面方法解决展示的问题。

ZF大神 Git 传送门 ZFPlayer 源码

所要写的就那么多,不懂的在联系我QQ 382010738 一起进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios uiimageview AVPlayer
相关文章推荐