首页 > 解决方案 > AVCapturePhotoOutput capturePhotoWithSettings:delegate: No active and enabled video connection'

问题描述

嗨,我对编码还很陌生,我在使用 AVCapturePhotoOutput 时遇到了这个错误。我正在使用 Swift 5 和 Xcode 12.5.1。我在我的实际设备上运行它,我已经坚持了一段时间。该错误仅在我尝试拍摄照片时发生。任何帮助将不胜感激谢谢:)

private let output = AVCapturePhotoOutput()
private var captureSession: AVCaptureSession?
private let previewLayer = AVCaptureVideoPreviewLayer()

private let cameraView = UIView()

private func setUpCamera() {
    let captureSession = AVCaptureSession()
    if let device = AVCaptureDevice.default(for: .video) {
        do {
            
            let input = try AVCaptureDeviceInput(device: device)
            if captureSession.canAddInput(input) {
                captureSession.addInput(input)
            }

        if captureSession.canAddOutput(output) {
            captureSession.addOutput(output)
        }
        

        // Layer
        previewLayer.session = captureSession
        previewLayer.videoGravity = .resizeAspectFill
        cameraView.layer.addSublayer(previewLayer)

        captureSession.startRunning()
        captureSession.sessionPreset = AVCaptureSession.Preset.high
        self.captureSession = captureSession
           
    }
    catch {
        print(error)
    }
        
    }
}

Extension CameraViewController: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    guard let data = photo.fileDataRepresentation(),
          let image = UIImage(data: data) else {
        return
    }
    
    captureSession?.stopRunning()
    showEditPhoto(image: image)
}

private func showEditPhoto(image: UIImage) {
    guard let resizedImage = image.sd_resizedImage(
        with: CGSize(width: 640, height: 640),
        scaleMode: .aspectFill
    ) else {
        return
    }

    let vc = PostEditViewController(image: resizedImage)
    if #available(iOS 14.0, *) {
        vc.navigationItem.backButtonDisplayMode = .minimal
    }
    navigationController?.pushViewController(vc, animated: false)

}

标签: swiftavfoundationavcapturesession

解决方案


尝试使用“cgImageRepresentation()”而不是“fileDataRepresentation()”。并从给定的 cgImage 初始化一个 UIImage


推荐阅读