iOS 播放视频进行滑动获取每一帧图片并且通过UIImageView展示出来
2017-04-04 20:43
676 查看
先在这扯些题外话,最近在公司里面人心惶惶,因为制度的改变,员工抵制情绪很大,所以离职的人也比较多,所以为了让自己更值钱,才自发的去学习点东西,知道自己水平很菜,但是还是得提升啊。下面严归正传,开始上干货,我也是在网上搜索,在查看官方API,看了某些大神的源码,自己总结的东西,希望对一些人有用。
这里主要提几点。
1.
取消快速滑动时 尚未提供的图像 不进行显示 如果不添加此方法 在快速滑动时 直接执行下面的方法会一帧一帧的解析出预览图,如果快速滑动,会全部解析出来,内存会暴涨,所以必须执行此方法,降低内存消耗。
2.
当通过异步方法不断的获取到 CGImageRef 时,就需要通过上面的UIImage 方法转换成 UIImage 对象 然后进行展示,因为是异步获取的,所以获取要把不断获取到的UIImage 对象 通过上述的方法 在主线程中进行展示,当时参考看了ZF大神的源码,就卡在进行展示的这一步,怪自己学艺不精,没有看懂大神的思路,就自己在网上百度,通过上面方法解决展示的问题。
ZF大神 Git 传送门 ZFPlayer 源码
所要写的就那么多,不懂的在联系我QQ 382010738 一起进步。
//取消快速滑动时 尚未提供的图像 如果不添加此方法 在快速滑动时 会一贞一贞的解析出预览图 增加内存消耗 太过耗时 [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 一起进步。
相关文章推荐
- [置顶] Android中通过Exif-ExifInterface获取图片的相关信息,并且在图片上添加获取到的信息将图片展示出来
- ios学习--获取通过UIImagePackerController获取的系统相册 图片&视频 的名称信息
- ios 从网络上获取图片并在UIImageView中显示
- iOS选择相册中的视频并且展示视频第一帧的图片
- android之通过SurfaceView以及SurfaceHolder进行视频播放
- iOS视频播放列表中默认展示图如何获取
- android通过webView加载第三方h5应用,无法加载图片和播放视频的解决方法
- android通过webView加载第三方h5应用,部分手机加载部分图片失败和播放部分视频失败的解决方法
- IOS获取视频每一帧的图片方法
- IOS 获取本机相册图片,并显示在UIImageView上
- [置顶]iOS--使用UIImageView进行GIF动图播放
- 使用VideoView播放视频,锁屏暂停播放之后,过一会自动播放,而且可以通过滑动屏幕调节音量。。。
- iOS中UIScrollView嵌套UIImageView实现图片滑动浏览、缩放
- iOS WebView 如何通过js获取网页中所有图片并加入点击事件,实现浏览图片的功能
- 进击的KFC:iOS WebView 如何通过js获取网页中所有图片并加入点击事件,实现浏览图片的功能
- [IOS]从相册获取图片和视频进行上传
- iOS-UIImageView获取网络图片
- iOS设备的摄像头进行拍照,视频。并且从相册中选取我们需要的图片或者视频。
- 通过缓存来实现网络图片的下载,通过RecyclerView和ViewPaper来展示出来
- ios通过图片的URL地址,从网络上获取图片(UIImage类型)