繁体   English   中英

类型AVCaptureDevice不符合协议序列

[英]Type AVCaptureDevice does not conform to protocol Sequence

我试图打开前置摄像头以便交谈自拍并将其另存为输出,以使用户能够在提交前查看图片。 我配置的原始功能在iOS 10上已弃用。有人可以帮助您了解如何正确编写此功能?

 //OLD CODE:
 let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
    for device in devices {

       if device.position == AVCaptureDevicePosition.Front {


            do {

                let input = try AVCaptureDeviceInput(device: device as! AVCaptureDevice)
                if captureSession.canAddInput(input) { ... 
 //NEW CODE:   
   let devices = AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .front)
     )

    for device in devices {
        if device.position == AVCaptureDevice.Position.front {

            do {
                let input = try AVCaptureDeviceInput(device: devices)
                if captureSession.canAddInput(input) {
                    captureSession.addInput(input)
                    stillImageOutput.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]

                    if captureSession.canAddOutput(stillImageOutput) {
                        captureSession.add(stillImageOutput)
                        captureSession.startRunning()

                        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                        previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
                        previewLayer.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
                        cameraView.layer.addSublayer(previewLayer)

                        previewLayer.bounds = cameraView.frame
                        previewLayer.position = CGPoint(x: cameraView.frame.width/2, y: cameraView.frame.height/2)

                    }
                }
            }
            catch {

            }
        }
    }

}

查看文档

class func `default`(_ deviceType: AVCaptureDevice.DeviceType, 
                 for mediaType: AVMediaType?, 
            position: AVCaptureDevice.Position) -> AVCaptureDevice?

因此, default方法返回一个可选的AVCaptureDevice

您只需要更换

//NEW CODE:   
   let devices = AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .front)
     )

    for device in devices {
        if device.position == AVCaptureDevice.Position.front {

//NEW CODE:   
        if let device = AVCaptureDevice.default(.builtInWideAngleCamera, for: AVMediaType.video, position: .front) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM