En Swift, adaptó AVCaptureVideoDataOutputSampleBufferDelegate, pero captureOutput nunca se llamó

Estoy intentando capturar los frameworks de video de la camera y mostrar la inundación de imágenes en UIImageView en time real. Traté de adaptar AVCaptureVideoDataOutputSampleBufferDelegate para mi viewcontroller . También implementé captureOutput , pero captureOutput nunca fue llamado.

Aquí está mi código:

 import UIKit import AVFoundation class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate { @IBOutlet weak var imageView: UIImageView! @IBOutlet var cameraView: UIView! var selectedImage :UIImage! let captureSession = AVCaptureSession() var captureDevice : AVCaptureDevice? var videoCaptureOutput : AVCaptureVideoDataOutput! override func viewDidLoad() { super.viewDidLoad() captureSession.sessionPreset = AVCaptureSessionPresetLow self.captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) if(captureDevice != nil){ beginSession() } } func beginSession() { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { self.videoCaptureOutput = AVCaptureVideoDataOutput() self.videoCaptureOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey:kCVPixelFormatType_32BGRA] self.videoCaptureOutput.alwaysDiscardsLateVideoFrames = true self.captureSession.addOutput(self.videoCaptureOutput) var err : NSError? = nil self.captureSession.addInput(AVCaptureDeviceInput(device: self.captureDevice, error: &err)) self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto if err != nil { println("error: \(err?.localizedDescription)") } var previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession) previewLayer?.frame = self.cameraView.layer.bounds previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill dispatch_async(dispatch_get_main_queue(), { // 2 // 3 self.cameraView.layer.addSublayer(previewLayer) self.captureSession.startRunning() }); }); } func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { println("capture delegation called") var imageProcessor = ImageProcessor() imageView.image = imageProcessor.imageFromSampleBuffer(sampleBuffer) } } 

Como puede ver, estoy tratando de procesar la image y mostrar el marco de captura en time real en una imageview , supongo que mi ImageProcessor() funciona perfectamente …

Cualquier ayuda sería muy apreciada, gracias.

Su método de delegado no se llama porque no está configurando el delegado en videoCaptureOutput en absoluto. Para hacerlo, debe llamar al setSampleBufferDelegate(self ,queue : queue ) videoCaptureOutput setSampleBufferDelegate(self ,queue : queue ) donde el parámetro de queue es la queue en la que se deben invocar las devoluciones de llamada