gpt4 book ai didi

objective-c - AVCaptureScreenInput 和 kCGWindowListOptionOnScreenBelowWindow

转载 作者:太空狗 更新时间:2023-10-30 03:41:55 26 4
gpt4 key购买 nike

我正在使用 AVCaptureScreenInput 进行屏幕捕获。该应用程序有一个带有配置选项的窗口。

我想录制屏幕但不录制录制器应用程序中的窗口。例如,如果您进行屏幕录制,Quicktime 会执行此操作。

我想我找到了解决办法,但我不确定如何或是否可以一起使用它们。

kCGWindowListOptionOnScreenBelowWindow 位于 Core Graphics 框架的 CGWindow.h 中。 AVCaptureScreenInput 是 AVFoundation 框架中 AVCaptureInput.h 的一部分。

如果您正在截取单个屏幕截图,您可以传递 kCGWindowListOptionOnScreenBelowWindow 和一个 windowID,以便仅捕获低于该窗口级别的窗口。如果可行,我可以通过将捕获应用程序的窗口设置为非常高的级别来实现我的目标。

我对 Objective-c 比较陌生,我不清楚是否可以将 kCGWindowListOptionOnScreenBelowWindow 与 AVCaptureScreenInput 一起使用。如果是,有人可以提供关于生成的代码应该是什么样子的提示吗?

How to access the pixel buffer of an NSWindow in OSX?

最佳答案

据我所知,没有办法从 OS X 的内置显示记录 API 中排除特定窗口:

  • AVFoundation 的 AVCaptureScreenInput (10.7+)
  • 核心图形 CGDisplayStream(10.8+)

当最终屏幕输出已经合成在一起时,上述两种方法似乎都在合成后抓取屏幕内容。
因此,排除您的录制窗口将需要您使用一个 API,该 API 允许您自己合成窗口,然后将这些自定义框架附加到 AVAssetWriterInput。

Quartz Window Services允许您通过 CGWindowListCreateImage 拍摄单个窗口的快照。一个很好的示例项目也展示了如何将多个窗口截图合成在一起是 Son of Grab .

检索拼接在一起的镜头后,您必须将其附加到 AVAssetWriterInput。 AVFoundation 提供了一个方便的类来将自定义像素缓冲区附加到电影中:AVAssetWriterInputPixelBufferAdaptor .

尤其是 AVFoundation 部分可能会变得非常令人沮丧,并且您可能会遇到性能问题,因为合成很可能比 OS X 的内置合成器慢,但总的来说应该可以实现您想要的。

关于objective-c - AVCaptureScreenInput 和 kCGWindowListOptionOnScreenBelowWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com