这篇文章主要介绍在 iOS 中视频录制的主要流程结构,以及相关 api 的介绍。

参考:录音Demo。

在 iOS 系统中,录制视频有两种方式,一种是直接利用系统封装好的 UIImagePickerController ,系统的功能呢空间,优点就是使用起来简单,缺点就是难于满足个性化 UI 和功能。主要代码如下:

注意需要写在 init 方法里

   self.sourceType = UIImagePickerControllerSourceTypeCamera;self.mediaTypes = @[(NSString *)kUTTypeMovie];self.delegate = self;

开始录制

[self startVideoCapture];

结束录制

[self stopVideoCapture];

另外可以设置的属性有:

//设置视频画质类别
self.videoQuality = UIImagePickerControllerQualityTypeMedium;//设置闪光灯类型
self.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;//设置录制的最大时长
self.videoMaximumDuration = 5;//设置 前/后 置摄像头
self.cameraDevice = UIImagePickerControllerCameraDeviceRear;

那么 UIImagePickerController 到底封装了那些方法呢? 先看一下录制视频的流程图展示。

流程图最顶部的
AVCaptureVideoPreviewLayer 即是相机的拍摄画面。
AVCaptureSession 控制录制的开始和结束。
AVCaptureDeviceInput 输入源,包括画面输入 和 音频输入。
AVCaptureMovieFileOutput 输出源。
AVCaptureDevice 硬件设备

根据流程图,由下往上开始创建:

获取 AVCaptureDevice

//根据 AVCaptureDevicePosition 指定摄像头 前置 还是 后置
NSArray *cameras = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *camera in cameras) {if ([camera position] == position) {self.videoCaptureDevice = camera;break;}}
//获取音频采集设备
self.audioCaptureDevice = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio] firstObject];

获取 AVCaptureDeviceInput & AVCaptureMovieFileOutput

//画面输入self.videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:self.videoCaptureDevice error:&error] //声音输入self.audioInput = [[AVCaptureDeviceInput alloc] initWithDevice:self.audioCaptureDevice error:&error];
//输出
self.fileOutput = [[AVCaptureMovieFileOutput alloc] init];

创建 AVCaptureSession 会话

self.session = [[AVCaptureSession alloc] init];
//给 session 添加 视频 音频 输入源
[self.session addInput:self.videoInput];
[self.session addInput:self.audioInput];//给session 添加输出源
[self.session addOutput:self.fileOutput];

采集画面 AVCaptureVideoPreviewLayer

self.previewlayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];self.previewlayer.frame = frame;[self.session startRunning];

开始录制

//指定输出沙盒地址
[self.FileOutput startRecordingToOutputFileURL:videoUrl recordingDelegate:self];

AVCaptureFileOutputRecordingDelegate

//开始录制
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didStartRecordingToOutputFileAtURL:(NSURL *)fileURL;//暂停录制
- (void)captureOutput:(AVCaptureFileOutput *)output didPauseRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray<AVCaptureConnection *> *)connections;//继续录制
- (void)captureOutput:(AVCaptureFileOutput *)output didResumeRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray<AVCaptureConnection *> *)connections;//完成录制
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error;

到这里,整体录制流程都已经完成了。可以看到,其实录制过程并不困难。具体细节和参数设置,比如,视频清晰度,设置防抖模式,点击对焦等,可以参考一下文章开头的demo。

iOS 视频录制流程解析相关推荐

  1. WeBRTC IOS视频采集流程

    因CSDN MardDown语法问题,流程图部分不兼容有道云笔记,所以流程图部分请拷贝到有道云笔记生成查看. iOS视频录制: 同拍照一样视频录制功能有两种实现方式 UIImagePickerView ...

  2. iOS视频录制、压缩、上传(整理)

    iOS视频录制.压缩.上传(整理) 我们在项目中有时会碰到视频相关的需求,一般的可以分为几种情况: 1. 简单的视频开发,对界面无要求,可直接使用系统UIImagePickerController. ...

  3. IOS视频编辑,视频裁剪,视频拼接,音频处理,视频处理

    前言 用代码在简单视频编辑中,主要就是加美颜.水印(贴图).视频截取.视频拼接.音视频的处理,在美颜中,使用GPUImage即可实现多种滤镜.磨皮美颜的功能,并且可以脸部识别实时美颜等功能,这个有很多 ...

  4. IOS视频编辑功能详解下篇-视频裁剪、视频拼接、音视频的处理

    转自:http://www.hudongdong.com/ios/550.html 前言 用代码在简单视频编辑中,主要就是加美颜.水印(贴图).视频截取.视频拼接.音视频的处理,在美颜中,使用GPUI ...

  5. iOS - 视频开发

    视频实质: 纯粹的视频(不包括音频)实质上就是一组帧图片,经过视频编码成为视频(video)文件再把音频(audio)文件有些还有字幕文件组装在一起成为我们看到的视频(movie)文件.1秒内出现的图 ...

  6. Android (系统+自定义)短视频录制(含暂停继续录制功能) 总结

    前言 在Android开发中自然少不了对视频录制的需求,然而视频录制虽然有系统提供给我们能够直接使用的API,但是我们往往在完成需求的过程中需要自定义实现短视频录制.网上虽然也有不少资料,但是总是零零 ...

  7. alsa 放的声音和录制的声音之间的延时_webrtc视频录制总结

    背景:要在视频通话中进行相关录制,具体要求如下: (1) 视频通话录像,并保存为AVI格式,并上传到服务端,服务端下发给设备message部分,但是管理机本身不存储录像: (2) 能监控其他的设备,并 ...

  8. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制(转)

    概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像 ...

  9. 牛人iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

    概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像 ...

最新文章

  1. linux下实现作业调度程序,Linux后台作业
  2. 插入排序(c++实现)
  3. 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)
  4. iOS应用内购买(In App Purchase)总结
  5. 图论为什么这么难_图论是什么,为什么要关心?
  6. mysql5.6.35源码安装记录
  7. firefox vimperator (图)
  8. 怎么用c语言让电脑定时开关机,电脑定时开关机如何设置?小编教你设置电脑定时开机和关机...
  9. 楚留香服务器维护时间,【9月28日维护公告】
  10. videojs重播_videojs 视频播放器从入门到精通
  11. python拆分PDF
  12. win10桌面快捷方式变白,解决方式
  13. vmware下虚拟机自动换ip的解决办法
  14. [arc075f]Mirrored
  15. Java系统线上生产问题排查一把梭,华为高级java面试题
  16. jasper report 子报表中嵌套子报表
  17. Linux服务器出现方向键、退格键乱码等现象解决
  18. 网安零基础学习-python-文件对象(灰帽编程12)
  19. php欢迎界面代码,分享微信小程序欢迎界面开发的实例代码
  20. 浅谈AI算力优化技术

热门文章

  1. 苹果Mac系统彻底关闭开机声音duang~
  2. 用状态机做人物(AI)的状态切换以及动画效果——人物动画以及切换
  3. 8×8二维载荷谱编制
  4. 【c++】2.DISALLOW_COPY_AND_ASSIGN的用法
  5. 敏捷迭代燃尽图_3个敏捷燃尽报告以及如何使用它们
  6. Codeforces 897C Nephren gives a riddle(DFS)
  7. 域名备案和SSL证书到服务器配置
  8. 扫雷c语言完整源代码,C语言扫雷源码
  9. aria2 32bit Android,【各版本整合】32/64位Aria2 Tools - 支持RPC协议 AriaNG(客户端+网页版)...
  10. BugKu 你必须让他停下来