Jetpack Media3 简介

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

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

播放组件

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

下图展示了这些组件如何在典型应用中组合在一起。

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

媒体播放器

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

说明 实现注意事项
Player Player 是一种接口,用于定义媒体播放器的传统高级功能,例如播放、暂停和跳转功能。 在 Media3 中,Player 接口是多个组件(包括 MediaSessionMediaController 等)实现或使用的通用 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 MediaLibraryServiceMediaSessionService 类似,但它包含额外的 API,因此您可以向客户端应用提供内容库。
MediaBrowser 借助 MediaBrowser 类,用户可以浏览媒体应用的内容库,并选择要播放的内容。 MediaBrowser 类同时实现了 MediaControllerPlayer 接口。与 MediaController 类似,Android Auto 等客户端应用通常会实现 MediaBrowser

详细了解 Media3 MediaSession

界面组件

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

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

详细了解媒体 3 界面

修改组件

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

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

详细了解 Media3 Transformer

简介视频

如需了解 Media3 的简介,请观看下方由构建它的工程师录制的视频。