我正在尝试制作一部分iOS应用UI的视频。我无法使用屏幕录制API,因为我无法捕获整个屏幕,而且渲染的尺寸与屏幕上显示的尺寸不同。
我当前正在使用以下代码,该代码有效:
UIGraphicsBeginImageContextWithOptions(outlineFrame.size, YES, 1.0);
[view drawViewHierarchyInRect:self.outline.frame afterScreenUpdates:NO];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
然后我使用AVFoundation API对视频进行编码。那怎么了?
几乎钉住了CPU。在目前可用的最快iPad(iPad Pro 11”)上,它连续以89%的速度运行。我目前的渲染速度为3 FPS。
瓶颈是色彩管理。我已经介绍了各种仪器,所有迹象都表明苹果是色彩管理的元凶。而且,Apple无法为我们提供关闭色彩管理的方法。
在iPad Air 2上,框架禁用了幕后的色彩管理,并且代码占用了20%的CPU。
我尝试自己创建CGBitmapContext并使用不同的颜色空间,但无济于事。我尝试使用[view.layer renderInContext:context];
代替,但是效果不佳。它不剪切屏幕外的视图,也不包含OpenGL渲染的内容。
但是... Core Animation似乎不执行颜色管理,因此效果要好得多。
我只希望以合理有效的方式将视图呈现到图像。我会尽我所能。这里有我想念的东西吗?