如果是簡單的用途,開始使用 ExoPlayer
包括實作以下步驟:
- 將 ExoPlayer 新增為專案的依附元件。
- 建立
ExoPlayer
執行個體。 - 將播放器附加至檢視區塊 (用於輸出影片和使用者輸入內容)。
- 利用
MediaItem
準備玩家可以進行的遊戲。 - 完成後,請放開播放器。
以下將詳細說明這些步驟。如需完整範例,請參閱主要試用版應用程式中的 PlayerActivity
。
將 ExoPlayer 新增為依附元件
新增 ExoPlayer 模組
如要開始使用 AndroidX Media3,最簡單的方法是在應用程式模組的 build.gradle
檔案中,將所需的程式庫加入 Gradle 依附元件。
舉例來說,如要依附具有 DASH 播放功能的 ExoPlayer 和 UI 元件,您可以在模組中新增依附元件,如下所示:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.3.1") implementation("androidx.media3:media3-exoplayer-dash:1.3.1") implementation("androidx.media3:media3-ui:1.3.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.3.1" implementation "androidx.media3:media3-exoplayer-dash:1.3.1" implementation "androidx.media3:media3-ui:1.3.1"
1.3.1 代表您偏好的版本 (如要瞭解最新版本,請參閱版本資訊)。所有模組都必須相同。
AndroidX Media3 的程式庫模組依附於外部程式庫,以提供額外功能。有些可從 Maven 存放區取得,有些必須手動建構。瀏覽程式庫目錄,並查看個別 README 檔案,瞭解詳細資訊。
如要進一步瞭解可用的程式庫模組,請參閱 Google Maven AndroidX Media 頁面。
開啟 Java 8 支援功能
如果尚未啟用,您需要在 android
區段新增以下內容,為所有依附 ExoPlayer 的 build.gradle
檔案啟用 Java 8 支援功能:
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
。在所有情況下,玩家必須存取該執行緒的 Looper
,才能使用 Player.getApplicationLooper
進行查詢。
如要進一步瞭解 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
即可達成。