作者|魏兴华,阿里大文娱无线开发专家
编辑|屠敏

背景
播放器作为优酷APP使用频率最高、停留时间最长的窗口,一直承载着用户最直接的内容消费体验、产品创新和商业突破能力。随着长期的功能迭代和业务积累,播放器架构在现有的体验优化和业务支持面前越来越显得力不从心,急需全面的架构升级。
经过多次权衡,最终确定了基于流水线模式的播放器架构设计,实现了结构清晰、功耗低、稳定性好的易用、开放、可定制的架构改造目标。
设计目标
结合问题现状,改造目标如下:
减少广播链中部分冗余逻辑,减少函数调用次数,减少链接层次,提高广播速度;统一存储内存和文件的多份拷贝,提高解码和渲染的重用性,减少播放器内存、线程等资源的消耗,提高稳定性;开放和可定制的模块,如广播源、数据下载、后期处理等。,使业务可以根据需要在广播链路中插入和实现功能逻辑,实现业务的定制能力;从整体播出中心的角度,优化架构,以支持可预测的多源多流业务需求,快速扩展,及时响应业务;实现下载器、解码器、渲染引擎、PCDN、Netcache、智能文件等功能模块的原子化。,降低模块间的耦合,方便对外输出,逐步实现单一测试覆盖。
面临的问题
如下图所示,通过分析现有结构,更容易看出存在的问题:
层级过多,部分功能和状态代码分散在不同层级,导致可维护性不足。核心广播逻辑与业务定制逻辑耦合较重,导致对外支持并向第二、第三方开放时,接口缺乏易用性和可配置性。并且对于需要深度定制的接入方没有快捷的方式介入下载和后期处理过程,对于合并、流切、混帧等具体处理也没有统一的开放能力。
方案设计
1.总设计
通过梳理,一个播放流程可以抽象为播放源请求、流数据下载、流解码、后期处理和渲染等几个主要流程,以及数据嵌入中心、配置中心等配套设施。在整体架构上,将原有的多级实现合并到一个统一的回放框架中,将回放能力和基本服务原子化、插件化,由回放框架统一管理,提供可配置的能力。

在开放性和可扩展性的支持下,将上述主要流程抽象为“广播源管理器”、“数据下载器”和“渲染器”,并提供统一的定制开发能力,以及自适应解码能力,以满足未来业务创新中合并、流切割、帧混合和后期处理的具体开发需求。
2.统一回放框架
回放框架层负责各个模块的统一管理和串行连接,对外提供统一的API接口。如图,1)接口层提供播放上下游消息、管道注册、模块配置等基本接口。2)状态管理、上下文管理、时间轴管理和多实例管理模块可以支持多时段、多源播放序列,方便业务方快速实现可变格式播放源合并、流切割等服务;3)实例池模块可以结合设备和可用资源自适应管理解码器实例,保证稳定性和体验的平衡;4)管道管理模块负责管道注册和管道绑定逻辑;5)插件管理模块支持内部实现部分定制能力,内置优酷业务能力,支持可配置能力。
3.广播源管理
源管理模块抽象出一个播放列表结构,用于支持业务侧方便地实现合并广播源、管理广播序列、截流等服务。具有不同的格式和编码模式。主要结构如下,其中PlayList是一个总的播放序列;它下面的每个时期节点代表一个统一的时间线播放顺序,它下面的所有源都会合并成一个时间线,比如由四个15秒的视频合并而成的一组60s的贴片广告;每个周期下可以安装多个源,这些源可以支持相同或不同格式、不同编码参数的视频组合。在播放过程中,允许动态切换当前时段或修改后续时段的顺序。
4.缓存管道
缓存采用多级流水线处理,业务端可以根据自身场景定制缓存中间件和缓存过滤器,满足有针对性的数据下载优化。在优酷广播场景中,为网络请求和本地存储实现了两个缓存过滤器:NetCache和PCDN,如下图所示:
1)资源存储分为三级缓存管理,由一个缓存流水线进行调度和管理;
2)业务可以通过参数定制选择使用混合级缓存;
3)根据资源的不同,缓存管道在读写存储时访问NetCache或PCDN模块进行处理;
4)未来除预览需求外,本地磁盘存储有望由PCDN统一存储,以提高PCDN的共享率,有效降低成本。
5.渲染管道

后期处理和渲染也采用多级流水线处理。渲染管道模块支持多个渲染上下文,每个上下文绑定一个解码器和一个渲染窗口,同一渲染窗口中多个上下文的渲染结果自动合并显示。业务端可以通过实现渲染中间件和渲染过滤器进行定制化开发,从而进行混合流、混合帧、视频特效等具体开发。满足业务和创新需求。
思考和总结
而播放器的端到端播放环节是一个庞大、复杂、综合的系统,尤其是在优酷这样重度视频场景消费的产品中,播放器承载的服务会随着时间的推移而增加。没有一个相对合理稳定的架构设计,整个系统经过长时间迭代后的复杂程度是不可想象的。在此次架构改造中,我们首先提取了播出的核心流程作为整个架构的基础,将播出中心积累的能力模块化、原子化,通过统一的播出框架进行组织,同时结合未来的业务创新和发展方向,对外开放统一的定制化开发能力,基本达到了预期的改造目标。
当然,广播框架的转变不是一蹴而就的。未来,在核心框架稳定的前提下,需要继续推进端到端数据中心、端到端AI、全链路监控等配套基础设施建设。同时,随着5G技术的发展,如何连接末端和边缘节点,如何最大化的利用末端、边缘和云端的计算资源,也是回放框架需要思考和尝试的方向。
【结束】


