本文内容主要来源:AVFoundation Programming Guide

要管理从相机或麦克风等设备的捕获,我们将组合对象以表示输入和输出,并使用 AVCaptureSession 的实例来协调它们之间的数据流。

  • 一个 AVCaptureDevice 实例来表示输入设备,比如:相机或麦克风
  • 一个 AVCaptureInput 的具体子类实例,用于从输入设备配置端口
  • 一个 AVCaptureOutput 的具体子类实例,来管理输出到视频或图片
  • 一个 AVCaptureSession 的实例,用于协调从输入到输出的数据流

我们可以使用 AVCaptureVideoPreviewLayer(CALayer的子类)来向用户显示正在录制的视频。

通过一个 single session 实例来协调多路输入输出数据,如下图所示:

对于大多数应用场景,这些细节已经足够我们用了。但是对于有些操作,比如当我们想要监测一个音频通道的强度,我们需要了解不同的输入设备的端口对应的对象,以及这些端口和输出是如何连接起来的。

在音视频录制时,输入和输出之间的连接是用AVCaptureConnection来表示的。输入方(AVCaptureInput)包含一个或多个输入口(AVCaptureInputPort),输出端(AVCaptureOutput)可以从一个或多个数据源接收数据,比如一个AVCaptureMovieFileOutput就可以同时接收视频和音频数据。

当你往一次录制 session 中添加一个输入或输出时,这个 session 会生成所有兼容的输入和输出端口间的连接,由AVCaptureConnection对象表示。

我们可以用 connetion 对象来控制输入输出端之间的数据流的断开或连接,我们还能用它来监控 audio 通道的平均值和峰值。

AVCaptureSession 是我们用来管理数据捕获的核心协调者,我们用它来协调音视频输入和输出端的数据流。我们可以将我们需要捕获设备添加到 session 中,然后用 startRunning 接口启动数据流,用 stopRunning 停止数据流。

AVCaptureSession *session = [[AVCaptureSession alloc] init];
// Add inputs and outputs.
[session startRunning];

配置 Session

results matching ""

    No results matching ""