美文网首页
iOS从相册选取视频压缩

iOS从相册选取视频压缩

作者: 爱恨的潮汐 | 来源:发表于2018-05-30 14:57 被阅读29次

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

作者:iOS骆驼
链接:https://www.jianshu.com/p/590168b65225
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

网友评论

      本文标题:iOS从相册选取视频压缩

      本文链接:https://www.haomeiwen.com/subject/vxatsftx.html