iOS视频录制、压缩导出、取帧

首发博客:标哥的技术博客

关注公众号:iOS开发技术分享

概述

花了点时间研究了一下常用的视频获取、录制、压缩并导出、保存到相册、取帧图功能,分享给大家了!相信阅读完本篇文章,会对你有很大的帮助的!

记得关注微博、公众号哦,请到文章末尾跳转!

本篇文章研究几下以个功能:

  • 视频录制
  • 从相册选择视频
  • 保存视频到相册
  • 获取视频帧图
  • 压缩并导出视频
  • 解决iOS8上录视频引起的偏移bug

需要真机测试,才能录制视频!

效果图

视频录制

首先,我们弹出系统的视频录制界面,也就是UIImagePickerController控制器来实现,但是我们需要验证用户授权,只有有录制视频的权限,才能继续往下。

我们还需要判断UIImagePickerControllerSourceTypeCamera是否支持,比如模拟器就不支持,当然真机是否有不支持的并不知道,不过更安全的写法是要这么写的。视频录制可以设置录制的视频的质量,也就是分辨率的高低,通过videoQuality属性来设置。我们还可以设置录制视频的最大时长,通过videoMaximumDuration属性设置,比如这里设置为5分钟。

// 7.0
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (authStatus == AVAuthorizationStatusRestricted|| authStatus == AVAuthorizationStatusDenied) {NSLog(@"摄像头已被禁用,您可在设置应用程序中进行开启");return;
}if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {UIImagePickerController *picker = [[UIImagePickerController alloc] init];picker.delegate = self;picker.allowsEditing = YES;picker.sourceType = UIImagePickerControllerSourceTypeCamera;picker.videoQuality = UIImagePickerControllerQualityType640x480; //录像质量picker.videoMaximumDuration = 5 * 60.0f; // 限制视频录制最多不超过5分钟picker.mediaTypes = @[(NSString *)kUTTypeMovie];[self presentViewController:picker animated:YES completion:NULL];self.shouldAsync = YES;
} else {NSLog(@"手机不支持摄像");
}

然后实现代理,就可以拿到录制的视频了。

从相册选择视频

从相册选择视频与弹出录制视频的代码差不多,只是sourceType不一样而已。我们一样要求先判断权限,用户是否授权,若不允许,就没有办法了。

指定sourceType为UIImagePickerControllerSourceTypeSavedPhotosAlbum就是获取保存到相册中的media。我们还要指定mediaTypes,只需要设置为kUTTypeMovie就可以了。

AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if</