微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么将 AVCapturePhotoOutput 添加到我的 AVCaptureSession 会导致 AVCaptureVideoPreviewLayer 在 iPhone X 上打开中断?

如何解决为什么将 AVCapturePhotoOutput 添加到我的 AVCaptureSession 会导致 AVCaptureVideoPreviewLayer 在 iPhone X 上打开中断?

在这样配置我的视频层之后:

public class VideoLayerView: UIView {
    override public class var layerClass: Swift.AnyClass {
        return AVCaptureVideoPreviewLayer.self
    }
    
    public override func awakeFromNib() {
        super.awakeFromNib()
        
        self.clipsToBounds = true
    }
    
    public func configureCaptureLayer(session: AVCaptureSession?) {
        guard let captureLayer = self.layer as? AVCaptureVideoPreviewLayer else { return }
        
        captureLayer.session = session
        captureLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
    }
}

并设置会话:

func initializeCamera() {
        guard !captureSession.isRunning else {
            print("Capture session already running")
            return
        }
        guard Permissions.shared.isCameraAuthorized else {
            print("Requesting Camera Permission")
            Permissions.shared.requestCamera { _ in
                dispatchQueue.main.async {
                    self.initializeCamera()
                }
            }
            return
        }
        captureSession.beginConfiguration()
        captureSession.sessionPreset = .photo
        if let captureDevice = self.captureDevice {
            if let captureDeviceInput = try? AVCaptureDeviceInput(device: captureDevice),captureSession.canAddInput(captureDeviceInput) {
                captureSession.addInput(captureDeviceInput)
            } else {
                print("Failed to add capture device input.")
            }
        }

        photoOutput.maxPhotoQualityPrioritization = .quality
        if captureSession.canAddOutput(photoOutput) {
            photoOutput.isHighResolutionCaptureEnabled = true
            captureSession.addOutput(photoOutput)
        } else {
            print("Failed to add photo output")
        }
        captureSession.commitConfiguration()

        if let connection = photoOutput.connection(with: .video) {
            connection.preferredVideoStabilizationMode = .standard
        }
        
        videolayerView.configureCaptureLayer(session: captureSession)

        sessionQueue.async { [weak self] in
            self?.captureSession.startRunning()
        }
    }

预览层在我的 iPhone X 上显示为黑色。但它继续在其他测试设备上运行。删除

if captureSession.canAddOutput(photoOutput) {
            photoOutput.isHighResolutionCaptureEnabled = true
            captureSession.addOutput(photoOutput)
        } else {
            print("Failed to add photo output")
        }

解决了问题,但此代码是拍摄照片所必需的。为什么这不起作用?

解决方法

这是由于 iOS 中的相机状态错误造成的,该错误是由于之前(以及后来被删除)编写的代码错误地配置了相机。重新启动您的设备,相机将恢复运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。