iOS拍摄视频,自定义拍摄界面,高清压缩,添加水印
TakeVideo概述
iOS系统本身有一套UIImagePickerController用来拍照片和拍摄视频,但是现在各大应用都喜欢自定义拍摄视频的界面,你肯定也心动了。拿微信来讲,小视频是最长是9秒钟,占用1.5MB,那我们也想做这样的效果,肿么办??
本篇文章,将为你揭秘拍摄视频那点事。
我写了一个Demo叫做TakeVideo,涵盖了这些功能,大家可以去 Github下载 - TakeVideo
下载后,可以直接在iPhone手机上运行
先看效果
还有一张gif动画图,csdn上传不了,读者就去这里 Github看看 - TakeVideo
我们开始啦
基本分为四种方式来调用,下面将一一展示,如何使用?
第一种方式
导入头文件
#import "ZRMediaCaptureController.h"
下面的代码是使用的是系统定义的UI,拍摄完的视频,需不需要压缩取决于你,压缩方法在本文后面讲到
ZRMediaCaptureController *manager = [[ZRMediaCaptureController alloc] init];[manager setVideoCaptureType:ZRMediaCaptureTypeDefault completion:^(int statusCode, NSString *errorMessage, NSURL *videoURL, NSTimeInterval videoInterval) {NSLog(@"视频地址:%@", videoURL.absoluteString);if (errorMessage.length) {NSLog(@"拍摄视频失败 %@", errorMessage);} else {//to do so//[self previewVideo:videoURL interval:videoInterval useFirstCompression:YES];}}];[self presentViewController:manager animated:YES completion:nil];
第二种方式
导入头文件
#import "ZRMediaCaptureController.h"
下面的代码是使用的是自定义的UI,调用的唯一区别就是 CaptureType
像这种自定义的UI方式,是很多应用都喜爱的,拍摄完的视频,需不需要压缩取决于你,压缩方法在本文后面讲到
ZRMediaCaptureController *manager = [[ZRMediaCaptureController alloc] init];[manager setVideoCaptureType:ZRMediaCaptureTypeCustomizedUI completion:^(int statusCode, NSString *errorMessage, NSURL *videoURL, NSTimeInterval videoInterval) {NSLog(@"视频地址:%@", videoURL.absoluteString);if (errorMessage.length) {NSLog(@"拍摄视频失败 %@", errorMessage);} else {//to do so//[self previewVideo:videoURL interval:videoInterval useFirstCompression:YES];}}];[self presentViewController:manager animated:YES completion:nil];
第三种方式
导入头文件
#import "ZRVideoCaptureViewController.h"
下面的代码是使用的是自定义的UI, 我看过微信的,Facebook,Snapchat都是类似的方式,通过AVCaptureSession来实现的,拍摄完的视频,需不需要压缩取决于你,压缩方法在本文后面讲到
ZRVideoCaptureViewController * videoCapture = [[ZRVideoCaptureViewController alloc] init];[videoCapture setCaptureCompletion:^(int statusCode, NSString *errorMessage, NSURL *videoURL, NSTimeInterval videoInterval) {NSLog(@"视频地址:%@", videoURL.absoluteString);if (errorMessage.length) {NSLog(@"拍摄视频失败 %@", errorMessage);} else {//to do so//[self previewVideo:videoURL interval:videoInterval useFirstCompression:YES];}}];[self presentViewController:videoCapture animated:YES completion:nil];
第四种方式
导入头文件
#import "ZRTakeVideoViewController.h"
下面的代码是使用的是自定义的UI, 跟第三个差不多,只是是通过AVCaptureSession来实现的AVCaptureSession 和 AVAssetWriter,该方法拍摄的视频,不需要压缩,因为拍摄视频时是一边拍摄一边压缩,视频的清晰度可以根据参数 averageBitRate
来定,一般都是2.5,如果需要超高清的,你可以往上调参数的值,6一般最高,当然了,如果你的视频的size比较大,你还可以往上调大值
ZRTakeVideoViewController *takeVideo = [[ZRTakeVideoViewController alloc] init];takeVideo.averageBitRate = 4.0;[takeVideo setCaptureCompletion:^(int statusCode, NSString *errorMessage, NSURL *videoURL, NSTimeInterval videoInterval) {NSLog(@"视频地址:%@", videoURL.absoluteString);if (errorMessage.length) {NSLog(@"拍摄视频失败 %@", errorMessage);} else {//[self previewVideo:videoURL interval:videoInterval useFirstCompression:NO];//to do so}}];[self presentViewController:takeVideo animated:YES completion:nil];
压缩视频
下面有两种方式压缩视频,第一种比较常见,第二种是自己设置参数,这里我已经设置好了默认的参数,当然,你也可以设置你想要的参数
[ZRMediaCaptureController videoCompressWithSourceURL:videoURL completion:^(int statusCode, NSString *outputVideoURL) {}];
或者
NSURL *outputFileURL = [NSURL fileURLWithPath:[ZRAssetExportSession generateAVAssetTmpPath]];ZRAssetExportSession *encoder = [ZRAssetExportSession.alloc initWithAsset:[AVAsset assetWithURL:self.originalURL]];encoder.outputFileType = AVFileTypeMPEG4;encoder.outputURL = outputFileURL;[encoder exportAsynchronouslyWithCompletionHandler:^{if (encoder.status == AVAssetExportSessionStatusCompleted){}else if (encoder.status == AVAssetExportSessionStatusCancelled){ }else{ }}];
往视频添加水印
导入头文件
#import "ZRWaterPrintComposition.h"
调用以下代码
[[ZRWaterPrintComposition new] addVideoWaterprintAtURL:self.playURL WithWaterprintImage:[UIImage imageNamed:@"Icon"] withTitleText:@"Victor" iconSize:CGSizeMake(120, 120) completionHandler:^(int status, NSString *errorMsg, NSURL *finishedVideoURL) {if (status == 0) {self.playURL = finishedVideoURL;} else {NSLog(@"%@", errorMsg);}
}];
如果你遇到问题,欢迎在下面提问,或者去 Github issue - TakeVideo 提交一个issue,本博主会尽快为你解答。��
iOS拍摄视频,自定义拍摄界面,高清压缩,添加水印相关推荐
- ImageMagick高清压缩图片-GraphicsMagick+im4java
之前有写过imageMagick压缩图片的文章,但是那篇文章中用到的是jmagick. JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageM ...
- iOS 像素图转高清大图
iOS 像素图转高清大图 比较 最近邻插值 CoreGraphics画矩形 一张小的像素图转大图时会变得模糊 有两种方式可以使生成的大图更清晰 用最近邻插值算法生成大图 按其宽高和像素行列去取颜色,C ...
- AsyncLoadLocalImage ios 加载本地高清大图
如果你的iOS项目中需要加载项目中或者沙盒中的多张高清大图时,希望这个框架能助你一臂之力. If your iOS project needs to be loaded multi high qual ...
- IM4Java + GraphicsMagick 实现高清图片剪裁处理
2019独角兽企业重金招聘Python工程师标准>>> 简单介绍 GraphicsMagick是ImageMagick的一个分支,相对于ImageMagick而言,TA处理速度更快, ...
- 高清网络摄像机主流芯片方案之安霸、TI和海思对比
高清网络视频监控发展到今天,市场也开始进入真正的高清时代,诸多有实力的高清摄像机厂家的产品线也逐渐完善起来,高清网络视频监控的配套产品有更加丰富和成熟.与此同时困扰很多人的高清网络摄像机与后端平台或者 ...
- 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思
(本文由四川艾普作为数码科技有限公司 苏斌.范清华 收集) 高清网络视频监控发展到今天.正的高清时代.诸多有实力的高清摄像机厂家的产品线也逐渐完好起来,高清网络视频监控的配套产品有更加丰富和成熟.与此 ...
- 高清网络摄像机主流芯片方案之安霸、德仪和海思对比
(本文由四川艾普视达数码科技有限公司 苏彬.范清华 搜集整理) 高清网络视频监控发展到今天,市场也开始进入真正的高清时代,诸多有实力的高清摄像机厂家的产品线也逐渐完善起来,高清网络视频监控的配套产品有 ...
- Android 高清加载巨图方案 拒绝压缩图片
Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自: ...
- Android_高清加载巨图方案 拒绝压缩图片
原文出处:http://blog.csdn.net/lmj623565791/article/details/49300989 一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么 ...
最新文章
- 遗传算法 python包_遗传算法 (Genetic Algorithm)
- MindSpore布道师队伍招募开始,助力小白成为大牛!
- OC__part11.3
- C++和Rust_后端程序员一定要看的语言大比拼:Java vs. Go vs. Rust
- Android记录日志方式,关于Android中处理崩溃异常和记录日志的另一种实现思路
- 深入分析Linux自旋锁【转】
- 《游戏学习》java实现连珠五子棋完整代码
- 软件工程毕业设计选题c语言,经典软件工程专业论文选题 软件工程专业论文题目选什么比较好...
- 海康威视错误代码说明(六)(错误代码:82~825)
- 域名DNS解析找到ip
- 【美图秀秀】如何P图恶搞——室友的噩梦
- 牛客小白月赛1 A题 Etéreo 是个爱学习的好孩子
- 解锁忘记密码的iPhone X
- 销售——LPN(License Plate Number)
- JVM内存模型-回忆学习总结
- 关于Precision, Accuracy, F1, Micro-Ave, Macro-Ave
- Pandas、Numpy 性能优化秘籍(全)
- 央企总动员:从上电股份,细数风流人物!
- java 泛型方法 实例化_Java让泛型实例化的方法
- DataGrid_单击_双击_editable