Vorschau von Bearbeitungen mit CompositionPlayer ansehen

Die Jetpack Media3-Bibliothek bietet die CompositionPlayer API, eine leistungsstarke Player-Implementierung für die Vorschau von Videobearbeitungen in Echtzeit. Wenn Nutzer in Ihrer App Videos bearbeiten können, z. B. Effekte anwenden, sie kürzen oder mehrere Eingabemedien zusammenfügen, können Sie mit CompositionPlayer eine genaue Vorschau der Ausgabe anzeigen. Das kann nützlich sein, wenn Sie die angewendeten Änderungen nicht speichern müssen oder wenn Sie prüfen möchten, ob die Änderungen wie gewünscht konfiguriert sind, bevor Sie sie in das endgültige Video für den Export übernehmen.

Was ist CompositionPlayer?

CompositionPlayer ist eine spezielle Implementierung der Player-Schnittstelle, die speziell für die Wiedergabe von Composition-Objekten entwickelt wurde. Eine Composition definiert, wie Eingabemedien wie Videoclips und Audiotracks angeordnet werden und welche Audio- und Videoeffekte auf sie angewendet werden sollen. Weitere Informationen zur Composition API finden Sie unter Composition von Medienelementen definieren.

Der Hauptzweck von CompositionPlayer besteht darin, diese Composition, mit allen angegebenen Änderungen in Echtzeit zu rendern, damit Nutzer genau sehen können, wie ihre Änderungen aussehen, bevor sie den potenziell zeit- und ressourcenaufwendigen Exportprozess starten. Dasselbe Composition Objekt kann dann mit einer Transformer Instanz für den Export verwendet werden. Weitere Informationen finden Sie unter Exportieren eines Composition.

CompositionPlayer im Vergleich zu ExoPlayer

Sowohl CompositionPlayer als auch ExoPlayer sind Player Implementierungen in Media3, aber sie sind für unterschiedliche Anwendungsfälle optimiert:

Feature

CompositionPlayer

ExoPlayer

Eingabemedien

Akzeptiert ein einzelnes Composition-Objekt, das aus mehreren EditedMediaItem-Instanzen mit Effekten pro Element bestehen kann.

Akzeptiert ein einzelnes MediaItem oder eine Playlist von MediaItem-Instanzen.

Zeitachse

Die Zeitachse und die Dauer basieren auf der gesamten Composition.

Die Zeitachse und die Dauer entsprechen dem aktuell wiedergegebenen MediaItem.

Effekte

Effekte werden in der Composition definiert und können auf ein einzelnes EditedMediaItem oder auf die gesamte Composition angewendet werden.

Effekte werden für die ExoPlayer-Instanz selbst mit setVideoEffects() festgelegt und jeder Effekt wird einzeln auf jedes Element in der Playlist angewendet.

Im Wesentlichen ist CompositionPlayer am hilfreichsten, wenn Sie ein komplexes Composition aus Medien und Effekten rendern müssen, in der Regel im Rahmen der Bearbeitung. Verwenden Sie ExoPlayer für die allgemeine Wiedergabe von Audio- oder Videoinhalten oder um eine Vorschau von Änderungen an einzelnen Assets mit setVideoEffects() anzusehen.

CompositionPlayer für die Vorschau

Die Integration von CompositionPlayer in Ihre App umfasst einige wichtige Schritte. Erstellen Sie zuerst mit dem Builder-Muster eine Instanz von CompositionPlayer, und legen Sie dann die Composition fest, die abgespielt werden soll:

val compositionPlayer = CompositionPlayer.Builder(context).build()
compositionPlayer.setComposition(composition)
compositionPlayer.prepare()
compositionPlayer.play()

Eine Anleitung zum Erstellen einer Composition finden Sie im Abschnitt Composition erstellen.

Da CompositionPlayer die Player-Schnittstelle implementiert, können Sie dann die Zielausgabe festlegen und den Player steuern mit Standardmethoden von Player.

Fehlerbehandlung

Fügen Sie Ihrer CompositionPlayer-Instanz eine Player.Listener-Instanz hinzu, um auf Wiedergabeereignisse und -fehler zu reagieren. Der onPlayerError()-Callback gibt auch alle Probleme aus, die von bearbeitungsspezifischen Komponenten wie der Composition oder VideoGraph.Factory stammen. Weitere Informationen finden Sie in der Dokumentation zu Player-Ereignissen.

Wichtige Hinweise

Einige Funktionen und Einschränkungen, die Sie bei der Verwendung von CompositionPlayer beachten sollten:

  • CompositionPlayer basiert zwar auf der Player-Schnittstelle, aber einige seiner Verhaltensweisen unterscheiden sich von ExoPlayer, da für die Wiedergabe eine Composition erforderlich ist. Beispielsweise unterstützt CompositionPlayer nur die Einstellung des Wiederholungsmodus auf REPEAT_MODE_OFF oder REPEAT_MODE_ALL.
  • Standardmäßig verwendet CompositionPlayer eine SingleInputVideoGraph.Factory, wenn Ihre Composition jedoch mehr als eine Sequenz mit Bild- oder Videoelementen enthält, sollten Sie beim Erstellen Ihrer CompositionPlayer-Instanz setVideoGraphFactory() verwenden, um stattdessen eine MultipleInputVideoGraph.Factory zu verwenden. Eine SingleInputVideoGraph.Factory ist ausreichend, wenn nur eine Sequenz Bild- oder Videoelemente enthält und die anderen nur Audio enthalten.
  • Für alle Medienelemente in Ihrer Composition muss eine Dauer explizit festgelegt werden, entweder mit MediaItem.Builder.setImageDurationMs() für Bilder oder mit EditedMediaItem.Builder.setDurationUs() für Audio oder Videos.

Die folgenden Anwendungsfälle werden unterstützt:

  • Vorschau einzelner Assets.
  • Vorschau einzelner Sequenzen (d. h. sequenzieller Medienelemente).
  • Vorschau einer einzelnen Videosequenz + einer einzelnen Audiosequenz (z. B. Hintergrundaudio).

Die folgenden Anwendungsfälle werden aktiv entwickelt:

  • Vorschau mehrerer Assets, einschließlich Layouts wie Bild-in-Bild, nebeneinander und Raster, bei denen mehrere Videosequenzen beteiligt sind.
  • Anpassen der Bearbeitungspipeline mit einer anderen Grafik-Engine.

Feature Requests

Wenn Sie Feature Requests oder Feedback zu CompositionPlayer haben, erstellen Sie ein Problem im Media3 GitHub-Repository.