前言: 看完了使用MPMoviePlayerController播放在线视频,在实际应用中有时候须要获取视频的缩略图,我们来看看怎样截取指定时间内的视频缩略图。

一  使用MPMoviePlayerController自带的方法

  1. - (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option NS_AVAILABLE_IOS(3_2);

  1. /**
  2. * 视频截图
  3. */
  4. - (void)getMovieThumImage
  5. {
  6. [self.moviePlayer requestThumbnailImagesAtTimes:@[@(1.0),@(5.0)] //设置截图时间点 1s和5s的时候
  7. timeOption:MPMovieTimeOptionNearestKeyFrame];
  8. }
  1. [[NSNotificationCenter defaultCenter] addObserver:self
  2. selector:@selector(thumImageGet:)
  3. name:MPMoviePlayerThumbnailImageRequestDidFinishNotification //视频缩略图截取成功时调用
  4. object:nil];
  1. /**
  2. * 截图完毕,每截取一张,会调取一次
  3. *
  4. * @param noti <#noti description#>
  5. */
  6. - (void)thumImageGet:(NSNotification *)noti
  7. {
  8. UIImage *thumImage = [[noti userInfo] objectForKey:MPMoviePlayerThumbnailImageKey];
  9. UIImageWriteToSavedPhotosAlbum(thumImage, nil, nil, nil);
  10. }

二 使用AVAssetImageGenerator

  1. 创建AVURLAsset对象(此类主要用于获取媒体信息,包含视频、声音等)。
  2. 依据AVURLAsset创建AVAssetImageGenerator对象。

  3. 使用AVAssetImageGenerator的copyCGImageAtTime::方法获得指定时间点的截图。

  1. #import <AVFoundation/AVFoundation.h>
  1. <pre name="code" class="objc">- (void)assetGetThumImage:(CGFloat)second
  2. {
  3. AVURLAsset *urlSet = [AVURLAsset assetWithURL:[self url]];
  4. AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:urlSet];
  5.  
  6. NSError *error = nil;
  7. CMTime time = CMTimeMake(second,10);//缩略图创建时间 CMTime是表示电影时间信息的结构体,第一个參数表示是视频第几秒,第二个參数表示每秒帧数.(假设要活的某一秒的第几帧能够使用CMTimeMake方法)
  8. CMTime actucalTime; //缩略图实际生成的时间
  9. CGImageRef cgImage = [imageGenerator copyCGImageAtTime:time actualTime:&actucalTime error:&error];
  10. if (error) {
  11. NSLog(@"截取视频图片失败:%@",error.localizedDescription);
  12. }
  13. CMTimeShow(actucalTime);
  14. UIImage *image = [UIImage imageWithCGImage:cgImage];
  15. UIImageWriteToSavedPhotosAlbum(image,nil, nil,nil);
  16. CGImageRelease(cgImage);
  17.  
  18. NSLog(@"视频截取成功");
  19. }

  1.  

iOS截取视频缩略图的两种方法的更多相关文章

  1. iOS 创建单例的两种方法

    创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + (Ac ...

  2. js截取字符串显示引号两种方法

    //截取字符串多余显示引号 var cutStrForNum = function (str, num) { var len = 0; for (var i = 0; i < str.lengt ...

  3. iOS UIimage初始化时的两种方法

    第一种方式:UIImage *image = [UIImage imageNamed:@"image"]; 使用这种方式,第一次读取的时候,先把这个图片存到缓存里,下次再使用时直接 ...

  4. 实现iOS长时间后台的两种方法:Audiosession和VOIP(转)

    分类: Iphone2013-01-24 14:03 986人阅读 评论(0) 收藏 举报 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在后台下载或者与服务器保持连接的App ...

  5. ios 设置屏幕方向的两种方法

    第一种:通过人为的办法改变view.transform的属性. 具体办法: view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于Vi ...

  6. 实现iOS长时间后台的两种方法:Audiosession和VOIP

    http://www.cocoachina.com/applenews/devnews/2012/1212/5313.html 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在 ...

  7. IOS创建单例的两种方法

    1.0  苹果官方写法:  static AccountManager *DefaultManager = nil; + (AccountManager *)defaultManager { if ( ...

  8. Windows下使用ffmpeg与java实现截取视频缩略图

    [ffmpeg.exe可执行文件获取]: 网上搜索后得到编译好的ffmpeg文件,下载地址:http://download.csdn.net/source/453719 [安装]: 将下载的文件解压, ...

  9. Cisco设备IOS的恢复方法 两种方法

    如果不小心把Router或者Switch的IOS删除了,特别是Flash中的IOS和ROM中的Mini IOS都没有了的话,连启动都不行的话,有什么方法恢复它呢?答案是方法不只一种,而是两种.其实是我 ...

随机推荐

  1. Apache 禁止访问目录

    1.打开apache配置文件httpd.conf 2.找到 <Directory /> Options Indexes AllowOverride None Order allow,den ...

  2. uboot的mtd功能支持

    一.概述 1.MTD MTD是Flash的一种管理方法,将Flash划分成几个分区,便于管理. u-boot的MTD功能是在文件cmd_jffs2.c中实现的,由此我们可以知道怎样打开u-boot的M ...

  3. C# Dispose Finalize

    比较值得参考的文档:http://www.jb51.net/article/37214.htm. .NET 的内存管理过程: 托管堆假设内存无限大,线性连续分配内存: 实际内存不够使用时,遍历托管堆对 ...

  4. pragma指令简介

    整理日:2015年3月12日 资源来来自己网络 在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 下面介绍了一下该指令的一些常用参数,希望对大家 ...

  5. 【关于php】Appserv的安装注意事项

    之前的安装,问题应该不大,一路点“安装——Next——next·····”就行,下面是一些注意事项: (1)AppServ安装路径的选择.具体安装在哪个磁盘下用户可以自行选择,也可以使用默认的安装位置 ...

  6. TCP连接建立和关闭中的疑难点

    TCP连接建立和关闭中的疑难点 作者:夏语岚    撰写日期:2011-10-29 近日在阅读<Unix网络编程>,以前在<计算机网络>课程中学到TCP,当时只是简单了解了TC ...

  7. LINUX TOP,不是这样玩地!!!

    老同志遇到新问题了. TOP显示完全不是我要的,CPU,内存都是0.每个CPU还分别显示. 网上搜下,原来是A(显示风格)R(反向排序)P,M(CPU,内存排序)之类引起的. 记下了.

  8. vsftp被动模式启用iptables访问设置

    vsftpd服务搭建好之后,如果是使用主动模式访问.那么启用iptables只需添加以下规则即可: -A RH-Firewall-1-INPUT -m state --state NEW -m tcp ...

  9. Spring MVC 解读——<context:component-scan/>

    转自:http://my.oschina.net/HeliosFly/blog/203149 作者:GoodLoser. Spring MVC 解读---<context:component-s ...

  10. Velocity

    vm模板 设计原则 让前端来写后端的vm模板,并且前端不需要搭建各种繁杂的后端环境,前后端以 .vm 为沟通桥梁,另外模板的数据源可以在项目开始前前后端约定之后生成JSON文件,从而使两个角色并行开发 ...