使用UIImagePickerController系统控制器录制视频时,默认生成的格式是MOV,如果要转成MP4格式的,我们需要使用AVAssetExportSession;

支持转换的视频质量:低,中,高,640*480,720p,1080p等

如下代码片段转换

- (void)mov2mp4:(NSURL *)movUrl
{AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil];NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];/**AVAssetExportPresetMediumQuality 表示视频的转换质量,*/if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) {AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];//转换完成保存的文件路径NSString * resultPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4",@"cvt"];exportSession.outputURL = [NSURL fileURLWithPath:resultPath];//要转换的格式,这里使用 MP4exportSession.outputFileType = AVFileTypeMPEG4;//转换的数据是否对网络使用优化exportSession.shouldOptimizeForNetworkUse = YES;//异步处理开始转换[exportSession exportAsynchronouslyWithCompletionHandler:^(void){//转换状态监控switch (exportSession.status) {case AVAssetExportSessionStatusUnknown:NSLog(@"AVAssetExportSessionStatusUnknown");break;case AVAssetExportSessionStatusWaiting:NSLog(@"AVAssetExportSessionStatusWaiting");break;case AVAssetExportSessionStatusExporting:NSLog(@"AVAssetExportSessionStatusExporting");break;case AVAssetExportSessionStatusFailed:NSLog(@"AVAssetExportSessionStatusFailed");  break;case AVAssetExportSessionStatusCancelled:NSLog(@"AVAssetExportSessionStatusCancelled");break;case AVAssetExportSessionStatusCompleted:{//转换完成NSLog(@"AVAssetExportSessionStatusCompleted");//测试使用,保存在手机相册里面ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];[assetLibrary writeVideoAtPathToSavedPhotosAlbum:exportSession.outputURL completionBlock:^(NSURL *assetURL, NSError *error){if (error) {NSLog(@"%@",error);}}];break;}}}];  }  }

完整的调用以及转换代码

#import <AssetsLibrary/AssetsLibrary.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];}- (IBAction)startCampVD:(id)sender {UIImagePickerController *pickerCon = [[UIImagePickerController alloc]init];pickerCon.sourceType = UIImagePickerControllerSourceTypeCamera;pickerCon.mediaTypes = @[(NSString *)kUTTypeMovie];//设定相机为视频pickerCon.cameraDevice = UIImagePickerControllerCameraDeviceFront;//设置相机后摄像头pickerCon.videoMaximumDuration = 6;//最长拍摄时间pickerCon.videoQuality = UIImagePickerControllerQualityType640x480;//拍摄质量pickerCon.allowsEditing = NO;//是否可编辑pickerCon.delegate = self;[self presentViewController:pickerCon animated:YES completion:nil];}- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {NSLog(@"视频录制完成...");NSLog(@"%@",info);[self mov2mp4:[info objectForKey:UIImagePickerControllerMediaURL]];[self dismissViewControllerAnimated:YES completion:nil];}- (void)mov2mp4:(NSURL *)movUrl
{AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil];NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];/**AVAssetExportPresetMediumQuality 表示视频的转换质量,*/if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) {AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];//转换完成保存的文件路径NSString * resultPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4",@"cvt"];exportSession.outputURL = [NSURL fileURLWithPath:resultPath];//要转换的格式,这里使用 MP4exportSession.outputFileType = AVFileTypeMPEG4;//转换的数据是否对网络使用优化exportSession.shouldOptimizeForNetworkUse = YES;//异步处理开始转换[exportSession exportAsynchronouslyWithCompletionHandler:^(void){//转换状态监控switch (exportSession.status) {case AVAssetExportSessionStatusUnknown:NSLog(@"AVAssetExportSessionStatusUnknown");break;case AVAssetExportSessionStatusWaiting:NSLog(@"AVAssetExportSessionStatusWaiting");break;case AVAssetExportSessionStatusExporting:NSLog(@"AVAssetExportSessionStatusExporting");break;case AVAssetExportSessionStatusFailed:NSLog(@"AVAssetExportSessionStatusFailed");  break;case AVAssetExportSessionStatusCancelled:NSLog(@"AVAssetExportSessionStatusCancelled");break;case AVAssetExportSessionStatusCompleted:{//转换完成NSLog(@"AVAssetExportSessionStatusCompleted");//测试使用,保存在手机相册里面ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];[assetLibrary writeVideoAtPathToSavedPhotosAlbum:exportSession.outputURL completionBlock:^(NSURL *assetURL, NSError *error){if (error) {NSLog(@"%@",error);}}];break;}}}];  }  }- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {[picker dismissViewControllerAnimated:YES completion:^{}];NSLog(@"视频录制取消了...");}

iOS 录制视频MOV格式转MP4相关推荐

  1. 如何使用视频格式转换器将爱奇艺视频QSV格式转换MP4

    爱奇艺视频相信很多人都是使用过的,爱奇艺视频网站中不仅有超多的视频资源,而且视频资源是非常的清楚的.但是在爱奇艺视频网站中下载的视频文件为QSV文件,关注过QSV文件的人可能都知道QSV格式只能使用爱 ...

  2. 电脑不支持MOV怎么办 怎么快速将mov格式转换为MP4

    现在网上视频素材的质量参差不齐,而且下载的渠道很多.所以不少视频下载到本地后,都因为编码不规范而不能导入premiere中.一些MOV格式的视频也是这样,premiere是不支持的而且对该格式的兼容性 ...

  3. 电脑不支持MOV怎么办 怎么快速将mov格式转换为MP4 1

    现在网上视频素材的质量参差不齐,而且下载的渠道很多.所以不少视频下载到本地后,都因为编码不规范而不能导入premiere中.一些MOV格式的视频也是这样,premiere是不支持的而且对该格式的兼容性 ...

  4. 腾讯视频QLV格式转换mp4的方法

    腾讯视频QLV格式转换mp4的方法不知道大家知不知道用?喜欢用腾讯视频的朋友应该都知道腾讯视频单独搞出了个QLV格式文件,只能用腾讯独有的腾讯视频软件才能播放,就算用格式工厂转换也不行,那么腾讯视频的 ...

  5. 腾讯视频下载视频QLV格式转为MP4格式

    腾讯视频下载视频QLV格式转为MP4格式(最新) 腾讯视频跟新之后缓存路径 现在里面就没有vodcache文件夹了,所以也没有tdl文件了,那么之前大部分教程里在cmd命令中用copy/E 0*.td ...

  6. ffmpeg将视频flv格式转为mp4格式

    前言 最近使用bilibili哔哩哔哩下载助手下载B站的视频时,发现下载的视频的格式都是.flv,因此想利用网络上的在线转换工具将flv转为mp4格式,无奈转换后的mp4视频,下载速度感人,于是使用f ...

  7. iOS 录制视频并上传

    调取系统录制视频并上传,获取第一帧显示在界面 1.调取系统摄像 self.imagePicker=[[UIImagePickerController alloc]init]; self.imagePi ...

  8. 怎么转换视频格式?腾讯视频qlv格式转换mp4方法

    如今,看视频是人们的主要娱乐方式之一,这里的视频包括但不限于电影.电视剧.动漫.综艺-看视频的主要渠道有百度网盘.视频站点,百度网盘就不说了,大家都懂得~视频站点的话,国内最大的几家就是腾讯视频.爱奇 ...

  9. 详解视频封装格式之MP4

    在我之前的一篇文章(什么是视频封装格式和编码格式)中有整理了一下常见的视频封装格式.在上一篇文章(详解视频封装格式之FLV)中重点剖析了FLV格式.在这篇文章中,我们重点剖析一下MP4这种视频封装格式 ...

最新文章

  1. 实际开发中,有时没有异常发生,但是执行结果不是我们期望的情况,需要手动让事务回滚
  2. Maven国内阿里镜像(Maven下载慢的解决方法)
  3. [转]5分钟实现Android中更换头像功能
  4. Guava入门~MoreObjects
  5. MapReduce的计算资源划分
  6. 全连接神经网络_【模型解读】从“局部连接”回到“全连接”的Non-Local神经网络...
  7. javascript之Map 和 Set
  8. 计算机未来的发展趋势三百字,数字媒体毕业论文5000字_大专毕业论文5000字_计算机类毕业论文5000字文库...
  9. java_log_02
  10. (2) python 使用pd.read_excel 读取excel时,选取某一列为索引
  11. node-cookie- session
  12. 定制Eclipse IDE之功能篇(二)
  13. maya导出fbx没动画_fbx在maya和max之间的互导问题及解决方法
  14. 互补滤波系数_一阶互补滤波
  15. html+css唯美登录页面,代码提供(效果展示)
  16. 网络管理员考试试题讲解
  17. Odoo发邮件被服务器退回
  18. 订单超时自动取消3种方案——我们用这种!
  19. 串行通信比并行通信的速度更高
  20. 功率谱密度的一个小理解

热门文章

  1. MySQL(九):InnoDB 表空间(Tables)
  2. Linux下Apache服务的部署和配置
  3. 如何自学 Android 编程-----整理stormzhang的知乎问答
  4. VS Code远程调试报错:Exception escaped from start_client
  5. cocos2dx 写的泡泡龙2014
  6. 腾讯前端面试经验(一)
  7. 德尔塔病毒劲敌!杨晓明团队发现单抗有效,临床申报正在推进,研究已登Nature子刊...
  8. 3dmax材质丢失插件_常见3DMAX插件导出模型丢失贴图问题
  9. 智能插座 一Homekit智能家居
  10. 计算机网络技术赚钱,计算机网络技术-.ppt