Jetpack Media3 是面向媒体库的新平台,可让 Android 应用呈现丰富的音频和视觉体验。Media3 提供了一种简单的架构,可根据设备功能提供强大的自定义、可靠性和优化功能,从而抽象出分片带来的复杂性。
本文档介绍了用于使用 Media3 实现播放和编辑用例的关键 API。
播放组件
Media3 为播放用例提供了多个关键组件。如果您使用过之前的 Android 媒体库,则会熟悉构成这些组件的类。
下图展示了这些组件在典型应用中的组合方式。

媒体播放器
媒体播放器是应用的一个组件,用于播放媒体文件。在 Media3 中,您会看到:
类 | 说明 | 实现注意事项 |
---|---|---|
Player |
Player 是一个接口,用于定义媒体播放器的传统高级功能,例如播放、暂停和跳转功能。
|
在 Media3 中,Player 接口是多个组件(例如 MediaSession 和 MediaController )实现或使用的常见 API。
|
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 。
|
修改组件
Media3 包含适用于媒体编辑用例的 Transformer API,包括:
- 音频和视频处理,例如添加滤镜和特效
- 处理特殊格式,例如 HDR 视频和慢动作视频
- 组合,例如组合多个输入文件
- 将最终输出导出到文件
类 | 说明 | 实现注意事项 |
---|---|---|
Transformer |
使用 Transformer 类启动和停止转换,以及检查正在运行的转换的进度更新。
|
|
Effects |
Effects 对象是一组要应用于媒体项的音频和视频特效。
|
|
EditedMediaItem |
EditedMediaItem 表示要处理的媒体内容以及要应用于它的编辑。
|
您可以在开始导出流程之前使用 ExoPlayer 预览添加到媒体内容的效果。
|
简介视频
观看以下视频,了解 Media3 的开发者对其的介绍。
实用链接
- 媒体开发者中心
ExoPlayer
文档- 迁移指南
- GitHub 上的 AndroidX Media3
- Media3 媒体会话示例应用
- Universal Android Music Player 示例应用