CMSampleBufferGetDataBuffer () возвращает нулевое значение - Cocoa Swift - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь захватить экран моей системы и обработать данные. Но я получаю значение nil для CMSampleBufferGetDataBuffer для буфера выборки, полученного в методе делегата captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection). Есть идеи? ниже мой код:

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

    }
}
...