简单的屏幕截图:只logging在UIView的图层内出现的video?

这个SO答案解决了如何做一个UIView的屏幕截图。 我们需要类似的东西,而不是一个单一的图像,目标是产生超过60秒的UIView内出现的一切video – 概念上只logging该UIView的图层,忽略其他层。

我们的video应用在用户正在logging的任何位置叠加图层,最终目标是生成将这些图层与原始video合并的主video。 但是,使用AVVideoCompositionCoreAnimationTool将图层与原始video合并非常非常慢:导出60秒的video需要10-20秒。

我们发现结合两个video(即,仅使用不带AVVideoCompositionCoreAnimationTool )是非常快的:〜1秒。 希望是创build一个独立的图层video,然后将其与原始video结合使用AVMutableComposition.

斯威夫特的答案是理想的,但不是必需的。

这听起来像你的“快速”合并不涉及(重新)编码帧,即它是微不足道的,基本上是一个荣耀的文件连接,这就是为什么它是60倍的实时。 我问过这个问题,因为你的“非常慢”的输出是实时的3-6倍,实际上并不是那么糟糕(至less不是在旧的硬件上)。

使用AVAssetWriter帧进行编码应该能让您知道尽可能快的非平凡导出,这可能会显示在现代硬件上,您可以将导出时间减半或减半。

这是一个很长的说法,可能不会有更多的performance。 如果你考虑一下典型的iOSvideo编码用例,这个用例可能是1920p @ 120 fps或者240 fps,那么你的编码大约是6x realtime @ 30fps,这是你典型的iOS设备“需要”做。

有可用的优化(如较低/可变帧率),但这些可能会失去捕获CALayer的便利。