¿Cómo puedo grabar la pantalla con un rendimiento aceptable mientras mantengo la interfaz de usuario receptiva?

Estoy buscando ayuda con un problema de rendimiento en una aplicación iOS basada en Objective-C.

Tengo una aplicación iOS que captura el contenido de la pantalla utilizando el método renderInContext de CALayer. Intenta capturar suficientes marcos de pantalla para crear un video usando AVFoundation. La grabación de la pantalla se combina con otros elementos para fines de investigación sobre la usabilidad. Mientras se captura la pantalla, la aplicación también puede mostrar el contenido de un UIWebView, salir a través de la red a buscar datos, etc. El contenido de la vista web no está bajo mi control; es un contenido arbitrario del Web.

Esta configuración está funcionando pero, como puede imaginar, no es un proceso de manteca. Dado que la capa se debe representar en el hilo principal, hay más contención de la interfaz de usuario de la que me gustaría. Lo que me gustaría hacer es tener una configuración donde la capacidad de respuesta de la interfaz de usuario se priorice sobre la captura de pantalla. Por ejemplo, si el usuario está desplazando la vista Web, prefiero colocar fotogramas en la grabación que tener una experiencia de desplazamiento terrible.

He experimentado con varias técnicas, desde dispatch_source coalescente hasta enviar las solicitudes de captura de cuadros como bloques a la cola principal a CADisplayLink. Hasta ahora todos parecen actuar de la misma manera. La captura de fotogramas se está activando actualmente en el drawRect de la vista principal de la pantalla.

Lo que estoy preguntando aquí es: dado lo anterior, ¿qué técnicas sugerirían que intente alcanzar mis metas? Me doy cuenta de que la respuesta puede ser que no hay una gran respuesta ... pero me gustaría intentar algo, por muy raro que pueda parecer.

NOTA: Cualesquiera que sean las técnicas deben ser compatibles con App Store. No se puede usar algo como el hack de CoreSurface que usa Display Recorder / usa.

¡Gracias por tu ayuda!

Respuestas a la pregunta(2)

Su respuesta a la pregunta