How Can I Record the Screen with Acceptable Performance While Keeping the UI Responsive?

折月煮酒 提交于 2019-12-03 06:18:16

问题


I'm looking for help with a performance issue in an Objective-C based iOS app.

I have an iOS application that captures the screen's contents using CALayer's renderInContext method. It attempts to capture enough screen frames to create a video using AVFoundation. The screen recording is then combined with other elements for research purposes on usability. While the screen is being captured, the app may also be displaying the contents of a UIWebView, going out over the network to fetch data, etc... The content of the Web view is not under my control - it is arbitrary content from the Web.

This setup is working but as you might imagine, it's not buttery smooth. Since the layer must be rendered on the main thread, there's more UI contention than I'd like. What I'd like to do is to have a setup where the responsiveness of the UI is prioritized over the screen capture. For instance, if the user is scrolling the Web view, I'd rather drop frames on the recording than have a terrible scrolling experience.

I've experimented with several techniques, from dispatch_source coalescing to submitting the frame capture requests as blocks to the main queue to CADisplayLink. So far they all seem to perform about the same. The frame capture is currently being triggered in the drawRect of the screen's main view.

What I'm asking here is: given the above, what techniques would you suggest I try to achieve my goals? I realize the answer may be that there is no great answer... but I'd like to try anything, however wacky it might sound.

NOTE: Whatever techniques need to be App Store friendly. Can't use something like the CoreSurface hack that Display Recorder used/uses.

Thanks for your help!


回答1:


"Since the layer must be rendered on the main thread" this is not true, as long as you don't touch UIKit.

Please see https://stackoverflow.com/a/12844171/136305




回答2:


Maybe you can record at half resolution to speed up things, if that fits the requirements?



来源:https://stackoverflow.com/questions/14343606/how-can-i-record-the-screen-with-acceptable-performance-while-keeping-the-ui-res

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!