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 ...
随机推荐
- void (*f(int, void (*)(int)))(int) 函数解析 转
今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往往使初学者 ...
- MVC3的一个意外的异常 String was not recognized as a valid Boolean. @using (Html.BeginForm())
客户的网站放在一个虚拟空间,之间都没有修改过程序.可是网站的后台登录页面报错 String was not recognized as a valid Boolean. ,错误指向@using (H ...
- javascript日用代码集合(一)
获取url参数 function get_url_param(name){ var reg = new RegExp("(^|&)" + name + "=([^ ...
- RAC oracle删除数据库
24:site2-DMS1:~ # su - oracleoracle@site2-DMS1:~> sqlplus / as sysdba SQL*Plus: Release 11.2.0.3. ...
- [UOJ 25] [IOI 2014] Wall 【线段树】
题目链接:UOJ - 25 题目分析 每个操作就是将被操作的数限制在一个区间,比如 Set_Max(5) 就是将被操作的数限定在了 [5, INF] 的区间里. 这些操作是可加的,但是必须按照顺序,不 ...
- Early 80386 CPUs
Assembling a detailed and accurate history of the 80386, including a complete listing of all the &qu ...
- Java语言基础(五) Java原始数据类型的分类以及数据范围
Java原始数据类型的分类以及数据范围 1.基本数据类型分为:整型(byte, short, int, long),浮点型(float, double),字符型(char),布尔型(boolean) ...
- WITH AS and materialize hints
WITH AS: 就是将一个子查询部分独立出来,有时候是为了提高SQL语句的可读性,有时候是为了提高SQL语句性能. 如果一个SQL语句中,某个表会被访问多次,而且每次访问的限制条件一样的话,就可以使 ...
- 疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现
疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现 神级虚拟技术&云计算专家”小耗子”老师震撼分享 全球第—部完整深入的中文VirtualBox技术全程实战手册 全 ...
- Android TextView setText内嵌html标签
由于得到的数据是保存在数据库里面的,不好对数据的某一部分进行操作.解决办法在数据库里面存数据的时候加上html的标签对, 如data = <中华人名共和国道路交通安全实施条例>第<u ...