視頻壓縮
AVFoundation框架中提供了視頻壓縮的功能,有一些應(yīng)用場(chǎng)景,對(duì)像素要求不高,但是需要看到視頻的,可以對(duì)視頻進(jìn)行壓縮,比如微信的小視頻功能。
//壓縮
- (void)compression{
NSLog(@"壓縮前大小 %f MB",[self fileSize:_videoUrl]);
// 創(chuàng)建AVAsset對(duì)象
AVAsset* asset = [AVAsset assetWithURL:_videoUrl];
/*
創(chuàng)建AVAssetExportSession對(duì)象
壓縮的質(zhì)量
AVAssetExportPresetLowQuality 最low的畫(huà)質(zhì)最好不要選擇實(shí)在是看不清楚
AVAssetExportPresetMediumQuality 使用到壓縮的話(huà)都說(shuō)用這個(gè)
AVAssetExportPresetHighestQuality 最清晰的畫(huà)質(zhì)
*/
AVAssetExportSession * session = [[AVAssetExportSession alloc]
initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
//優(yōu)化網(wǎng)絡(luò)
session.shouldOptimizeForNetworkUse = YES;
//轉(zhuǎn)換后的格式
//拼接輸出文件路徑 為了防止同名 可以根據(jù)日期拼接名字 或者對(duì)名字進(jìn)行MD5加密
NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]
stringByAppendingPathComponent:@"hello.mp4"];
//判斷文件是否存在,如果已經(jīng)存在刪除
[[NSFileManager defaultManager]removeItemAtPath:path error:nil];
//設(shè)置輸出路徑
session.outputURL = [NSURL fileURLWithPath:path];
//設(shè)置輸出類(lèi)型 這里可以更改輸出的類(lèi)型 具體可以看文檔描述
session.outputFileType = AVFileTypeMPEG4;
[session exportAsynchronouslyWithCompletionHandler:^{
NSLog(@"%@",[NSThread currentThread]);
//壓縮完成
if(session.status==AVAssetExportSessionStatusCompleted) {
//在主線(xiàn)程中刷新UI界面,彈出控制器通知用戶(hù)壓縮完成 dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"導(dǎo)出完成");
CompressURL = session.outputURL;
NSLog(@"壓縮完畢,壓縮后大小 %f MB",[self fileSize:CompressURL]);
});
}
}];
}