我正在尝试使用 AV Foundation 实现 QRcode 阅读器。我的计划是连续捕获图像,将捕获的图像发送到二维码检测器,直到识别出有效代码。检测器需要CGImageRef
或UIImage
作为输入。我的问题是:
- 我应该使用哪个输出:
AVCaptureVideoDataOutput
或AVCaptureStillImageOutput
? - 如何连续拍摄每张图像,例如 500 毫秒?间隔应该多长?
我正在尝试使用 AV Foundation 实现 QRcode 阅读器。我的计划是连续捕获图像,将捕获的图像发送到二维码检测器,直到识别出有效代码。检测器需要CGImageRef
或UIImage
作为输入。我的问题是:
AVCaptureVideoDataOutput
或AVCaptureStillImageOutput
?AVCaptureVideoDataOutput
为您提供未压缩的 YUV 帧,如果它支持未压缩的输入,您可以轻松地将其发送到 QRCode 阅读器。因此,您将避免解码操作。
如果AVCaptureVideoDataOutput
使用,您可以设置帧速率AVFormatDescription
并将其设置为AVCaptureDevice
. 启动后,AVCaptureSession
您会以指定的帧速率连续接收帧,直到停止为止。通常,您可以设置 5 fps 并确保此操作是异步的,并且您最好在不同的线程中处理 QRCode,以便在两个帧捕获事件之间处理 QRCode 解码操作。
创建 AVCaptureVideoDataOutput 的实例。将 AVCaptureDataOutput 的 sampleBufferDelegate 设置为您想要接收样本缓冲区的任何类(比如 x)。确认类 x 到 AVCaptureVideoDataOutputSampleBufferDelegate 协议。实现 - captureOutput:didOutputSampleBuffer:fromConnection: 类 x 中该协议的方法。将 AVCaptureVideoDataOutput 实例添加到 AVCaptureSession。然后开始会话。您将收到带有样本缓冲区的回调。