iOS获取视频缩略图

2017-07-07  本文已影响0人  ConradW

前提:先添加AVFoundation和CoreMedia两个框架。

一 、利用MPMoviePlayerController实现

核心方法:

获取在指定播放时间的视频缩略图

-(void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option;

第一个参数是获取缩略图的时间点数组
第二个参数代表时间点精度,枚举类型:

  • MPMovieTimeOptionNearestKeyFrame:时间点附近
  • MPMovieTimeOptionExact:准确时间
相关方法:
-(void)cancelAllThumbnailImageRequests;
MPMoviePlayerThumbnailImageRequestDidFinishNotification

二 、利用AVFoundation实现

思路:
  1. 创建AVURLAsset对象(此类主要用于获取媒体信息,包括视频、声音等)。
  2. 根据AVURLAsset创建AVAssetImageGenerator对象。
  3. 使用AVAssetImageGenerator的copyCGImageAtTime::方法获得指定时间点的截图。
参考代码:
+(UIImage *)getThumbnailImage:(NSString *)videoPath {    
    if (videoPath) {
        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath: videoPath] options:nil];        
        AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];        
        // 设定缩略图的方向,如果不设定,可能会在视频旋转90/180/270°时,获取到的缩略图是被旋转过的,而不是正向的。
        gen.appliesPreferredTrackTransform = YES;    
        // 设置图片的最大size(分辨率)
        gen.maximumSize = CGSizeMake(300, 169);  
        CMTime time = CMTimeMakeWithSeconds(5.0, 600); // 取第5秒,一秒钟600帧  
        NSError *error = nil; 
        CMTime actualTime;
        CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];   
        if (error) {
            UIImage *placeHoldImg = [UIImage imageNamed:@"<默认图片名>"];
            return placeHoldImg;
        }    
        UIImage *thumb = [[UIImage alloc] initWithCGImage:image];  
        CGImageRelease(image); 
        return thumb;     
    } else { 
         UIImage *placeHoldImg = [UIImage imageNamed:@"<默认图片名>"];
        return placeHoldImg;
    }
}
上一篇下一篇

猜你喜欢

热点阅读