对于简单的用例,开始使用 ExoPlayer
包括实现
执行下列步骤:
- 将 ExoPlayer 作为依赖项添加到项目中。
- 创建一个
ExoPlayer
实例。 - 将播放器附加到视图(用于视频输出和用户输入)。
- 使用
MediaItem
准备要播放的播放器。 - 完成后释放播放器。
下面更详细地介绍了这些步骤。如需查看完整示例,请参阅
主演示版应用中的 PlayerActivity
。
将 ExoPlayer 添加为依赖项
添加 ExoPlayer 模块
若要开始使用 AndroidX Media3,最简单的方法就是添加 Gradle
应用的 build.gradle
文件中所需库的依赖项
模块。
例如,依赖于具有 DASH 播放支持和界面组件的 ExoPlayer 您可以按如下方式在模块中添加依赖项:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.0") implementation("androidx.media3:media3-exoplayer-dash:1.4.0") implementation("androidx.media3:media3-ui:1.4.0")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.0" implementation "androidx.media3:media3-exoplayer-dash:1.4.0" implementation "androidx.media3:media3-ui:1.4.0"
其中 1.4.0 是您的首选版本(要查找最新版本,请访问 参阅版本说明)。所有模块都必须是相同的版本。
AndroidX Media3 具有依赖于 外部库来提供额外的功能。有些是 其他依赖项则必须手动构建。 浏览库目录并查看各 README 文件以了解详情。
如需详细了解可用的库模块,请参阅 Google Maven AndroidX 媒体页面。
启用 Java 8 支持
如果尚未启用,则需要在所有 build.gradle
中启用 Java 8 支持
依赖于 ExoPlayer 的文件,方法是将以下内容添加到 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 的界面组件时的一项要求 或 IMA 扩展程序。
必须访问 ExoPlayer 实例的线程
通过在创建播放器时传递 Looper
来指定。如果没有 Looper
则用于创建播放器的线程的 Looper
为
或者,如果该线程没有 Looper
,Looper
的
使用应用的主线程在所有情况下,线程的 Looper
播放相应文件后,可以使用
Player.getApplicationLooper
。
如需详细了解 ExoPlayer 的线程模型,请参阅 “线程模型”部分。
将播放器附加到视图
ExoPlayer 库为媒体提供了一系列预构建的界面组件
。这包括 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 的预构建界面组件。视频应用
实现自己的界面,即目标 SurfaceView
、TextureView
、
SurfaceHolder
或 Surface
可以使用 ExoPlayer 的
setVideoSurfaceView
、setVideoTextureView
、setVideoSurfaceHolder
和
setVideoSurface
方法。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
来完成。