zoukankan      html  css  js  c++  java
  • UIImagePickerController 视频录制操作,视频大小,时间长度

    一:使用 iOS 系统 UIImagePickerController

    • 获取视频大小
    • 获取视频长度
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        self.title = @"AVVideo Demo";
        CGRect theFrame = CGRectMake(10, 15, 130, 20);
        [self addOpBtnWith:@"pick Video" frame:theFrame action:@selector(pickVideoTaped)];
        
        theFrame = CGRectMake(150, 15, 130, 20);
        [self addOpBtnWith:@"转成mp4" frame:theFrame action:@selector(revoverToMp4)];
    
    }
    
    
    
    #pragma mark action
    
    //转换格式为 mp4
    - (void)revoverToMp4
    {
        AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:_videoURL options:nil];
        NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];
        
        if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality])
            
        {
       
            
            AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset
                                                                                  presetName:AVAssetExportPresetHighestQuality];
            NSDateFormatter* formater = [[NSDateFormatter alloc] init];
            [formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss"];
            NSString* _mp4Path = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4", [formater stringFromDate:[NSDate date]]];
            
            exportSession.outputURL = [NSURL fileURLWithPath: _mp4Path];
            exportSession.shouldOptimizeForNetworkUse = YES;
            exportSession.outputFileType = AVFileTypeMPEG4;
            [exportSession exportAsynchronouslyWithCompletionHandler:^{
                switch ([exportSession status]) {
                    case AVAssetExportSessionStatusFailed:
                    {
                        UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                        message:[[exportSession error] localizedDescription]
                                                                       delegate:nil
                                                              cancelButtonTitle:@"OK"
                                                              otherButtonTitles: nil];
                        [alert show];
                        break;
                    }
                        
                    case AVAssetExportSessionStatusCancelled:
                        NSLog(@"Export canceled");
                        break;
                    case AVAssetExportSessionStatusCompleted:
                        NSLog(@"Successful!");
                        NSLog(@"%@",_mp4Path);
                        NSLog(@"file Size %ldk",(long)[self getFileSize:_mp4Path]);
                        break;
                    default:
                        break;
                }
            }];
        }
        else
        {
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                            message:@"AVAsset doesn't support mp4 quality"
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles: nil];
            [alert show];
        }
    
    }
    
    //弹出视频拍摄
    
    - (void)pickVideoTaped
    {
        pickVideo = [[UIImagePickerController alloc]init];
        pickVideo.sourceType = UIImagePickerControllerSourceTypeCamera;
        NSArray* availableMedia = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
        pickVideo.mediaTypes = [NSArray arrayWithObject:availableMedia[1]];
        pickVideo.delegate = self;
        
        [self presentViewController:pickVideo animated:YES completion:nil];
        
    
        
    }
    #pragma mark - UIImagePickerControllerDelegate
    
    //拍照完成代理
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        NSLog(@"%@",info);
        
        _videoURL = info[UIImagePickerControllerMediaURL];
        NSString * size = [NSString stringWithFormat:@"%ld kb", (long)[self getFileSize:[[_videoURL absoluteString] substringFromIndex:16]]];
        NSString *length = [NSString stringWithFormat:@"%.0f s", [self getVideoDuration:_videoURL]];
        
        NSLog(@"-------------%@%@",size,length);
        
        [picker dismissViewControllerAnimated:YES completion:nil];
        
    }
    
    //取消代理
    
    - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
    {
        [picker dismissViewControllerAnimated:YES completion:nil];
    }
    
    //获取视频时间
    - (CGFloat) getVideoDuration:(NSURL*) URL
    {
        NSDictionary *opts = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
                                                         forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
        AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:URL options:opts];
        float second = 0;
        second = urlAsset.duration.value/urlAsset.duration.timescale;
        return second;
    }
    
    //获取视频 大小
    - (NSInteger) getFileSize:(NSString*) path
    {
        NSFileManager * filemanager = [[NSFileManager alloc]init];
        if([filemanager fileExistsAtPath:path]){
            NSDictionary * attributes = [filemanager attributesOfItemAtPath:path error:nil];
            NSNumber *theFileSize;
            if ( (theFileSize = [attributes objectForKey:NSFileSize]) )
                return  [theFileSize intValue]/1024;
            else
                return -1;
        }
        else
        {
            return -1;
        }
    }
    
    - (void)addOpBtnWith:(NSString *)name frame:(CGRect)frame action:(SEL)action
    {
        UIButton *aBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        aBtn.frame = frame;
        [aBtn setTitle:name forState:UIControlStateNormal];
        [aBtn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
        
        [self.view addSubview:aBtn];
    }
  • 相关阅读:
    (转载)如何通过Nicholas C. Zakas的面试
    (转载)Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
    JavaScript程序开发(十三)—RegExp类型
    (转载)Nicholas C. Zakas如何面试前端工程师
    通用JS12——》变量、作用域与内存
    vuecli4 配置多页应用入坑详解
    事件委托
    nodejs中传入变量和格式说明符号来格式化用语
    原生js实现轮播图
    同步任务和异步任务
  • 原文地址:https://www.cnblogs.com/cocoajin/p/3494290.html
Copyright © 2011-2022 走看看