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 ...
随机推荐
- Cinder-1 TinderBox
Cinder:http://libcinder.org/,当前版本是0.8.5,代码托管位置:https://github.com/cinder/Cinder.git 下载Cinder之后,其目录结构 ...
- 调用相册怎么设置剪裁-b
//创建一个相册控制器 UIImagePickerController *pc = [[UIImagePickerController alloc] init]; //图片来源// UIImagePi ...
- tyvj 1934 高精度
「Poetize3」Heaven Cow与God Bull From wwwwodddd 背景 Background __int64 ago,there's a heaven cow call ...
- OTG线与普通USB线的区别
转自OTG线与普通USB线的区别 USB数据线是我们常见的设备,OTG线作为近年来随着手机行业的快速发展,逐步进入了我们的日常使用范围.OTG线与普通USB线的有什么区别? USB数据线用 ...
- Hibernate 注意命名与数据库关键字的冲突 处理方法
比如你映射了一个名称为key的属性,这是数据库所不允许的,因为它是数据库的关键字. 因此,你必须为此属性添加一对符号,即键盘上“1”键的左边的按键.
- MySQL的if,case语句
IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为exp ...
- BZOJ3715: [PA2014]Lustra
3715: [PA2014]Lustra Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 237 Solved: 149[Submit][Status ...
- git_share
linux 环境(192.168.8.58) 1. 生成rsa key $ ssh-keygen 如果你之前没有跑过这个文件, 接受默认选项即可. 这样你会在 ~/.ssh/下看到 id_rsa和id ...
- Unity3d HDR和Bloom效果(高动态范围图像和泛光)
文章开始先放两组效果,文章结尾再放两组效果本文测试场景资源来自浅墨大神,shader效果为本文效果 HDR 人们有限的视觉系统,只支持16.7百万的颜色,超出这个范围的颜色就不能显示了bmp或jprg ...
- 【索引】Objective-C基础教程-读书笔记
第1章 启程 http://www.cnblogs.com/duxiuxing/p/5492219.html 第2章 对C的扩展 第3章 面向对象编程的基础知识 第4章 继承 第5章 复合 第6章 ...