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 MediaLibraryService 类似于 MediaSessionService,不同之处在于它包含其他 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 的介绍。