上一篇介绍了用GPUImage图像处理库进行图像采集,从而避免了直接使用AVFoundation(AVKit)时繁琐的代码,同时不用熟悉OpenGL ES也可以快速地对图像进行美颜、添加滤镜等。这一篇介绍如果使用多个滤镜以及录制视频,并保存到本地沙盒中。

本文默认你已经按照上一篇中介绍的集成了GPUImage库。
1.声明必要的全局变量

   fileprivate lazy var camera : GPUImageVideoCamera = GPUImageVideoCamera(sessionPreset: AVCaptureSession.Preset.high.rawValue, cameraPosition: .back)//实时显示画面的预览图层fileprivate lazy var showView = GPUImageView(frame: view.bounds)//滤镜let bilateralFilter = GPUImageBilateralFilter()//磨皮let exposureFilter = GPUImageExposureFilter() //曝光let brightnessFilter = GPUImageBrightnessFilter()//美白let satureationFilter = GPUImageSaturationFilter()//饱和//视频写入类fileprivate lazy var movieWriter : GPUImageMovieWriter = {[unowned self] inlet writer = GPUImageMovieWriter(movieURL: self.fileURL, size: self.view.bounds.size)return writer!}()//视频沙盒地址fileprivate lazy var fileURL : URL = {[unowned self] inreturn URL(fileURLWithPath: "\(NSTemporaryDirectory())movie\(arc4random()).mp4")}()

2.在viewDidLoad中初始化配置,并开始采集和录制

override func viewDidLoad() {super.viewDidLoad()//设置摄像头方向为垂直camera.outputImageOrientation = .portrait//使用前值摄像头camera.horizontallyMirrorFrontFacingCamera = true//加入预览图层view.insertSubview(showView, at: 0)//获取滤镜组let filterGroup = getGroupFilters()//设置GUPImage的响应链camera.addTarget(filterGroup)filterGroup.addTarget(showView)//开始采集camera.startCapture()//配置写入文件movieWriter.encodingLiveVideo = truefilterGroup.addTarget(movieWriter)camera.delegate = self;camera.audioEncodingTarget = movieWritermovieWriter.startRecording()}

3.上一步中的getGroupFilters方法,是将多个滤镜效果叠加。GPUImage采用链式方法来处理画面,通过addTarget方法添加对象到链中,处理完一个target,再把上一个环节处理好的图像数据传递到下一个target处理,成为GPUImage处理链。

fileprivate func getGroupFilters() -> GPUImageFilterGroup {//创建滤镜组let filterGroup = GPUImageFilterGroup()//设置滤镜关系链bilateralFilter.addTarget(brightnessFilter)brightnessFilter.addTarget(exposureFilter)exposureFilter.addTarget(satureationFilter)//设置滤镜组初始、终点filterfilterGroup.initialFilters = [bilateralFilter]filterGroup.terminalFilter = satureationFilterreturn filterGroup}

4.我们在界面上添加一个按钮,点击后结束采集和录制,并利用AVPlayerViewController查看录制的视频

    @IBAction func clickPlay(_ sender: Any) {print(fileURL)camera.stopCapture()showView.removeFromSuperview()movieWriter.finishRecording()let playerVc = AVPlayerViewController()playerVc.player = AVPlayer(url: fileURL)present(playerVc, animated: true, completion: nil)}

运行效果:

demo代码:https://github.com/dolacmeng/LiveGPUImageDemo/tree/record

iOS直播(三)GPUImage音视频采集并写入文件相关推荐

  1. iOS直播技术分享-音视频采集(一)

    1.iOS直播技术的流程 直播技术的流程大致可以分为几个步骤:数据采集.图像处理(实时滤镜).视频编码.封包.上传.云端(转码.录制.分发).直播播放器. 数据采集:通过摄像头和麦克风获得实时的音视频 ...

  2. iOS直播(二)GPUImage音视频采集

    上文中介绍了用AVFoundation实现音视频采集(https://blog.csdn.net/dolacmeng/article/details/81268622) ,开源的基于GPU的第三方图像 ...

  3. 直播软件搭建音视频开发中的视频采集

    直播软件搭建音视频开发中的视频采集 前言 在直播和短视频行业日益火热的发展形势下,音视频开发(采集.编解码.传输.播放.美颜)等技术也随之成为开发者们关注的重点,本系列文章就音视频开发过程中所运用到的 ...

  4. “小程序+直播”怎样搅动音视频技术生态?

    ​ 责编 / 王宇豪 策划 / LiveVideoStack 12月26日晚间,微信小程序开放了直播能力,并首先向社交.教育.医疗.政务民生.金融等五大应用场景开放.与原生App应用和基于浏览器的H5 ...

  5. Android 音视频采集与软编码总结

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/75807435(本文已在 "任玉刚" 微信公众号发布 ...

  6. Android端WebRTC本地音视频采集流程源码分析

    WebRTC源码版本为:org.webrtc:google-webrtc:1.0.32006 本文仅分析Java层源码,在分析之前,先说明一下一些重要类的基本概念. MediaSource:WebRT ...

  7. webrtc简单案例——音视频采集和播放

    webrtc简单案例--音视频采集和播放 目录 打开摄像头并将画面显示到页面 打开麦克风并在页面播放捕获的声音 同时打开摄像头和麦克风,并在页面显示画面和播放捕获的声音 1. 打开摄像头并将画面显示到 ...

  8. (三)音视频:解析H264 SPS 更进一步理解H264

    (一)音视频:解码H264文件流程 渲染和拿到解码后源数据YUV 完整Demo] (二)音视频:MediaCodec编码桌面信息 完整Demo 进一步理解H264 (三)音视频:解析H264 SPS ...

  9. WebRTC音视频采集和播放示例及MediaStream媒体流解析

    WebRTC音视频采集和播放示例及MediaStream媒体流解析 目录 示例代码--同时打开摄像头和麦克风,并在页面显示画面和播放捕获的声音 API解析 mediaDevices MediaStre ...

最新文章

  1. 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )
  2. 脉络最清晰的C++高斯消元程序
  3. 【2018ACM山东省赛 - E】Sequence(树状数组,思维,优化)
  4. 创业必经之路——Paul Graham创业曲线
  5. 几句话就能让你明白:VLAN是什么、TRUNK又是什么
  6. Python MQTT订阅获取发布信息字典过滤
  7. python自动处理下载的英文字幕
  8. static与线程安全 -摘自网络
  9. 牛客竞赛,GDDU第十届文远知行杯新生程序设计竞赛,摸鱼记(BDEIKL题解,补G,ACFHJ)
  10. Maven传递依赖冲突解决(版本冲突)
  11. 在线文本比较工具-toolfk程序员在线工具网
  12. 珍大户《认知世界的经济学》学习笔记 -- 第21课 利率的计算 更新时间2021年07月27日22:14:34
  13. MATLAB图像灰度化—优化三种灰度化算法
  14. zblog博客模板-zblog插件免费-支持PHP以及ASP
  15. video标签实现简单视频背景+遇到问题(视频无法显示,不能自动播放)
  16. java 连续数字_java 如何判断数字是否连续?求大神解答
  17. layui个人中心html,Layui的简易入门教程
  18. python最小二乘法 实现 曲面拟合
  19. 我在IT职场超15年:从程序员做到副总,送你21个超实用的职场法则!
  20. 前端如何做好数据容错

热门文章

  1. SPSS聚类分析:K均值聚类分析
  2. Mac 安装SecureCRT
  3. 替换元素和非替换元素的学习
  4. Fedora 19下Guacamole的安装使用
  5. 转【红帽GFS集群文件系统配置指南】
  6. [翻译]ASP.NET MVC 3 开发的20个秘诀(十二)[20 Recipes for Programming MVC 3]:缩放图片尺寸创建缩略图...
  7. 镜头评价指标及测试方法(二)—畸变与分辨率
  8. mongodb常用语句以及SpringBoot中使用mongodb
  9. ubuntu下vim的配置
  10. Spring源码分析【2】-Tomcat和Sping的连接点