如何在保持UI响应的同时以可接受的性能记录屏幕?

时间:2013-01-15 17:44:04

标签: iphone ios ipad core-graphics avfoundation

我正在寻找基于Objective-C的iOS应用中性能问题的帮助。

我有一个iOS应用程序,它使用CALayer的renderInContext方法捕获屏幕内容。它尝试捕获足够的屏幕帧以使用AVFoundation创建视频。然后将屏幕记录与其他元素组合以用于可用性的研究目的。在捕获屏幕时,应用程序也可能正在显示UIWebView的内容,通过网络外出以获取数据等...... Web视图的内容不受我的控制 - 它是来自的任意内容网络

此设置正常运行,但正如您可能想象的那样,它并非如此顺畅。由于图层必须在主线程上呈现,因此UI争用比我想要的多。我想要做的是设置一个设置,其中UI的响应性优先于屏幕捕获。例如,如果用户正在滚动Web视图,我宁愿丢弃录制内容而不是滚动体验。

我已经尝试了几种技术,从dispatch_source合并到将帧捕获请求作为块提交到主队列到CADisplayLink。到目前为止,他们似乎都表现得差不多。帧捕获当前正在屏幕主视图的drawRect中触发。

我在这里要问的是:鉴于上述情况,您会建议我尝试实现目标的技巧是什么?我意识到答案可能是没有很好的答案......但我想尝试任何事情,不管它听起来多么古怪。

注意:无论什么技术都需要App Store友好。不能使用Display Recorder使用/使用的CoreSurface hack。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

“由于图层必须在主线程上呈现”这不是真的,只要你不触及UIKit即可。

请参阅https://stackoverflow.com/a/12844171/136305

答案 1 :(得分:0)

如果符合要求,也许你可以以半分辨率录制以加快速度?