在 6 月 8 日上海云栖视频专场中, 阿里视频云技术专家孙小军进行了一场短视频技术分享, 解读了短视频非编架构和渲染技术架构的实现原理. 阿里云短视频 SDK 服务了 1000 多家企业用户, 遇到了不同垂直行业, 不同业务场景的客户. 除了面临多样性需求的技术挑战外, 还面临着扩展性, 性能及兼容性上的考量.
那么, 在基础架构研发层面是如何解决这些问题呢?
阿里云的短视频 SDK 从非线性编辑入手, 主要目标是对音视频素材做任意部分的随机存取, 修改和处理. 其次, 阿里云短视频 SDK 对渲染效果进行管道化处理, 提供渲染底座, 方便对接不同的视频算法及组合复杂的渲染流程.
在传统的非编场景中, 当我们有编辑需求时, 是这么操作的. 左上角有素材裁剪, 导入或采集的视频, 要做裁剪, 倒放, 拉伸等等处理, 下一步是添加一些滤镜效果, 如果有多段视频, 可以选择不同方式的转场. 下面在整个视频时间轴上存在不同轨道, 每个轨道上可以在不同的时间段放不同的素材, 每个素材可以拉伸时长, 变速等.
一, 短视频的非编架构是怎样的?
通过提炼, 我们抽取了五层架构. 最上面一层是产品级的 DEMO, 方便用户快速修改发布上线; 第二层是成熟的, 开源的 UI 控件, 像时间轴空间, 文字动图编辑控件等, 用户可以直接使用也可以定制化; 第三层是针对短视频场景进行一些编排, 包括录制场景, 视频导入裁剪, 多段拼接, 编辑场景等; 第四层是多媒体领域通用性的组件, 包括渲染, 音频处理, 编解码等; 最下层是多媒体分发框架, 是对包括线程模型, 时钟机制, 监控, 状态管理等跨平台的基础能力的抽象. 下面我们从几个重点层级详细展开.
多媒体分发框架
无论是音视频编解码, 渲染等基础组件, 还是编辑, 导入拼接等业务场景的编排组件, 都是基于多媒体分发框架上实现的. 多媒体分发框架包括线程模型, 模块间消息订阅互发等基础服务的封装, 通过 Clock 机制让多个组件之间组合出多样性的时钟同步方案, 并通过这些组件之间的统一状态迁移和数据链路的状态监控, 可以方便业务编排层快速构建具体的业务场景.
多媒体通用组件
非编场景下的典型的时间轴和多轨道的技术, 短视频 SDK 是如何实现的呢? 抽取了音视频缓冲池处理, 将素材做映射拉伸, 比如对每一个素材做快放, 倒放的效果, 生成某一个轨道上的视频片段, 每个轨道上可以添加多个音频, 视频, 图片等素材. 通过素材的绝对时戳, 相对时戳以及与全局时戳的映射关系, 就可以灵活组装出各种非编效果.
短视频场景编排层
在这一层上会实现短视频场景下的各类编排方式. 以编辑场景为例: 预览和合成效果上是有重叠的, 在这一层中可以按下图方式编排流程.
1, 创建缓冲池, 渲染, 编排, 封装等组件, 注册到消息分发框架;
2, 创建 Clock 注入组件, 订阅主从时钟关系;
3, 组装数据流订阅关系, 渲染订阅缓冲池流, 编排订阅渲染流, Muxer 订阅编码等;
4, 针对业务场景编排渲染节点;
5, 编排层组件统一管理各组件状态迁移 Init->Prepared->Playing;
6, 编排层可以 Buffer 监控, 调整, 上报;
二, 复杂的渲染效果是如何实现的?
上图是短视频录制渲染与编辑渲染的 pipeline, 可以看出录制场景和编辑场景下渲染流程存在较大差异. 在业务丰富度高的 toB 业务场景中, 需要有灵活的渲染节点编排的能力和对接第三方渲染的能力, 同时对于终端平台还存在多平台适配问题, 需要统一接口并针对平台特性进行优化, 来保证性能.
针对以上的问题, 在渲染引擎上阿里云短视频 SDK 抽离出四层概念. 第一层是 GPU 抽象层, 这一层是为了解决 OpenGL,Mental 等渲染适配的问题; 第二层是解析和运行层, 针对不同的 pipeline 节点编排, 解析并生成链路, 并按照驱动模式去运行; 第三层是渲染服务层, 可以实现状态迁移和模块间信令交互等; 第四层是渲染业务编排层, 根据不同业务场景来排版渲染的 pipeline.
非编能力与渲染引擎能为用户带来什么价值?
第一, 当用户提出新的个性化需求的时候, 如多滤镜分屏显示, 只需要编排能力就可以组装出用户需要的效果. 后续将会开放渲染节点编排, 用户可以自行编排渲染节点, 实现更符合自己业务特色的渲染效果.
第二, 集成了短视频 SDK 后, 后续将会开放定制动图, 滤镜和 MV 素材.
第三, 针对某个素材, 实现各种类型的时间特效, 非线性叠加变换.
第四, 可扩展丰富的转场效果, 包括多边形, 淡入淡出, 百叶窗等.
第五, 对非编全链路 pipeline 做了大量的性能优化, 渲染引擎做了 CPU 到 GPU 性能优化, 集成短视频 SDK 后, 用户可以获得更好的性能体验.
作为基础架构研发, 孙小军所在的团队也遇到了一些坑点. 如果要实现跨多段, 全局时间重叠, 并且要实现反复时间特效的时候, 业内的玩法是预处理合成一个视频, 然后再针对这段视频进行反复处理. 但是我们也会遇到一些客户的反馈, 在这个过程中预处理时, 用户的等待时间很长, 失去了灵活性. 那阿里云短视频 SDK 做的改变是, 在这条线上通过非编, 将反复的时间段转换成多个 part 段, 通过 part 的反复来达到整体非编的效果.
短视频 V3.6 版本上线
短视频 SDK 近期刚刚发布的 V3.6 版本就采用了非编架构和渲染引擎, 在功能层面, 除了原本的短视频基础能力之外, 新增了特效滤镜, 时间特效等功能, 可以快速实现类似 "抖音" 等当红短视频 APP 上的酷炫效果.
来源: https://yq.aliyun.com/articles/602446