iOS 中二维码扫描(zxingObjc和原生)

对于网上的第三方 ZXingObjC,自我感觉是对原生的AVFoundation中关于二维码部分的一个封装,大致看看ZXingObjC的内部实现其事和原生的实现相似的,里面都用到了AVFoundation框架中的几个类:AVCaptureSession,AVCaptureDevice,AVCaptureInput,AVCaptureOutput.刚看到这几个类以及类内部的属性和变量的时候,完全不知道是什么,慢慢的才有了了解:

官网对这几个类的解释是:

  • An instance of AVCaptureDevice to represent the input device, such as a camera or microphone
  • An instance of a concrete subclass of AVCaptureInput to configure the ports from the input device
  • An instance of a concrete subclass of AVCaptureOutput to manage the output to a movie file or still image
  • An instance of AVCaptureSession to coordinate the data flow from the input to the output

从官网可以了解到:

1. AVCaptureDevice 即为输入数据的设备,比如相机,麦克风等;

2. AVCaptureInput (抽象类 下面会有多个子类如AVDeviceCaptureInput)用于配置输入设备的端口(这个端口用AVCaptureInputPort表示,这个端口代表了从输入设备输入的数据流的类型,数据流的类型有多种:

NSString *const AVMediaTypeVideo;

NSString *const AVMediaTypeAudio;

NSString *const AVMediaTypeText;

NSString *const AVMediaTypeClosedCaption;

NSString *const AVMediaTypeSubtitle;

NSString *const AVMediaTypeTimecode;

NSString *const AVMediaTypeTimedMetadata;

NSString *const AVMediaTypeMetadata;

NSString *const AVMediaTypeMuxed;

比如AVDeviceCaptureInput就有一个用于表示 “视频数据流:AVMediaTypeVideo”的端口);

3.AVCaptureOutput 表示捕获数据输出管理 用于表示将数据输出的数据类型为视频文件或者图片;

4.AVCaptureSession 用于协调输入数据流一直到输出数据的处理过程。

下面的官网的一张图片展示了这几个类之间的关系

iOS 中二维码扫描(zxingObjc和原生)

在将AVCaptureInput和AVCaptureOutput添加到session中的时候会创建一个AVCaptureConnection,用于去在输入和输出之间建立连接

iOS 中二维码扫描(zxingObjc和原生)

下面说一下关于AVCaptureDevice的几个属性

Focus Mode:聚焦模式

Exposure Mode:曝光模式

Flash Mode:闪光灯模式

Torch Mode:手电筒模式

White Balance:白平衡模式

AVCaptureDevicePosition:设备位置

AVCaptureDevicePositionUnspecified = 0,未指定位置

AVCaptureDevicePositionBack  = 1, 后置的摄像头

AVCaptureDevicePositionFront = 2 前置摄像头

iOS 中二维码扫描(zxingObjc和原生)

上一篇:spring-boot子模块打包去掉BOOT-INF文件夹


下一篇:https://scrapingclub.com/exercise/basic_login/