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 接口,但在调用方法时,该命令会被发送到已连接的 MediaSession。诸如 Google 助理等客户端应用可以使用 MediaController 在已连接的会话中控制播放。
MediaLibraryService MediaLibraryServiceMediaSessionService 类似,只不过它包含额外的 API,以便您将内容库提供给客户端应用。
MediaBrowser 通过 MediaBrowser 类,用户可以浏览媒体应用的内容库,并选择要播放的内容。 MediaBrowser 类同时实现了 MediaControllerPlayer 接口。与 MediaController 类似,Android Auto 等客户端应用通常会实现 MediaBrowser

详细了解 Media3 MediaSession

界面组件

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

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

详细了解 Media3 界面

修改组件

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

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

详细了解 Media3 Transformer

简介视频

请观看下面的视频,了解打造 Media3 的工程师对它的说明。