- (CGFloat)fileSize:(NSURL *)path
{
return [[NSData dataWithContentsOfURL:path] length]/1024.00/1024.00;
}
//压缩
-
(void)compression {
// CFAbsoluteTime startTime =CFAbsoluteTimeGetCurrent();
NSLog(@"压缩前大小 %f MB",[self fileSize:_videoUrl]);
// 创建AVAsset对象
AVAsset* asset = [AVAsset assetWithURL:_videoUrl];
/*
创建AVAssetExportSession对象
压缩的质量
AVAssetExportPresetLowQuality 最low的画质最好不要选择实在是看不清楚
AVAssetExportPresetMediumQuality 使用到压缩的话都说用这个
AVAssetExportPresetHighestQuality 最清晰的画质
*/
AVAssetExportSession * session = [[AVAssetExportSession alloc]
initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
//优化网络
session.shouldOptimizeForNetworkUse = YES;//转换后的格式
//拼接输出文件路径 为了防止同名 可以根据日期拼接名字 或者对名字进行MD5加密
NSString* path = [KJUtility kj_getKJAlbumFilePath];
NSString* name = [KJUtility kj_getNewFileName];NSString* videoPath = [path stringByAppendingPathComponent:name];
//判断文件是否存在,如果已经存在删除
[[NSFileManager defaultManager] removeItemAtPath:videoPath error:nil];
//设置输出路径
session.outputURL = [NSURL fileURLWithPath:videoPath];
//设置输出类型 这里可以更改输出的类型 具体可以看文档描述
session.outputFileType = AVFileTypeMPEG4;[session exportAsynchronouslyWithCompletionHandler:^{
NSLog(@"%@",[NSThread currentThread]);
//压缩完成
if(session.status==AVAssetExportSessionStatusCompleted) {
CompressURL = session.outputURL;
NSLog(@"压缩完毕,压缩后大小 %f MB",[self fileSize:CompressURL]);
// CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);
// NSLog(@"Linked in %f ms", linkTime *1000.0);
};
}];
}
网友评论