Switch front/back camera with AVCaptureSession

前端 未结 5 458
时光取名叫无心
时光取名叫无心 2020-12-29 10:01

I\'m following the only answer this has on SO -

Switch cameras with avcapturesession

However cameraWithPosition does not seem to work. Deprecated?

         


        
5条回答
  •  粉色の甜心
    2020-12-29 10:14

    Code update for Swift 4.2

    /// Swap camera and reconfigures camera session with new input
    fileprivate func swapCamera() {
    
        // Get current input
        guard let input = captureSession.inputs[0] as? AVCaptureDeviceInput else { return }
    
        // Begin new session configuration and defer commit
        captureSession.beginConfiguration()
        defer { captureSession.commitConfiguration() }
    
        // Create new capture device
        var newDevice: AVCaptureDevice?
        if input.device.position == .back {
            newDevice = captureDevice(with: .front)
        } else {
            newDevice = captureDevice(with: .back)
        }
    
        // Create new capture input
        var deviceInput: AVCaptureDeviceInput!
        do {
            deviceInput = try AVCaptureDeviceInput(device: newDevice!)
        } catch let error {
            print(error.localizedDescription)
            return
        }
    
        // Swap capture device inputs
        captureSession.removeInput(input)
        captureSession.addInput(deviceInput)
    }
    
    /// Create new capture device with requested position
    fileprivate func captureDevice(with position: AVCaptureDevice.Position) -> AVCaptureDevice? {
    
        let devices = AVCaptureDevice.DiscoverySession(deviceTypes: [ .builtInWideAngleCamera, .builtInMicrophone, .builtInDualCamera, .builtInTelephotoCamera ], mediaType: AVMediaType.video, position: .unspecified).devices
    
        //if let devices = devices {
            for device in devices {
                if device.position == position {
                    return device
                }
            }
        //}
    
        return nil
    }
    

提交回复
热议问题