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从相册:摄像头中获取视频的更多相关文章

  1. ios中从相册:相机中获取图片信息

    ios中从相册/相机中获取图片信息 从相册中获取图片的信息 UIImagePickerController *imgPickView = [[UIImagePickerController alloc ...

  2. android 中获取视频文件的缩略图(非原创)

    在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

  3. 从H264码流中获取视频宽高 (SPS帧) 升级篇

    之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...

  4. opencv 从摄像头中读取视频并保存(c++版)

    原文:http://blog.csdn.net/zhongshijunacm/article/details/68947890 OpenCV中的视频操作函数如下表所列: VideoCapture Vi ...

  5. iOS从健康app中获取步数信息

    统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...

  6. ios 从相册视频中获取视频截图

    //给image添加个分类 +(UIImage *)getImage:(NSURL: *)videoURL { AVURLAsset *asset = [[AVURLAsset alloc] init ...

  7. 从H264码流中获取视频宽高 (SPS帧)

    获取.h264视频宽高的方法 花了2个通宵终于搞定.(后面附上完整代码) http://write.blog.csdn.net/postedit/7852406 图像的高和宽在H264的SPS帧中.在 ...

  8. ios 从url字符串中获取图片名字

    NSString *str = @"http://pic92.nipic.com/file/20160323/22486259_160209631000_2.jpg"; NSLog ...

  9. ios 自定义cell类中获取当前controller push

    有时候在自定义cell的过程中,当cell中又button的时候,把button的点击时间写在cell中的时候,需要获取到cell的父视图控制器然后push,可以自建一个类,命名为: GetCurre ...

随机推荐

  1. JSON字符串序列化与反序列化浅试

    一.添加引用(using Newtonsoft.Json.Linq;) 二. 1.生成json字符串源码 List<string> list = new List<string> ...

  2. BZOJ 3672 购票

    Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国\(n\)个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树,每个城市与 ...

  3. 关于 width;height

    IE Firefox Chrome Safari window(width|height)   no yes yes document.body document.documentElement 网页 ...

  4. Lunch Time

    hdu4807:http://acm.hdu.edu.cn/showproblem.php?pid=4807 题意:给你n个点(0--n-1),点之间是有向边,0号点有k个人,现在0号点的k个人要到n ...

  5. hOAuth2.0认证和授权原理

    原文地址: http://www.6zou.net/tech/what_is_oauth.html http://www.phpddt.com/%E4%BA%8C%E6%AC%A1%E5%BC%80% ...

  6. Linux下文件轻松比对,自由开源的比较软件

    文件比较工具用于比较计算机上的文件的内容,找到他们之间相同与不同之处.比较的结果通常被称为diff. diff同时也是一个基于控制台的.能输出两个文件之间不同之处的著名的文件比较程序的名字.diff是 ...

  7. lingo运筹学上机实验指导

    <运筹学上机实验指导>分为两个部分,第一部分12学时,是与运筹学理论课上机同步配套的4个实验(线性规划.灵敏度分析.运输问题与指派问题.最短路问题和背包问题)的Excel.LONGO和LI ...

  8. Solr4.4的安装与配置

    最近准备用Solr搭建项目,所以对其作了一些了解,我采用的是Solr4.4版本:这个版本的Solr相对于以前的版本改变很大,这里记一下自己安装与配置的过程. 网上很多关于Solr的教程都很老了,很多教 ...

  9. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...

  10. 【转】MFC获取程序目录路径方法

    原文网址:http://yeahyuanqing.blog.163.com/blog/static/118025091201149480818/ MFC获得当前应用程序目录的GetCurrentDir ...