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。 | 
| PlayerSurface | 表示用于显示视频的专用绘制 Surface的可组合项。 | 连接到任何 Player,但不包含播放控件。
      仅用于渲染帧,可根据各种
      
      ContentScale类型调整大小。您可以在 Compose 界面实用程序中找到此可组合项以及许多其他可组合项。 | 
修改组件
Media3 包含适用于媒体编辑用例的 Transformer API,包括:
- 音频和视频处理,例如添加滤镜和效果
- 处理特殊格式,例如 HDR 视频和慢镜头视频
- 合成,例如合并多个输入文件
- 将最终输出导出到文件
| 类 | 说明 | 实现注意事项 | 
|---|---|---|
| Transformer | 使用 Transformer类可启动和停止转换,并检查正在运行的转换的进度更新。 | |
| Effects | Effects对象是应用于媒体项的音频和视频效果的集合。 | 您可以使用 ExoPlayer在开始导出流程之前预览添加到媒体项中的效果。 | 
| EditedMediaItem | EditedMediaItem表示要处理的媒体项以及要对其应用的编辑内容。 | 
简介视频
如需了解 Media3 的简介,请观看下方由构建它的工程师录制的视频。
实用链接
- 媒体开发者中心
- ExoPlayer文档
- 迁移指南
- GitHub 上的 AndroidX Media3
- Media3 媒体会话示例应用
- Universal Android Music Player 示例应用
