Wie kann ich den Bildschirm mit akzeptabler Leistung aufzeichnen, während ich die Benutzeroberfläche entsprechend anpasse?

9

Ich suche Hilfe mit einem Leistungsproblem in einer Objective-C-basierten iOS-App.

Ich habe eine iOS-Anwendung, die den Inhalt des Bildschirms mit der Methode renderInContext von CALayer erfasst. Es versucht, genügend Bildschirmframes zu erfassen, um mit AVFoundation ein Video zu erstellen. Die Bildschirmaufzeichnung wird dann mit anderen Elementen für Forschungszwecke zur Benutzerfreundlichkeit kombiniert. Während der Bildschirm erfasst wird, kann die App auch den Inhalt eines UIWebView anzeigen, über das Netzwerk gehen, um Daten abzurufen, etc ... Der Inhalt der Webansicht ist nicht unter meiner Kontrolle - es ist willkürlicher Inhalt von der Web.

Dieses Setup funktioniert, aber wie Sie sich vorstellen können, ist es nicht butterweich. Da die Ebene im Hauptthread gerendert werden muss, gibt es mehr Konflikte mit der Benutzeroberfläche, als ich möchte. Was ich tun möchte, ist ein Setup, bei dem die Reaktionsfähigkeit der Benutzeroberfläche gegenüber der Bildschirmaufnahme Priorität hat. Zum Beispiel, wenn der Benutzer die Webansicht scrollt, würde ich lieber Frames auf der Aufnahme löschen als eine schreckliche Scroll-Erfahrung.

Ich habe mit verschiedenen Techniken experimentiert, angefangen von dispatch_source coalescing bis hin zur Übergabe der Frame-Capture-Anfragen als Blöcke an die Hauptwarteschlange an CADisplayLink. Bis jetzt scheinen alle ungefähr dasselbe zu tun. Die Frame-Aufnahme wird derzeit in der drawRect der Hauptansicht des Bildschirms ausgelöst.

Was ich hier frage, ist: Angesichts der oben genannten, welche Techniken würden Sie vorschlagen, dass ich versuche, meine Ziele zu erreichen? Mir ist klar, dass die Antwort vielleicht darin besteht, dass es keine gute Antwort gibt ... aber ich würde gerne alles versuchen, wie verrückt es auch klingen mag.

HINWEIS: Welche Techniken auch immer App-Store-freundlich sein müssen. Es kann nicht so etwas wie der CoreSurface-Hack verwendet werden, den Display Recorder verwendet / verwendet.

Danke für Ihre Hilfe!

    
Hunter 15.01.2013, 17:44
quelle

2 Antworten

1

"Da die Ebene im Haupt-Thread gerendert werden muss", ist dies nicht der Fall, solange Sie UIKit nicht berühren.

Siehe Zypern

    
Deniz Mert Edincik 20.01.2013, 21:03
quelle
0

Vielleicht können Sie mit halber Auflösung aufnehmen, um die Dinge zu beschleunigen, wenn das den Anforderungen entspricht?

    
quelle