zoukankan      html  css  js  c++  java
  • 相册--视频压缩

    iOS视频压缩AVAssetExportSession

    字数55 阅读3 评论0 

    AVAssetExportSession是系统自带的压缩
    首先导入头文件

    #import <AVFoundation/AVFoundation.h>
    #import <MobileCoreServices/MobileCoreServices.h>
    #import <AssetsLibrary/AssetsLibrary.h>

    设置代理

    <UIImagePickerControllerDelegate,UINavigationControllerDelegate>

    //打开视频库

    - (IBAction)openLibrary:(id)sender {

        

        //    申请打开视频库权限

        

        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

        if (authStatus == AVAuthorizationStatusRestricted

            || authStatus == AVAuthorizationStatusDenied) {

            NSLog(@"摄像头已被禁用,您可在设置应用程序中进行开启");

            return;

        }

        

        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {

            UIImagePickerController *picker = [[UIImagePickerController alloc] init];

            picker.delegate = self;

            picker.allowsEditing = YES;

            picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

            picker.mediaTypes = @[(NSString *)kUTTypeMovie];

            [self presentViewController:picker animated:YES completion:NULL];

        } else {

            NSLog(@"手机不支持摄像");

        }

        

        

    }

     

     

     

    //视频选择完成后调用

     

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {

        //获取选择的媒体类型

        NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];

        if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {

            NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];

            NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%ld_compressedVideo.mp4",time(NULL)]];

            

            NSLog(@"compressedVideoSavePath : %@",path);

            NSLog(@"选中,压缩前大小 %f MB",[self fileSize:videoURL]);

     

            //压缩

            AVURLAsset *avAsset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];

            NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];

            if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality]) {

                

                AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPreset640x480];  //AVAssetExportPreset640x480  压缩质量(可更改)

                //输出URL

                exportSession.outputURL = [NSURL fileURLWithPath:path];

                //优化网络

                exportSession.shouldOptimizeForNetworkUse = true;

                //转换后的格式

                exportSession.outputFileType = AVFileTypeMPEG4;

                //异步导出

                [exportSession exportAsynchronouslyWithCompletionHandler:^{

                    // 如果导出的状态为完成

                    if ([exportSession status] == AVAssetExportSessionStatusCompleted) {

                        [self saveVideo:[NSURL fileURLWithPath:path]];

                        NSLog(@"压缩完毕,压缩后大小 %f MB",[self fileSize:[NSURL fileURLWithPath:path]]);

                    }else{

                        NSLog(@"当前压缩进度:%f",exportSession.progress);

                    }

                    NSLog(@"错误:%@",exportSession.error);

                    

                }];

            }

        }

        

        [self dismissViewControllerAnimated:YES completion:nil];

    }

     

     

    //存入相册

    - (void)saveVideo:(NSURL *)outputFileURL

    {

        //ALAssetsLibrary提供了我们对iOS设备中的相片、视频的访问。

        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

        [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL completionBlock:^(NSURL *assetURL, NSError *error) {

            if (error) {

                NSLog(@"保存视频失败:%@",error);

            } else {

                NSLog(@"保存视频到相册成功");

            }

        }];

    }

     

     

    //获取压缩后的大小

    - (CGFloat)fileSize:(NSURL *)path

    {

        return [[NSData dataWithContentsOfURL:path] length]/1024.00 /1024.00;

    }

     

    //清除沙盒文件中, 压缩后的视频所有

    - (void)removeCompressedVideoFromDocuments {

        NSFileManager *manager = [NSFileManager defaultManager];

        if ([manager fileExistsAtPath:(沙盒中的路径)]) {

            [[NSFileManager defaultManager] removeItemAtPath:(沙盒中的路径) error:nil];

        }

    }

     

  • 相关阅读:
    自动生成build.xml文件
    【luogu 3371】【模板】单源最短路径
    【noip 2005】 采药
    【poj 3253】Fence Repair
    【poj 3069】Saruman's Army
    【poj 3617】Best Cow Line
    【poj 2386】Lake Counting
    【noip 2010】 关押罪犯
    【rqnoj 343】mty的考验
    【codevs 1073】家族
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6066710.html
Copyright © 2011-2022 走看看