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];
}
原文地址:https://www.cnblogs.com/cocoajin/p/3494290.html