cocoa - CMSampleBufferGetDataBuffer() 返回 nil 值 - Cocoa Swift
问题描述
我正在尝试捕获系统的屏幕并处理数据。但是我在委托方法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")
}
}
解决方案
推荐阅读
- git - Azure DevOps Git UI 自动化相同的存储库或单独的
- java - how to find in java string case incesitive number of word java
- httprequest - 204 在 Artifactory 中设置属性时没有内容响应代码
- php - QueryException SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'customers.id'
- sql - 如何使用 SQL 对每组中 50% 的记录进行采样?
- php - 通过图片的 URL 在 Wordpress 前端表单中上传图片
- jquery - Fancybox - 覆盖单击、Esc 和关闭按钮
- mysql - 如何在异议js中使用find_in_set?
- kdb - KDB中的条件WHERE子句?
- mysql - java.sql.SQLSyntaxErrorException:您的 SQL 语法有错误;mysql