如要開始使用 ExoPlayer
,請針對簡單的用途實作下列步驟:
- 將 ExoPlayer 新增為專案的依附元件。
- 建立
ExoPlayer
執行個體。 - 將播放器附加至檢視區塊 (用於影片輸出和使用者輸入)。
- 準備好要播放的播放器。
MediaItem
- 完成後釋放播放器。
下文將詳細說明這些步驟。如需完整範例,請參閱主要試用版應用程式中的 PlayerActivity
。
將 ExoPlayer 新增為依附元件
新增 ExoPlayer 模組
如要開始使用 AndroidX Media3,最簡單的方法是在應用程式模組的 build.gradle
檔案中,新增所需程式庫的 Gradle 依附元件。
舉例來說,如要依附於支援 DASH 播放和 UI 元件的 ExoPlayer,可以依附於下列模組:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.7.1") implementation("androidx.media3:media3-exoplayer-dash:1.7.1") implementation("androidx.media3:media3-ui:1.7.1") implementation("androidx.media3:media3-ui-compose:1.7.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.7.1" implementation "androidx.media3:media3-exoplayer-dash:1.7.1" implementation "androidx.media3:media3-ui:1.7.1" implementation("androidx.media3:media3-ui-compose:1.7.1")
其中 1.7.1 是您偏好的版本 (如要查看最新版本,請參閱版本資訊)。所有模組都必須是相同版本。
AndroidX Media3 具有依附外部程式庫的程式庫模組,可提供額外功能。部分可從 Maven 存放區取得,其他則必須手動建構。瀏覽程式庫目錄,並參閱個別 README 瞭解詳情。
如要進一步瞭解可用的程式庫模組,請參閱 Google Maven AndroidX Media 頁面。
開啟 Java 8 支援
如果尚未啟用,您需要在所有依附於 ExoPlayer 的 build.gradle
檔案中,至少開啟 Java 8 支援功能,方法是在 android
區段中新增下列內容:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
建立播放器
您可以使用 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);
您可以選擇是否使用 ExoPlayer 的預先建構 UI 元件。對於實作自有 UI 的影片應用程式,可以使用 ExoPlayer 的 setVideoSurfaceView
、setVideoTextureView
、setVideoSurfaceHolder
和 setVideoSurface
方法,分別設定目標 SurfaceView
、TextureView
、SurfaceHolder
或 Surface
。Listener.onCues
回呼可用於接收應在播放期間轉譯的說明文字,setImageOutput
則可用於接收解碼的圖片。
為提供更舒適的使用者體驗,請考慮新增 keepScreenOn
屬性,或在 ExoPlayer 上設定喚醒鎖定。您可以在背景工作頁面中,調查其他會讓裝置保持喚醒狀態的動作。
android:keepScreenOn="true"
如要進一步瞭解如何使用 Media3 UI 元件及自訂這些元件,請參閱「UI 頁面」。
填入播放清單並準備播放器
在 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
即可進行檢查。