使用 AVCaptureSession 去协调输入设备和输出之间的数据流。

去完成 在线 或者 离线视屏捕获,需要去实例化一个 AVCaptureSession 对象。 添加合适的输入(AVCaptureDeviceInput)和输出(AVCaptureMovieFileOutput)对象。 下面的代码示例是配置怎么去记录音频。

// 创建一个捕获回话管理者
AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];

// 获取音频捕获设备
AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

// 实例化一个音频输入对象
NSError *error = nil;
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];
if (audioInput) {

    // 添加 输入 对象到会话管理者
    [captureSession addInput:audioInput];
} else {
    // Handle the failure.
}

通过调用 startRunning() 开始 inputs 到 outputs 数据流。 通过调用 stopRunning() 去停止数据流。

注意事项
startRunning() 是一个阻塞的调用,可能需要花费一些时间。因此,你需要在一个串行队列里面完成 session 的设置,来保证主队列不被阻塞。 具体细节可以查看 AVCam-iOS: Using AVFoundation to Capture Images and Movies 例子的实现细节。

你可以通过设置 sessionPreset 属性去自定义 质量水平, 比特率 或者一些其他的输出设置。最常见的捕获配置是可以通过会话预设;然而,一些专门的选项(如高帧速率)需要直接设置捕获格式AVCaptureDevice实例。

管理输入和输出

var inputs: [Any]!
// 捕获对象的输入。 这个数组包含了 AVCaptureInput 子类的实例。

func canAddInput(AVCaptureInput!)
// 返回一个 boolean 值。指示着,指定的输入能否被添加到回话中。

func addInput(AVCaptureInput!)
// 添加一个给定的输入到会话(输出只能添加一个)

func removeInput(AVCaptureInput!)
// 移除指定的输入

var outputs: [Any]!
// 捕获对象的输出。  这个数组包含了 AVCaptureOutput 子类的实例。

func canAddOutput(AVCaptureOutput!)
// 返回一个 boolean 值。指示着,指定的输出能否被添加到回话中。

func addOutput(AVCaptureOutput!)
// 添加一个给定的输出到会话(输出只能添加一个)

func removeOutput(AVCaptureOutput!)
// 移除指定的输出

管理状态

func startRunning()
// 开始运行。 这个方法是开始从 inputs 到 outputs 的数据流的。 这个方法是一个同步方法,阻塞的。
// 这个方法的调用会直到 receiver 已经开始运行,或者运行失败。如果运行失败,你将你将收到一个 AVCaptureSessionRuntimeError 错误。

func stopRunning()
// 停止运行 (和 startRunning 类似)

var isRunning: Bool
// 是否正在运行

var isInterrupted: Bool
// 是否已经中断

配置更改

func beginConfiguration()
// 标识配置更改设置的开始。配置的改变能够自动生效。
// beginConfiguration() 和 commitConfiguration() 来进行批量的配置操作。配置的更改是原则性的(加锁的)
// 在调用 beginConfiguration 后, 你可以进行添加和删除输入和输出,更改 sessionPreset。
// 或配置个人捕获输入输出属性。 任何更改会在调用 commitConfiguration()后一起生效

func commitConfiguration()
// 参考 beginConfiguration()

回话管理的预设

var sessionPreset: String!
 // 一个常量值,用来表明 output 的质量等级或者比特率。 默认值:AVCaptureSessionPresetHigh。
 // 可以在 session 运行的时候来更改这个值。你只能设置一个预设如果canSetSessionPreset预设(_:)返回true。

 // 可能的值 —— Video Input Presets
 let AVCaptureSessionPresetPhoto: String
 let AVCaptureSessionPresetHigh: String
 let AVCaptureSessionPresetMedium: String
 let AVCaptureSessionPresetLow: String
 let AVCaptureSessionPreset320x240: String
 let AVCaptureSessionPreset352x288: String
 let AVCaptureSessionPreset640x480: String

 func canSetSessionPreset(String!)

管理连接

func add(AVCaptureConnection!)
func canAdd(AVCaptureConnection!)
func addInputWithNoConnections(AVCaptureInput!)
func addOutputWithNoConnections(AVCaptureOutput!)
func remove(AVCaptureConnection!)

results matching ""

    No results matching ""