UIImagePickerController 视频录制操作,视频大小,时间长度
一:使用 iOS 系统 UIImagePickerController
- 获取视频大小
- 获取视频长度
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view. self.title = @"AVVideo Demo";
CGRect theFrame = CGRectMake(, , , );
[self addOpBtnWith:@"pick Video" frame:theFrame action:@selector(pickVideoTaped)]; theFrame = CGRectMake(, , , );
[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[]];
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:]]];
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 = ;
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]/;
else
return -;
}
else
{
return -;
}
} - (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];
}
UIImagePickerController 视频录制操作,视频大小,时间长度的更多相关文章
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...
- iOS开发----音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- 音频播放、录音、视频播放、拍照、视频录制-b
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- iOS音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
- Android开发笔记——视频录制播放常见问题
本文分享自己在视频录制播放过程中遇到的一些问题,主要包括: 视频录制流程 视频预览及SurfaceHolder 视频清晰度及文件大小 视频文件旋转 一.视频录制流程 以微信为例,其录制触发为按下(住) ...
- Android使用MediaRecorder和Camera实现视频录制及播放功能整理
转载请注明出处:http://blog.csdn.net/woshizisezise/article/details/51878566 这两天产品经理向我丢来一个新需求,需要在项目里添加一个视频录制的 ...
- 《高级软件测试》11.16.Jira使用说明的撰写和操作视频的录制
今日任务完成情况如下: 小王:完成了测试管理工具jira的使用手册中,基本情况介绍.下载安装部分的撰写工作:小高:参考官方手册,结合自己的实际使用体会,对jira的基本组成及其工作流程进行了介绍:小陈 ...
- iOS视频录制、压缩导出、取帧
概述 花了点时间研究了一下常用的视频获取.录制.压缩.取帧图功能,分享给大家了!相信阅读完本篇文章,会对你有很大的帮助的! 本篇文章研究几下以个功能: 视频录制 从相册选择视频 保持视频到相册 获取视 ...
- Android实现视频录制
安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接 ...
随机推荐
- php 获取指定月份的开始结束时间
/** * * 获取指定年月的开始和结束时间戳 * * @param int $y 年份 * @param int $m 月份 * @return array(开始时间,结束时间) */ functi ...
- CodeForces 731E Funny Game
博弈,$dp$. 设$f[i]$表示 如果先手第一次出手取到位置$i$,直到游戏结束,双方均采取最优策略,先手-后手得分的差值. 那么$f[i]=min(sum[i]-sum[j]+maxf[j+1] ...
- Bzoj 3498 Cakes(三元环)
题面(权限题就不放题面了) 题解 三元环模板题,按题意模拟即可. #include <cstdio> #include <cstring> #include <vecto ...
- Sd - JavaBase问题
1. Java有哪些基本数据类型 2. Java基本数据类型和引用类型的区别 3. Java的多态 4. Override和Overload的区别 5. Java内部类 6. 继承和组合的比较 7. ...
- [BZOJ 3326] 数数
Link: BZOJ 3326 传送门 Solution: 明显是一道数位$dp$的题目,就是递推式复杂了点 先要求出一个数$\bar{n}$向添加一位后的$\bar{np}$的转化关系 令$res[ ...
- 【后缀自动机】【拓扑排序】【动态规划】hihocoder1457 后缀自动机四·重复旋律7
解题方法提示 小Hi:我们已经学习了后缀自动机,今天我们再来看这道有意思的题. 小Ho:好!这道题目让我们求的是若干的数字串所有不同子串的和. 小Hi:你能不能结合后缀自动机的性质来思考如何解决本题? ...
- 【单调队列DP+manacher】BZOJ2565-最长双回文串
[题目大意] 输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串. [思路] 首先普通地求manacher,然后求出以每个位置为左端点和右端 ...
- NNVM代码阅读
op.h #define DMLC_ATTRIBUTE_UNUSED __attribute__((unused)) __attribute__((unused)):通常,如果声明了某个变量,但从未对 ...
- bootstrap学习(全局CSS样式)(一)
布局容器 bootstrap需要为页面内容和栅格系统包裹一个.container容器.我们提供了两个作词用处的类.注意,由于padding等属性的原因,这两种容器类不能互相嵌套. .container ...
- Educational Codeforces Round 7 F. The Sum of the k-th Powers 拉格朗日插值法
F. The Sum of the k-th Powers 题目连接: http://www.codeforces.com/contest/622/problem/F Description Ther ...