使用AVFoundation生成縮略圖
通過前面的方法大家應該已經看到,使用MPMoviePlayerController來生成縮略圖足夠簡單,但是如果僅僅是是為了生成縮略圖而不進行視頻播放的話,此刻使用MPMoviePlayerController就有點大材小用了。其實使用AVFundation框架中的AVAssetImageGenerator就可以獲取視頻縮略圖。使用AVAssetImageGenerator獲取縮略圖大致分為三個步驟:
-
創建AVURLAsset對象(此類主要用于獲取媒體信息,包括視頻、聲音等)。
-
根據AVURLAsset創建AVAssetImageGenerator對象。
-
使用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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!