ios - iOS 无法打开相机

标签 ios swift avfoundation

我正在尝试为应用程序创建条形码读取器功能。为此我无法获得任何相机设备。

我正在使用 AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: AVMediaType.video,position:.back) 来获取设备列表。

我正在尝试从上面的列表中获取第一个设备

但它不会返回任何相机。

我还在 info.plist 中添加了隐私 - 相机使用说明

       func viewDidLoad() {

            let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: AVMediaType.video, position:. back)

            guard let captureDevice = deviceDiscoverySession.devices.first else{
            print("Failed to get the camera device")
            return
            }

       do{

            // get an instance of the AVCaptureDeviceInput class using the previous device object

            let input = try AVCaptureDeviceInput(device: captureDevice)

            

            //Set the input device on the capture session

            captureSession?.addInput(input)

            

            // Initialize a AVCaptureMetadataOutput object and set it as the output device to the capture session

            let captureMetadataOutput = AVCaptureMetadataOutput()

            captureSession?.addOutput(captureMetadataOutput)

            

            //Set delegate and use the default dispatch queue to execute the call back

            captureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)

            captureMetadataOutput.metadataObjectTypes = [AVMetadataObject.ObjectType.qr]

            

            //Initialize the video preview layer and add it as a subLayer to the viewPreview view

            videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession!)

            videoPreviewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill

            videoPreviewLayer?.frame = view.layer.bounds

            view.layer.addSublayer(videoPreviewLayer!)

            

            //Start video capture.

            captureSession?.startRunning()

        } catch {

            // if any error occurs, print it out and don't continue any more

            print(error)

            return

        }
}

我希望它能够启动相机;但是,它给了我以下错误:

2019-05-05 16:17:46.609442-0500 BarCode[964:302791] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles

2019-05-05 16:17:46.609962-0500 BarCode[964:302791] [MC] Reading from public effective user settings.

获取相机设备失败。

最佳答案

可能正如错误提到的那样。该设备没有任何可用的 .builtInDualCamera 选项。

您可以尝试的常见相机类型是

let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back)

如果您确实需要 .builtInDualCamera,您可以按照 Apple 文档的建议进行操作,即为后备计划实现 if...else 检查。

Building a Camera App

关于ios - iOS 无法打开相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55996568/

相关文章:

ios - 我可以更新协议(protocol)扩展中的指定属性吗?

xcode - ctrl + 拖动到错误的 swift 文件

iphone - 使用按钮设置 AVAudioPlayer 音量

swift - didUpdateLocations 停止更新

ios - 如何在 Swift 中使用 AVPlayerViewController (AVKit) 播放视频

android - React-Native:FlatList 中的反向 zIndex

ios - 创建开发证书 iOS

ios - 带有图案图像和颜色的UIColor

带有 nil 值的 Swift 闭包捕获列表

ios - 使用 SwiftyJSON 遍历数据