之前公司在做一个聊天的项目,里面用到了发送视频的功能,由于一些视频是从苹果的相册里读取的,所以拿到的文件比较大,服务器对上传的文件大小有限制,所以就做了视频压缩的功能,和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);
//在这里可以拿到压缩完的视频输出路径进行文件上传
}
}
}];
}