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 ...
随机推荐
- Meditation Guide
Meditation “Stop!!!” don’t we just scream[vi. 尖叫:呼啸:发出尖锐刺耳的声音:令人触目惊心 ] this in our minds when the da ...
- /etc/shadow字段详解
1)/etc/shadow 概说: /etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd 而产生的,这两个文件是应该是对应互补的:shadow内容包括用 ...
- UIImageView之我的动画为什么停了?UIImageView, highLighted,animationImages
如果你的动画总是停了!停了!停了!不管你想不想都停,这里有个参考,你可以看看!这只是一种可能性!!! 受最近看到段子影响,画风略诡异,不喜勿喷. 最近在“刻”动画!!! 为什么是“刻”,动画写了3周啊 ...
- WINDOWS下简单操作SQLITE3
有测试操作的时候,还是很好的说~~~ 找个sqlite3.txt下载 sqlite3.exe db.sqlite3 SQLite version 3.7.13 2012-06-11 02:05:22 ...
- Struts2 全局拦截器、result 的实现
定义一个可以继承的包,在这个包里面写入自己常用的拦截器,于是就实现了全局拦截器的实现. 现在,我们定义一个专门用来继承的包: <!--专门提供前台继承的包--> <package n ...
- 【Windows 8】pid为4的system进程占用80端口的解决办法
因为Apache无法启动的原因,用netstat命令查看了一下80端口是否被占用了,如下: C:\Users\Maple>netstat -ano | findstr TCP LISTENING ...
- 《深度探索c++对象模型》chapter3 Data语意学
一个空的class:如 class X{} ; sizeof(X)==1; sizeof为什么为1,他有一个隐晦的1 byte,那是被编译器安插进去的一个char,这使得class2的两个object ...
- Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能
Autofac 结合 Castle DynamicProxy2 功能 Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合 ...
- java学习面向对象之final关键字
之前我们讲过继承的相关知识了,继承就是子类继承父类的属性和方法并且还可以覆盖父类的方法.但是这样有一个缺陷是什么呢,就是当我们一个类当中涉及一些封装的核心的东西或者对整个系统非常关键的方法或者类的时候 ...
- asp.net生成二维码的方法
asp.net生成二维码的方法 [复制链接] 这个要利用一个Dll文件. 如下 Gma.QrCodeNet.Encoding.dll (105.5 KB, 下载次数: 27) 当然大家也可以直 ...