gpt4 book ai didi

ios - AvCam-ios 从后置摄像头切换到前置摄像头非常慢,我该如何解决这个问题?

转载 作者:行者123 更新时间:2023-11-29 00:09:28 31 4
gpt4 key购买 nike

///切换之前,我完全确定 isRunning == true

   func toggleCamera(){
let first:TimeInterval = Date().timeIntervalSince1970
let currentVideoDevice = self.videoInput.device
///////////////begin to switch
self.captureSession.beginConfiguration()
self.captureSession.removeInput(self.videoInput)
if self.cameraDeviceType == .back {
self.cameraDeviceType = .front
self.inputCamera = self.frontDevice
}else{
self.cameraDeviceType = .back
self.inputCamera = self.backDevice
}
do {
self.videoInput = try AVCaptureDeviceInput(device:self.inputCamera)
} catch {
print(error)
}
if self.captureSession.canAddInput(self.videoInput) {
NotificationCenter.default.removeObserver(self, name: .AVCaptureDeviceSubjectAreaDidChange, object: currentVideoDevice)
NotificationCenter.default.addObserver(self, selector: #selector(self.subjectAreaDidChange), name: .AVCaptureDeviceSubjectAreaDidChange, object: self.videoInput.device)

self.captureSession.addInput(self.videoInput)
} else {
self.captureSession.addInput(self.videoInput)
}
self.captureSession.commitConfiguration()
if let connection = self.videoOutput?.connection(withMediaType: "video") {
if connection.isVideoStabilizationSupported {
connection.preferredVideoStabilizationMode = .auto
}
connection.isEnabled = false
connection.isEnabled = true
}
let second:TimeInterval = Date().timeIntervalSince1970
print("turnAroundInnerCost:",second-first)
}
////日志:turnAroundInnerCost:0.431715965270996///运行时间很快,但是界面切换很慢,大约5s

最佳答案

因此,每次切换您都会重新创建相机、重新配置设备、启用/禁用连接等。尝试将您的相机配置逻辑移动到其他函数并调用一次,例如在 viewDidLoad() 中。

相机之间的切换可以是:

     func switchToFrontCamera() throws {
guard let inputs = captureSession.inputs as? [AVCaptureInput], let rearCameraInput = self.rearCameraInput, inputs.contains(rearCameraInput),
let frontCamera = self.frontCamera else { throw CameraError.invalidOperation }

self.frontCameraInput = try AVCaptureDeviceInput(device: frontCamera)

captureSession.removeInput(rearCameraInput)

if captureSession.canAddInput(self.frontCameraInput) {
captureSession.addInput(self.frontCameraInput)

self.currentCameraPosition = .front
}

else {
throw CameraError.invalidOperation
}
}

func switchToRearCamera() throws {
guard let inputs = captureSession.inputs as? [AVCaptureInput], let frontCameraInput = self.frontCameraInput, inputs.contains(frontCameraInput),
let rearCamera = self.rearCamera else { throw CameraError.invalidOperation }

self.rearCameraInput = try AVCaptureDeviceInput(device: rearCamera)

captureSession.removeInput(frontCameraInput)

if captureSession.canAddInput(self.rearCameraInput) {
captureSession.addInput(self.rearCameraInput)

self.currentCameraPosition = .rear
}

else { throw CameraError.invalidOperation }
}

然后你就可以调用

  switch currentCameraPosition {
case .front:
try switchToRearCamera()

case .rear:
try switchToFrontCamera()
}

关于ios - AvCam-ios 从后置摄像头切换到前置摄像头非常慢,我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973892/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com