【问题标题】:How can I record the MacOS screen in realtime and process the image如何实时录制MacOS屏幕并处理图像
【发布时间】:2021-06-07 03:05:36
【问题描述】:

我想记录整个 macOS 屏幕,并对图像做不同的事情,比如

  • 计算不同区域的平均颜色
  • NSPanelNSWindow 中重新渲染屏幕模糊部分

现在我正在像这样使用AVCaptureScreenInput

let input = AVCaptureScreenInput(displayID: CGMainDisplayID())!
avCaptureSession.addInput(input)
let output = AVCaptureVideoDataOutput()
avCaptureSession.addOutput(output)
output.setSampleBufferDelegate(self, queue: .main)
self.avCaptureSession.startRunning()

这种方法的问题是图像的帧率似乎很低,我想达到30fps+。

在 macOS 上实现这些目标的好方法是什么。一方面是图像的“快速”获取,另一方面是捕获图像的实时处理/重新渲染。

问题 #1

上述带有捕获会话的解决方案会导致不可接受的延迟。这意味着在移动窗口时,响应呈现延迟超过 100 毫秒。我想要实时的。

【问题讨论】:

  • 你设置minFrameDuration属性了吗?
  • 是的。我试过没有成功
  • 这是为了实现模糊或透明的窗口吗?如果是这样,还有更好的选择:stackoverflow.com/questions/11174918/…
  • 非常接近,我想制作一个叠加层,使背景模糊,但也可以缩放和操纵

标签: xcode macos avfoundation metal screen-capture


【解决方案1】:

AVCaptureScreenInput 是后期窗口合成,因此您将捕获和转换自己的效果,这可能不是您想要的。

与您可能想要的最接近的是CGWindowListCreateImage API,它允许您排除窗口,包括您自己的窗口,但它不是一个理想的“实时”接口,因为CGImage 输出没有时间戳并且不能免费桥接到纹理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多