Я пытаюсь создать видео с фрагментом пользовательского интерфейса моего приложения для iOS.Я не могу использовать API-интерфейсы записи экрана, потому что я не захватываю весь экран, а также я рендеринг в другое измерение, чем то, что отображается на экране.
В настоящее время я использую следующий код, которыйработает:
UIGraphicsBeginImageContextWithOptions(outlineFrame.size, YES, 1.0);
[view drawViewHierarchyInRect:self.outline.frame afterScreenUpdates:NO];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
Затем я использую API-интерфейсы AVFoundation для кодирования видео.Итак, в чем проблема?
Это почти привязывает процессор.Он работает на 89% непрерывно на самом быстром из доступных на данный момент iPad (iPad Pro 11 "). В настоящее время скорость рендеринга составляет 3 FPS.
Узким местом является управление цветом. Я профилировалс инструментами, и все признаки указывают на то, что виновником является управление цветом Apple. И Apple не предоставляет нам возможности отключить управление цветом.
На iPad Air 2 платформы отключают управление цветом засцены, и код занимает 20% ЦП.
Что я пробовал
Я пытался создать CGBitmapContext самостоятельно и с использованием различных цветовых пространств, но безрезультатно.вместо этого попытался использовать [view.layer renderInContext:context];
, но это не дает хороших результатов, оно не обрезает закадровые представления и не включает содержимое, отображаемое OpenGL.
НО ... Core Animationкажется, не выполняет управление цветом, и, как результат, работает намного лучше.
Цель
Я просто хочу, чтобы мои взгляды отображались на изображении достаточно эффективным способом.,Я возьму все, что смогу получить.Я что-то упускаю здесь?