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()
作品完美....
任何帮助将不胜感激,谢谢。