阿里云飞天发布时刻,领先大模型限免,超7000万 tokens免费体验 了解详情
写点什么

优酷统一播放器业务框架演进之路

  • 2020-05-07
  • 本文字数:2675 字

    阅读完需:约 9 分钟

优酷统一播放器业务框架演进之路

一、背景

优酷播放器早期的架构是普通的单工程分层结构,随着时间推进,播放器容器数量不断增多,陆续支撑了播放页、发现页、自频道、频道页、直播等几大场景,可以说这段时间里原有架构起到了很大的作用。



然而随着代码的继续膨胀,一些问题开始突显出来。工程一直处于不断膨胀的状态。如上图所示,每个业务场景都是一个独立的播放容器和 UI 组件,当有新的业务场景出现时,由于旧有容器无法复用,开发人员只能继承基础容器创建新的容器。同时开发人员要维护所有的播放容器,而这其中大部分工作量都是重复的。


举一个最简单的视觉升级的例子来说,在老架构的前提下,假如需求是要改变进度条的样式,几乎每一个播放容器都需要按照标注图进行一遍样式修改,对团队来说,这既是一种资源的浪费,又是一种疲惫的工作负担。



架构之外,优酷由多个业务团队维护各自的业务场景,这些业务场景最终都对接到播放器团队,在优酷保持高频率发版迭代的情况下,播放器团队本身就疲于应对各种各样的播放容器,使得业务方团队往往排着队等待完成与播放器团队的联调与交付工作。


播放容器不易复用、对多团队并行开发的支持不够友好等原有架构的缺陷愈发明显,为此我们对优酷播放器架构做了全面改造。

二、新的播放器架构应该怎么做

  1. 确定新架构的核心需求


为了解决上一章节提到的原有架构缺陷,此次架构改造确定了新架构如下几个核心需求:


1)播放器可以快速复用来支撑多业务场景;


2)播放器支持多团队并行开发。


  1. 新架构设计的核心思路


1)插件化:解耦合和独立迭代是分不开的,此次改造决定把优酷播放器现有业务进行划分,将播放器的最小集能力抽象成若干基础能力插件,将其他业务抽象成若干扩展插件,拆分插件的下一步是代码边界划分,播放器团队把不同业务的代码与业务 Owner 一起将其拆分到不同的工程的插件内,插件之间彼此独立。不同插件之间只依赖于新的架构框架进行编译,而框架作为平台来说它的代码变动是低频率较为稳定的,因此可以看为是编译隔离。


2)事件驱动:已经有了插件的概念以后,下一个问题就是,如何让插件之间像魔方一样联动呢?新架构做了基于消息的事件驱动机制,即做出事件总线,插件之间通过事件总线实现互相通信。



3)按需配置:在有了插件化概念的情况下,播放器通过众多业务的拆分生成了插件库,配置化能力其实就是插件的编排能力,这和容器技术的思想类似,根据业务场景需求开发者从插件库中选出对应插件传递给播放器框架进行安装使用,通过不同的配置既可以实现不同业务场景的播放器支撑,又大大提高了插件的复用率。最终把不同的插件配置列表生成配置文件,也就实现了只需要几个配置文件就可以创建出不同场景播放器的能力。


4)分层管理:将播放器视图各 Layer 层进行统一管理,插件内的视图根据自身属性,来决定应该显示在哪个层上。



5)标准明确:制定了插件开发标准,让每个插件拥有统一的属性和生命周期,当做好了开发标准以后,留给业务方团队的就是一道填空题,团队根据自身业务,把原有业务代码稍加重构就能放到插件内。当新的业务场景无法找到满足需求的插件时,也可以根据开发标准创建新的扩展插件。



  1. 统一播放器业务框架


有了核心设计思路之后,此次架构改造开始设计架构的其他细节。整体的架构图如下所示,上下往上架构分为能力层、业务层、API、业务场景,团队管这套新的播放器架构称为统一播放器业务框架。



其中插件管理器、布局管理器、事件管理器、配置管理器、数据源管理器作为统一播放器业务框架的核心模块,其功能作用如下:


1)插件管理器


插件管理器主要负责插件的配置、初始化、安装、运行等一系列生命周期管控,将插件内部创建的视图添加到对应 Layer 层,以及管理插件内部 Event 事件的注册、监听、移除。


2)布局管理器


布局管理器将统一标准里制定的 Layer 层抽象成对应的布局组,并创建对应布局组的布局控制器,接收插件发送的布局模型,寻找对应布局组的布局控制器进布局管理,布局控制器根据布局模型,把对应视图插入到对应的 Layer 层。


3)事件管理器


事件管理器创建事件总线供插件间通信使用,维护事件发布者和事件订阅者之间的关系以及根据订阅者优先级对事件 Event 进行派发。


4)配置管理器


配置管理器解析配置文件,转化为插件和 Layer 的配置列表,并传给插件管理器进行插件安装和播放器的初始化。


5)数据源管理器


数据源管理器管理着众多数据源的生命周期,数据源是为了给多插件之间读写共享数据而提出的概念,举例来说,根据播放器和视频应有的属性与方法,分别抽象出播放器数据源、播放视频数据源等,各插件通过对数据源执行属性的 get 和 set 以及方法调用来进行业务处理。


6)生命周期


最终,整个框架的运行生命周期如下图所示,当播放器初始化完成以后即可进入工作状态进行视频服务消费。



  1. 核心特性


1)基于消息,事件驱动


引入事件/订阅的消息机制,插件按需订阅播放器的事件,根据优先级响应和消费消息;


2)按需配置,自由组合


支持从配置文件加载层和插件的配置信息,各个业务方在接入业务框架时以搭积木的方式排列组合构造播放器;


3)插件解耦,互不依赖


将所有的播放功能及业务模块解耦为彼此独立的插件,插件之间以消息机制进行通信;


4)标准明确,支持扩展


框架会提供一批功能丰富的标准插件,插件可分组管理,业务方可根据自己的需求定制插件来替换默认实现,也可以新增插件;


  1. 辅助工具


相对于老的单工程架构而言,新架构的多工程插件解耦事件驱动在一定程度上使得方法调用链路变长不易调试,为了弥补调试困难需要开发出一些面向开发者使用的调试工具,如视图 Debug 工具、日志工具等。

三、现状及未来

统一播放器业务框架开发完成之后陆续已经在 pad、phone 等多端落地,插件库的数量已经发展到了一百以上,其中大部分插件都在各业务场景中有所复用。


对团队收益而言,它适应了复杂的播放业务场景,支持着众多围绕播放业务的团队并行开发。通过技术架构的解耦带来与之相关的技术团队的组织架构的解耦。



还记得开篇那个视觉升级的例子吗?现在用播放器新架构来代入问题看看,假如需求是要修改进度条样式,现在只需要找到进度条插件,插件的 Owner 团队进行一次样式修改,所有复用此插件的业务场景就可以无成本落地了。



通过插件的配置组合,新播放器支撑了播放页、互动剧、少儿播放、预览播放、首页广告播放、广告页播放、会员页播放、Weex 播放、Feed 流播放、电流小视频、淘宝直播间等诸多业务场景,同时也为业务创新带来了很好的支持,基于统一播放器业务框架,我们在短时间内开发并上线了酷看、互动视频等创新功能,未来播放器团队也将继续朝着平台化、配置化的方向对框架进行优化。


作者 | 阿里文娱高级无线开发工程师 贵志


2020-05-07 17:572775

评论

发布
暂无评论
发现更多内容

怎样将数据从Oracle迁移到TiDB

TiDB 社区干货传送门

年终有奖 | 三分钟,一起创造更好的 StarRocks!

StarRocks

确保网路畅通,华为云CDN加速服务大有可为

路过的憨憨

NFTScan 与 Cwallet 团队达成战略合作伙伴,由 NFTScan 为其提供 NFT API 数据服务

NFT Research

NFT 数据基础设施

助力企业服务体验升级,华为云CDN这样做

路过的憨憨

YMatrix 番外篇|透过镜头,那些不为人知的故事

YMatrix 超融合数据库

车联网 超融合数据库 C++ YMatrix 研发故事

TiDB 的“聚簇因子” -- 从 cop task 到 shard_row_id_bits

TiDB 社区干货传送门

性能测评 OLTP 场景实践

TiDB 同步数据到 Kafka 最佳实践

TiDB 社区干货传送门

阿里IM技术分享(九):深度揭密RocketMQ在钉钉IM系统中的应用实践

JackJiang

RocketMQ 即时通讯 im开发 开源im 钉钉IM

使用 SQL 实现同比环比分析

搞大屏的小北

数据可视化 同比环比 展示同比环比 BI大屏同比环比

这个API管理工具不登录不下载就能用!

不想敲代码

API 接口管理 协同办公 协同软件

艺多不压身!华为云CDN成众多企业网络支撑

路过的憨憨

面向对象分析与设计的底层逻辑

阿里技术

面向对象设计

华为云CDN下载加速,“火速”留住用户

科技说

行云管家荣膺STIF第三届国际科创节 “2022年度数字化创新典范奖”

行云管家

信息安全 数字化 国际科创节

稳定可靠、安全可信的云存储-华为云OBS对象存储

IT科技苏辞

2022 年 TiDB 社区年度总结,2023年,我们一起兔飞猛进

TiDB 社区干货传送门

神州数码正式加入CNCF云原生计算基金会,携手构建云原生技术生态

科技热闻

ROMA Connect: 5大联接能力+4大集成能力,推进企业数字化转型

华为云开发者联盟

云计算 后端 数字化 华为云 12 月 PK 榜

为什么我们要从MySQL迁移到TiDB?

TiDB 社区干货传送门

中科院自动化所历时9年打造的类脑认知智能引擎“智脉”正式开源部署至OpenI启智社区

OpenI启智社区

类脑计算 OpenI启智社区 智脉 开源开放 中科院自动化所

数据存储难?华为云对象存储服务OBS带你全方位解决

IT科技苏辞

记一次因 GC bug 导致 TiKV 存储占用不均的问题处理

TiDB 社区干货传送门

管理与运维 故障排查/诊断

Oracle 到 TiDB (OGG)

TiDB 社区干货传送门

自建还是第三方?华为云对象存储服务OBS 成为企业更优选

IT科技苏辞

支撑20亿+用户变美,看华为云OBS对象存储服务与美图的合作

IT科技苏辞

等保四级适用于哪些领域?一年一次吗?

行云管家

等保 等级保护 等保四级

网络拥堵影响业绩?看华为云CDN如何为企业保驾护航

路过的憨憨

墨芯人工智能加入龙蜥,携手打造软硬协同稀疏化计算平台

OpenAnolis小助手

人工智能 开源 龙蜥社区 CLA 墨芯

数益工联 x TiDB丨如何运用 HTAP 挖掘工业数据价值?

TiDB 社区干货传送门

1024·致敬 | 迟到的小温暖,感谢不平凡的你们

XTransfer技术

优酷统一播放器业务框架演进之路_文化 & 方法_阿里巴巴文娱技术_InfoQ精选文章