Media3 / ExoPlayer 适用于 Kotlin:完整指南与示例
\n\n1. 这是什么以及为什么需要它
\n\nMedia3(以前称为 ExoPlayer)是 Google 为 Android 平台开发的一款现代、强大且灵活的音频和视频播放库。它是 Android SDK 中已过时的 MediaPlayer 的继承者,提供了更广泛的功能、更好的性能以及对播放过程的更强控制。
为什么需要 Media3 / ExoPlayer?与仅适用于简单任务的 MediaPlayer 不同,ExoPlayer 为开发者提供了对媒体管道的完全控制。它支持多种格式(DASH、HLS、SmoothStreaming、MP4、MP3、WebM 等)、自适应比特率切换(ABR)、自定义渲染、字幕处理(包括 WebVTT、TTML)、DRM 保护(Widevine、PlayReady)等等。该库正在积极开发、优化,并用于 YouTube、Google Photos 等许多流行服务中。
对于 Kotlin 开发者来说,Media3 是创建任何媒体应用的事实标准:从简单的音乐播放器到具有自适应流媒体和 DRM 支持的复杂视频播放器。它允许编写干净、模块化且可测试的代码,完全控制播放生命周期。
\n\n2. 安装
\n\nMedia3 是一个 Android 库,因此通过 Gradle 构建系统安装。将以下依赖项添加到您的 app 模块的 build.gradle.kts(或 build.gradle)文件中:
// build.gradle.kts (Module :app)\ndependencies {\n // 基础 Media3 库(必需)\n implementation("androidx.media3:media3-exoplayer:1.4.1")\n // UI 组件(PlayerView、PlayerControlView 等)\n implementation("androidx.media3:media3-ui:1.4.1")\n // 用于 HLS(HTTP 实时流媒体)\n implementation("androidx.media3:media3-exoplayer-hls:1.4.1")\n // 用于 DASH(基于 HTTP 的动态自适应流媒体)\n implementation("androidx.media3:media3-exoplayer-dash:1.4.1")\n // 用于 SmoothStreaming\n implementation("androidx.media3:media3-exoplayer-rtsp:1.4.1")\n // 用于字幕\n implementation("androidx.media3:media3-exoplayer-ima:1.4.1")\n // 用于 DRM(Widevine)\n implementation("androidx.media3:media3-exoplayer-drm:1.4.1")\n // 用于会话(MediaSession)—— 与系统控件集成所必需\n implementation("androidx.media3:media3-session:1.4.1")\n // 用于自定义数据源(例如缓存)\n implementation("androidx.media3:media3-datasource:1.4.1")\n // 用于自定义编解码器(例如 FFmpeg)\n implementation("androidx.media3:media3-decoder:1.4.1")\n // 用于自定义效果(例如变速)\n implementation("androidx.media3:media3-effect:1.4.1")\n // 用于自定义转换(例如视频裁剪)\n implementation("androidx.media3:media3-transformer:1.4.1")\n}\n\n\n重要提示:版本可能会变化。最新版本始终可以在官方发布页面找到。
\n\n添加依赖项后,在 Android Studio 中执行 Gradle 同步(Sync Now)。
\n\n3. 快速入门——最小工作示例
\n\n让我们创建一个最简单的视频播放器,用于播放来自互联网的视频。为此,我们需要在 XML 布局中使用 PlayerView,并在 Activity/Fragment 中编写代码。
步骤 1:布局(activity_main.xml)
\n\n<?xml version="1.0" encoding="utf-8"?>\n<androidx.constrain