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:
CompositionPlayerbasiert zwar auf derPlayer-Schnittstelle, aber einige seiner Verhaltensweisen unterscheiden sich vonExoPlayer, da für die Wiedergabe eineCompositionerforderlich ist. Beispielsweise unterstütztCompositionPlayernur die Einstellung des Wiederholungsmodus aufREPEAT_MODE_OFFoderREPEAT_MODE_ALL.- Standardmäßig verwendet
CompositionPlayereineSingleInputVideoGraph.Factory, wenn Ihre Composition jedoch mehr als eine Sequenz mit Bild- oder Videoelementen enthält, sollten Sie beim Erstellen IhrerCompositionPlayer-InstanzsetVideoGraphFactory()verwenden, um stattdessen eineMultipleInputVideoGraph.Factoryzu verwenden. EineSingleInputVideoGraph.Factoryist 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 mitEditedMediaItem.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.