阿里视频云技术专家孙小军:短视频SDK非编架构与渲染引擎技术实现

简介: 在6月8日上海云栖视频专场中,阿里视频云技术专家孙小军进行了一场短视频技术分享,解读了短视频非编架构和渲染技术架构的实现原理。阿里云短视频SDK服务了1000多家企业用户,遇到了不同垂直行业、不同业务场景的客户。

在6月8日上海云栖视频专场中,阿里视频云技术专家孙小军进行了一场短视频技术分享,解读了短视频非编架构和渲染技术架构的实现原理。阿里云短视频SDK服务了1000多家企业用户,遇到了不同垂直行业、不同业务场景的客户。除了面临多样性需求的技术挑战外,还面临着扩展性、性能及兼容性上的考量。
IMG_3274

那么,在基础架构研发层面是如何解决这些问题呢?

image

阿里云的短视频SDK从非线性编辑入手,主要目标是对音视频素材做任意部分的随机存取、修改和处理。其次,阿里云短视频SDK对渲染效果进行管道化处理,提供渲染底座,方便对接不同的视频算法及组合复杂的渲染流程。

在传统的非编场景中,当我们有编辑需求时,是这么操作的。左上角有素材裁剪,导入或采集的视频,要做裁剪、倒放、拉伸等等处理,下一步是添加一些滤镜效果,如果有多段视频,可以选择不同方式的转场。下面在整个视频时间轴上存在不同轨道,每个轨道上可以在不同的时间段放不同的素材,每个素材可以拉伸时长、变速等。

image

一、短视频的非编架构是怎样的?

通过提炼,我们抽取了五层架构。最上面一层是产品级的DEMO,方便用户快速修改发布上线;第二层是成熟的、开源的UI控件,像时间轴空间、文字动图编辑控件等,用户可以直接使用也可以定制化;第三层是针对短视频场景进行一些编排,包括录制场景、视频导入裁剪、多段拼接、编辑场景等;第四层是多媒体领域通用性的组件,包括渲染、音频处理、编解码等;最下层是多媒体分发框架,是对包括线程模型、时钟机制、监控、状态管理等跨平台的基础能力的抽象。下面我们从几个重点层级详细展开。

image

多媒体分发框架

无论是音视频编解码、渲染等基础组件,还是编辑、导入拼接等业务场景的编排组件,都是基于多媒体分发框架上实现的。多媒体分发框架包括线程模型、模块间消息订阅互发等基础服务的封装,通过Clock机制让多个组件之间组合出多样性的时钟同步方案,并通过这些组件之间的统一状态迁移和数据链路的状态监控,可以方便业务编排层快速构建具体的业务场景。

多媒体通用组件

非编场景下的典型的时间轴和多轨道的技术,短视频SDK是如何实现的呢?抽取了音视频缓冲池处理,将素材做映射拉伸,比如对每一个素材做快放、倒放的效果,生成某一个轨道上的视频片段,每个轨道上可以添加多个音频、视频、图片等素材。通过素材的绝对时戳、相对时戳以及与全局时戳的映射关系,就可以灵活组装出各种非编效果。

image

短视频场景编排层

在这一层上会实现短视频场景下的各类编排方式。以编辑场景为例:预览和合成效果上是有重叠的,在这一层中可以按下图方式编排流程。
1、创建缓冲池、渲染、编排、封装等组件,注册到消息分发框架;
2、创建Clock注入组件,订阅主从时钟关系;
3、组装数据流订阅关系,渲染订阅缓冲池流、编排订阅渲染流、Muxer订阅编码等;
4、针对业务场景编排渲染节点;
5、编排层组件统一管理各组件状态迁移Init->Prepared->Playing;
6、编排层可以Buffer监控、调整、上报;

image

二、复杂的渲染效果是如何实现的?

image

上图是短视频录制渲染与编辑渲染的pipeline,可以看出录制场景和编辑场景下渲染流程存在较大差异。在业务丰富度高的toB业务场景中,需要有灵活的渲染节点编排的能力和对接第三方渲染的能力,同时对于终端平台还存在多平台适配问题,需要统一接口并针对平台特性进行优化,来保证性能。

针对以上的问题,在渲染引擎上阿里云短视频SDK抽离出四层概念。第一层是GPU抽象层,这一层是为了解决OpenGL、Mental等渲染适配的问题;第二层是解析和运行层,针对不同的pipeline节点编排,解析并生成链路,并按照驱动模式去运行;第三层是渲染服务层,可以实现状态迁移和模块间信令交互等;第四层是渲染业务编排层,根据不同业务场景来排版渲染的pipeline。

非编能力与渲染引擎能为用户带来什么价值?

第一, 当用户提出新的个性化需求的时候,如多滤镜分屏显示,只需要编排能力就可以组装出用户需要的效果。后续将会开放渲染节点编排,用户可以自行编排渲染节点,实现更符合自己业务特色的渲染效果。

第二, 集成了短视频SDK后,后续将会开放定制动图、滤镜和MV素材。

第三, 针对某个素材,实现各种类型的时间特效,非线性叠加变换。

第四, 可扩展丰富的转场效果,包括多边形、淡入淡出、百叶窗等。

第五, 对非编全链路pipeline做了大量的性能优化,渲染引擎做了CPU到GPU性能优化,集成短视频SDK后,用户可以获得更好的性能体验。

image

作为基础架构研发,孙小军所在的团队也遇到了一些坑点。如果要实现跨多段,全局时间重叠,并且要实现反复时间特效的时候,业内的玩法是预处理合成一个视频,然后再针对这段视频进行反复处理。但是我们也会遇到一些客户的反馈,在这个过程中预处理时,用户的等待时间很长,失去了灵活性。那阿里云短视频SDK做的改变是,在这条线上通过非编,将反复的时间段转换成多个part段,通过part的反复来达到整体非编的效果。

短视频V3.6版本上线

短视频SDK近期刚刚发布的V3.6版本就采用了非编架构和渲染引擎,在功能层面,除了原本的短视频基础能力之外,新增了特效滤镜、时间特效等功能,可以快速实现类似“抖音”等当红短视频APP上的酷炫效果。

image

对业务感兴趣的朋友,可以扫码下载DEMO,或者加入钉钉合作群与专家直接交流。

image

目录
相关文章
|
4天前
|
负载均衡 API 数据库
构建高效微服务架构的五大关键技术
【5月更文挑战第4天】 随着云计算和容器化技术的成熟,微服务架构已成为软件开发的主流模式。本文将详细探讨实现高效微服务架构的五个关键技术点:服务拆分策略、API网关设计、服务发现与注册、熔断机制以及分布式事务管理。这些技术点是确保微服务系统可扩展性、灵活性及稳定性的基石,对于后端开发者而言,掌握它们至关重要。文章将提供具体的实施建议和最佳实践,帮助读者构建和维护高性能的微服务系统。
|
8天前
|
设计模式 Cloud Native 算法
拥抱变化:我的技术适应之旅构建未来:云原生架构在企业数字化转型中的关键角色
【4月更文挑战第30天】 在技术的浪潮中,我学会了不仅仅是编码,还有如何与时俱进。本文记录了我从一名初出茅庐的开发者成长为一个能够适应不断变化技术环境的工程师的心路历程。从最初的困惑与挑战到后来的接纳与创新,我意识到,技术能力的提升和心态的转变同样重要。
|
8天前
|
前端开发 JavaScript 安全
【TypeScript技术专栏】TypeScript在微前端架构中的应用
【4月更文挑战第30天】微前端架构通过拆分应用提升开发效率和降低维护成本,TypeScript作为静态类型语言,以其类型安全、代码智能提示和重构支持强化这一架构。在实践中,TypeScript定义公共接口确保跨微前端通信一致性,用于编写微前端以保证代码质量,且能无缝集成到构建流程中。在微前端架构中,TypeScript是保障正确性和可维护性的有力工具。
|
10天前
|
设计模式 供应链 安全
如何在短频快的节奏中做好技术?业务开发必会的架构思维
本文提供一种业务架构设计模式:从业务&技术两个角度提炼出一个基础思维框架,供业务线开发同学参考。
如何在短频快的节奏中做好技术?业务开发必会的架构思维
|
14天前
|
Cloud Native Devops 持续交付
构建未来:云原生技术在现代IT架构中的演进与实践
【4月更文挑战第24天】 随着企业数字化转型的深入,云原生技术正成为推动创新和敏捷性的关键技术。本文聚焦于云原生技术的发展历程及其在现代IT架构中的应用,探讨了如何利用容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等核心概念来优化资源利用率,提高系统弹性,并加速产品上市时间。通过分析多个行业案例,文章揭示了云原生实践对企业竞争力的显著影响,并提出了面向未来的IT架构战略建议。
|
14小时前
|
API 持续交付 开发者
构建高效微服务架构:后端开发的新视角
【5月更文挑战第8天】 随着现代软件开发的演变,微服务架构已经成为了企业追求敏捷、可扩展和灵活部署的重要解决方案。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术栈选择以及持续集成与部署的最佳实践。我们还将讨论微服务带来的挑战,如数据一致性、服务发现和网络延迟,并提出相应的解决策略。通过本文,后端开发者将获得构建和维护微服务系统所需的深度知识,并了解如何在不断变化的技术环境中保持系统的健壮性和可维护性。
14 8
|
1天前
|
设计模式 Kubernetes 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第7天】在现代软件开发的浪潮中,微服务架构已经成为一种流行的设计模式。它通过将应用程序分解为一组小的、独立的服务来提高系统的可维护性和扩展性。本文深入探讨了微服务架构的核心概念、优势以及如何利用最新的后端技术构建一个高效且可靠的微服务体系。我们将讨论关键的设计原则,包括服务的独立性、通信机制、数据一致性和容错性,并展示如何在云环境中部署和管理这些服务。
15 3
|
2天前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
2天前
|
缓存 监控 数据库
构建高性能微服务架构:后端开发的终极指南
【5月更文挑战第6天】 在现代软件开发的浪潮中,微服务架构以其灵活性、可扩展性和容错性引领着技术潮流。本文深入探索了构建高性能微服务架构的关键要素,从服务划分原则到通信机制,再到持续集成和部署策略。我们将透过实战案例,揭示如何优化数据库设计、缓存策略及服务监控,以确保系统的稳定性和高效运行。文中不仅分享了最佳实践,还讨论了常见的陷阱与解决之道,为后端开发者提供了一条清晰、可行的技术路径。
|
2天前
|
消息中间件 数据管理 持续交付
构建高效微服务架构的最佳实践
【5月更文挑战第6天】在动态和快速演变的现代软件开发领域,微服务架构已经成为促进敏捷开发和部署的关键模式。本文将深入探讨构建和维护高效微服务架构的策略,包括服务划分准则、通信机制、数据管理及持续集成与持续交付(CI/CD)的实施。通过分析不同业务场景下的应用案例,本文旨在为开发者提供一套行之有效的指导原则和实践方法,以支持他们构建可扩展、灵活且高效的微服务系统。
25 2