「高稳定性」视频播放器养成计划

简介: 2020年618大促已经过去,作为淘系每年重要的大促活动,淘系前端在其中扮演着什么样的角色,如何保证大促的平稳进行?又在其中应用了哪些新技术?淘系前端团队特此推出「618 系列|淘系前端技术分享」,为大家介绍 618 中的前端身影。本篇的作者是淘系技术部高级前端工程师 叶序,为大家介绍亿级用户高稳定性视频播放器养成计划

滚动.gif

2020年618大促已经过去,作为淘系每年重要的大促活动,淘系前端在其中扮演着什么样的角色,如何保证大促的平稳进行?又在其中应用了哪些新技术?淘系前端团队特此推出「618 系列|淘系前端技术分享」,为大家介绍 618 中的前端身影。

本篇的作者是淘系技术部高级前端工程师 叶序,为大家介绍亿级用户高稳定性视频播放器养成计划

001《618 大促背后的淘系前端技术体系》
002《生产力再提速,618 互动项目进化之路》
003《淘宝大促页面性能监控和优化实践》

背景

PHA 框架的优秀性能让大量业务、会场开始逐步转用 H5,但同时带来了一些挑战。以多媒体日常短视频/直播业务为例,H5 原生的播放器的稳定性、性能、播放能力支持均难以达到使用标准,在 H5 环境下没有一个业务可用的 H5 播放器。这时候就需要一个 H5 上能够流畅播放的播放器。

先提前体验一下618期间,H5 下播放器能力:

618 期间战果:618主会场,猜你喜欢,直播会场,聚划算百亿补贴、行业会场。

image.png

同层渲染播放器方案设计

也许你之前不了解什么是同层渲染?

同层渲染,是允许将 Native 组件和 WebView DOM 元素混合在一起进行渲染的技术,能够保证 Native 组件和 DOM 元素体感一致,渲染层级、滚动感受、触摸事件等方面几乎没有区别。

综合了性能、稳定性、易用性、灵活性上考虑,我们选择了同层渲染这种技术方案,以此渲染手淘 H5 下播放器。

image.png

底层 Native 播放器 拥有一套健全的播放能力,在早期 weex 及 Native 下,均有不俗表现。经过多年沉淀,api健全、性能稳定性良好,Naitive 播放器能力已达到业务可用的标准。

在此基础上,需要针对 Native 播放器 做一层同层渲染组件的封装处理以适用于 webview(iOS wkwebview,android UC 内核)上播放器的同层渲染。客户端封装组件 层需要监听同层渲染事件通知,在接收到创建/销毁消息时,实例化/销毁播放器。

监听的依赖于中间的 通信层,淘系基础架构团队针对同层渲染的组件做了监听:在同层渲染组件创建

节点时,通知到客户端播放器实例化渲染。

业务层播放器封装,使用了 @ali/rax-composite-view-factory 同层组件渲染工厂方法,该库将组件渲染成

节点,当
节点渲染出来时,前端会通知到监听层需要渲染何种组件,此时监听层收到后通知到客户端组件,客户端完成渲染,并持续接收来自前端的事件监听。(iOS 通过 element.addEventListener 通信,Android 通过 WindVane 通信)。

▐ Videoplus

从业务角度来说,视频播放主要分为两种:直播和点播。

其中,直播中区分:直播流、回放、看点,点播则是视频播放形式。

从图中可以看到,对于如此复杂度的播放要求,在此之前,仅在weex和web端下针对复杂业务的播放器支持。手淘内在PHA(即手淘H5)场景下,没有一个适用的播放器。

618前视频组件支持情况:

image.png

Videoplus 是端内针对多场景播放器的一个组件,该组件在对不同场景下的播放器进行了抹平处理,对用户来说,无需关注当前场景,只关注播放器本身即可。

✎ 播放场景抹平:Videoplus 针对环境做了一层抹平处理,不同场景使用不同的播放器,本次 618 新增同层渲染播放器,能力上更加完善。

  • weex:使用 weex 底层封装的播放器
  • 手淘 H5:使用同层渲染播放器播放3、外部 web:使用多媒体前端团队 videox.js

✎ 事件/属性/监听:Videoplus 针对播放器的时间、属性、监听进行一层抹平,符合 w3c 标准播放器的 api 标准,用户使用时,如果上手过 video 开发,接入成本大大降低。

image.png

▐ Splayer

Splayer 严格意义上来说不是一个真正的播放器,是一个业务基于在 Videoplus 上的封装层组件。Splayer 不针对播放器本身功能做特殊处理,把重点放在了业务日常开发播放器中更关注的一些实用功能上。

在 Splayer 管控之前,业务背景十分复杂:

  • 列表形式单列流双列流
  • 轮播形式
  • Tab 形式
  • 版头模式

支持如此复杂且多样的交互上场景,Splayer 必须兼具各项能力,对于事件监听及分发处理逻辑十分复杂。

同时,需要整体考虑客户端性能稳定性,保持播放器单例管控。于是:

✎ 实例管控:
Splayer 总能保证当前播放器只有一个播放器实例,避免因为实例无限增长导致 OOM。

对于类似会场模块组成形式的页面,Splayer 要求各个模块引用的版本一致,实例化出来的 SplayerEmitter 保证唯一性并能监听到其他模块发送的指令。

✎ 事件监听:Splayer 提供了一系列事件监听方案控制视频播放器,可以通过 Splayer 提供出来的 SplayerEmitter 完成播放器的销毁或者创建工作,并且无需担心其余播放器的处理(在每次操作播放器时,Splayer 会同时管理其他播放器实例)。

  • 滚动监听:当滚动停止时,Splayer 会寻找播放器最佳位置播放。
  • 指定 id 播放监听:存在播放器列表场景下,指定单个播放器监听播放,此时 VideoManager 会销毁其余播放器,并将指定 id 的播放器实例化。
  • Appear/DisAppear 监听:依赖于 rax 的 appear/disappear 方法,在每个 Splayer Appear 时,VideoManager 会缓存当前的播放器,并从当前缓存的 Appear 播放器队列中选择最佳位置(居中)的开始播放。

image.png

稳定性保障方案

Videoplus 提供了多维度的降级能力,通过手淘 mt 配置降级方案。在大促期间,在预案平台提前报备。

Videoplus 的播放能力整体系分为以下几个维度:

  • 全量降级终极兜底方案,开启后,所有 Videoplus 播放器强制降级成 poster。
  • 播放器场景降级方案(H5/weex/PHA)支持 H5/weex/PHA 场景,对应场景(直播或者点播)播放器出现意想不到的情况时应急采用。H5/weex/PHA场景分别带有:1、禁用直播2、禁用视频
  • 指定bizFrom降级方案在某一业务使用播放器时发生问题时,兜底使用。当开发业务接入播放器时,需要传入唯一业务指定 bizFrom,具体需要到播放器管理者处申请,如果未传入值,则播放器不可使用。可直接指定某项业务(bizFrom)关闭播放功能,一旦关闭,直播和视频在该业务场景下不可使用。
  • 指定客户端/客户端版本号使用指定客户端版本及版本号使用。在手淘及天猫客户端版本中,如果播放器被发现某些bug,可通过此开关降级。粒度控制到三位版本号,例如手淘 10.0.0 版本。
  • 指定操作系统版本号此场景由于某些操作系统及版本下播放器出现问题,粒度控制到三位版本号,例如 iOS 10.0.0 版本。

大促技术和业务表现

淘系技术部 Native 播放器内核的多年沉淀,Native 底层播放器处于稳定状态。相较 H5 播放器来说,Native 播放器支持格式更广、解码能力更优、性能体验极佳,但灵活能力不足。基于 Native 播放器的同层渲染播放器,在体验上与 Native 播放器达到达到持平状态的同时,灵活能力兼具。

▐ H5的播放器 vs 同层渲染播放器

image.png

▐ 618 战果

业务数据:6 个以上618模块(行业、直播1x2、猜你喜欢、头图等)接入,服务超过 200 个以上会场。

技术表现:sls大盘监控底层播放器成功率99%以上;客户端监控稳定无 crash 新增,无故障,无回滚降级,整体灰度顺利。

同层渲染播放器遇到的问题

问题:前端移除

之后,PHA Tab切换挂起webview,导致异步操作失效未将播放器实例销毁,主会场头图/猜你喜欢模块、行业商品模块、直播会场1x2模块。

解法:播放器监听PHA 页面 disappear,强制停止播放,并forceUpdate同步销毁播放器解决此问题

问题:Splayer的复杂使用场景,在1x2 模块播放器视频切换过快情况下,消失动画延时,封面图移除时机出错导致出现白窗

解法:调整底层播放器封面图移除时机,在播放前移除。

未来规划

对于本次 618 的实验与应用,同层渲染播放器仅仅是小试牛刀。本次大促同层渲染播放器的能力让业务尝到甜头,结合今年直播带货的火爆,后续手淘大量业务将会更积极拥抱 PHA 使用同层渲染播放器能力,对于我们而言,如何把握住风口将播放器大力发展走在业务前头,驱动业务发展是主要目标。

同层渲染播放器后续将会持续发展,提升播放体验、直播互动能力:

1,降低接入标准,覆盖全量环境,业务0成本接入;

2,打造端内体验对标客户端直播间的 H5 直播间,应对业务的快速迭代;

3,提升会场播放器播放体验,带来更多 GMV 转换;

4,未来直播互动游戏打造;

以同层渲染播放器为钩子,技术能力完善驱动业务能力升级,全面发展多媒体业务多点开花。

image.png

淘系前端团队

主要负责淘宝直播、短视频等多媒体业务,在直播低延时推拉流、视频非线编、播放器、媒体智能、流媒体互动、多媒体开放等方向上持续研究和实践,专注于音视频Web技术的研究,致力于打造国内顶尖的多媒体前端技术团队。

如果对我们团队感兴趣,欢迎来信交流📮:joven.panj@alibaba-inc.com

关注「淘系技术」微信公众号,一个有温度有内容的技术社区~

image.png

相关文章
|
6月前
|
数据安全/隐私保护 Windows
刚发现的5款实用性拉满的软件
每次分享实用的软件,都会给人一种踏实和喜悦的感觉,这也是我热衷于搜集和推荐高效工具软件的原因。
53 1
|
30天前
|
缓存 前端开发 JavaScript
前端性能优化:打造流畅用户体验的秘籍
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘籍
34 3
|
30天前
|
前端开发 JavaScript UED
前端性能优化:打造流畅用户体验的秘诀
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘诀
31 0
|
2月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
112 4
|
3月前
|
人工智能 NoSQL 程序员
程序员常用的工具软件推荐(提高工作效率和代码质量)
程序员常用的工具软件推荐(提高工作效率和代码质量)
|
3月前
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
73 0
|
5月前
|
监控 安全 Linux
十分好用的5款软件,实用性拉满
分享爱,分享时光,分享精彩瞬间,大家好,我是互联网的搬运工,今天继续给大家带来几款好用的软件。
48 0
|
6月前
|
Linux 数据安全/隐私保护 Android开发
分享5款实用性拉满的小软件
如今,工作和学习都离不开电脑,所以电脑里的软件自然也是必不可少的,但是电脑软件那么多,不可能每个都装上吧,所以我们要装好用的、实用的,下面给大家分享5款好用到爆的软件,很多懂电脑的人都在用。
97 1
|
Web App开发 缓存 监控
测开必备,推荐几款前端性能测试工具、神器
今天,就给大家介绍几款前端性能测试分析工具,结合性能测试工具,实现通过量化的方式测试网站中诸如首字节加载时间(time to first byte)或者渲染时间等表现。其中有些工具还会检查资源是否被缓存,多个 CSS 或 JS 文件是否值得合并,最后自动给出前端性能优化改进建议报告。
2076 0
测开必备,推荐几款前端性能测试工具、神器
下一篇
无影云桌面