Jetpack Media3 是媒体库的新归宿,它使 Android 应用能够展示丰富的音频和视觉体验。Media3 提供了一个简单的架构,具有强大的自定义、可靠性和基于设备能力的优化,从而抽象化了碎片化带来的复杂性。
本文档介绍了使用 Media3 实现播放和编辑用例的关键 API。
播放组件
Media3 为播放用例提供了几个关键组件。如果您曾使用过以前的 Android 媒体库,那么构成这些组件的类您会很熟悉。
下图演示了这些组件在典型应用中如何协同工作。

媒体播放器
媒体播放器是您应用的一个组件,它允许播放媒体文件。在 Media3 中,您将找到
类 | 说明 | 实现说明 |
---|---|---|
Player |
Player 是一个接口,定义了媒体播放器的传统高级功能,例如播放、暂停和查找的能力。 |
在 Media3 中,Player 接口是一个通用 API,由多个组件实现或使用,例如 MediaSession 和 MediaController 。 |
ExoPlayer |
ExoPlayer 是 Media3 中 Player 接口的默认实现。 |
媒体会话
媒体会话提供了一种与媒体播放器交互的通用方式。这使应用能够向外部源宣传媒体播放,并接收来自外部源的播放控制请求。在 Media3 中,您将找到
类 | 说明 | 实现说明 |
---|---|---|
MediaSession |
媒体会话使您的应用能够与音频或视频播放器交互。它们对外宣传媒体播放,并接收来自外部源的播放命令。 | 在 Media3 中,MediaSession 需要一个 Player 来执行命令并获取当前状态。 |
MediaSessionService |
MediaSessionService 将媒体会话及其关联的播放器保存在一个与应用主 Activity 分开的服务中,以方便后台播放。 |
|
MediaController |
MediaController 类通常用于从应用外部发送命令,例如,从其他应用或系统本身。命令会发送到关联 MediaSession 的底层 Player 。 |
MediaController 类实现了 Player 接口,但在调用方法时,MediaController 会将命令发送到连接的 MediaSession 。Google 助理等客户端应用可以使用 MediaController 来控制连接会话中的播放。 |
MediaLibraryService |
MediaLibraryService 类似于 MediaSessionService ,但它包含额外的 API,因此您可以将内容库提供给客户端应用。 |
|
MediaBrowser |
MediaBrowser 类允许用户浏览媒体应用的内容库并选择要播放的项。 |
MediaBrowser 类同时实现了 MediaController 和 Player 接口。与 MediaController 类似,Android Auto 等客户端应用通常会实现 MediaBrowser 。 |
界面组件
Media3 提供了用于观看视频和控制播放的默认界面组件。
类 | 说明 | 实现说明 |
---|---|---|
PlayerView |
用于显示视频和播放控件的默认 View 。 |
连接到 ExoPlayer 、MediaController 或任何其他自定义 Player 。 |
PlayerSurface |
一个 Composable,表示用于显示视频的专用绘图 Surface 。 |
连接到任何 Player ,但不包含播放控件。仅用于渲染帧,并且可以根据各种 ContentScale 类型进行大小调整。此组件和许多其他可组合组件可在Compose UI 实用程序中找到。 |
编辑组件
Media3 包含了用于媒体编辑用例的 Transformer API,其中包括
- 音频和视频处理,例如添加滤镜和效果
- 处理特殊格式,例如 HDR 视频和慢动作视频
- 合成,例如组合多个输入文件
- 将最终输出导出到文件
类 | 说明 | 实现说明 |
---|---|---|
Transformer |
使用 Transformer 类启动和停止转换,并检查正在运行的转换的进度更新。 |
|
Effects |
一个 Effects 对象是应用于媒体项的音频和视频效果的集合。 |
|
EditedMediaItem |
一个 EditedMediaItem 表示要处理的媒体项及其要应用的编辑。 |
您可以使用 ExoPlayer 在开始导出过程之前预览添加到媒体项的效果。 |
介绍视频
观看下方视频,了解构建 Media3 的工程师对 Media3 的介绍。