簡體   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