CMSampleBufferGetDataBuffer() returns nil value - Cocoa Swift

500 Views Asked by At

I am trying to capture my system's screen and process the data. But I get nil value for CMSampleBufferGetDataBuffer for the sample buffer I get in captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) delegate method. Any idea? below is my code:

import Cocoa
import AVFoundation

class ViewController: NSViewController, AVCaptureVideoDataOutputSampleBufferDelegate {

    private lazy var sampleBufferDelegateQueue = DispatchQueue(label: "VideoCapture")
    private lazy var captureSession: AVCaptureSession = {
        let session = AVCaptureSession()
        session.sessionPreset = .hd1280x720

        if let input = AVCaptureScreenInput.init(displayID: CGMainDisplayID()) {
            session.addInput(input)
        }


        let output = AVCaptureVideoDataOutput()
        output.videoSettings = [
            kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA,
            kCVPixelBufferMetalCompatibilityKey as String: true
        ]
        output.setSampleBufferDelegate(self, queue: self.sampleBufferDelegateQueue)
        session.addOutput(output)

        return session
    }()


    @IBAction func startAction(_ sender: Any) {
        self.start()
    }
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    func start() {
        guard !self.captureSession.isRunning else {
            return
        }

        self.captureSession.startRunning()
    }

    func stop() {
        guard self.captureSession.isRunning else {
            return
        }

        self.captureSession.stopRunning()
    }


    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {


         let blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
        print(blockBuffer ?? "nil")

    }
}
0

There are 0 best solutions below