我正在尝试创建一个应用程序的视频,以定义的帧速率捕获屏幕截图。实际上一切都工作得很好,因为iPad 3和iPad 2上的“renderInContext:”函数似乎都没有遵守屏幕截图的指定帧率。我明白,由于屏幕大小也考虑了视网膜显示,renderInContext :执行速度比iPhone或iPod慢。
事情是在iPad 3上,如果我将捕获率设置为每秒10帧,捕获实际上发生在每秒2帧,这意味着我无法捕获8帧,使渲染的视频非常跳跃和不流畅。在iPad 2上,我能够达到每秒6帧的速度,最多可以忍受。然而,iPad 2将在一段时间后面临,我假设iPad 3将是市场上唯一可用的设备。所以我猜iPad 3应该是我应该改进代码的地方。
我不期待在iPad 3上获得10 fps或更高的屏幕捕获率,只需在iPad 3上获得至少6 fps的捕获率就可以了。然而它似乎是renderInContext:在iPad 3中,如果我使用整个屏幕(即768X1024),它似乎需要至少800毫秒来完成渲染。显然我有renderInContext:以特定帧速率(例如1/10 fps)在计时器上运行。我重新调查一下如何调用renderInContext:重叠说例如它需要800ms来完成但是我再调用renderInContext:在说1 / 10FPS(这将是.0813)之后然后理论上我仍在以速率捕获。将图像存储在一个数组中供以后处理似乎很好,但由于分配了大量内存,我会收到内存警告,然后就会发生崩溃。
无论如何,我的问题是,是否有其他方法可以使用“renderInContext:”方法访问显示缓冲区。或者甚至,只是将CVImageRef写入一个文件,在写入png之前没有从CVImageRef转换为UIImage?或者是一种方法,可以确保我可以以我设置的相同帧速率写入ImageRef处理,这样我知道会有很少的重叠并确保内存被正确释放。