2015-05-07 129 views
4

我試圖從攝像頭捕獲視頻幀並在UIImageView上實時顯示洪水圖像。 我試圖改編AVCaptureVideoDataOutputSampleBufferDelegate作爲我的viewcontroller。 我也執行captureOutput,但captureOutput永遠不會被調用。在Swift中,改編的AVCaptureVideoDataOutputSampleBufferDelegate,但captureOutput永遠不會被調用

這裏是我的代碼:

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

正如你所看到的,我試圖處理上imageview圖像和實時顯示拍攝框架,假設我ImageProcessor()作品完美....

任何幫助將不勝感激,謝謝。

回答

5

您的委託方法未被調用,因爲您根本沒有將委託設置爲videoCaptureOutput。爲此,您必須調用videoCaptureOutput setSampleBufferDelegate(self ,queue : queue)方法,其中隊列參數是應在其上調用回調的隊列。

相關問題