你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 使用AVFoundation生成縮略圖

使用AVFoundation生成縮略圖

編輯:IOS開發基礎

通過前面的方法大家應該已經看到,使用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

生成的縮略圖效果:

1.png

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved