正在扫描 iOS 上的条码以获取 AV Foundation 不支持的格式

Scanning barcode on iOS for format not supported by AV Foundation

我正在尝试更新 cordova 应用程序以读取 CODABAR 格式的条形码。

iOS 上使用的条码扫描插件依赖于 AV Foundation 框架来设置一个 AVCaptureSession 至 启动相机并拦截图像帧。

网络上的大多数 cordova 插件和 iOS 教程都使用此方法,并附上 AVCaptureMetadataOutput 指定我们感兴趣的条码格式的实例。

例如

outputItems = [[AVCaptureMetadataOutput alloc] init];
[outputItems setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
[captureSession addOutput:outputItems];

outputItems.metadataObjectTypes = [outputItems availableMetadataObjectTypes];

不幸的是,CODABAR 不是 supported formats 之一。

一旦插件发送了帧,它就会使用 ZXing 来处理图像。 ZXing 支持我想要的所有格式,但由于 AVCaptureMetadataOutput 不允许你 指定 CODABAR,我的插件从不接收图像。

除了使用 AVCaptureSession 处理相机上的帧之外,还有其他方法吗? 尽管 "unblessed" 条形码格式,我是否缺少强制发送帧的方法?

啊。我想找到了。

代码库仍然引用了 zxing 调用,但在没有删除旧代码的情况下换掉了它,这让我走错了路。

在更改之前,它使用 AVCaptureVideoDataOutput 来处理帧本身。

然后改为使用 AVCaptureMetadataOutput,将图像处理委托给 AV Foundation 而不是 zxing。

看起来要添加 codabar 支持,我可能需要撤销此操作,因为 AV Foundation 不支持 codabar。

更新:现在大约一岁了,但为了解决这个老问题,我继续使用我上面建议的解决方案,因为在 iOS 上似乎没有任何其他方法可以解决这个问题。这是我的 comment on the plugin's github issue 的一部分:

结果是:

  • 此插件的旧版本,在 iOS 中,使用了 ZXing c++ 端口的(古老的)快照。该库当时不支持 Codabar。

  • 在某些时候,iOS 版本改为使用 iOS AV Foundation 框架,将条形码解码委托给旧 c++ 中的 AVCaptureMetadataOutput. This framework doesn't support codabar either. This switch was necessary due to memory leaks zxing 方法,当 iOS 10 降落在每个人身上时发现。

我尝试将此插件与更新的 Objective C port of ZXing 集成。这确实支持 codabar,以及该插件的 iOS 版本目前缺少的一些额外格式。

我的尝试到此结束: https://github.com/otherchirps/phonegap-plugin-barcodescanner

我的 iOS 项目现在正在使用此版本的插件扫描 codabar 条形码。

这是基于之前在此处发现的相同方法所做的努力: https://github.com/dually8/BarcodeScanner