美文网首页iOS视频开发iOS技术交流收藏AVFoundation
AVFoundation连续系列之捕捉媒体一:AVCapture

AVFoundation连续系列之捕捉媒体一:AVCapture

作者: 刘玉静 | 来源:发表于2016-06-18 18:05 被阅读1164次


    AVFoundation连续系列之捕捉媒体一:AVCaptureSession


    提前发这篇文章,是因为学生要用,所以没有添加系列的编号,后期再排,这季是与前面章节断开的,如果有做捕捉媒体的可以直接参考这部分。

    捕捉媒体简介

    媒体捕捉是从iOS4开始的,开发者可以直接访问iOS设备的摄像头并生成数据,咱们还是先通过一张图来大致了解一下:

    上图就给咱们大概的介绍了下他的作用,咱们在捕捉媒体的时候,需要一个iOS的设备,咱们获得这个设备的类就是AVCaptureDevice,如果你需要自己定义或设置这些设备,如:切换摄像头、设置闪光灯、对焦、曝光、黑白平衡等就需要重点入手这个类了。

    咱们捕捉媒体的核心是AVCaptureSession捕获会话,通过它来管理咱们的输入设备,它可以同时连接多个输入设备,比如摄像头和麦克,并且为媒体捕获做些预设配置(格式、质量),还可以动态的配置输入的线路,最重要的是它可以控制捕获的开始和停止,并且可以调控设备的切换。但需要注意!这些操作都比较好时,尽量异步调用。

    捕获的输出数据是通过AVCaptureConnection来串联起来的,可以通过他来在代理方法中区分输出的数据类型。

    既然AVCaptureSession这么重要,那咱们就先从他入手吧!

    AVCaptureSession

    属性方法简介

    初始化方法:api里面没有提供,那当然就是使用它父类NSObject的初始化方法啦!init

    常用属性方法:

    输入输出相关:

    public var inputs: [AnyObject]! { get } 获得输入设备的数组

    public func canAddInput(input:AVCaptureInput!) ->Bool 是否可以添加输入设备可用于判断是否可以切换 输入设备 如前后摄像头

    public func addInput(input:AVCaptureInput!) 添加输入设备如果切换设备的时候  需要判断是否可以切换 并且调用beginConfiguration()来提示更新配置 切换完成后 需要提交配置commitConfiguration()

    public func removeInput(input:AVCaptureInput!) 移除输入设备

    public var outputs: [AnyObject]! { get } 获得输出设备数组

    public func canAddOutput(output:AVCaptureOutput!) ->Bool 是否可以添加输出设备

    public var outputs: [AnyObject]! { get } 获得输出设备数组

    public func removeOutput(output:AVCaptureOutput!) 移除输出设备

    运行状态相关:

    public func startRunning() 开始运行

    public func stopRunning() 停止运行

    public var running:Bool{ get } 会话是否正在运行

    public var interrupted:Bool{ get } 会话是否被中断

    更改配置:

    public func beginConfiguration() 开始配置

    public func commitConfiguration() 提交配置

    管理会话预设:

    func canSetSessionPreset(preset:String!) ->Bool 是否可以为会话设置预设

    public var sessionPreset:String! 设置预设

    管理线路连接:

    @available(iOS8.0, *)

    public func addInputWithNoConnections(input:AVCaptureInput!) 注意这个方法iOS8才可以使用  添加输入设备,一般咱们使用addInput:这个方法,但是你需要精细的控制输入的时候 可以选择使用这个方法

    @available(iOS8.0, *)

    public func addOutputWithNoConnections(output:AVCaptureOutput!) 添加输出设备与上面相似

    @available(iOS8.0, *)

    public func canAddConnection(connection:AVCaptureConnection!) ->Bool 是否可以添加连接

    @available(iOS8.0, *)

    public func addConnection(connection:AVCaptureConnection!) 添加捕获连接  可通过它 在代理方法中 分区捕获的数据

    @available(iOS8.0, *)

    public func removeConnection(connection:AVCaptureConnection!) 移除捕获连接

    共享应用程序的音频会话:

    public var usesApplicationAudioSession:Bool 是否使用了音频会话

    public var automaticallyConfiguresApplicationAudioSession:Bool 是否自动配置音频会话

    同步输入输出的时钟

    public var masterClock:CMClock! { get } 输出时候的时钟同步对象

    通过上面列举出来的属性方法,就可以大致了解咱们的媒体捕捉会话。

    使用流程

    输入设备(device)->添加到捕捉会话(session)->添加输出(output)对象到捕捉会话->连接(connection)输出对象->通过连接 获得对应输出的数据流(在输出对象的代理方法中获得)

    这是咱们完整的一个流程!

    内容比较多,咱们还是分开,等基础知识过完一遍,咱们再去发出案例!

    下季咱们讲AVCaptureDevice.

    相关文章

      网友评论

      本文标题:AVFoundation连续系列之捕捉媒体一:AVCapture

      本文链接:https://www.haomeiwen.com/subject/cxqbdttx.html