系统自带功能之视频压缩

视频压缩

AVFoundation框架中提供了视频压缩的功能,有一些应用场景,对像素要求不高,但是需要看到视频的,可以对视频进行压缩,比如微信的小视频功能。

//压缩
- (void)compression
{
      NSLog(@"压缩前大小 %f MB",[self fileSize:_videoUrl]);
    //    创建AVAsset对象
    AVAsset* asset = [AVAsset assetWithURL:_videoUrl];
    /*   创建AVAssetExportSession对象
     压缩的质量
     AVAssetExportPresetLowQuality   最low的画质最好不要选择实在是看不清楚
     AVAssetExportPresetMediumQuality  使用到压缩的话都说用这个
     AVAssetExportPresetHighestQuality  最清晰的画质

     */
    AVAssetExportSession * session = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
    //优化网络
    session.shouldOptimizeForNetworkUse = YES;
    //转换后的格式

    //拼接输出文件路径 为了防止同名 可以根据日期拼接名字 或者对名字进行MD5加密

    NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"hello.mp4"];
    //判断文件是否存在,如果已经存在删除
    [[NSFileManager defaultManager]removeItemAtPath:path error:nil];
    //设置输出路径
    session.outputURL = [NSURL fileURLWithPath:path];

    //设置输出类型  这里可以更改输出的类型 具体可以看文档描述
    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]);
            });

        }

    }];   


}

Demo地址

你可能感兴趣的:(系统自带功能)