基于 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 技术的发展, 如何将端侧和边缘结点打通,如何在端、边、云上做到计算资源的最大化利用,也是播放框架 需要思考和尝试的方向。

相关文章
|
2月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
77 1
|
6天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
30 10
|
20天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
6天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
8天前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
8天前
|
运维 安全 架构师
架构师工具箱:Well-Architected云治理提效实践
本次分享基于阿里云Well-Architected Framework的最佳实践案例,涵盖企业从上云到优化的全过程。安畅作为国内领先的云管理服务提供商(Cloud MSP),拥有800多名员工,其中70%为技术工程师,为企业提供架构安全、数据智能等技术服务。内容包括Landing Zone与Well-Architected的关系、企业云治理现状及需求分析,重点探讨了安全合规、成本优化、资源稳定性和效率提升等方面的最佳实践,并通过具体客户案例展示了如何通过自动化工具和定制化解决方案帮助企业提升云上业务价值。
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
1月前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
2月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
75 8
|
1月前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
65 3

热门文章

最新文章

下一篇
开通oss服务