当下直播、短视频、视频社交等成为了当下爆发式增长的软件产品,美颜SDK功能也从原先基础的美白磨皮,发展到现在的美型、道具,甚至比如有类似三只松鼠的企业IP动漫形象虚拟主播。在这些酷炫的效果背后,离不开强大渲染能力,所以我们各大平台极需要一个底层渲染框架来支撑我们的平台发展。那么如何自主开发一个这样的美颜渲染框架,也简称直播美颜SDK呢,下面就由云播网络科技的美颜SDK开发组的组长从底层技术来具体剖析。

打开网易新闻 查看精彩图片

1. SDK特点

直播美颜SDK首先要具备一些特点,才能适用于目前大多数直播、视频社交平台日常需求。

(1) 跨平台:现如今直播已经大多数都是基于安卓和iOS的移动端直播,也有部分游戏主播或者专业的带货主播使用PC直播,那么跨平台性就成为了衡量美颜SDK的标准之一。同样的渲染Pipeline和着色器,要能够多端共用,不能够移动端一套,PC一套,Unity再来一套,那将是灾难性的开发。

(2) 低能耗:目前直播、视频社交等应用,所基于的推拉流和音视频SDK也十分耗能,毕竟它们需要保证数据传输分发和高并发性。那么美颜渲染就需要尽量少消耗性能,否则将会卡成连环画。这里抛个问题给大家,美颜的能耗最大会出现在哪一步?GPU计算?CPU计算?还是GPU/CPU通信?

如果这一性能方面做不好,就会像市面上美颜SDK一样导致如下场景:

(3) 易扩展:如今的美颜功能需求也是日新月异。俗话说,牛X的技术斗不过妖孽的产品,产品提一个妖孽的美颜新功能需求,要是不能和堆积木一样易于扩展,那么技术框架一定是存在问题的,并且也不足以应付后期的市场需求。

打开网易新闻 查看精彩图片

2. SDK技术架构

下面说点干货,将会带大家从技术层面了解美颜SDK如何构成。美颜SDK主要可以分为3层:AI计算层,渲染层和封装层。

(1) AI计算层主要用于进行人脸检测、肢体追踪、手势识别等需要人工智能辅助的功能,从这个层面完全自研难度确实非常大。比如美型功能,完全就是依赖于人脸检测和追踪技术进行大眼瘦脸操作的,一般除了非常专业的美颜SDK提供商,这些AI层面技术还是向具备AI能力企业采购吧,当然如果提供美颜SDK的企业也采购的第四方,那这家美颜SDK就可以直接pass了,因为说不定哪天他们和第四方解约了,最好情况也是四方扯皮,最坏可能钱白花功能还用不了。

(2) 渲染层是最核心的一层了,渲染首先离不开OpenGL,利用OpenGL图形渲染技术打造一个引擎式的渲染管线。将原视频数据喂给引擎,经过各个功能的Filter,向出口输出相应数据格式的视频数据即可。这里每层Filter,又会有OpenGL渲染管线,分为一条小流水线进行坐标转换和着色器运算。坐标转换在CPU中进行计算,送入定点着色器,再送入片元着色器从而利用算法在GPU中实现我们需要的渲染效果。这一层做好流水线上各个filter的排序尤为重要。

每个Filter都是一个插件,那么就需要利用抽象方法,将渲染的公共逻辑提取到基类,不同算法逻辑实现在各类不同的着色器shader上。

回到上面抛出的问题,哪一步会最耗性能?首先,渲染层尽量让GPU进行运算,因为GPU在视频处理方面本就比CPU有优势,但是即使这样,还是会有GPU和内存之间的数据通信,会非常耗性能。从内存载入数据到GPU会阻塞CPU,这会导致CPU占用率标高。所以上面某SDK的CPU占用率达到99%导致手机直接要冷却才能使用,也是这一步的处理没处理好。

这一步如果想要在低端机上依然有很强的表现,完全依赖OpenGL渲染是不行的,因为它的渲染是耗时的,谷歌和苹果据说也在计划废弃OpenGL ES和EAGL。那么像贴纸SDK内部使用了新一代渲染框架Vulkan,将会增强单OpenGL框架的性能表现。

封装层就很好理解了,既然是SDK,就要有API接口让实现业务逻辑的同行进行调用,并且在各平台上最好接口统一和日志。这一层上,安卓是Java,iOS是OC或者Swift,Win是C/C++,Unity是C#,并不统一,所以要依据不同平台进行接口封装。这一层要做好OpenGL上下文、线程的处理,否则调用时很容易出现白屏,闪屏等现象。

今天讲的都是美颜SDK从技术层面的剖析,不懂技术的无需继续跟读云播网络科技美颜SDK开发者后续的技术博文。也可以直接搜索肌柒相机公众号下载demo,进行技术交流和对接。