Jetpack Media3 简介

Jetpack Media3 是新的媒体库的归宿,它使 Android 应用能够显示丰富的音频和视觉体验。Media3 提供了一个简单的架构,具有强大的自定义功能、可靠性和基于设备功能的优化,以消除碎片化带来的复杂性。

本文档介绍了使用 Media3 实现播放和编辑用例的关键 API。

播放组件

Media3 提供了几个用于播放用例的关键组件。如果您使用过以前的 Android 媒体库,那么构成这些组件的类会很熟悉。

下图展示了这些组件如何在典型的应用中协同工作。

The different components of a media app that uses Media3 connect
  together in several simple ways owing to their sharing of interfaces
   and classes.
图 1:媒体应用组件

媒体播放器

媒体播放器是应用的一个组件,允许播放媒体文件。在 Media3 中,您会发现

描述 实现说明
Player Player 是一个接口,定义了媒体播放器传统的高级功能,例如播放、暂停和寻求。 在 Media3 中,Player 接口是一个通用的 API,由多个组件实现或使用,例如 MediaSessionMediaController
ExoPlayer ExoPlayer 是 Media3 中 Player 接口的默认实现。

详细了解 Media3 ExoPlayer

媒体会话

媒体会话提供了一种与媒体播放器交互的通用方式。这使应用能够向外部来源宣传媒体播放,并接收来自外部来源的播放控制请求。在 Media3 中,您会发现

描述 实现说明
MediaSession 媒体会话使您的应用能够与音频或视频播放器交互。它们在外部宣传媒体播放并接收来自外部来源的播放命令。 在 Media3 中,MediaSession 需要一个 Player 来执行命令并获取当前状态。
MediaSessionService MediaSessionService 在一个与应用主 Activity 分开的服务中保存媒体会话及其关联的播放器,以方便后台播放。
MediaController MediaController 类通常用于从应用外部发送命令,例如来自其他应用或系统本身。命令被发送到关联 MediaSession 的底层 Player MediaController 类实现了 Player 接口,但在调用方法时,命令会被发送到连接的 MediaSession。像 Google 助理这样的客户端应用可以使用 MediaController 来控制连接的会话中的播放。
MediaLibraryService MediaLibraryServiceMediaSessionService 类似,但它包含其他 API,因此您可以向客户端应用提供内容库。
MediaBrowser MediaBrowser 类允许用户浏览媒体应用的内容库并选择要播放的项目。 MediaBrowser 类同时实现了 MediaControllerPlayer 接口。与 MediaController 类似,Android Auto 等客户端应用通常会实现 MediaBrowser

详细了解 Media3 MediaSession

UI 组件

Media3 提供了用于观看视频和控制播放的默认 UI 组件。

描述 实现说明
PlayerView 用于显示视频和播放控件的默认 View 连接到 ExoPlayerMediaController 或任何其他自定义 Player

详细了解 Media3 UI

编辑组件

Media3 包含用于媒体编辑用例的 Transformer API,包括

  • 音频和视频处理,例如添加滤镜和特效
  • 处理特殊格式,例如 HDR 视频和慢动作视频
  • 合成,例如组合多个输入文件
  • 将最终输出导出到文件
描述 实现说明
Transformer 使用 Transformer 类启动和停止转换,并检查正在运行的转换的进度更新。
Effects Effects 对象是应用于媒体项目的音频和视频特效的集合。
EditedMediaItem EditedMediaItem 表示要处理的媒体项目以及要应用于它的编辑。 您可以在启动导出过程之前使用 ExoPlayer 预览添加到媒体项目的特效。

详细了解 Media3 Transformer

介绍视频

观看下面的视频,了解构建 Media3 的工程师对 Media3 的介绍。