获取视频缩略图之AVAssetImageGenerator

将之前的获取视频帧的方法回顾总结一下:

方式一:获取相关帧集

AVURLAsset *urlSet = [[AVURLAsset alloc]initWithURL:url options:nil];

AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc]initWithAsset:urlSet];

generator.appliesPreferredTrackTransform = YES;

NSLog(@"generator = %@",generator);

CMTime time = CMTimeMake(1, 30);

AVAssetImageGeneratorCompletionHandler handler = ^(CMTime requestedTime, CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error){

UIImage *thumbImg = [UIImage imageWithCGImage:image];

if (result == AVAssetImageGeneratorSucceeded) {//成功即显示

dispatch_async(dispatch_get_main_queue(), ^{

cell.imageView.image = thumbImg;

cell.tags = 1;

});

}

};

generator.maximumSize = CGSizeMake(200, 200);

[generator generateCGImagesAsynchronouslyForTimes:

[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler];

方式二:得到某时刻帧特征图片       容易获取失败

AVAsset *urlSet = [AVAsset assetWithURL:url];

AVAssetImageGenerator *gener = [[AVAssetImageGenerator alloc]initWithAsset:urlSet];

CMTime actualTime;

CGImageRef imageRef = [gener copyCGImageAtTime:CMTimeMakeWithSeconds(1, 10) actualTime:&actualTime error:nil];

CMTimeShow(actualTime);

/////这里的nserror需判断是否为nil,不为nil返回

NSString *key = [_cameraFilesArr[indexPath.row] componentsSeparatedByString:@"."][0];

dispatch_async(dispatch_get_main_queue(), ^{

UIImage *thumbImg = [UIImage imageWithCGImage:imageRef];

cell.imageView.image = thumbImg;

[_imgCache setObject:thumbImg forKey:key];  // 缓存

});

时间: 2024-11-10 08:25:50

获取视频缩略图之AVAssetImageGenerator的相关文章

Android 获取视频缩略图

使用FFmpegMediaMetadataRetriever  github:https://github.com/wseemann/FFmpegMediaMetadataRetriever 删掉没用的库其实没多大,删掉mips和x86文件夹 代码: private Bitmap getThumbnai(String path){ FFmpegMediaMetadataRetriever fmmr = new FFmpegMediaMetadataRetriever(); Bitmap bitm

Android 下获取视频和图片的缩略图

获取视频缩略图: ThumbnailUtils方式获取 /** * 获取视频的缩略图 必须在2.2及以上版本使用,因为其中使用了ThumbnailUtils这个类  * 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图. * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存. * @param videoPath 视频的路径 * @param width 指定

Android之使用ThumbnailUtils类来获取视频第一帧缩略图

一.首先,来介绍ThumbnailUtils类,此类位于android.media包下,此类有一个公有的无参构造函数,有三个静态的公有方法,一个用来获取视频第一帧得到的Bitmap,另外两个方法用来对图片进行缩略处理. 1.无参的构造函数:ThumbnailUtils() 2.三个静态的公有方法: (1).创建一个视频缩略图的方法: public static Bitmap createVideoThumbnail(String filePath, int kind) 第一个参数为视频文件的

Android之使用MediaMetadataRetriever类获取视频第一帧

一.首先,来介绍一下MediaMetadataRetriever类,此类位于android.media包下,这里,先附上可查看此类的API地址:MediaMetadataRetriever类.大家能够自行查看. 1.MediaMetadataRetriever类概述:MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media fil

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

[ffmpeg.exe可执行文件获取]: 网上搜索后得到编译好的ffmpeg文件,下载地址:http://download.csdn.net/source/453719 [安装]: 将下载的文件解压,如:D:\ffmpeg,一共三个文件,分别是:ffmpeg.exe.ffplay.exe.pthreadGC2.dll.我们用到的应该是ffmpeg.exe. [实现获取视频缩略图的两种方式]: 1.调用批处理文件: 批处理文件(如:ffmpeg.bat),内容:D:/ffmpeg/ffmpeg.e

Android -- 获取视频第一帧缩略图

干货 从API 8开始,新增了一个类: android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理. public static Bitmap createVideoThumbnail (String filePath, int kind) 第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND. 第一种文档上说大小

C#:获取视频某一帧的缩略图

读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 原理是通过ffmpeg执行一条命令获取视频某一帧的缩略图. 首先,需要获取视频的帧高度和帧宽度,这样获取的缩略图才不会变形. 获取视频的帧高度和帧宽度可以http://www.zhoumy.cn/?p=35通过查看. 获取到视频的帧高度和帧宽度后,还需要获取缩略图的高度和宽度,这是按比例缩放的. 比如你存放缩略图的区域的最大宽度和最大高度是100,缩略图的高度也应缩放到对应大小. 接下来通过执行一条命令就可以获取到视频

Android必知必会-获取视频文件的截图、缩略图

背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取视频文件截图 * * @param path 视频文件的路径 * @return Bitmap 返回获取的Bitmap */ public static Bitmap getVideoThumb(String path) { MediaMetadataRetriever media = new Me

android 中获取视频文件的缩略图(非原创)

在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRetriever类 三种方法各有利弊 第一种方法,新视频增加后需要SDCard重新扫描才能给新增加的文件添加缩略图,灵活性差,而且不是很稳定,适合简单应用 第二种方法,实现简单,但2.2以前的版本不支持 第三种方法,实现复杂,但比较灵活,推荐使用 下面给出三种方法的Demo 1.第一种方法: publi