ios从相册:摄像头中获取视频
ios从相册/摄像头中获取视频
如何从相册中获取视频
使用的是一个和获取照片相同的类UIImagePickerController
//相册中获取视频
- (IBAction)clickViedoOFAlbramAction:(id)sender{
UIImagePickerController *viedoCtr = [[UIImagePickerController alloc] init];//创建一个获取视频的类
viedoCtr.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;//通过设置SourceType可以确定调用出来的UIImagePickerController所显示出来的界面
viedoCtr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;//界面跳转出来的方式
viedoCtr.delegate = self;//设置代理
//获取相册中的所有类型
NSArray *availabelMedia = [UIImagePickerController availableMediaTypesForSourceType:viedoCtr.sourceType];
// /* 打出available:
// (
// "public.image",
// "public.movie"
// )
// */
//显示部分类型
viedoCtr.mediaTypes = [NSArray arrayWithObject:availabelMedia[1]];//设置所支持的类型,显示视频,不显示照片
[self presentViewController:viedoCtr animated:YES completion:nil];
}
从摄像头中获取视频
这个代码和上面的代码差不多,不同点为viedoCtr.sourceType设置为了UIImagePickerControllerSourceTypeCamera,然后就直接跳转到了照相界面
//摄像头中视频
- (IBAction)clickViedoOfPhotoAction:(id)sender{
UIImagePickerController *viedoCtr = [[UIImagePickerController alloc] init];//创建一个获取视频的类
viedoCtr.sourceType = UIImagePickerControllerSourceTypeCamera;//通过设置SourceType可以确定调用出来的UIImagePickerController所显示出来的界面
viedoCtr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;//界面跳转出来的方式
viedoCtr.videoQuality = UIImagePickerControllerQualityTypeHigh;//录取视频的质量
viedoCtr.delegate = self;//设置代理
//获取相册中的所有类型
NSArray *availabelMedia = [UIImagePickerController availableMediaTypesForSourceType:viedoCtr.sourceType];
NSLog(@"availabelMedia-------------%@", availabelMedia);
// /* 打出available:
// (
// "public.image",
// "public.movie"
// )
// */
//显示部分类型
viedoCtr.mediaTypes = [NSArray arrayWithObject:availabelMedia[1]];//设置所支持的类型,设置只能拍照,或则只能录像,或者两者都可以。这个设置使得照相机跳转到录像界面
// viedoCtr.mediaTypes = [NSArray arrayWithObjects:availabelMedia[1], availabelMedia[0], nil];//设置所支持的类型,设置只能拍照,或则只能录像,或者两者都可以。这个设置使得照相机 照相,摄影 两个功能都具有了
[self presentViewController:viedoCtr animated:YES completion:nil];
}
设置delegate中的方法
因为设置了delegate,所以我们需要实现delegate中的方法,来获取视频中的信息。
这个imagePickerController:didFinishPickingMediaWithInfo:方法在选中了相册中的视屏,或者录制完视频之后,调用。
>
注1:我们在调用这个方法的时候,可以将info中的信息打印出来,然后看看里面有什么信息,再根据这些信息来编写代码。
>
注2:这个方法,我们获取的信息为这个相册视频的URL
'#pragma mark- UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
//判断是不是视频类型
NSLog(@"%@", info);
if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:@"public.movie"] == YES) {//判断 获取的数据是为什么类型
NSURL *pathUrl = [info objectForKey:UIImagePickerControllerMediaURL];//获取URL
if ([info objectForKey:@"UIImagePickerControllerReferenceURL"] == nil) {//为录制视频
//将录取的视屏保存到相册中
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary writeVideoAtPathToSavedPhotosAlbum:pathUrl completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"已经将图片存放到相册中");
}];
}
[self URLToMp4:pathUrl];
}
}
将视频URL转换为MP4格式
我们从delegate方法中获取的是视频的URL,然后我们将URL转化为一个.mp4文件,存放起来。方法如下:
- (void)URLToMp4:(NSURL*)mediaUrl{
//获取路径,并判断路径位置
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *desPath = [path stringByAppendingPathComponent:@"video.mp4"];
//假如存在,则先删除
if ([[NSFileManager defaultManager] fileExistsAtPath:desPath]) {
[[NSFileManager defaultManager] removeItemAtPath:desPath error:nil];
}
NSURL *pathUrl = [NSURL fileURLWithPath:desPath];//获取fileUrl,注意为file
AVURLAsset * urlAsset = [[AVURLAsset alloc] initWithURL:mediaUrl options:nil];//获取视频资源
AVAssetExportSession *audioSession = [AVAssetExportSession exportSessionWithAsset:urlAsset presetName:AVAssetExportPreset640x480];//输出资源类创建
/*
AVAssetExportPresetLowQuality
AVAssetExportPresetMediumQuality
AVAssetExportPresetHighestQuality
和
AVAssetExportPreset640x480
AVAssetExportPreset960x540
AVAssetExportPreset1280x720
AVAssetExportPreset1920x1080
*/
audioSession.outputURL = pathUrl;// 资源输出路径
audioSession.outputFileType = AVFileTypeQuickTimeMovie;//资源输出格式
/*
AVFileTypeQuickTimeMovie
AVFileTypeMPEG4
AVFileTypeAppleM4V
AVFileTypeAppleM4A
AVFileType3GPP
AVFileType3GPP2
AVFileTypeCoreAudioFormat
AVFileTypeWAVE
AVFileTypeAIFF
AVFileTypeAIFC
AVFileTypeAMR
AVFileTypeMPEGLayer3
AVFileTypeSunAU
AVFileTypeAC3
*/
[audioSession exportAsynchronouslyWithCompletionHandler:^{//资源输出情况获取
switch (audioSession.status) {
case AVAssetExportSessionStatusUnknown:
// [self.ICMediaVideoDg ICMediaVideoSaveError:@"AVAssetExportSessionStatusUnknown"];
break;
case AVAssetExportSessionStatusWaiting:
// [self.ICMediaVideoDg ICMediaVideoSaveError:@"AVAssetExportSessionStatusWaiting"];
break;
case AVAssetExportSessionStatusExporting:
// [self.ICMediaVideoDg ICMediaVideoSaveError:@"AVAssetExportSessionStatusExporting"];
break;
case AVAssetExportSessionStatusCompleted: {
NSLog(@"成功");
[self dismissViewControllerAnimated:YES completion:nil];
}
break;
case AVAssetExportSessionStatusFailed:{
NSLog(@"失败");
[self dismissViewControllerAnimated:YES completion:nil];
}
[self dismissViewControllerAnimated:YES completion:nil];
break;
case AVAssetExportSessionStatusCancelled: {
NSLog(@"取消");
[self dismissViewControllerAnimated:YES completion:nil];
}
break;
default:
break;
}
}];
}
>
NSURL *pathUrl1 = [NSURL URLWithString:desPath];
NSURL *pathUrl2 = [NSURL fileURLWithPath:desPath];
//打出来看看,然后看一下这两个有什么不同的
NSLog(@”pathUrl1pathUrl1pathUrl1pathUrl1%@”, pathUrl1);
NSLog(@”pathUrl2pathUrl2pathUrl2pathUrl2%@”, pathUrl2);
/*打出来的内容为:
/Users/boy128/Library/Developer/CoreSimulator/Devices/D75977FC-C1CF-4632-ACC5-5F23E883FB89/data/Containers/Data/Applicat … ideo.mp4
file:///Users/boy128/Library/Developer/CoreSimulator/Devices/D75977FC-C1CF-4632-ACC5-5F23E883FB89/data/Containers/Data/Application/FB33D1A7-710C-493B-8F81-6A1F9D791299/Documents/video.mp4
*/
ios从相册:摄像头中获取视频的更多相关文章
- ios中从相册:相机中获取图片信息
ios中从相册/相机中获取图片信息 从相册中获取图片的信息 UIImagePickerController *imgPickView = [[UIImagePickerController alloc ...
- android 中获取视频文件的缩略图(非原创)
在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...
- 从H264码流中获取视频宽高 (SPS帧) 升级篇
之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...
- opencv 从摄像头中读取视频并保存(c++版)
原文:http://blog.csdn.net/zhongshijunacm/article/details/68947890 OpenCV中的视频操作函数如下表所列: VideoCapture Vi ...
- iOS从健康app中获取步数信息
统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...
- ios 从相册视频中获取视频截图
//给image添加个分类 +(UIImage *)getImage:(NSURL: *)videoURL { AVURLAsset *asset = [[AVURLAsset alloc] init ...
- 从H264码流中获取视频宽高 (SPS帧)
获取.h264视频宽高的方法 花了2个通宵终于搞定.(后面附上完整代码) http://write.blog.csdn.net/postedit/7852406 图像的高和宽在H264的SPS帧中.在 ...
- ios 从url字符串中获取图片名字
NSString *str = @"http://pic92.nipic.com/file/20160323/22486259_160209631000_2.jpg"; NSLog ...
- ios 自定义cell类中获取当前controller push
有时候在自定义cell的过程中,当cell中又button的时候,把button的点击时间写在cell中的时候,需要获取到cell的父视图控制器然后push,可以自建一个类,命名为: GetCurre ...
随机推荐
- 【C语言】中的stdbool.h头文件
C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...
- JSP中两种模式的总结
运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...
- MySQL创建用户、授权等
用于MySQL5.6命令行执行成功: create database wp_people; create user wp_people@'localhost' identified by 'yrwb' ...
- servlet监听器实现在线人数统计
一.准备知识 servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. filter:fi ...
- JdbcTemplate 操作Oracle Blob
1:增加操作 public int addTest(TestVo tv) { byte bz[] = tv.getBz().getBytes(); LobHandler lobHandler = ne ...
- C语言中.h和.c文件解析
整理自C语言中.h和.c文件解析(很精彩) Part.1(林锐<高质量C/C++编程>) 通过头文件来调用库功能.在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的 ...
- LeetCode解题报告:Reorder List
Reorder List Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… Yo ...
- struts1 工作原理
struts1的原理和工作流程 struts1的工作原理或者说工作流程: 1.在web应用程序启动就会加载ActionServlet,ActionServlet从配置文件struts-config.x ...
- openwrt使用3G上网卡
尊敬的大大.感谢你抽空指导我 我的设备是db120 mu350 和广东无限卡 版本是OpenWrt Backfire 10.03.336 DIY full 一. 没有安装到kmod-us ...
- ☀【HTML5】Modernizr
Modernizr 使用Modernizr探测HTML5/CSS3新特性