在瞬息万变的社交媒体世界中,用户注意力很快就会被吸引或转移。Meta 应用(Facebook 和 Instagram)是全球最大的社交平台之一,为全球数十亿用户提供服务。对于 Meta 而言,顺畅地播放视频不仅是一项功能,更是其用户体验的核心。短视频(尤其是 Facebook 信息流和 Instagram Reels 短视频)已成为提高互动度的主要驱动因素。它们可帮助用户尽情发挥创意,快速消费内容,并与世界各地的人们建立联系,为他们带来娱乐体验。
这篇博文将带您了解 Meta 如何通过提供真正的即时播放功能,改变了数十亿用户的视频播放体验。
短视频中的延迟差距
短视频会带来快节奏的互动,因为用户会快速滚动浏览其信息流。在不断变化的 Feed 中实现视频之间的顺畅过渡,为即时播放带来了独特的难题。因此,我们需要超越传统磁盘缓存和标准被动播放策略的解决方案。
使用 Media3 PreloadManager 的未来之路
为了应对因短视频内容兴起而导致的消费习惯转变以及传统长视频播放架构的限制,Jetpack Media3 推出了 PreloadManager。借助此组件,开发者可以摆脱磁盘缓存的限制,实现精细的控制和自定义,从而在用户点击播放之前将媒体保存在内存中。请阅读此系列博文,了解有关使用 PreloadManager 进行媒体播放的技术细节。
Meta 如何实现真正的即时播放
现有复杂性
以前,Meta 会结合使用预热(使播放器做好准备)和预提取(将内容缓存到磁盘)来传送视频。虽然这些方法有助于提高网络效率,但却带来了重大挑战。预热需要按顺序实例化多个播放器实例,这会消耗大量内存,并将预加载限制为仅几个视频。这种高资源需求意味着,我们可以应用更具可伸缩性的强大解决方案,以实现现代快速滚动社交信息流中所需的即时播放功能。
集成 Media3 PreloadManager
为了实现真正的即时播放,Meta 的 Media Foundation 客户端团队将 Jetpack Media3 PreloadManager 集成到了 Facebook 和 Instagram 中。他们选择使用 DefaultPreloadManager 来统一预加载和播放系统。此集成需要重构 Meta 的现有架构,以实现 PreloadManager 和 ExoPlayer 实例之间的高效资源共享。这一战略性转变带来了一项关键的架构优势:能够并行执行预加载任务,并使用单个播放器实例管理多个视频。这大大提高了预加载容量,同时消除了之前方法带来的高内存复杂性。
优化和性能调优
然后,该团队进行了广泛的测试和迭代,以优化 Meta 丰富多样的全球设备生态系统中的性能。初始的激进预加载有时会导致问题,包括内存使用量增加和滚动性能下降。为了解决这个问题,他们通过仔细测量内存、考虑设备碎片化并根据特定界面模式定制系统,对实现进行了微调。
针对特定界面模式的微调实现
Meta 应用了不同的预加载策略,并根据每个应用的特定界面模式量身定制了行为:
- Facebook 信息流:界面会优先显示当前进入视图的视频。管理器仅预加载当前视频,以确保在用户暂停滚动时立即开始播放。这种“仅限当前”的焦点可最大限度地减少数据和内存占用空间,因为在用户可能会在视频之间看到许多静态帖子的环境中,这样做非常有用。虽然系统目前仅预加载正在观看的视频,但可以调整为同时预加载即将播放(未来)的视频。
- Instagram Reels:这是一个纯视频环境,用户可以在其中进行垂直滑动。对于此界面,团队实现了“相邻预加载”策略。PreloadManager 会将当前短视频之后的视频立即准备好并保存在内存中。这种双向方法可确保无论用户向上还是向下滑动,过渡都保持即时且流畅。结果是,用户体验 (QoE) 得到了显著改善,包括播放开始时间和首帧时间都有所缩短。
针对多样化的全球设备生态系统进行缩放
要将高性能视频堆栈扩展到数十亿台设备,不仅需要积极预加载,还需要智能。Meta 最初在内存压力和滚动延迟方面面临挑战,尤其是在中低端硬件上。为了解决这个问题,他们围绕 Media3 实现构建了一个设备压力检测系统。应用现在可以实时监控 I/O 和 CPU 信号。如果设备处于高负荷状态,系统会暂停预加载,以优先保证界面响应速度。
这种设备感知优化可确保即时播放的优势不会以牺牲系统稳定性为代价,从而让即使是使用旧硬件的用户也能体验到更流畅、不间断的 Feed。
架构方面的优势和代码运行状况
除了面向用户的指标之外,迁移到 Media3 PreloadManager 还带来了长期的架构优势。虽然集成和调整过程需要多次迭代才能平衡性能,但最终的代码库更易于维护。该团队发现,PreloadManager API 可与现有的 Media3 生态系统完美集成,从而实现更好的资源共享。对于 Meta 而言,采用 Media3 PreloadManager 是一项面向未来的战略投资,旨在提升视频消费体验。
通过采用预加载并添加设备智能门控,他们成功增加了应用的总观看时长,并提高了全球社区的整体互动度。
对 Instagram 和 Facebook 的影响
主动式架构可立即在两个平台上实现可衡量的改进。
- Facebook 实现了更快的播放开始速度、更低的播放停顿率和更少的糟糕会话(例如重新缓冲、延迟开始时间、画质较低等),从而提高了总体观看时长。
- Instagram 的视频播放启动速度更快,总观看时长也有所增加。消除加入延迟时间 (从用户操作到显示第一帧的时间间隔)直接提高了互动度指标。由于缓冲减少,中断次数减少,这意味着用户观看了更多内容,这体现在互动指标上。
大规模获取关键工程经验
随着媒体使用习惯的演变,对即时体验的需求将持续增长。通过实现主动内存管理并针对规模和设备多样性进行优化,可确保应用能够高效地满足这些预期。
- 优先考虑智能预加载
通过预加载最大限度地减少卡顿和加载时间,专注于提供可靠的体验。与简单的磁盘缓存不同,利用内存级预加载可确保内容在用户与之互动时立即可用。
- 使实现与界面模式保持一致
根据应用的界面自定义预加载行为。例如,对于 Facebook 等混合 Feed,使用“仅限当前”焦点可节省内存;对于 Instagram Reels 等竖屏环境,使用“相邻预加载”策略。
- 利用 Media3 确保代码长期保持良好运行状况
与 Media3 API 而不是自定义缓存解决方案集成,可让播放器和 PreloadManager 之间更好地共享资源,从而让您能够使用单个播放器实例管理多个视频。这样一来,工程团队不仅可以随着时间的推移更轻松地维护和优化代码库,还能受益于最新的功能更新,从而打造出面向未来的代码库。
- 实现设备感知优化
通过在各种设备(包括中低端型号)上进行测试,扩大市场覆盖面。使用 CPU、内存和 I/O 等实时信号动态调整功能和资源用量。
了解详情
- 浏览 Media3 PreloadManager 文档。
- 如需了解高级技术和实现方面的详细信息,请阅读 系列博文。
- 您可以查看示例应用,了解预加载的实际效果。
现在,您已经了解了实现即时播放的秘诀。快来试试吧!
继续阅读
-
案例研究
Monzo 是一家英国数字银行,拥有 1,500 万客户,并且客户数量还在不断增长。随着应用规模的扩大,工程团队发现应用启动时间是一个需要改进的关键领域,但担心这需要对代码库进行重大更改。
Ben Weiss • 阅读用时:2 分钟
-
案例研究
TikTok 是一个全球性的短视频平台,以庞大的用户群和创新功能而闻名。
Ben Trengrove, Ajesh Pai • 阅读用时:2 分钟
-
案例研究
为穿戴式设备构建 Android 应用意味着,当屏幕关闭时,真正的工作才开始。
Breana Tate • 阅读用时:4 分钟
随时了解最新动态
每周通过电子邮件接收最新的 Android 开发洞见。