0
var captureSession = AVCaptureSession()

override func viewDidLoad() {
    super.viewDidLoad()

    AVCaptureDevice.requestAccess(for: .video) { (succ) in
        print("\(succ) video")
    }
}

@IBAction func Shoot(_ sender: Any) {
    if captureSession.isRunning == true {
        captureSession.stopRunning()
    }
    let cam = AVCaptureDevice.DiscoverySession.init(deviceTypes: [.builtInDualCamera], mediaType: AVMediaType.video, position: .back)
    captureSession = AVCaptureSession()
    captureSession.beginConfiguration()
    do {
        let input = try AVCaptureDeviceInput(device: cam.devices.first!)
        captureSession.addInput(input)
    } catch {
        print(error)
    }
    captureSession.sessionPreset = .photo
    let output = AVCapturePhotoOutput()
    captureSession.addOutput(output)
    captureSession.commitConfiguration()
    output.isDepthDataDeliveryEnabled = true
    output.isHighResolutionCaptureEnabled = true
    captureSession.startRunning()
}

@IBAction func Go(_ sender: Any) {
    let output = captureSession.outputs.first as! AVCapturePhotoOutput
    output.capturePhoto(with: photoSettingsCreator(), delegate: self)
}

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    if error != nil {
        print(error!)
    }
    let dat = photo.fileDataRepresentation()!
    let img = UIImage(data: dat)
    print(photo.depthData!)
}

func photoSettingsCreator() -> AVCapturePhotoSettings {
    let settings = AVCapturePhotoSettings(format: [AVVideoCodecKey : AVVideoCodecType.hevc, AVVideoCompressionPropertiesKey : [AVVideoQualityKey : 1.0]])
    settings.isDepthDataDeliveryEnabled = true
    settings.isHighResolutionPhotoEnabled = true
    settings.isAutoStillImageStabilizationEnabled = true
    settings.flashMode = .off
    return settings
}

直到我在手机上安装 iOS 12 测试版捕获深度数据之前工作正常,但现在我收到一个错误:

Error Domain=AVFoundationErrorDomain Code=-11800“操作无法完成” UserInfo={NSLocalizedFailureReason=发生未知错误(-16800),NSLocalizedDescription=操作无法完成,NSUnderlyingError=0x283094510 {Error Domain=NSOSStatusErrorDomain Code=- 16800 “(空)”}}

我不明白这个错误来自哪里。错误打印在if error照片输出部分。

4

1 回答 1

1

这可能是因为您的captureSession. 在关闭视图时执行取消初始化,很可能在viewWillDisappear

self.captureSession.deinitialize()
于 2018-08-24T08:09:37.773 回答