一:使用 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];}