【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

爱奇艺云剪辑 Web 端的技术实现

  • 2020-03-04
  • 本文字数:3550 字

    阅读完需:约 12 分钟

爱奇艺云剪辑Web端的技术实现

云剪辑是集视频制作、生产、分发等为一体的在线视频制作平台,具备工具及服务两方面能力:工具方面,云剪辑具备全面视频剪辑能力,相比行业中其他在线剪辑工具能力更强大,支持范围包括多轨道音视频合成、音视频素材的裁剪、切割、拖拽,贴片贴字设置和音频编辑等;服务方面,云剪辑平台支持各种业务调用、视频制作和分发以及视频制作状态查询等服务。



图 1 爱奇艺云剪辑编辑预览页面


随着 Web 端技术的不断发展,尤其是 HTML5 标准的发布和实施,前端不仅能够实现友好的界面展示、交互,还能够实现对流媒体数据的操作和渲染。Web 端能力不断的增强,Web 应用功能越来越复杂,对性能要求也越来越高。当用桌面软件进行音视频数据的编辑时不仅对机器性能有较高的要求,还耗费大量转码时间。爱奇艺云剪辑则通过 Web 技术优化实现在线音视频制作,云服务实现转码,有效降低了用户的 PC 性能要求,还提升了转码性能与速度。


云剪辑的主要功能有:


1、视频剪切、拼接等基础功能


2、视频轨道缩放、拖拽基本交互


3、视频贴字、贴图等基本包装能力


4、视频效果实时预览


5、视频的在线转码能力


这里前面 4 点都需要在浏览器端完成,基于 Web 技术在浏览器端实现类似桌面的大型编辑软件有很多技术难点:


首先,如何在 Web 实现模拟播放,实现所见即所得;


其次,在 Web 端进行复杂的操作时,浏览器资源消耗较大,如何保证良好的交互体验和性能;


再有,视频制作除了剪切与拼接外,如贴字、贴图、滤镜等效果叠加,也需要浏览器端来进行模拟,且需要与服务端保持一致,这也是一个技术难点。


下面我们来看下爱奇艺技术团队如何通过 Web 技术在云剪辑中实现在线的音视频编辑的。

1 云剪辑架构设计的挑战

云剪辑把 PC 桌面程序的功能迁移到云端。本来在一台计算机上运行的程序,现在由多台计算机分别完成。之前由一个程序不同模块执行的计算,现在通过网络相连的不同的服务协调完成。这就给云剪辑的架构设计带来了很大的挑战。


如图 2 所示,爱奇艺云剪辑整体架构分为四个部分:



图 2 爱奇艺云剪辑整体架构图


Web 客户端:负责与用户的具体交互操作,包括素材导入、视频剪辑和效果实时预览。具体功能可参考图 3。


Node 中间层:主要功能为项目和视频数据接收、转发、保存等。


创作中台:为云剪辑提供视频制作、转码、分发等业务处理和调度。


云平台:提供基础支撑,如音视频转码、存储分发等。



图 3 Web 端产品架构图

2 云剪辑实时预览的技术原理

视频剪辑效果的实时预览,成为云剪辑工具的一个技术难点。爱奇艺云剪辑播放器,创造性的通过多个播放器实例组合接力的模式,实现了多个视频裁剪、切割、拼接后实时预览的目的。剪辑预览播放器的原理如图 4 所示:



图 4 剪辑预览播放器原理图


多个视频播放器实例组合成为一个视频播放器,使用 canvas 投影整合视频画面。那么要解决下面的问题:

2.1. 多组视频播放器以及播放次序组织问题

将视频播放器的实例分别放入不同的视频小组中。视频小组是视频整合的更高一级虚拟形式。每个视频小组中,加入数量不等的视频实例,视频小组分工不同,有的小组负责预加载,有的小组负责投影,有的小组负责转换。视频小组互相补充,互相接力,又互相制约,通过这种方式将有效解决视频拼接播放流畅性的问题。

2.2. 视频在切换、跳转时如何保证待播的资源准备得当

当视频跳转(seek)播放时,不能预测用户要播放哪个视频的哪个片段,也就谈不上提前准备资源了。但是我们经过大量的实际验证发现,打造一个专门用来缓存历史数据的视频小组,能有效提高命中预加载视频的几率。所以将其他视频小组中暂时不用的资源聚合到缓存视频小组,缓存视频小组再通过自己灵活介入的优势,将缓存数据最大限度的复用,这样就最大限度的解决跳转播放时出现的卡顿现象。具体流程如图 5 所示:



图 5 预览播放器流程图


利用多个视频实例组合播放,对视频格式有比较好的兼容性与稳定性。通过分组的方式整合播放资源,有效的提升了资源的利用率,降低了内存占用。


解决了视频预览的问题,还要加入各种各样的包装定制和特效功能,因为云剪辑的预览播放器画面是投影在 canvas 元素上的,这就给我们的视频包装留下了很大的发挥空间。视频包装流程如图 6 所示。



图 6 包装流程图


基于播放器组合接力原理以及包装定制等能力,云剪辑播放器实现了视频剪辑的实时预览功能,且效果与云端转码效果一致。同时从高性能、可维护性等角度出发,我们对播放器架构按播放控制、核心、包装进行分层设计。图 7 是剪辑预览播放器的整体架构图。



图 7 剪辑播放器架构图

3 视频剪辑轨道如何实现

视频制作本身是用户与工具强交互的行为。云剪辑是一个在线视频制作工具,相比桌面程序的劣势主要在性能与交互上,其中视频剪辑轨道是视频制作工具 Web 化的难点。在实现复杂的、可定制化的视频制作功能的基础上,还要保证操作流畅性。我们通过功能分层与结构优化等多种方式来解决这些问题,图 8 是剪辑轨道整体的功能架构图:



图 8 剪辑轨道架构图


剪辑轨道需求在各个视频剪辑任务中差别较大,有的只需要视频轨道,有的需要视频和音频轨道,有的需要简单的包装或者贴图轨道。基于视频剪辑的多元化的需求,我们需要将轨道部分打造成可定制化的组件。众多的组件和复杂的交互使得代码结构是否合理就非常必要,因此我们对组件的开发方式和结构均进行了整理。图 9 是剪辑轨道简化后的代码结构图:



图 9 代码结构图


结构的清晰保证了大型复杂程序的可扩展性和可维护性,也保证了多元化的业务需求得到满足。

4 云剪辑中间层:Node 是前端与后端之间的桥梁

我们会通过 Node 中间层来解决接口整合、临时数据存储、前后端交互的数据一致性等问题。对于后端来说,只需提供原始数据而不必过多关注前端对接口数据格式的要求,更加专注于自身业务。对前端来说,获得了定制化的接口数据,也能够减少前端发起请求的次数。云剪辑中间层架构如下图 10 所示:



图 10 爱奇艺云剪辑中间层架构图


其中 Nginx 转发无需经过中间层处理的请求,提供静态资源服务。Node 处理业务逻辑,负责与创作中台的交互。云剪辑中间层采用了自研的 qiyi-wings 框架,在 Koa2 的基础上,划分了 router、controller、service、model、dao 等层次。业务模块之间相互分离,模块内部按层次划分。代码架构如下图 11 所示:



图 11 中间层代码架构图

5 Web 端整体架构

我们通过 Web 端系统与代码架构设计解决数量庞大的前端代码带来的代码维护与可扩展性问题。

5.1. Web 端系统架构

在云剪辑工具中,用户需要在轨道上对素材进行剪裁、拼接、调整出入点、修改倍速等一系列操作,最后在播放器中预览成片。在整个操作过程中,平台定时保存视频中间态到服务端数据库。当页面刷新时,从服务端获取中间态恢复视频,支持继续编辑。



图 12 数据流程图


如图 12 所示,云剪辑工具提供海量的音视频素材以及多种多样的文字模板,


云剪辑工具以轨道数据为中心,轨道数据一旦发生变化(素材拖拽到轨道、轨道内操作素材、配置区修改素材),会触发数据分发流程,轨道将自身数据分发到播放器、特效包装层、素材配置区,这些模块将分发的数据经过处理,转化为自身需要的格式展示出来。以轨道数据为中心的机制使得轨道可支持全局范围内的撤销重做,不仅仅是轨道上的修改。

5.2. Web 前端代码架构

云剪辑前端工程是基于 Vue+QUI2.0 搭建的,QUI2.0 是爱奇艺前端团队孵化出来的组件库。它是基于 Vue 的 Web 端开发套件,旨在为企业级应用开发提供统一的前端解决方案,包括基础组件、工程框架和工具命令等。前端工程是包含多个模块的单页面应用。src 目录下的代码结构如下图 13 所示。



图 13 前端代码结构图


其中 editor 模块按照功能划分为六部分,项目配置区 project,素材区 material,轨道区 track,播放器区 video,装饰器特效区 decorator,视频发布区 forms。每个部分有相应的 store 存储数据,实现数据统一管理与共享。


前端工程请求服务端数据的流程如下图 14。



图 14 前端数据流程图

6 总结

通过结构化的代码分层、严格的流程控制、精细的交互设计,利用 Web 技术实现了复杂的音视频编辑。随着 Web 技术的不断发展与完善,其性能与交互也将越来越接近甚至超越桌面程序。云剪辑的 Web 端架构也会随着时代不断进步,后续我们也将引入 Web Assembly 实现解码和计算,引入 AI 技术为视频赋能等。目前爱奇艺云剪辑只提供给爱奇艺内部的制作团队使用,未来将对外开放,为外部工作室、小团队、个人制作者提供高效便捷的创作能力,让大家享用 Web+云服务+AI 技术的便利,有效降低视频创作门槛,提高制作生产效率。


本文转载自公众号爱奇艺技术产品团队(ID:iQIYI-TP)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247486345&idx=1&sn=1ca3ab53fe30b9338681e0830205c3e4&chksm=e97697aade011ebc1d6c3a48e5859ee556c7ff04de7d4ead92455eb1259af9a9779e157692b8&scene=27#wechat_redirect


2020-03-04 10:005729

评论 1 条评论

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

等保是强制的吗?企业不办等保有啥处罚?

行云管家

网络安全 等保 等保2.0

架构作业 - 模块四 存储架构

Leo Zhao

架构训练营

华为云正式推出区块链服务!区块链技术将在数字经济时代大放异彩

CECBC

浪潮云说丨浪潮云行·物联边缘云产品,让物联感知无微不至

浪潮云

云计算,

浏览器测试的三大挑战及解决方案【译】

FunTester

软件测试 测试 FunTester 兼容性测试 浏览器测试

软件定义汽车技术体系研究

SOA开发者

冲破“薪资”瓶颈,某厂的玩转Java面试指南,他看完涨薪10k了!

Java 程序员 架构 编程语言

【存储专栏】打破K/V存储的性能瓶颈

趣链科技

区块链 存储

2021字节跳动面试总监首发1121道LeetCode算法刷题笔记(含答案)

Java 面试 程序人生 计算机

一张图读懂Z-ONE Studio Lite

SOA开发者平台

“智感超清”之HDR技术落地实践

百度开发者中心

最佳实践 音视频

“碳中和”的未来蓝图中,区块链所占据的重要位置

CECBC

谈谈汽车芯片安全(下篇)

SOA开发者

多租户是什么意思?怎么理解?

行云管家

云计算 运维 SaaS

一张图读懂Z-ONE Digital Car

SOA开发者平台

八月热点抢先看:EasyDL图像分割数据自动贴合标注,标注效率提升30倍+

百度大脑

人工智能

北京建全球领先区块链算力平台,可满足未来各类场景需求

CECBC

使用Tapdata一步搞定关系型数据库到MongoDB的战略迁移

tapdata

全网通用Python点赞器(俗称刷分机器),想知道原理吗?看完本文你自己也能写个

梦想橡皮擦

9月日更

Redis可观测最佳实践,5大关键指标最全解析!

观测云

redis

横空出世!复盘B站面试坑我最深的JDK源码剖析,全是干货!

Java 程序员 架构 架构师 计算机

谈谈汽车芯片信息安全(上篇)

SOA开发者

千万级学生管理系统的考试试卷存储方案

Geek_db27b5

华为云GaussDB(for MySQL)2.0全新升级,三大技术大揭秘

华为云开发者联盟

数据库 云原生 GaussDB GaussDB(for MySQL) 华为全联接2021

滴滴 x StarRocks:极速多维分析创造更大的业务价值

StarRocks

数据库 数据分析 滴滴 Clickhouse StarRocks

一张图读懂Z-ONE Studio Lite

SOA开发者

智能网联汽车安全架构系列1:ECU安全机制介绍

SOA开发者

你知道怎么离线安装全局 node 模块吗?

编程三昧

大前端 npm Node 离线包 9月日更

一张图读懂Z-ONE Digital Car

SOA开发者

金九银十已经过半还没拿到offer?阿里大牛熬夜整理的Java面试总结,网友已被震惊到说不出话!

Java 编程 面试 程序人生 金九银十

双碳目标带来的机遇与挑战

石云升

新能源革命 碳中和 碳达峰 9月日更

爱奇艺云剪辑Web端的技术实现_大前端_爱奇艺技术产品团队_InfoQ精选文章