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