視頻壓縮
AVFoundation框架中提供了視頻壓縮的功能辉饱,有一些應用場景钢颂,對像素要求不高犀忱,但是需要看到視頻的募谎,可以對視頻進行壓縮,比如微信的小視頻功能阴汇。
//壓縮
- (void)compression{
NSLog(@"壓縮前大小 %f MB",[self fileSize:_videoUrl]);
// 創(chuàng)建AVAsset對象
AVAsset* asset = [AVAsset assetWithURL:_videoUrl];
/*
創(chuàng)建AVAssetExportSession對象
壓縮的質(zhì)量
AVAssetExportPresetLowQuality 最low的畫質(zhì)最好不要選擇實在是看不清楚
AVAssetExportPresetMediumQuality 使用到壓縮的話都說用這個
AVAssetExportPresetHighestQuality 最清晰的畫質(zhì)
*/
AVAssetExportSession * session = [[AVAssetExportSession alloc]
initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
//優(yōu)化網(wǎng)絡(luò)
session.shouldOptimizeForNetworkUse = YES;
//轉(zhuǎn)換后的格式
//拼接輸出文件路徑 為了防止同名 可以根據(jù)日期拼接名字 或者對名字進行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è)置輸出類型 這里可以更改輸出的類型 具體可以看文檔描述
session.outputFileType = AVFileTypeMPEG4;
[session exportAsynchronouslyWithCompletionHandler:^{
NSLog(@"%@",[NSThread currentThread]);
//壓縮完成
if(session.status==AVAssetExportSessionStatusCompleted) {
//在主線程中刷新UI界面,彈出控制器通知用戶壓縮完成 dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"導出完成");
CompressURL = session.outputURL;
NSLog(@"壓縮完畢,壓縮后大小 %f MB",[self fileSize:CompressURL]);
});
}
}];
}