前提:先添加AVFoundation和CoreMedia兩個框架。
一 、利用MPMoviePlayerController實現
核心方法:
獲取在指定播放時間的視頻縮略圖
-(void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option;
第一個參數是獲取縮略圖的時間點數組
第二個參數代表時間點精度,枚舉類型:
MPMovieTimeOptionNearestKeyFrame
:時間點附近MPMovieTimeOptionExact
:準確時間
相關方法:
- 取消所有縮略圖獲取請求
-(void)cancelAllThumbnailImageRequests;
- 縮略圖請求完成之后的通知
MPMoviePlayerThumbnailImageRequestDidFinishNotification
二 、利用AVFoundation實現
思路:
- 創建AVURLAsset對象(此類主要用于獲取媒體信息,包括視頻、聲音等)。
- 根據AVURLAsset創建AVAssetImageGenerator對象。
- 使用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;
}
}