扩展--使用AVFoundation生成缩略图

来源:互联网 发布:龙桃子模型官方淘宝 编辑:程序博客网 时间:2024/05/07 09:03

扩展--使用AVFoundation生成缩略图

通过前面的方法大家应该已经看到,使用MPMoviePlayerController来生成缩略图足够简单,但是如果仅仅是是为了生成缩略图而不进行视频播放的话,此刻使用MPMoviePlayerController就有点大材小用了。其实使用AVFundation框架中的AVAssetImageGenerator就可以获取视频缩略图。使用AVAssetImageGenerator获取缩略图大致分为三个步骤:

  1. 创建AVURLAsset对象(此类主要用于获取媒体信息,包括视频、声音等)。 
  2. 根据AVURLAsset创建AVAssetImageGenerator对象。 
  3. 使用AVAssetImageGenerator的copyCGImageAtTime::方法获得指定时间点的截图。
////  ViewController.m//  AVAssetImageGenerator////  Created by Kenshin Cui on 14/03/30.//  Copyright (c) 2014年 cmjstudio. All rights reserved.//#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

生成的缩略图效果:

AVAssetImageGenerator_Thumbnail


0 0