相机iOS更改后相机帧率下降

5

我的方法didOutputSampleBuffer成功调用,但当我使用以下函数切换摄像头时,它停止被调用:

func switchCameras() {

    captureSession.beginConfiguration()
    captureSession.sessionPreset = AVCaptureSessionPresetMedium
    var error : NSError? = nil
    for input in captureSession.inputs {
        captureSession.removeInput(input as! AVCaptureInput)
    }
    if currentCamera == "back" {
        currentCamera = "front"

        if captureSession.canAddInput(AVCaptureDeviceInput(device: frontCamera, error: &error)) {
            captureSession.addInput(AVCaptureDeviceInput(device: frontCamera, error: &error))
        } else {
            print(error)
        }
    } else {
        currentCamera = "back"
        if captureSession.canAddInput(AVCaptureDeviceInput(device: backCamera, error: &error)) {
            captureSession.addInput(AVCaptureDeviceInput(device: backCamera, error: &error))
        } else {
        }
    }
    print("chagned")
    captureSession.commitConfiguration()
}

切换后,使用此方法会出现丢帧的情况,因此我无法拍照。大约5秒钟后,帧率恢复正常。

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
    connection.videoOrientation = AVCaptureVideoOrientation.Portrait

    if capture == true {
        self.capture = false
        var newBuffer = sampleBuffer
            self.capturePicture(newBuffer)


    }
}

如果您需要更多的代码,请告诉我。

1个回答

1

我通过将输出队列更改为DISPATCH_QUEUE_SERIAL来解决了这个问题。

let output = AVCaptureVideoDataOutput()
output.videoSettings = [kCVPixelBufferPixelFormatTypeKey as NSString:kCVPixelFormatType_32BGRA]
let queue = dispatch_queue_create("cameraQueue", DISPATCH_QUEUE_SERIAL)
output.setSampleBufferDelegate(self, queue: dispatch_get_main_queue())

实际上,您在上面将示例缓冲区委托给了dispatch_get_main_queue()。您没有使用自己创建的队列。这个问题是如何解决的? - Gizmodo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接