HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

评论

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

数字化转型应该如何去做?(技术篇)

数字随行

数字化转型

Java 致命错误: 在类路径或引导类路径中找不到程序包 java.lang

Andy

Photoshop2023beta常见问题|ps 2023测试版智能AI功能不能用如何解决?

Rose

Photoshop2023beta FireflyAI

ps 2023 v24.6beta激活版下载 支持AI功能

Rose

Photoshop 2023下载 PS测试版下载 FireflyAI

鲲鹏DevKit助力海通证券高效开发互联网行情系统,性能提升26%

说山水

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

BlockChain先知

AI实战营第二期_OpenMMLab概述

IT蜗壳-Tango

OpenMMLab

2023-06-01:讲一讲Redis常见数据结构以及使用场景。

福大大架构师每日一题

redis 福大大

一文回顾 Boundless Hackathon at Stanford 首期 Workshop

股市老人

鲲鹏DevKit助力南京信息工程大学高效开发

说山水

解锁软件工程新角色——平台工程师

SEAL安全

DevOps 平台工程 平台工程师

FC红白机游戏600合集 for mac(小霸王游戏) 单机离线版

Rose

Mac游戏下载 FC 红白机游戏 任天堂游戏下载 小霸王游戏

C语言编程-结构体

梦笔生花

数组 函数参数 6 月 优质更文活动

Django笔记四十之运行Django环境的python脚本

Hunter熊

Python django 脚本

Waves 14 Complete(Waves混音效果全套插件)安装激活教程

Rose

Waves 14破解教程 Waves 下载 Waves 14 最新版 Waves混音效果全套插件

Waves 14 Complete Mac激活最新版(Waves混音效果全套插件) v31.05.2023

真大的脸盆

Mac 软件 Waves 14破解教程 混音软件 混音套件 waves

鲲鹏DevKit助力深圳财富趋势高效开发行情分析系统,行情揭示快人一步

说山水

植物大战僵尸mac版下载

Rose

植物大战僵尸 mac 植物大战僵尸中文版 植物大战僵尸下载 mac塔防游戏

鲲鹏DevKit助力通付盾Web应用防火墙产品开发,性能提升45%+

说山水

模块二:微信朋友圈高性能复杂度

家有两宝

架构实战营 微信朋友圈高性能复杂度

Qcon 广州主题演讲:融云实时社区的海量消息分发实践

融云 RongCloud

通信 IM 社交 融云 Discord

abaqus有限元仿真常见问题(一):数值仿真在产品研发中的作用

思茂信息

CAE abaqus abaqus软件 abaqus有限元仿真

挖掘算力产业的创新力量和新型机遇|2023开放原子全球开源峰会先进计算分论坛即将启幕

开放原子开源基金会

开源 算力 先进计算

在金融数据里挖呀挖,GaussDB开出了花

脑极体

数据库

又是供应链安全:GUAC项目0.1版释出

sender_is_sender

网络安全 开源软件 供应链安全 GUAC

2023 重新开始

HoneyMoose

自媒体行业红利衰退,大部分自媒体作者将生存艰难

石头IT视角

Android File Transfer for mac(强大的安卓文件传输工具)

Rose

安卓文件传输工具 Android File Transfer Android和mac互通

支持M1的苹果电脑视频下载器-Downie 4 Mac中文版

Rose

Mac 视频下载工具 Downie 4许可证 Downie 4中文版 Downie mac破解版

mac电脑如何远程控制win?微软远程桌面连接工具来帮你!

Rose

Mac远程控制软件 mac电脑如何远程控制win microsoft remote desktop 微软远程桌面连接工具

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