2015-08-24 18 views
5

moja metoda didOutputSampleBuffer nazywa się pomyślnie aż przełączyć kamer przy użyciu tej funkcji:klatek Aparat spadł po zmianie aparat iOS

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() 
} 

po włączeniu ramki są czasami spadła w tej metodzie, więc nie mogę zrobić zdjęcie . Po około 5 sekundach wracają ramki.

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) 


    } 
} 

JEŚLI potrzebujesz więcej kodu daj mi znać.

Odpowiedz

1

Rozwiązałem to, zmieniając kolejkę wyjściową na 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()) 
+0

Właściwie robisz przykładowy bufor, który delegujesz do dispatch_get_main_queue() powyżej. nie korzystasz z kolejki, którą utworzyłeś. Jak to naprawiono? – Gizmodo

Powiązane problemy