在AVCaptureSession中切换摄像机速度很慢

时间:2016-07-09 23:23:29

标签: ios swift avfoundation core-image

我已经看过很多其他这样的问题,并尝试了很多解决方案,但这种情况有点不同。我正在使用AVCaptureVideoDataOutputSampleBufferDelegate,以便我可以将CIFilters应用于实时视频供稿。我使用以下方法更换相机:

func changeCameras() {
    captureSession.stopRunning()
    var desiredPosition: AVCaptureDevicePosition?
    if front {
        desiredPosition = AVCaptureDevicePosition.Back
    } else {
        desiredPosition = AVCaptureDevicePosition.Front
    }

    let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as? [AVCaptureDevice]
    for device in devices! {
        if device.position == desiredPosition {
            self.captureSession.beginConfiguration()
                do {
                    let input = try AVCaptureDeviceInput(device: device)
                    for oldInput in self.captureSession.inputs {
                        print(oldInput)
                        self.captureSession.removeInput(oldInput as! AVCaptureInput)
                    }
                  print(input)
                    self.captureSession.addInput(input)
                    self.captureSession.commitConfiguration()
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.captureSession.startRunning()
                        })

                } catch { print("evic failed")}
        }
    }
    front = !front
}

我用来设置摄像头(在viewDidLoad中调用)并从委托接收sampleBuffer的方法在这里:https://gist.github.com/JoeyBodnar/17e22e3c04093caa54cf240ed8b1b601

一个问题是,当按下按钮更换相机时,在更换前需要4-5秒的固定屏幕冻结。我已经尝试了上面的方法,并创建了一个单独的队列来运行整个函数,但仍然需要很长时间。我只是在使用常规的AVVideoPreviewLayer切换相机时从未遇到过这个问题,所以我认为这可能部分是因为我使用了样本缓冲区委托,但不能很好如何/为什么。任何帮助表示赞赏。谢谢!

0 个答案:

没有答案