1

我正在尝试创建一个应用程序的视频,该视频以定义的帧速率捕获屏幕截图。一切实际上都工作正常,只是 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 的捕获率就可以了。然而,如果我使用整个屏幕(即 768X1024),它似乎 renderInContext: 在 iPad 3 中,它似乎需要至少 800 毫秒才能完成渲染。显然我有 renderInContext: 在特定帧速率(例如 1/10 fps)的计时器上运行。如果某些对 renderInContext: 的调用重叠说例如它需要 800 毫秒才能完成,但我有另一个对 renderInContext 的调用:在说 1/10FPS(这将是 0.0813)之后,我会侦察,那么理论上我仍然以速率捕获。将图像存储在数组中以供以后处理似乎很好,但由于分配了大量内存,我会收到内存警告,然后会发生崩溃。

无论如何,我的问题是,有没有其他方法可以使用“renderInContext:”方法访问显示缓冲区。甚至,只是将 CVImageRef 写入文件而不在写入 png 之前将 CVImageRef 转换为 UIImage?或者一种方法可以确保我可以以我设置的相同帧速率编写 ImageRef 处理,这样我就知道几乎没有重叠并确保正确释放内存。

4

0 回答 0