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