使用 CompositionPlayer 預覽編輯內容

Jetpack Media3 程式庫提供 CompositionPlayer API,這是功能強大的 Player 實作項目,可即時預覽影片編輯內容。如果應用程式可讓使用者編輯影片,例如套用特效、修剪或合成多個輸入媒體項目,CompositionPlayer 可協助您顯示準確的輸出預覽畫面。如果您不需要儲存套用的編輯內容,或想先驗證編輯內容是否符合預期,再將其匯出為最終影片,這項功能就非常實用。

什麼是 CompositionPlayer

CompositionPlayerPlayer 介面的專用實作項目,專門用來播放 Composition 物件。 Composition 定義輸入媒體資產 (例如視訊片段和音軌) 的排列方式,以及要套用哪些音訊和視訊效果。如要進一步瞭解 Composition API,請參閱「定義媒體項目 Composition」。

CompositionPlayer 的主要用途是即時算繪這個 Composition,並顯示所有指定的編輯內容,讓使用者在執行可能耗時且耗用資源的匯出程序前,確切瞭解編輯內容的呈現效果。接著,您可以使用相同的 Composition 物件搭配 Transformer 執行個體匯出,詳情請參閱「匯出 Composition」。

CompositionPlayerExoPlayer

CompositionPlayerExoPlayer 都是 Media3 內部的 Player 實作項目,但兩者最佳化的用途不同:

功能

CompositionPlayer

ExoPlayer

輸入媒體

接受單一 Composition 物件,其中可包含多個 EditedMediaItem 執行個體,並為每個項目套用效果。

接受單一 MediaItem 或 MediaItem 例項的播放清單

時間軸

時間軸和持續時間以整個合成內容為準。

時間軸和時間長度會對應到正在播放的 MediaItem。

特效

效果是在 Composition 中定義,可套用至個別 EditedMediaItem 或整個 Composition。

效果是在 ExoPlayer 執行個體本身上使用 setVideoEffects() 設定,且每個效果都會個別套用至播放清單中的每個項目。

基本上,當您需要算繪複雜的媒體和效果時,CompositionPlayer最能派上用場,通常是在編輯環境中。Composition使用 ExoPlayer 播放一般用途的音訊或視訊內容,或使用 setVideoEffects() 預覽單一素材的編輯內容。

CompositionPlayer 預覽

CompositionPlayer 整合至應用程式需要完成幾個重要步驟。首先,使用建構工具模式例項化 CompositionPlayer,然後設定要播放的 Composition

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

如需建立 Composition 的指引,請參閱「建立 Composition」一節。

請注意,由於 CompositionPlayer 會實作 Player 介面,因此您可以設定目標輸出,並透過標準 Player 方法控制播放器

處理錯誤

Player.Listener 執行個體附加至 CompositionPlayer,以便對播放事件和錯誤做出反應。onPlayerError() 回呼也會顯示編輯特定元件 (例如 CompositionVideoGraph.Factory) 時發生的任何問題。詳情請參閱「播放器事件」說明文件。

重要注意事項

使用 CompositionPlayer 時,請留意以下功能和限制:

支援的用途如下:

  • 單一素材資源預覽。
  • 單一序列 (即連續媒體項目) 預覽。
  • 預覽單一影片序列 + 單一音訊序列 (例如背景音訊)。

我們正在積極開發下列用途:

  • 多素材資源預覽畫面,包括子母畫面、並排和格線等版面配置,其中包含多個影片序列。
  • 使用不同的圖形引擎自訂編輯管道。

功能要求

如有任何功能要求或意見回饋,請在 Media3 GitHub 存放區中提出問題。CompositionPlayer