您的位置:首页 > 产品设计 > UI/UE

UIImagePickerController 视频录制操作,视频大小,时间长度

2013-12-27 15:43 651 查看
一:使用 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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: