【发布时间】:2022-01-11 14:50:54
【问题描述】:
我有这段代码,它是 AVCaptureMetadataOutputObjectsDelegate 的扩展:
internal func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
guard let captureSession = captureSession else { return }
captureSession.stopRunning()
if let metadataObject = metadataObjects.first {
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
guard let stringValue = readableObject.stringValue else { return }
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
found(code: stringValue)
}
}
当它“查看”一个二维码时被调用:
let metadataOutput = AVCaptureMetadataOutput()
if (captureSession.canAddOutput(metadataOutput)) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr]
我想做的是增加一个新功能,就是一打开摄像头就知道后置摄像头的亮度是多少。
我发现他们到处都在使用这个:
func captureOutput(_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection)
但在我看来,它已经不在 AvFoundation 中了。
【问题讨论】:
-
您提到的最后一种方法来自
AVCaptureVideoDataOutputSampleBufferDelegate,效果很好。使用myVideoOutput.setSampleBufferDelegate(... -
miVideoOutput在我的情况下是什么?我只有这个:captureSession = AVCaptureSession()let videoInput: AVCaptureDeviceInputlet metadataOutput = AVCaptureMetadataOutput()