前言
这篇文章简单介绍下移动端iOS系统下利用AVCaptureDevice
进行视频数据采集的方法。
按照惯例先上一份源码:iOSVideo
摄像头采集相关核心实现在:NTVideoCapture.m
官方文档可以参考:AVFoundation官方文档
PS:采集部分的逻辑会相对比较简单,后续会在视频的采集基础上面介绍怎么利用OpenGL去绘制采集获取到的数据。
入门知识
AVCaptureSession
在iOS平台开发中只要跟硬件相关的都要从会话开始进行配置,如果我们使用摄像头的话可以利用AVCaptureSession
进行视频采集,其可以对输入和输出数据进行管理,负责协调从哪里采集数据,输出到哪里去。
AVCaptureDevice
一个AVCaptureDevice
对应的是一个物理采集设备,我们可以通过该对象来获取和识别设备属性。
例如通过AVCaptureDevice.position
检测其摄像头的方向。
AVCaptureInput
AVCaptureInput
是一个抽象类,AVCaptureSession
的输入端必须是AVCaptureInput
的实现类。
例如利用AVCaptureDevice
构建AVCaptureDeviceInput
作为采集设备输入端。
AVCaptureOutput
AVCaptureOutput
是一个抽象类,AVCaptureSession
的输出端必须是AVCaptureOutput
的实现类。
例如AVCaptureVideoDataOutput
可以作为一个原始视频数据的输出端。
AVCaptureConnection
AVCaptureConnection
是AVCaptureSession
用来建立和维护AVCaptureInput
和AVCaptureOutput
之间的连接的,一个AVCaptureSession
可能会有多个AVCaptureConnection
实例。
采集步骤
- 创建
AVCaptureSession
并初始化。 - 通过前后置摄像头找到对应的
AVCaptureDevice
。 - 通过
AVCaptureDevice
创建输入端AVCaptureDeviceInput
,并将其添加到AVCaptureSession
的输入端。 - 创建输出端
AVCaptureVideoDataOutput
,并进行Format和Delgate的配置,最后添加到AVCaptureSession
的输出端。 - 获取
AVCaptureConnection
,并进行