.m文件
#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import "UIImage+Extend.h"
#define MAX_THUMBNAIL_COUNT 5
@implementation RCSVideoProcessor
+(UIImage *)thumbnailForVideoAtPath:(NSString *)videoPath{
NSURL *videoUrl = [NSURL fileURLWithPath:videoPath];
return [self thumbnailForVideoAtURL:videoUrl];
}
+(void)thumbnailForVideoAtPath:(NSString *)videoPath completeHandler:(RCSVideoGetThumbComletionHandler)handler{
NSURL *videoUrl = [NSURL fileURLWithPath:videoPath];
[self thumbnailForVideoAtURL:videoUrl completeHandler:handler];
}
//如何截取指定时间内的视频缩略图。
+(UIImage *)thumbnailForVideoAtURL:(NSURL *)videoURL{
UIImage *resultImg = nil;
NSDictionary *options = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};
AVURLAsset *avUrlAsserRead = [[AVURLAsset alloc] initWithURL:videoURL options:options];
if ([avUrlAsserRead tracksWithMediaType:AVMediaTypeVideo].count > 0) {
AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:avUrlAsserRead];
imageGenerator.appliesPreferredTrackTransform = YES;
Float64 durations = CMTimeGetSeconds([avUrlAsserRead duration]);
//预设5个时间点,如果取到的图片为纯色,则从下一个时间点取缩略图,如果5张图都是纯色,返回第五张图片
for (int i = 0; i < MAX_THUMBNAIL_COUNT; i++) {
CMTime time = CMTimeMake(durations * i/MAX_THUMBNAIL_COUNT, 600);//缩略图创建时间 CMTime是表示电影时间信息的结构体,第一个参数表示是视频第几秒,第二个参数表示每秒帧数.(如果要活的某一秒的第几帧可以使用CMTimeMake方法)
NSError *error = nil;
CMTime actualTime;//缩略图实际生成的时间
CGImageRef cgImage = [imageGenerator copyCGImageAtTime:time actualTime:&actualTime error:&error];
UIImage *result = [[UIImage alloc] initWithCGImage:cgImage];
CGImageRelease(cgImage);
if (![result isPureColor] || ((MAX_THUMBNAIL_COUNT - 1) == i)) {
resultImg = result;
break;
}
}
}
return resultImg;
}
#pragma mark -
#pragma mark - 压缩视频
+(void)compressVideoAtURL:(NSURL *)sourceURL toDestination:(NSURL *)destURL{
[self lowQuailtyWithInputURL:sourceURL outputURL:destURL blockHandler:^(AVAssetExportSession *session){
AVAssetExportSessionStatus status = session.status;
if (AVAssetReaderStatusCompleted == status) {
NSData *sourdeData = [NSData dataWithContentsOfURL:sourceURL];
NSData *destData = [NSData dataWithContentsOfURL:destURL];
if ([sourdeData isEqualToData:destData]) {
}
else{
}
}else{
}
}];
}
+ (void)lowQuailtyWithInputURL:(NSURL*)inputURL
outputURL:(NSURL*)outputURL
blockHandler:(void (^)(AVAssetExportSession*))handler
{
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil];
AVAssetExportSession *session = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
session.outputURL = outputURL;
session.outputFileType = AVFileTypeQuickTimeMovie;
[session exportAsynchronouslyWithCompletionHandler:^{
handler(session);
}];
}