如何实时录制MacOS屏幕并处理图像

3

我想录制完整的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 属性吗? - Jean-Baptiste Yunès
是的,我已经尝试了但没有成功。 - Martin Mlostek
这是为了实现模糊或透明窗口吗?如果是的话,有更好的替代方法:https://dev59.com/O2XWa4cB1Zd3GeqPL1am - Clashsoft
好的,我想制作一个覆盖层,可以将背景模糊化,同时进行缩放和操作。 - Martin Mlostek
1个回答

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接