基于 Pipeline 的播放器开放式架构设计与实践

简介: 作为优酷 APP 中用户使用频度最高、停留时间最长的窗口,播放器一直以来都承载着用户 最直接的内容消费体验、产品创新、业务突破能力。

作者| 阿里文娱无线开发专家 韦兴华

一、背景

作为优酷 APP 中用户使用频度最高、停留时间最长的窗口,播放器一直以来都承载着用户 最直接的内容消费体验、产品创新、业务突破能力。随着长时间的功能迭代和业务累加,播放 器架构在面对现有的体验优化和业务支撑上,越来越显得力不从心,亟需一次全面的架构升级。
经过多方权衡,最终确定基于 Pipeline 模式进行播放器的架构设计,达到易用、开放、可定制,同时具备清晰的结构、低功耗和良好稳定性的架构改造目标。

二、设计目标

结合问题的现状,改造的目标如下:
1)减少部分播放链条中的冗余逻辑,减少函数调用数,减少链路层次,提升起播速度;
2)统一内存、文件的多份存储,提升解码、渲染的复用度,可以降低播放器内存、线程等资源消耗,提升稳定性;
3)将播放源、数据下载、后处理等模块的实现开放化和可定制化,让业务可以根据需求自 行在播放链路中插入和实现功能逻辑,实现业务的定制化能力;
4)从整体播放中心的角度思考,优化架构,以便支撑可预见的多源、多流的业务需求,快 速扩展,及时响应业务;
5)实现下载器、解码器、渲染引擎、PCDN、Netcache、智能档等功能模块的原子化,降低模块间的耦合,方便对外输出,并逐步实现单测覆盖。

三、面临的问题

如下图,通过分析现有的结构,比较容易看出目前存在的问题:
1)层次过多,一些功能和状态代码散落在不同的层次中,导致可维护性不够。
2)核心播放逻辑和业务定制逻辑耦合较重,导致对外支撑和向二、三方开放时接口易用性 不够,可配置化能力不足。
3)开放性和扩展性不足,对于需要深度定制的接入方,没有快速的方式对下载、后处理等 流程进行干预,对于合流、切流、混帧等特异化处理也没有统一的开放能力透出。

image.png

四、方案设计

1.整体设计

通过梳理,一个播放流程可以抽象为“播放源请求”、“流数据下载”、“流解码”、“后处理和 渲染”几个主要的过程,以及“数据埋点中心”“配置中心”等配套设施。在整体架构上,将原来多 个层次的实现合并到一个统一的播放框架中,将播放能力和基础业务原子化插件化,由播放框 架统一管理并提供可配置化能力。
在开放和扩展性的支持上,将以上的几个主要流程抽象成“播放源管理器”、“数据下载器”、 “渲染器”并提供统一的定制化开发能力,并提供自适应的解码能力,以满足未来业务创新上对 合流、切流、混帧和后处理的特异化开发需求。

image.png

2.统一播放框架

播放框架层负责统一管理和串联各个模块,同时对外部提供统一的 API 接口。如图所示,
1)接口层提供基础的播放上下行消息、管线注册、模块配置等接口;
2)状态管理、上下文管 理、时间轴管理和多实例管理模块,可以支持多 Period 和多 Source 的播放序列,以方便业务方 能够快速实现可变格式播放源合并、切流等业务;
3)实例池模块可以结合设备和可用资源自适应的管理解码器实例,保证稳定性和体验的平衡;
4)管线管理模块负责管线注册和管线绑定逻辑;
5)插件管理模块支持一些定制能力的内部实现,内置一些优酷业务能力并支持可配置能力。

image.png

3.播放源管理

播放源管理模块抽象了一个 PlayList 结构,用于支持业务方能够方便的实现不同格式和编 码方式的播放源合并、播放序列管理、切流等业务。 主要结构如下图,其中 PlayList 是一个总 播放序列;其下的每个 Period 节点表示一个统一的时间轴播放序列,其下的所有 source 会合并 成一个时间轴,比如由 4 个 15 秒的视频合并成的一组 60s 贴片广告;每个 Period 下可以挂载多 个 source,这些 source 可以支持相同或者不同格式、不同编码参数的视频组合。在播放过程中, 允许动态的切换当前 Peroid,或者修改后续 Peroid 的顺序。

image.png

4.缓存管线

缓存处理采用多级管线的处理,业务方可以根据自己的场景通过缓存中间件和缓存过滤器 的定制实现,来满足针对性的数据下载优化。在优酷播放场景中,针对网络请求和本地存储实 现了 NetCache 和 PCDN 两个缓存过滤器,具体如下图所示:
1)将资源存储分为三级缓存管理,由缓存管线进行调度管理;
2)业务可以通过参数自定义选择使用混合层级的缓存;
3)缓存管线针对不同资源,读取或写入存储时分别通过访问 NetCache 或 PCDN 模块进 行处理;
4)未来本地磁盘存储除预览需求外,希望统一采用PCDN 存储方式存储,以提升 PCDN的分享率,有效的降低成本。

image.png

5.渲染管线

后处理和渲染同样采用多级管线的处理。渲染管线模块提供多个渲染 Context 支持,每个 Context 绑定一个解码器和一个渲染窗口,并自动对同一个渲染窗口的多个 Context 的渲染结果 进行合并和上屏。业务方可以通过实现渲染中间件和渲染过滤器来进行定制化的开发,以进行 诸如混流、混帧、视频特效等特异化开发来满足业务和创新需求。

image.png

五、思考和总结

播放器以及端侧播放链路是一个庞大而复杂、且综合性很强的系统,尤其在优酷这样的重 视频场景消费的产品中,播放器承载的业务会随着时间不断增长。如果没有一个相对合理稳定 的架构设计,在长时间迭代之后整个系统的复杂度是不可想象的。在本次架构改造中,我们首 先抽取播放的核心过程作为整个架构的基础,把播放中心已经积累的能力模块化原子化,通过 统一的播放框架组织起来,同时结合未来业务的创新和发展方向,对外开放了统一的定制化开 发能力,基本实现了预期的改造目标。
当然播放框架的改造并不是一蹴而就的,未来在核心框架稳定的前提下,还需要继续推进 诸如端侧数据中心、端侧 AI、全链路监控等配套基础设施的建设。同时随着 5G 技术的发展, 如何将端侧和边缘结点打通,如何在端、边、云上做到计算资源的最大化利用,也是播放框架 需要思考和尝试的方向。

相关文章
|
29天前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
186 12
|
1月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
141 0
|
2月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
2月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
118 0
|
1月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
4月前
|
算法 物联网 定位技术
蓝牙室内定位技术解决方案:核心技术架构与优化实践
本文探讨了蓝牙iBeacon与Lora结合的室内定位技术,分析其在复杂室内环境中的优势与挑战。通过三层架构实现高精度定位,并提出硬件、算法与部署优化方向,助力智慧仓储、医疗等场景智能化升级。
274 0
蓝牙室内定位技术解决方案:核心技术架构与优化实践
|
4月前
|
数据采集 人工智能 安全
开源赋能双碳:MyEMS 能源管理系统的架构与实践价值
在全球碳中和趋势与“双碳”目标推动下,能源管理趋向精细化与智能化。MyEMS是一款基于Python开发的开源能源管理系统,具备灵活适配、功能全面的优势,覆盖工厂、建筑、数据中心等多元场景。系统支持能源数据采集、分析、可视化及设备管理、故障诊断、AI优化控制等功能,提供“监测-分析-优化”闭环解决方案。遵循“国家+省级+接入端”三级架构,MyEMS在重点用能单位能耗监测中发挥关键作用,助力实现能源效率提升与政策合规。开源模式降低了技术门槛,推动“双碳”目标落地。
176 0
|
2月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
2月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
420 1
|
3月前
|
存储 自然语言处理 前端开发
百亿级知识库解决方案:从零带你构建高并发RAG架构(附实践代码)
本文详解构建高效RAG系统的关键技术,涵盖基础架构、高级查询转换、智能路由、索引优化、噪声控制与端到端评估,助你打造稳定、精准的检索增强生成系统。
643 2