kidd风的IOS日志之使用AVFoundation生成缩略图
2016-02-25 09:31
453 查看
通过前面的方法大家应该已经看到,使用MPMoviePlayerController来生成缩略图足够简单,但是如果仅仅是是为了生成缩略图而不进行视频播放的话,此刻使用MPMoviePlayerController就有点大材小用了。其实使用AVFundation框架中的AVAssetImageGenerator就可以获取视频缩略图。使用AVAssetImageGenerator获取缩略图大致分为三个步骤:
创建AVURLAsset对象(此类主要用于获取媒体信息,包括视频、声音等)。
根据AVURLAsset创建AVAssetImageGenerator对象。
使用AVAssetImageGenerator的copyCGImageAtTime::方法获得指定时间点的截图。
话不多说,上代码:
生成的缩略图效果:
创建AVURLAsset对象(此类主要用于获取媒体信息,包括视频、声音等)。
根据AVURLAsset创建AVAssetImageGenerator对象。
使用AVAssetImageGenerator的copyCGImageAtTime::方法获得指定时间点的截图。
话不多说,上代码:
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //获取第13.0s的缩略图 [self thumbnailImageRequest:13.0]; } #pragma mark - 私有方法 /** * 取得本地文件路径 * * @return 文件路径 */ -(NSURL *)getFileUrl{ NSString *urlStr=[[NSBundle mainBundle] pathForResource:@"The New Look of OS X Yosemite.mp4" ofType:nil]; NSURL *url=[NSURL fileURLWithPath:urlStr]; return url; } /** * 取得网络文件路径 * * @return 文件路径 */ -(NSURL *)getNetworkUrl{ NSString *urlStr=@"http://192.168.1.161/The New Look of OS X Yosemite.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 time=CMTimeMakeWithSeconds(timeBySecond, 10);//CMTime是表示电影时间信息的结构体,第一个参数表示是视频第几秒,第二个参数表示每秒帧数.(如果要活的某一秒的第几帧可以使用CMTimeMake方法) CMTime actualTime; CGImageRef cgImage= [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error]; if(error){ NSLog(@"截取视频缩略图时发生错误,错误信息:%@",error.localizedDescription); return; } CMTimeShow(actualTime); UIImage *image=[UIImage imageWithCGImage:cgImage];//转化为UIImage //保存到相册 UIImageWriteToSavedPhotosAlbum(image,nil, nil, nil); CGImageRelease(cgImage); } @end
生成的缩略图效果:
相关文章推荐
- iOS URLencoding
- 多线程编程指南之线程管理(iOS,Mac os )
- ios 枚举
- 正则表达式简单语法规则和IOS的使用
- iOS消息机制
- iOS问题: 此证书的签发者无效
- kidd风的IOS日志之利用dispatch_once创建单例
- 原 iOS中的内存管理(下)
- iOS中的内存管理(上)
- iOS开发之AFN的基本使用
- iOS沙盒机制
- iOS Developer Libray (中文版)-- Defining Classes 定义类
- iOS获取设备信息与应用信息
- iOS编程中,中文字符转为拼音
- iOS 宏
- 四个月期间 我在蜂窝教育iOS培训
- 【转】iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD
- ios 下拉刷新
- ios 异步加载图片结合tableView SDWebImage
- iOS开发笔记