Swift:没有调用captureOutput

时间:2015-08-13 19:22:32

标签: ios iphone swift

所以我正在开发我的第一个Swift应用程序,直到我被困在这里一直很好。请看下面的代码。

//
//  CameraFrames.swift
//  Explore
//
//  Created by Kushagra Agarwal on 13/08/15.
//  Copyright © 2015 Kushagra Agarwal. All rights reserved.
//

import Foundation
import AVFoundation


protocol CameraFramesDelegate {
    func processCameraFrames(sampleBuffer : CMSampleBufferRef)
}


class CameraFrames : NSObject, AVCaptureVideoDataOutputSampleBufferDelegate {
    var previewLayer : AVCaptureVideoPreviewLayer?
    var delegate : CameraFramesDelegate?

    let captureSession = AVCaptureSession();
    var captureDevice : AVCaptureDevice?

    override init() {
        super.init()
        captureSession.beginConfiguration()

        // Capture the session with High settings preset
        captureSession.sessionPreset = AVCaptureSessionPresetHigh;

        self.captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo);

        // Because the old error handling method is deprecated
        do {
            try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice));
        } catch {
            print("Error in getting input from camera");
        }

        self.previewLayer = AVCaptureVideoPreviewLayer(session: captureSession);

        let output = AVCaptureVideoDataOutput();

        var outputQueue : dispatch_queue_t?
        outputQueue = dispatch_queue_create("outputQueue", DISPATCH_QUEUE_SERIAL);
        output.setSampleBufferDelegate(self, queue: outputQueue)

        output.alwaysDiscardsLateVideoFrames = true;
        output.videoSettings = nil;

        captureSession.addOutput(output);

        captureSession.commitConfiguration()
        captureSession.startRunning();
    }

    func captureOutput(captureOutput: AVCaptureOutput!, didDropSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {

        print("frame dropped")
    }

    func captureOutput(captureOutput: AVCaptureOutput, didOutputSampleBuffer sampleBuffer: CMSampleBufferRef, fromConnection connection: AVCaptureConnection) {

        print("frame received")
    }
}

预览在手机上显示正常,但captureOutput从未因某种原因被调用。我查看了一些旧的SO线程,但没有人帮我解决这个问题。知道背后的原因是什么?

编辑:我忘了提到我有一个视图控制器,我在其中预览AVCaptureVideoPreviewLayer图层,效果很好。我觉得问题出在设置outputQueue的某处,但我无法弄清楚是什么。

0 个答案:

没有答案