Jetpack Media3 简介

Jetpack Media3 是媒体库的新平台,可让 Android 应用呈现丰富的音频和视觉体验。Media3 提供了简单的架构,具有强大的自定义功能、可靠性,并根据设备功能进行了优化,从而消除了碎片化带来的复杂性。

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

播放组件

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

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

使用 Media3 的媒体应用的不同组件通过共享接口和类,以几种简单的方式连接在一起。
图 1:媒体应用组件

媒体播放器

媒体播放器是应用中用于播放媒体文件的组件。 在 Media3 中,您会发现:

类 说明 实现说明
Player Player 是一个接口,用于定义媒体播放器的传统高级功能,例如播放、暂停和跳转功能。 在 Media3 中,Player 接口是由多个组件(例如 MediaSession 和 MediaController)实现或使用的通用 API。
ExoPlayer ExoPlayer 是 Media3 中 Player 接口的默认实现。

详细了解 Media3 ExoPlayer

媒体会话

媒体会话提供了一种与媒体播放器互动的通用方式。这样,应用就可以向外部来源通告媒体播放,并接收来自外部来源的播放控制请求。在 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 MediaSession

界面组件

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

类 说明 实现说明
PlayerView 用于显示视频和播放控件的默认 View。 连接到 ExoPlayer、MediaController 或任何其他自定义 Player。
PlayerSurface 一个可组合项,表示用于显示视频的专用绘图 Surface。 可连接到任何 Player,但不包含播放控件。 仅用于渲染帧,并且可以根据各种 ContentScale 类型调整大小。您可以在 Compose 界面实用程序中找到此可组合项和许多其他可组合项。

详细了解 Media3 界面

修改组件

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

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

详细了解 Media3 Transformer

简介视频

观看此视频,了解 Media3 的工程师对 Media3 的介绍: