Media3:适用于 Android 的下一代 API 框架

无论您是构建音乐播放器、视频流应用程序还是其他需要播放媒体内容的 Android 应用程序,可靠的媒体播放库都是必不可少的。
这就是 Media3 的用武之地。
Media3 是什么?
Media3
是 Google 作为 AndroidX 的一部分推出的功能强大的媒体播放器库。它提供了一个易于使用的API,简化了Android应用程序中媒体播放的实现。
使用Media3
,您可以深入设计沉浸式音频和视频体验。
如果您已经使用过ExoPlayer
、MediaCompat
或Media2
,您将会对感兴趣Me dia3 非常用户- 界面友好,众所周知。
无需决定针对特定用例使用哪个库,Media3
提供了一组可以很好地协同工作并扩展到视频编辑和转码等新用例的库。代码。
媒体应用程序的基本架构
基本上,该架构由两个重要组件组成:播放器和用户界面(UI)。
- • 播放器:播放器负责在应用程序中渲染音频和视频内容。它处理解码、缓冲和同步媒体流等复杂任务,为用户提供流畅的播放体验。
- • UI:用户界面显示用户正在播放的内容并提供控制播放的方法。它还显示内容元数据,例如标题、持续时间等。 UI 通过发送播放、暂停、搜索等命令与播放器交互,并在状态改变时接收回调。
但是,Android 操作系统和其他应用程序不知道您的应用程序正在播放媒体。这可能会导致问题,因此您需要召开媒体会议。
为什么选择MediaSession
?
通过连接到MediaSession
,您可以向系统显示有关正在播放的内容的信息,并启用应用程序外部的播放控制。
这允许许多有用的集成。例如,
- • 在 Android 11 及更高版本上,您可以从系统 UI 中的媒体控制框查看和控制播放。
- • 如果您有 Wear OS 设备,您可以使用媒体通知从手腕控制应用程序播放。
- • 您可以使用语音命令告诉其他应用程序和 Google Assistant 为您管理播放。
- • 它将自动处理关键媒体事件,例如使用带播放/暂停按钮的蓝牙耳机或通过 HDMI CEC 进行电视遥控器。
- • 创建
MediaSessions
可以通过提供一种简单的方法来查看和控制不同上下文的播放,从而提供更好的用户体验。
为什么 Media3 比传统 API 更好?
让我们重点介绍一下 Media3 与传统 API 相比的优势:
前台播放
如果您的媒体应用程序设计为仅在前台播放内容(例如基本视频播放器),那么这是一个选项。媒体应用程序的通用架构。您的播放器、UI 和 MediaSession 包含在单个 Activity 中。
在之前的API中,MediaSession无法直接与播放器通信。您必须有一个连接器对象来在播放器和 MediaSession 之间转换命令和回调。这可能会导致错误。
Media3 通过使用 ExoPlayer
作为媒体播放器解决了这个问题。 ExoPlayer
实现了一个可以被UI小部件和MediaSession
接受的播放器界面。这意味着您可以将它们直接连接在一起,无需连接器。这使您的应用程序更加精简和稳定。
后台播放
另一个功能是后台播放。这是指您的媒体应用播放可以在后台继续播放的内容,例如音乐、歌曲或播客。
在这种情况下,我们的媒体应用程序的架构变得有点复杂。您需要将服务和活动分开。该服务包含播放器并创建 MediaSession 来宣传播放。该活动包含用户界面并创建一个 MediaController 来与 MediaSession 进行通信。
正如我们已经看到的,播放器无法直接与 MediaSession 通信,因此需要连接器。此外,MediaController 的界面与 UI 预期的不同,并且需要不同的连接器。这可能会导致复杂性并增加出错的风险。
Media3 通过使用通用播放器接口消除了对连接器的需求。 ExoPlayer 实现了该接口并直接与 MediaSessions 兼容。它也被 UI 组件接受并由 MediaController 实现。
这意味着您可以直接将 Player 连接到 MediaSession,将 MediaController 连接到 UI,而无需编写额外的转换代码。
这是 Media3 与之前的媒体 API 不同的主要功能。这使得组件之间的交互变得更简单、更可靠。 在此插入图片描述
ExoPlayer评测
根据Google官方公告,
ExoPlayer已停产!
没错——根据官方博客,Google 宣布将停止提供独立的 ExoPlayer 库。
https://android-developers.googleblog.com/2023/03/media3-is-ready-to-play.html
ExoPlayer 现在有了新家,成为Media3
Center Front所述播放器接口的默认实现。包名称为 com.google.android.exoplayer2
的 ExoPlayer 独立项目即将停用,未来的更新将在 Media3 中发布。
这意味着Media3中的ExoPlayer 2.18.5和ExoPlayer 1.0.0除了包名之外完全相同。然而,值得注意的是,这种安排是暂时的,因为独立的 ExoPlayer 将在今年晚些时候停产。因此,强烈建议尽快开始迁移到 Media3。
迁移到 Media3
有两个主要资源可帮助您尽可能顺利地进行迁移:
官方迁移指南,可逐步引导您完成整个过程。
https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide
迁移脚本,用于将您的 ExoPlayer 独立项目包转换为 Media3 和 Bag 下的正确新模块。
https://developer.android.com/guide/topics/media/media3/getting-started/migration-guide#usingscript
好消息是,如果您已经在使用 ExoPlayer,则不需要不需要进行任何代码更改,并且无需重新集成或重写自定义内容。
如上所述,独立的 ExoPlayer 和 Media3 ExoPlayer 除了包名称之外完全相同。这意味着通过运行附加的脚本可以轻松实现包名称的迁移自动化。您只需确保使用的是最新版本的 Exoplayer。
Media3:与 ExoPlayer 相比的新功能和优势
Media3 是一种新的媒体框架,与其前身 ExoPlayer 相比,它提供了更多优势和功能。 Media3 的一些主要优势包括:
- • 性能改进:Media3 效率更高,使用的电池电量更少,从而实现更好的性能和更长的电池寿命。
- • 扩展编解码器支持:Media3 支持更广泛的编解码器,这意味着它可以播放各种媒体文件。
- • 简化的API:Media3 拥有更简单、更清晰的API,使其更易于使用。
- • 增强的安全性:Media3 包含各种安全功能来保护用户隐私。
- • 改进的辅助功能:Media3 包含各种辅助功能,使有特殊需要的人更容易使用。
除了这些优点之外,Media3 还包括一些 ExoPlayer 中没有的新功能。其中一些功能包括:
- • 自适应流媒体支持:Media3 支持自适应流媒体,允许用户以其设备支持的最高质量流式传输文件。
- • 多声道音频支持:Media3 支持多声道音频,允许用户聆听环绕声音频。
- • 硬件加速支持:Media3 支持硬件加速,可以提高配备强大 GPU 的设备的性能。
- • 支持数字版权管理:Media3 支持数字版权管理,允许用户播放受数字版权保护的多媒体文件。
总之
Media3 是 ExoPlayer 的重大升级,提供了许多优点和新功能,使其成为开发媒体应用程序的更好选择。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。