對於簡單的用途,ExoPlayer
的開始步驟包括實作下列步驟:
- 將 ExoPlayer 新增為專案的依附元件。
- 建立
ExoPlayer
例項。 - 將播放器附加至檢視畫面 (用於影片輸出和使用者輸入)。
- 準備播放器,並提供
MediaItem
供播放。 - 完成後,請放開播放器。
以下將詳細說明這些步驟。如需完整範例,請參閱 主要示範應用程式中的 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 的「執行緒模型」一節。
將播放器附加至檢視畫面
ExoPlayer 程式庫提供一系列預先建構的 UI 元件,可用於媒體播放。其中包括 PlayerView
,它會封裝 PlayerControlView
、SubtitleView
和 Surface
,並在這些元素上算繪影片。您可以在應用程式的版面配置 XML 中加入 PlayerView
。舉例來說,如要將播放器繫結至檢視畫面:
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 的 setVideoSurfaceView
、setVideoTextureView
、setVideoSurfaceHolder
和 setVideoSurface
方法設定目標 SurfaceView
、TextureView
、SurfaceHolder
或 Surface
。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();
播放清單可以在播放期間更新,無需再次準備播放器。請參閱「播放清單」頁面,進一步瞭解如何填入和操控播放清單。如要進一步瞭解建構媒體項目時可用的不同選項 (例如剪輯和附加字幕檔案),請前往媒體項目頁面。
控製播放器
播放器準備就緒後,即可透過播放器呼叫方法控製播放功能。以下是一些最常用的方法:
play
和pause
可開始及暫停播放。seekTo
可讓使用者在媒體中進行搜尋。hasPrevious
、hasNext
、previous
和next
可用於瀏覽播放清單。setRepeatMode
可控制是否要循環播放媒體,以及循環播放的方式。setShuffleModeEnabled
控制播放清單的隨機播放功能。setPlaybackParameters
可調整播放速度和音訊音調。
如果玩家已繫結至 PlayerView
或 PlayerControlView
,則使用者與這些元件的互動會導致系統叫用播放器上的對應方法。
釋放播放器
請務必在不再需要時釋放播放器,以便釋出有限的資源 (例如影片解碼器),供其他應用程式使用。方法是呼叫 ExoPlayer.release
。