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拍摄视频,自定义拍摄界面,高清压缩,添加水印相关推荐

  1. ImageMagick高清压缩图片-GraphicsMagick+im4java

    之前有写过imageMagick压缩图片的文章,但是那篇文章中用到的是jmagick. JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageM ...

  2. iOS 像素图转高清大图

    iOS 像素图转高清大图 比较 最近邻插值 CoreGraphics画矩形 一张小的像素图转大图时会变得模糊 有两种方式可以使生成的大图更清晰 用最近邻插值算法生成大图 按其宽高和像素行列去取颜色,C ...

  3. AsyncLoadLocalImage ios 加载本地高清大图

    如果你的iOS项目中需要加载项目中或者沙盒中的多张高清大图时,希望这个框架能助你一臂之力. If your iOS project needs to be loaded multi high qual ...

  4. IM4Java + GraphicsMagick 实现高清图片剪裁处理

    2019独角兽企业重金招聘Python工程师标准>>> 简单介绍 GraphicsMagick是ImageMagick的一个分支,相对于ImageMagick而言,TA处理速度更快, ...

  5. 高清网络摄像机主流芯片方案之安霸、TI和海思对比

    高清网络视频监控发展到今天,市场也开始进入真正的高清时代,诸多有实力的高清摄像机厂家的产品线也逐渐完善起来,高清网络视频监控的配套产品有更加丰富和成熟.与此同时困扰很多人的高清网络摄像机与后端平台或者 ...

  6. 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思

    (本文由四川艾普作为数码科技有限公司 苏斌.范清华 收集) 高清网络视频监控发展到今天.正的高清时代.诸多有实力的高清摄像机厂家的产品线也逐渐完好起来,高清网络视频监控的配套产品有更加丰富和成熟.与此 ...

  7. 高清网络摄像机主流芯片方案之安霸、德仪和海思对比

    (本文由四川艾普视达数码科技有限公司 苏彬.范清华 搜集整理) 高清网络视频监控发展到今天,市场也开始进入真正的高清时代,诸多有实力的高清摄像机厂家的产品线也逐渐完善起来,高清网络视频监控的配套产品有 ...

  8. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处:  http://blog.csdn.net/lmj623565791/article/details/49300989:  本文出自: ...

  9. Android_高清加载巨图方案 拒绝压缩图片

    原文出处:http://blog.csdn.net/lmj623565791/article/details/49300989 一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么 ...

最新文章

  1. 遗传算法 python包_遗传算法 (Genetic Algorithm)
  2. MindSpore布道师队伍招募开始,助力小白成为大牛!
  3. OC__part11.3
  4. C++和Rust_后端程序员一定要看的语言大比拼:Java vs. Go vs. Rust
  5. Android记录日志方式,关于Android中处理崩溃异常和记录日志的另一种实现思路
  6. 深入分析Linux自旋锁【转】
  7. 《游戏学习》java实现连珠五子棋完整代码
  8. 软件工程毕业设计选题c语言,经典软件工程专业论文选题 软件工程专业论文题目选什么比较好...
  9. 海康威视错误代码说明(六)(错误代码:82~825)
  10. 域名DNS解析找到ip
  11. 【美图秀秀】如何P图恶搞——室友的噩梦
  12. 牛客小白月赛1 A题 Etéreo 是个爱学习的好孩子
  13. 解锁忘记密码的iPhone X
  14. 销售——LPN(License Plate Number)
  15. JVM内存模型-回忆学习总结
  16. 关于Precision, Accuracy, F1, Micro-Ave, Macro-Ave
  17. Pandas、Numpy 性能优化秘籍(全)
  18. 央企总动员:从上电股份,细数风流人物!
  19. java 泛型方法 实例化_Java让泛型实例化的方法
  20. DataGrid_单击_双击_editable

热门文章

  1. 手机如何修改MD5视频?修改MD5视频的办法你清楚吗?
  2. 数据挖掘之聚类分析(Cluster Analysis)
  3. Median Pyramid Hard题解
  4. 五招祛痘法让熟女远离痘痘 - 生活至上,美容至尚!
  5. 微服务SpringCloud的平台架构及原理分析
  6. 你会制作点赞吗?(含动图)
  7. Mac远程windows服务器
  8. 六子棋(客家六子棋)
  9. 2017苹果开发者大会看点汇总
  10. Burp Suite测试小程序,设置代理之后手机一直连不上网