開始使用

對於簡單的用途,ExoPlayer 的開始步驟包括實作下列步驟:

  1. 將 ExoPlayer 新增為專案的依附元件。
  2. 建立 ExoPlayer 例項。
  3. 將播放器附加至檢視畫面 (用於影片輸出和使用者輸入)。
  4. 準備播放器,並提供 MediaItem 供播放。
  5. 完成後釋放播放器。

以下將詳細說明這些步驟。如需完整範例,請參閱 主要示範應用程式中的 PlayerActivity

將 ExoPlayer 新增為依附元件

新增 ExoPlayer 模組

如要開始使用 AndroidX Media3,最簡單的方法是在應用程式模組的 build.gradle 檔案中,針對所需的程式庫新增 Gradle 依附元件。

舉例來說,如要依附支援 DASH 播放功能的 ExoPlayer 和 UI 元件,您可以為模組新增依附元件,如下所示:

Kotlin

implementation("androidx.media3:media3-exoplayer:1.4.1")
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
implementation("androidx.media3:media3-ui:1.4.1")

Groovy

implementation "androidx.media3:media3-exoplayer:1.4.1"
implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
implementation "androidx.media3:media3-ui:1.4.1"

其中 1.4.1 是您偏好的版本 (您可以參閱版本資訊,瞭解最新版本)。所有模組都必須是相同版本。

AndroidX Media3 的程式庫模組會依賴外部程式庫提供額外功能。其中有些可從 Maven 存放區取得,其他則必須手動建構。瀏覽程式庫目錄,並查看個別的 README 檔案以瞭解詳情。

如要進一步瞭解可用的程式庫模組,請參閱 Google Maven AndroidX Media 頁面

開啟 Java 8 支援

如果尚未啟用,請在所有依附於 ExoPlayer 的 build.gradle 檔案中啟用 Java 8 支援功能,方法是在 android 區段中新增以下內容:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

啟用 multidex

如果 Gradle minSdkVersion 為 20 以下,您應啟用 Multidex,以免發生建構錯誤。

建立播放器

您可以使用 ExoPlayer.Builder 建立 ExoPlayer 例項,該例項提供多種自訂選項。以下程式碼是建立例項的最簡單範例。

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

執行緒相關注意事項

必須透過單一應用程式執行緒存取 ExoPlayer 例項。在大多數情況下,這應為應用程式的主執行緒。使用 ExoPlayer 的 UI 元件或 IMA 擴充功能時,必須使用應用程式的主執行緒。

您可以在建立播放器時傳遞 Looper,藉此明確指定必須存取 ExoPlayer 例項的執行緒。如果未指定 Looper,系統會使用建立播放器的執行緒的 Looper。如果該執行緒沒有 Looper,系統會使用應用程式主執行緒的 Looper。在所有情況下,您都可以使用 Player.getApplicationLooper 查詢必須存取播放器的執行緒的 Looper

如要進一步瞭解 ExoPlayer 的執行緒模型,請參閱 ExoPlayer Javadoc 的「Threading model」一節。

將播放器附加至檢視畫面

ExoPlayer 程式庫提供多種預先建構的 UI 元件,可用於媒體播放。包括 PlayerView,可封裝 PlayerControlViewSubtitleViewSurface,並在其中算繪影片。您可以將 PlayerView 納入應用程式的版面配置 XML 中。舉例來說,如要將播放器繫結至檢視畫面:

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

您也可以將 PlayerControlView 用作獨立元件,這類用途適用於僅音訊的用途。

您可以選擇使用 ExoPlayer 的預先建構 UI 元件。對於實作自身 UI 的影片應用程式,可以分別使用 ExoPlayer 的 setVideoSurfaceViewsetVideoTextureViewsetVideoSurfaceHoldersetVideoSurface 方法,設定目標 SurfaceViewTextureViewSurfaceHolderSurface。ExoPlayer 的 addTextOutput 方法可用於接收應在播放期間算繪的字幕。

填入播放清單並準備播放器

在 ExoPlayer 中,每個媒體都會以 MediaItem 表示。如要播放媒體,您需要建立對應的 MediaItem、將其新增至播放器、準備播放器,然後呼叫 play 開始播放:

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer 可直接支援播放清單,因此您可以為播放器準備多個媒體項目,讓播放器依序播放這些項目:

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

播放清單可以在播放期間更新,無須重新準備播放器。如要進一步瞭解如何在「播放清單」頁面填入及操作播放清單,如要進一步瞭解建構媒體項目時可用的不同選項 (例如剪輯和附加字幕檔案),請前往媒體項目頁面

控制播放器

準備好播放器後,您可以透過在播放器上呼叫方法來控制播放作業。以下是一些最常用的方法:

  • playpause 可開始及暫停播放。
  • seekTo 可在媒體中尋找內容。
  • hasPrevioushasNextpreviousnext 可用於瀏覽播放清單。
  • setRepeatMode 可控制媒體是否循環播放,以及循環播放的方式。
  • setShuffleModeEnabled 控制播放清單的隨機播放功能。
  • setPlaybackParameters 可調整播放速度和音訊音調。

如果播放器已繫結至 PlayerViewPlayerControlView,使用者與這些元件的互動會導致播放器上的對應方法遭到叫用。

釋放播放器

請務必在不再需要時釋放播放器,以便釋出有限的資源 (例如影片解碼器),供其他應用程式使用。方法是呼叫 ExoPlayer.release