2016-06-30 14 views
1

Wir möchten dem Benutzer ermöglichen, animierte "Aufkleber" über Video zu platzieren, das sie in der App aufzeichnen, und verschiedene Möglichkeiten zum Zusammensetzen dieser Aufkleber in Betracht ziehen.Was ist der beste Weg, um Frame-basierte animierte Aufkleber mit aufgezeichneten Videos zu kombinieren?

  1. Erstellen Sie ein Video in Code aus den rahmenbasierten animierten Aufkleber (die gedreht werden kann, und haben die Übersetzungen zur Verfügung) AVAssetWriter verwenden. Das Problem ist, dass AVAssetWriter nur in eine Datei schreibt und Transparenz nicht hält. Dies würde verhindern, dass wir es über das Video mit AVMutableComposition überlagern können.

  2. erstellen .mov Dateien vor der Zeit für unsere Frame-basierte Aufkleber und Composite sie AVMutableComposition und layer Anweisungen mit transformations verwenden. Das Problem dabei ist, dass es keine Werkzeuge gibt, um unsere PNG-basierten Frames einfach in einen .mov zu konvertieren, während wir einen Alpha-Kanal beibehalten und wir müssten unseren eigenen schreiben.

  3. Erstellen separate CALayers für jeden Rahmen in der Aufkleber Animationen. Dies könnte möglicherweise eine sehr große Anzahl von Ebenen pro Bildrate des Videos erzeugen.

Oder irgendwelche besseren Ideen?

Danke.

Antwort

1

Ich würde vorschlagen, dass Sie einen Blick auf meine blog post zu diesem speziellen Thema werfen. Grundsätzlich zeigt dieses Beispiel, wie RGBA-Videodaten aus einer Datei geladen werden können, die an die App-Ressourcen angehängt ist. Dies wird aus einer .mov importiert, die Animations-RGBA-Daten auf dem Desktop enthält. Ein Konvertierungsschritt ist erforderlich, um die Daten vom Desktop in iOS zu übertragen, da einfaches H.264 einen Alpha-Kanal nicht direkt unterstützen kann (wie Sie festgestellt haben). Beachten Sie, dass ältere Hardware möglicherweise Probleme mit der Decodierung eines H.264-Videoaufnahmegeräts und eines weiteren darauf hat. Daher ist dieser Ansatz, die CPU anstelle der H.264-Hardware für den Aufkleber zu verwenden, tatsächlich besser.