QCon 全球软件开发大会暨智能软件开发生态展祝您新春愉快! >>> 了解详情
写点什么

爱奇艺云剪辑 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:005703

评论 1 条评论

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

面对向多模态发展的趋势,为什么这些业界和学界专家说“不必追热点”

小红书技术REDtech

深度学习 专家 活动回顾

AI与打工人:相互补充,共同进步 | 社区征文

海拥(haiyong.site)

三周年征文

轻松比较文件和文件夹:Beyond Compare 4 Mac中文

真大的脸盆

Mac Mac 软件 对比工具 比较文件 对比软件

人工智能基础数据服务,第一!

百度开发者中心

人工智能 数据标注 元宇宙

利用RunnerGo简化性能测试流程

爱研究代码的极客人

软件测试 Jmeter 性能测试 压力测试 runnergo

DevData Talks | 微众银行有哪些研发效能实践与思考?一起来拓展认知边界!

思码逸研发效能

研发效能 金融 微众银行

原生开发能不能动态化?如何选择动态能力建设流派

没有用户名丶

【Linux】之【内存】相关的命令&&解析以及内存相关的问题[free、meminfo、内存泄漏、内存溢出、Overcommit]

A-刘晨阳

Linux cpu 三周年连更

Redis源码之SDS简单动态字符串

Java你猿哥

Java redis ssm Java工程师

ONES × 中国信通院《中国企业软件研发管理白皮书》即将发布

万事ONES

2023 BAT最强Java岗面试题 !底气来源"java面试手册2023"轻松上岸

Java你猿哥

Java JVM 多线程 面经 java基础

Android技术分享 | 一行代码实现屏幕、声音采集

anyRTC开发者

音视频 移动开发 Andriod 屏幕采集 声音采集

Github最新开源!Alibaba 亿级并发系统架构(2023全彩版小册)

Java你猿哥

Java 数据库 缓存 分布式 高并发

电商流量分析怎么做?试试这款数据工具DataLeap!

字节跳动数据平台

大数据 用户增长 数据产品 电商 企业号 4 月 PK 榜

技术文章的写作思维

老张

技术干货 技术文章

为什么众多大型国企都在升级企业数智化底座?

用友BIP

技术大会 用友iuap 用友技术大会 升级企业数智化底座 央国企数智化转型

高兼容低成本,开箱即用的首页性能优化方式被我们找到了

小红书技术REDtech

前端 Andriod

详解GaussDB(DWS)的query_band负载识别与应用

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

PaddleSeg 2.8版本正式发布啦!

飞桨PaddlePaddle

飞桨

【等保小知识】等保一级需要备案吗?

行云管家

等级保护 等保备案 等保一级 一级等保

【堡垒机小知识】堡垒机有主机监控功能吗?

行云管家

网络安全 堡垒机 主机监控

golang-GMP模型

LED显示屏室内改为户外为何不可取?

Dylan

LED显示屏 户外LED显示屏 户内led显示屏

Fabarta 图增强数据血缘治理解决方案

Fabarta

数据治理 图数据库 图智能 血缘治理

字节跳动的开源历程与价值思考

字节跳动开源

开源 云原生 演讲 字节

三分钟完成静态网站托管

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜 静态网站托管

惠普聚焦资源再利用、森林保护和碳排放,理念贯穿电脑全生命周期

叶落便知秋

java性能优化实战:高并发系统的法宝之缓存设计

Java你猿哥

高并发 缓存并发 缓存设计 Java高并发 Java性能优化

数据库原理及MySQL应用 | 日志管理

TiAmo

数据库 MySQL数据库 日志管理 三周年连更

防治“虚假种草”,小红书技术团队干了这几件大事

小红书技术REDtech

架构 AI 小红书

如何在 Postman 中进行 HTTPS 请求

Liam

Java 程序员 后端 Postman API 调试

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