AV捕捉电影*视图*的内容

时间:2016-10-08 17:56:37

标签: macos avfoundation

我知道如何使用AVFoundation将屏幕的内容捕获到电影文件中,但我想改为捕获NSView的内容。我的应用程序在视图中做了一些事情,目前生成一个电影文件,我必须记录整个屏幕(当然裁剪)。如果应用程序可能在后台并且仍在录制会话,那么对用户来说会容易得多。我考虑过可能会创建一个虚假的屏幕并试图反映那里的视图内容,但这似乎过于复杂。

2 个答案:

答案 0 :(得分:2)

我在使用CARenderer将纯CALayer树转换为旧式OpenGL上下文到CVOpenGLTextureCache / AVAssetWriter,然后将其显示到常规GL视图或图层以供显示时取得了一些成功。

旧的渲染器中存在一些怪癖,所以你可能需要调整一些东西才能使它与视网膜等一起工作。没有尝试使用适当的NSView树,并且CA维护人员感到惊讶它的工作原理在WWDC。所以未来的支持可能会受到限制。

似乎是一个很好的要求,我很乐意参考你的雷达。

答案 1 :(得分:1)

AFAICR,没有明确的API来捕获NSView。您需要做的是逐帧渲染,或者如果视图的有趣内容都是基于图层的,则使用AVVideoCompositionCoreAnimationTool

前一种方法(逐帧渲染)可能会很慢,并且某些合成方法将在软件渲染器中呈现错误。归结为使用AVAssetWriterAVAssetWriterInputPixelBufferAdaptor并为其提供帧。创建一个与CGBitmapContext共享内存的像素缓冲区,然后从那些像素缓冲区创建样本缓冲区,然后将这些样本缓冲区提供给资产编写器管道,相当简单(但很多代码),然后将该资产作为m4v文件写入磁盘。

后者(渲染一些核心动画)方法是......很多工作。需要更多地了解正在呈现的内容以提出确切的方法。