使用AVFoundation生成縮略圖

DustinPorti 8年前發布 | 5K 次閱讀 iOS開發 移動開發 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 @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

生成的縮略圖效果:

 

來自:http://www.cocoachina.com/ios/20161114/18066.html

 

 本文由用戶 DustinPorti 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!