之前公司在做一個聊天的項目,里面用到了發送視頻的功能,由于一些視頻是從蘋果的相冊里讀取的,所以拿到的文件比較大,服務器對上傳的文件大小有限制,所以就做了視頻壓縮的功能,和QQ的壓縮效果一樣(系統自帶的壓縮方法)。FFmpeg雖然強大,但視頻壓縮時耗時太長,就選擇了系統方法。
核心代碼
/**
* 視頻壓縮
* @param originFilePath 視頻資源的原始路徑
* @param outputPath 輸出路徑
*/
-(void)compressVideoAccroding:(NSURL *)originFilePath withOutputUrl:(NSString *)outputPath
{
//創建一個由URL標識的代表任何資源的assert對象
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:originFilePath options:nil];
//轉碼配置 建議選擇AVAssetExportPresetMediumQuality
AVAssetExportSession *exportSession= [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
exportSession.shouldOptimizeForNetworkUse = YES;
//設置視頻轉碼輸出路徑
exportSession.outputURL = [NSURL fileURLWithPath:outputPath];
//AVFileTypeMPEG4 文件輸出類型,可以更改,是枚舉類型,官方有提供,更改該值也可以改變視頻的壓縮比例
exportSession.outputFileType = AVFileTypeMPEG4;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
int exportStatus = exportSession.status;
switch (exportStatus)
{
case AVAssetExportSessionStatusFailed:
{
NSError *exportError = exportSession.error;
NSLog (@"轉碼失敗 AVAssetExportSessionStatusFailed: %@", exportError);
break;
}
case AVAssetExportSessionStatusCompleted:
{
NSLog(@"視頻轉碼成功");
//獲取視頻縮放縮略圖片
NSData * scaleImgData = UIImageJPEGRepresentation(assets.thumbImage, 1.0);
//在這里可以拿到壓縮完的視頻輸出路徑進行文件上傳
}
}
}];
}