iOS---AVCaptureSession

AVCaptureSession
管理捕获活动并协调从输入设备到捕获输出的数据流的对象。

要执行实时捕获,需要实例化AVCaptureSession对象并添加适当的输入和输出。下面的代码片段演示了如何配置捕获设备来录制音频。

// 创建捕获会话。
AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];

// 查找默认音频设备。
AVCaptureDevice *audioDevice =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

// 将音频设备包装在捕获设备输入中。
NSError *error = nil;
AVCaptureDeviceInput *audioInput =
[AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];

if (audioInput) {
//如果可以添加输入,则将其添加到会话中。
if ([captureSession canAddInput:audioInput]) {
[captureSession addInput:audioInput];
}
} else {
// 配置失败。处理错误。
}

您可以调用startRunning来启动从输入到输出的数据流,并调用stopRunning来停止该流。

startRunning方法是一个阻塞调用,可能需要一些时间,因此应该在串行队列上执行会话设置,以免阻塞主队列(这使UI保持响应)。参见AVCam:构建摄像机应用程序的实现示例。

可以使用sessionpresetproperty自定义输出的质量级别、比特率或其他设置。最常见的捕获配置可以通过会话预置获得;但是,一些特殊的选项(例如高帧速率)需要直接在AVCaptureDevice实例上设置捕获格式。

管理输入和输出
inputs 捕获会话的输入。

  • canAddInput:返回一个布尔值,该值指示是否可以将给定的输入添加到会话中。
  • addInput:将给定的输入添加到会话。
  • removeInput:删除给定的输入。
    outputs捕获会话的输出。
  • canAddOutput:返回一个布尔值,该值指示是否可以将给定的输出添加到会话中。
  • addOutput:将给定的输出添加到会话。
  • removeOutput:删除给定的输出。

管理运行状态
——startRunning告诉接收者开始运行。
——stopRunning告诉接收者停止运行。
running指示接收器是否正在运行。
interrupted指示接收器是否已被中断。
AVCaptureSessionRuntimeErrorNotification如果在捕获会话期间发生错误,则提交。
AVCaptureSessionDidStartRunningNotification捕获会话开始时发布。
AVCaptureSessionDidStopRunningNotification当捕获会话停止时发布。
AVCaptureSessionWasInterruptedNotification如果捕获会话被中断,则发布。
AVCaptureSessionInterruptionEndedNotification捕获会话中断结束时发布。
AVCaptureSessionErrorKey检索错误对象的键
AVCaptureSessionRuntimeErrorNotification用户信息字典。
AVCaptureSessionInterruptionReasonKey检索有关捕获中断的信息的键
AVCaptureSessionWasInterruptedNotification用户信息字典。
AVCaptureSessionInterruptionSystemPressureStateKey检索有关导致捕获会话中断的系统压力因素的信息的键。
AVCaptureSessionInterruptionReason类中找到的确定捕获会话中断原因的常量
AVCaptureSessionWasInterruptedNotification用户信息字典。

配置更改
——beginConfiguration指示要自动进行的一组配置更改的开始。
——commitConfiguration提交一组配置更改。

预设管理会议
AVCaptureSessionPreset属性来定义捕获设置预置
sessionPreset

sessionPreset表示输出的质量水平或比特率的一个常数值。

  • canSetSessionPreset:返回一个布尔值,该值指示会话是否可以使用给定的预置。

管理连接
connections由捕获会话管理的连接数组。
addConnection:将给定的捕获连接添加到会话。

  • canAddConnection:返回一个布尔值,该值指示是否可以将给定的连接添加到接收方。
  • addInputWithNoConnections:将捕获输入添加到会话中而不形成任何连接。
  • addOutputWithNoConnections:将捕获输出添加到会话中而不形成任何连接。
  • removeConnection:从会话中删除捕获连接。

共享应用程序的音频会话
usesApplicationAudioSession指示捕获会话是否使用应用程序的共享音频会话。
automaticallyConfiguresApplicationAudioSession一个布尔值,指示捕获会话是否自动更改应用程序的共享音频会话中的设置。

同步多个输入和输出
masterClock用于输出同步的时钟对象。

管理颜色空间
automaticallyConfiguresCaptureDeviceForWideColor一个布尔值,指定会话是否应在可用的地方自动使用宽色域颜色。

推荐阅读更多精彩内容