ios从相册:摄像头中获取视频

ios从相册/摄像头中获取视频

如何从相册中获取视频

使用的是一个和获取照片相同的类UIImagePickerController

//相册中获取视频
- (IBAction)clickViedoOFAlbramAction:(id)sender{
    UIImagePickerController *viedoCtr = [[UIImagePickerController alloc] init];//创建一个获取视频的类
    viedoCtr.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;//通过设置SourceType可以确定调用出来的UIImagePickerController所显示出来的界面
    viedoCtr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;//界面跳转出来的方式
    viedoCtr.delegate = self;//设置代理

    //获取相册中的所有类型
    NSArray *availabelMedia = [UIImagePickerController availableMediaTypesForSourceType:viedoCtr.sourceType];
// /* 打出available:
// (
// "public.image",
// "public.movie"
// )
// */
    //显示部分类型
    viedoCtr.mediaTypes = [NSArray arrayWithObject:availabelMedia[1]];//设置所支持的类型,显示视频,不显示照片 

    [self presentViewController:viedoCtr animated:YES completion:nil];
}

从摄像头中获取视频

这个代码和上面的代码差不多,不同点为viedoCtr.sourceType设置为了UIImagePickerControllerSourceTypeCamera,然后就直接跳转到了照相界面

//摄像头中视频
- (IBAction)clickViedoOfPhotoAction:(id)sender{
    UIImagePickerController *viedoCtr = [[UIImagePickerController alloc] init];//创建一个获取视频的类
    viedoCtr.sourceType = UIImagePickerControllerSourceTypeCamera;//通过设置SourceType可以确定调用出来的UIImagePickerController所显示出来的界面
    viedoCtr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;//界面跳转出来的方式
    viedoCtr.videoQuality = UIImagePickerControllerQualityTypeHigh;//录取视频的质量
    viedoCtr.delegate = self;//设置代理

    //获取相册中的所有类型
    NSArray *availabelMedia = [UIImagePickerController availableMediaTypesForSourceType:viedoCtr.sourceType];
    NSLog(@"availabelMedia-------------%@", availabelMedia);
    // /* 打出available:
    // (
    // "public.image",
    // "public.movie"
    // )
    // */
    //显示部分类型
    viedoCtr.mediaTypes = [NSArray arrayWithObject:availabelMedia[1]];//设置所支持的类型,设置只能拍照,或则只能录像,或者两者都可以。这个设置使得照相机跳转到录像界面
// viedoCtr.mediaTypes = [NSArray arrayWithObjects:availabelMedia[1], availabelMedia[0], nil];//设置所支持的类型,设置只能拍照,或则只能录像,或者两者都可以。这个设置使得照相机 照相,摄影 两个功能都具有了

    [self presentViewController:viedoCtr animated:YES completion:nil];
}

设置delegate中的方法

因为设置了delegate,所以我们需要实现delegate中的方法,来获取视频中的信息。
这个imagePickerController:didFinishPickingMediaWithInfo:方法在选中了相册中的视屏,或者录制完视频之后,调用。
>
注1:我们在调用这个方法的时候,可以将info中的信息打印出来,然后看看里面有什么信息,再根据这些信息来编写代码。
>
注2:这个方法,我们获取的信息为这个相册视频的URL

'#pragma mark- UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ //判断是不是视频类型 NSLog(@"%@", info); if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:@"public.movie"] == YES) {//判断 获取的数据是为什么类型 NSURL *pathUrl = [info objectForKey:UIImagePickerControllerMediaURL];//获取URL if ([info objectForKey:@"UIImagePickerControllerReferenceURL"] == nil) {//为录制视频 //将录取的视屏保存到相册中 ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; [assetsLibrary writeVideoAtPathToSavedPhotosAlbum:pathUrl completionBlock:^(NSURL *assetURL, NSError *error) { NSLog(@"已经将图片存放到相册中"); }]; } [self URLToMp4:pathUrl]; } } 

将视频URL转换为MP4格式

我们从delegate方法中获取的是视频的URL,然后我们将URL转化为一个.mp4文件,存放起来。方法如下:

- (void)URLToMp4:(NSURL*)mediaUrl{
    //获取路径,并判断路径位置
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    NSString *desPath = [path stringByAppendingPathComponent:@"video.mp4"];
    //假如存在,则先删除
    if ([[NSFileManager defaultManager] fileExistsAtPath:desPath]) {
        [[NSFileManager defaultManager] removeItemAtPath:desPath error:nil];
    }

    NSURL *pathUrl = [NSURL fileURLWithPath:desPath];//获取fileUrl,注意为file
    AVURLAsset * urlAsset = [[AVURLAsset alloc] initWithURL:mediaUrl options:nil];//获取视频资源
    AVAssetExportSession *audioSession = [AVAssetExportSession exportSessionWithAsset:urlAsset presetName:AVAssetExportPreset640x480];//输出资源类创建
    /* AVAssetExportPresetLowQuality AVAssetExportPresetMediumQuality AVAssetExportPresetHighestQuality 和 AVAssetExportPreset640x480 AVAssetExportPreset960x540 AVAssetExportPreset1280x720 AVAssetExportPreset1920x1080 */

    audioSession.outputURL = pathUrl;// 资源输出路径
    audioSession.outputFileType = AVFileTypeQuickTimeMovie;//资源输出格式
    /* AVFileTypeQuickTimeMovie AVFileTypeMPEG4 AVFileTypeAppleM4V AVFileTypeAppleM4A AVFileType3GPP AVFileType3GPP2 AVFileTypeCoreAudioFormat AVFileTypeWAVE AVFileTypeAIFF AVFileTypeAIFC AVFileTypeAMR AVFileTypeMPEGLayer3 AVFileTypeSunAU AVFileTypeAC3 */

    [audioSession exportAsynchronouslyWithCompletionHandler:^{//资源输出情况获取
        switch (audioSession.status) {
            case AVAssetExportSessionStatusUnknown:
                // [self.ICMediaVideoDg ICMediaVideoSaveError:@"AVAssetExportSessionStatusUnknown"];
                break;
            case AVAssetExportSessionStatusWaiting:
                // [self.ICMediaVideoDg ICMediaVideoSaveError:@"AVAssetExportSessionStatusWaiting"];
                break;
            case AVAssetExportSessionStatusExporting:
                // [self.ICMediaVideoDg ICMediaVideoSaveError:@"AVAssetExportSessionStatusExporting"];
                break;
            case AVAssetExportSessionStatusCompleted: {
                NSLog(@"成功");
                [self dismissViewControllerAnimated:YES completion:nil];
            }
                break;
            case AVAssetExportSessionStatusFailed:{
                NSLog(@"失败");
                [self dismissViewControllerAnimated:YES completion:nil];
            }
                [self dismissViewControllerAnimated:YES completion:nil];
                break;
            case AVAssetExportSessionStatusCancelled: {
                NSLog(@"取消");
                [self dismissViewControllerAnimated:YES completion:nil];
            }
                break;
            default:
                break;
        }

    }];
}

>
NSURL *pathUrl1 = [NSURL URLWithString:desPath];

NSURL *pathUrl2 = [NSURL fileURLWithPath:desPath];
//打出来看看,然后看一下这两个有什么不同的
NSLog(@”pathUrl1pathUrl1pathUrl1pathUrl1%@”, pathUrl1);
NSLog(@”pathUrl2pathUrl2pathUrl2pathUrl2%@”, pathUrl2);
/*打出来的内容为:
/Users/boy128/Library/Developer/CoreSimulator/Devices/D75977FC-C1CF-4632-ACC5-5F23E883FB89/data/Containers/Data/Applicat … ideo.mp4
file:///Users/boy128/Library/Developer/CoreSimulator/Devices/D75977FC-C1CF-4632-ACC5-5F23E883FB89/data/Containers/Data/Application/FB33D1A7-710C-493B-8F81-6A1F9D791299/Documents/video.mp4
*/

你可能感兴趣的:(ios,视频)