美文网首页MAC OS视频知识
OC之捕获连接 AVCaptureConnection

OC之捕获连接 AVCaptureConnection

作者: 苏沫离 | 来源:发表于2018-09-10 15:17 被阅读1185次

    AVCaptureConnection 捕获会话中特定捕获输入对和捕获输出对象之间的连接。

    捕获输入 AVCaptureInput 具有一个或多个输入端口 AVCaptureInputPort。 捕获输出 AVCaptureOutput 可以接受来自一个或多个源的数据,例如,AVCaptureMovieFileOutput 对象接受视频和音频数据。

    只有会话AVCaptureSession的方法 -canAddConnection:方法返回YES时,才可以使用 -addConnection:方法将 AVCaptureConnection实例添加到会话。
    调用 AVCaptureSession 实例的方法-addInput:-addOutput: 方法时,会在所有兼容的输入和输出之间自动形成连接。添加没有连接的输入或输出时,只需手动添加连接。还可以使用连接来启用或禁用来自给定输入或给定输出的数据流。

    1、创建连接

    我们可以根据指定的一组输入端口和一个输出对象,创建一个连接:

    + (instancetype)connectionWithInputPorts:(NSArray<AVCaptureInputPort *> *)ports
    output:(AVCaptureOutput *)output;
    - (instancetype)initWithInputPorts:(NSArray<AVCaptureInputPort *> *)ports
    output:(AVCaptureOutput *)output;
    

    该方法有两个参数:

    • 参数ports:与AVCaptureInput对象关联的一组输入端口。
    • 参数output:输出对象AVCaptureOutput
    • 返回值:根据指定的一组输入端口和一个输出对象创建的一个连接

    我们也可以根据一个指定输入端口和指定视频预览图层,创建一个捕获连接:

    + (instancetype)connectionWithInputPort:(AVCaptureInputPort *)port
    videoPreviewLayer:(AVCaptureVideoPreviewLayer *)layer;
    - (instancetype)initWithInputPort:(AVCaptureInputPort *)port
    videoPreviewLayer:(AVCaptureVideoPreviewLayer *)layer;
    

    该方法有两个参数:

    • 参数port:与AVCaptureInput对象关联的输入端口AVCaptureInputPort
    • 参数layer: 一个AVCaptureVideoPreviewLayer对象。
    • 返回值:根据一个指定输入端口和指定视频预览图层创建的一个捕获连接。

    可以使用 -addConnection: 方法将此方法返回的连接添加到AVCaptureSession实例。

    调用 AVCaptureSession 实例的方法-addInput:-addOutput: 方法时,会在所有兼容的输入和输出之间自动形成连接。除非使用 -addInputWithNoConnections:-addOutputWithNoConnections: 方法,否则无需手动创建会话并向会话添加连接。

    2、配置

    属性 类型 描述
    enabled BOOL 指示是否已启用连接
    active BOOL 指示连接是否处于活动状态
    inputPorts NSArray 连接的输入端口集合
    output AVCaptureOutput 连接的输出端口
    videoPreviewLayer AVCaptureVideoPreviewLayer 与连接关联的视频预览图层
    audioChannels NSArray 一组AVCaptureAudioChannel对象;此属性仅适用于涉及音频的连接。

    3、管理视频配置

    属性(仅适用于涉及视频的连接) 类型 描述
    videoOrientation AVCaptureVideoOrientation 视频的方向;设置videoOrientation不一定会导致视频缓冲区的物理旋转;例如,与AVCaptureMovieFileOutput对象的视频连接使用Quicktime轨道矩阵处理方向; 使用AVCaptureStillImageOutput对象,使用Exif标记处理方向。
    supportsVideoOrientation BOOL 指示连接是否支持更改视频的方向; 如果supportsVideoOrientation的值为YES,则可以设置videoOrientation以旋转连接输出所使用的视频缓冲区。
    videoFieldMode AVVideoFieldMode 应该如何处理隔行扫描视频流经连接的指标。
    supportsVideoFieldMode BOOL 指示连接是否支持设置videoFieldMode属性。
    videoMinFrameDuration CMTime 接收器应输出连续视频帧的最小时间间隔,默认值为kCMTimeInvalid。值kCMTimeZerokCMTimeInvalid表示无限制的最大帧速率。
    supportsVideoMinFrameDuration BOOL 指示连接是否支持设置videoMinFrameDuration属性
    videoMaxFrameDuration CMTime 接收器应输出连续视频帧的最大时间间隔。默认值为kCMTimeInvalid。值kCMTimeZerokCMTimeInvalid表示无限的最小帧速率。
    supportsVideoMaxFrameDuration BOOL 指示连接是否支持设置videoMaxFrameDuration属性。
    videoScaleAndCropFactor CGFloat 缩放系数,取值范围为 1.0 到 videoMaxScaleAndCropFactor 之间。系数为 1.0 时,图像为原始大小。在大于 1.0 的因子下,图像按因子缩放并中心裁剪为其原始尺寸。
    videoMaxScaleAndCropFactor CGFloat 连接的最大视频比例和裁剪因子,是设置videoScaleAndCropFactor属性时可以使用的最大值。
    3.1、视频方向 AVCaptureVideoOrientation

    AVCaptureVideoOrientation 指示视频方向的枚举。可以将这些常量与AVCaptureVideoPreviewLayer对象结合使用;

    枚举值 描述
    AVCaptureVideoOrientationPortrait 表示视频应垂直定向,顶部位于手机顶部。
    AVCaptureVideoOrientationPortraitUpsideDown 表示视频应垂直定向,顶部位于手机底部。
    AVCaptureVideoOrientationLandscapeRight 表示视频应水平定向,顶部位于手机右部。
    AVCaptureVideoOrientationLandscapeLeft 表示视频应水平定向,顶部位于手机左部。
    3.2、视频字段模式 AVVideoFieldMode

    AVVideoFieldMode 指示视频字段模式的枚举,用于videoFieldMode属性。

    枚举值 描述
    AVVideoFieldModeBoth 表示隔行扫描内容中的顶部和底部视频字段都应该通过。
    AVVideoFieldModeTopOnly 表示只应传递隔行扫描内容中的顶部视频字段。
    AVVideoFieldModeBottomOnly 表示仅应在隔行扫描内容中传递底部视频字段。
    AVVideoFieldModeDeinterlace 表示隔行扫描内容中的顶部和底部视频字段应该被解除隔行扫描。

    4、管理视频镜像设置

    属性 类型 描述
    automaticallyAdjustsVideoMirroring BOOL 指示videoMirrored的值是否可以根据会话的配置进行更改,默认值为YES。
    supportsVideoMirroring BOOL 指示连接是否支持视频镜像。
    videoMirrored BOOL 指示流经连接的视频是否应围绕其垂直轴进行镜像;如果supportsVideoMirroring的值为YES,则可以设置该属性为YES以翻转视频的垂直轴并产生镜像效果。

    5、管理视频稳定设置

    属性 类型 描述
    supportsVideoStabilization BOOL 指示此连接(视频连接类型)是否支持视频稳定;即使是视频连接,它也可能无法在所有分辨率下使用。
    activeVideoStabilizationMode AVCaptureVideoStabilizationMode 当前为连接激活的稳定模式。在支持视频稳定功能的设备上,只能稳定一部分可用的源格式。这个属性的值永远不会是AVCaptureVideoStabilizationModeAuto,相反,该属性明确指示稳定当前是否正在使用。
    preferredVideoStabilizationMode AVCaptureVideoStabilizationMode 稳定模式最适合与连接一起使用,默认值为AVCaptureVideoStabilizationModeOff

    对于preferredVideoStabilizationMode属性:将此属性设置为AVCaptureVideoStabilizationModeOff以外的值,以便在指定模式可用时启用稳定。启用视频稳定会在视频捕获管道中引入额外的延迟,并且可能会消耗更多的系统内存,具体取决于稳定模式和格式。如果首选稳定模式不可用,则activeVideoStabilizationMode属性设置为AVCaptureVideoStabilizationModeOff。将此属性设置为AVCaptureVideoStabilizationModeAuto会为捕获格式和帧速率选择适当的模式。

    5.1、视频稳定模式 AVCaptureVideoStabilizationMode

    AVCaptureVideoStabilizationMode 描述设备格式支持的视频稳定模式的常量。

    枚举值 描述
    AVCaptureVideoStabilizationModeOff 视频不应该稳定。
    AVCaptureVideoStabilizationModeStandard 应使用iOS 5.0中引入的标准视频稳定算法来稳定视频。
    AVCaptureVideoStabilizationModeCinematic 应使用电影稳定算法稳定视频,以获得更加生动的效果。
    AVCaptureVideoStabilizationModeAuto 应选择最适合设备和格式的视频稳定模式。

    6、管理相机校准传送设置

    @property(nonatomic, readonly, getter=isCameraIntrinsicMatrixDeliverySupported) BOOL cameraIntrinsicMatrixDeliverySupported;
    

    指示捕获连接当前是否支持传送相机内在信息。
    相机内在函数以可用于渲染叠加或执行计算机视觉任务的方式描述捕获设备的当前成像参数。
    如果此属性为YES,则可以设置cameraIntrinsicMatrixDeliveryEnabled属性以在视频捕获期间捕获相机内在信息。仅当连接的输入设备格式和输出类都支持相机内在函数的传送时,此属性的值才为YES。
    iOS 11 中,AVCaptureVideoDataOutput类是唯一支持相机内在函数的输出。

    @property(nonatomic, getter=isCameraIntrinsicMatrixDeliveryEnabled) BOOL cameraIntrinsicMatrixDeliveryEnabled;
    

    指定是否配置捕获管道以传递摄像机内在信息;默认值为NO。
    相机内在函数以可用于渲染叠加或执行计算机视觉任务的方式描述捕获设备的当前成像参数。
    如果此属性为YES,则此连接中的任何AVCaptureVideoDataOutput对象都包含其所有样本缓冲区中的kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix附件。
    只能在调用AVCaptureSession的实例方法 -startRunning 之前更改此属性的值。

    相关文章

      网友评论

        本文标题:OC之捕获连接 AVCaptureConnection

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