直播美颜SDK从技术层面如何自行实现

当下直播、短视频、视频社交等成为了疫情期间爆发式增长的软件产品,各家平台不管是出于提升用户体验,还是女主播对于美颜的依赖和要求,都已经必备了美颜功能。美颜SDK功能也从原先基础的美白磨皮,发展到现在的美型、道具,甚至比如有类似三只松鼠的企业IP动漫形象虚拟主播。在这些酷炫的效果背后,离不开强大渲染能力,所以我们各大平台极需要一个底层渲染框架来支撑我们的平台发展。那么如何自主开发一个这样的美颜渲染框架,也简称直播美颜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渲染是不行的,因为它的渲染是耗时的,谷歌和苹果据说也在计划废弃OpenGLES和EAGL。那么像我们萌图SDK内部使用了新一代渲染框架Vulkan,将会增强单OpenGL框架的性能表现。

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

今天讲的都是美颜SDK从技术层面的剖析,不懂技术的无需继续跟读后续技术博文,只需能读完此文知道怎么选择美颜SDK即可。技术人才,想自己实现的,


转载请注明:http://www.aierlanlan.com/grrz/4048.html