ios-视频录制保存

一般来说,我们应该都会用到这两个功能所以下面就简单的描述下,记录下了,其实我们如果想要去录制视频的话,其实和选择照片是很像的,如下所示,注意的时候下面用到的kUTTypeMovie默认是不识别的,所以我们需要去导入一个框架#import <MobileCoreServices/MobileCoreServices.h>,还有就是我们需要设置mediaTypes为kUTTypeMovie,关于它的解释,我们其实点开kUTTypeMovie里面就能看到下面的解释


//1、判断是否可用
    if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        return;
    }
    //2、创建图像选择器
    UIImagePickerController * picker = [UIImagePickerController new];
    
    //3、设置类型
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    
    //4、设置媒体类型,我们需要用NSString去强转下
    picker.mediaTypes = @[(NSString *)kUTTypeMovie];
    
    //5、设置代理
    picker.delegate = self;
    //设置相机的检测模式
    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
    
    //设置视频的质量
    picker.videoQuality = UIImagePickerControllerQualityTypeMedium;
    
    //6.模态弹出
    [self presentViewController:picker animated:YES completion:nil];

我们可以在下面的这个代理方法中拿到我们拍摄的视频,我们可以对他进行读取和保存操作,通过打印info,我们可以得到下面的这两个东西,其中第一个key所对应的value就是kUTTypeMovie的NSString的形式。如下图所示


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    
    NSLog(@"%@",info);
    
    //1、获取媒体的类型 public.movie
    NSString * mediaType = info[UIImagePickerControllerMediaType];
    
    
    //获取url,然后下面进行播放和保存
    id url = info[UIImagePickerControllerMediaURL];
    
    //判断是否是媒体类型
    if([mediaType isEqualToString:(NSString *)kUTTypeMovie])
    {
        //先去判断控制器是否存在,如果不存在就是创建
       if(self.playerVC==nil)
       {
           
           self.playerVC = [AVPlayerViewController new];
           self.playerVC.view.frame = self.view.bounds;//CGRectMake(40, 40, 200, 200);
           [self.view addSubview:self.playerVC.view];
           [self.playerVC.view addSubview:self.backButton];
       }
        
         //先去用url去创建一个AVPlayer对象
        AVPlayer * player = [AVPlayer playerWithURL:url];
        
        self.playerVC.player = player;
        
    }
    //判断是不是相机类型
    if(picker.sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        NSError * error;
        //去保存视频
        [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{
            
            [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
            
        } error:&error];
    }
    
    [picker dismissViewControllerAnimated:YES completion:nil];
}
需要注意的是这里我们如果不是去通过modal出来AVPlayerViewController,而是直接把AVPlayerViewController的view加到某个视图上面的,并且是设置全屏显示的那么就不会有Done,如果不是全屏显示就会有Done。如果没有Done的话,我们可以自己去添加一个返回按钮。

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    
    NSLog(@"%@",info);
    
    //1、获取媒体的类型 public.movie
    NSString * mediaType = info[UIImagePickerControllerMediaType];
    
    
    //获取url,然后下面进行播放和保存
    id url = info[UIImagePickerControllerMediaURL];
    
    //判断是否是媒体类型
    if([mediaType isEqualToString:(NSString *)kUTTypeMovie])
    {
        //先去判断控制器是否存在,如果不存在就是创建
       if(self.playerVC==nil)
       {
           
           self.playerVC = [AVPlayerViewController new];
           self.playerVC.view.frame = CGRectMake(40, 40, 200, 200);
           [self.view addSubview:self.playerVC.view];
           [self.playerVC.view addSubview:self.backButton];
       }
        
         //先去用url去创建一个AVPlayer对象
        AVPlayer * player = [AVPlayer playerWithURL:url];
        
        self.playerVC.player = player;
        
    }
    //判断是不是相机类型
    if(picker.sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        NSError * error;
        //去保存视频
        [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{
            
            [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
            
        } error:&error];
    }
    
    [picker dismissViewControllerAnimated:YES completion:nil];
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值