ios 在AVCaptureSession中切换摄像机缓慢

njthzxwz  于 2023-08-08  发布在  iOS
关注(0)|答案(1)|浏览(149)

我看过许多类似的问题,也尝试过许多解决方案,但这个案例有点不同。我正在使用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,所以我认为这可能是部分原因,我使用的样本缓冲区委托,但不能完全拼凑如何/为什么。任何帮助都是感激的。谢谢!2谢谢!

8oomwypt

8oomwypt1#

使用开始配置和提交配置
`

DispatchQueue.global().async {
            self.captureSession.beginConfiguration()
//cupture session configurations here

字符串
//结束

self.captureSession.commitConfiguration()
            DispatchQueue.main.async {
                self.captureSession.startRunning()
            }
        }


`
这对我很有效

相关问题