1. 首页

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

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

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

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

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

云剪辑的主要功能有:

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

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

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

4、视频效果实时预览

5、视频的在线转码能力

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

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

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

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

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

1 云剪辑架构设计的挑战

Js中文网 – 前端进阶资源教程 www.javascriptC.com,typescript 中文手册
专注分享前端知识,你想要的,在这里都能找到

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

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

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

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

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

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

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

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

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

图 3 Web 端产品架构图

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

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

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

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

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

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

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

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

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

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

图 5 预览播放器流程图

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

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

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

图 6 包装流程图

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

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

图 7 剪辑播放器架构图

3 视频剪辑轨道如何实现

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

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

图 8 剪辑轨道架构图

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

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

图 9 代码结构图

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

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

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

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

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

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

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

图 11 中间层代码架构图

5 Web 端整体架构

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

5.1. Web 端系统架构

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

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

图 12 数据流程图

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

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

5.2. Web 前端代码架构

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

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

图 13 前端代码结构图

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

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

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

图 14 前端数据流程图

6 总结

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

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

链接:https://www.infoq.cn/article/M2JR9t57w75MvItd7FF3

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

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

链接:https://www.javascriptc.com/3904.html

« 带着三个问题深入浅出React高阶组件
React Hook源码解析(一)»
Flutter 中文教程资源

相关推荐

QR code