写点什么

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

  • 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:572544

评论

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

跨链代币开发:架起区块链未来的桥梁

区块链软件开发推广运营

交易所开发 数字藏品开发 dapp开发 区块链开发 NFT开发

LangChain系列-03. LLM聊天模型

无人之路

大模型 LLM #LangChain

AI文本创作在百度App发文的实践

百度Geek说

人工智能 文心一言 企业号9月PK榜 AI辅助创作 智能生成文案

软件测试丨突破传统,革新测试:ChatGpt指引下的测试方案编写

测试人

人工智能 程序员 软件测试 测试方案 ChatGPT

山东布谷科技直播app源码,QUIC协议:改善性能与安全性

山东布谷科技

性能优化 网络协议 安全性 QUIC 直播APP源码

OpenHarmony创新赛|赋能直播第三期

OpenHarmony开发者

OpenHarmony

OpenHarmony社区运营报告(2023年8月)

OpenHarmony开发者

OpenHarmony

YARN 资源调度器 CapacityScheduler 原理

冰心的小屋

YARN 资源调度 CapacityScheduler

华为云Classroom赋能--面向高校学生的Toolkit系列实践培训

华为云PaaS服务小智

云计算 软件开发 华为云 开发者插件

限时!低至0.028元/核时,火山引擎边缘渲染全面降价

火山引擎边缘云

视频 渲染 边缘云 渲染技术

PopChar for mac(特别字符输入工具) 9.5永久激活版

mac

苹果mac Windows软件 PopChar 特别字符输入工具

MaxCompute半结构化数据思考与创新

阿里云大数据AI技术

大数据 阿里云

对话在行人|中亿丰(下):数智化推动建筑行业高质量发展

用友BIP

2023全球商业创新大会 对话在行人

大模型加持下的AI,推动智能化普及应用

用友BIP

2023全球商业创新大会 升级数智化底座

Spring 中三种 BeanName 生成器!

江南一点雨

Java spring

为什么使用图进行关联运算比表Join更具吸引力?

TuGraphAnalytics

sql join 图计算 tugraph no-SQL

1分钟实现Redis数据迁移任务

NineData

redis 复制 迁移 不停机发布 NineData

浅谈GPT在数据库重构项目中的创新应用

鲸品堂

研发工具 GPT 企业号9月PK榜

下一代云越来越智能

人称T客

开源社区赋能,Walrus 用户体验再升级

SEAL安全

开源 开源工具 Walrus 企业号9月PK榜

对线面试官 - 硬件级别之再谈Volatile关键字的可见性

派大星

Java 面试题 volatile原理

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