视频编码器的智能化 视频编码器软件( 四 )


2.5码率自适应算法优化

视频编码器的智能化 视频编码器软件

文章插图


这个可能跟编码算法的关系可能就不大了,它是用来做码率自适应算法的 。之前快手发表了一个很好的论文,专门讲码率自适应算法 。码率自适应其实分两种,一种是Buffer-based,就是基于客户端的播放缓冲区buffer情况决策 。其实都是基于客户端,Rate-based则是基于预测的带宽决策 。基本上基于AI的都是用Buffer-based来做这个事情的,这个是说客户端会去看自己的当前buffer的缓存区,当缓存区比较小的时候,说明带宽其实不够,所以会把bitrate调小,buffer比较大的时候说明带宽很高,那又会把bitrate调高 。基于这样一个决策 。
但是这个决策往往很多时候会失败,因为它这时候没办法预测下一次网络的带宽是什么样的情况,可能就会想这种情况下就基于强化学习的算法来做一个码率自适应的ABR的算法优化 。
左边就是一种类型的强化学习的算法,它是做Actor和Critic的一个算法,Actor它会根据不同的策略take action,会进入不同的state,critic会根据不同的state和action去打分,然后告诉Actor你下一次要怎么做,基本上是这样一个做法 。


3. 软硬件实现


后面讲的是我们的本行,我们的软硬件的实现是怎么做的 。


视频编码器的智能化 视频编码器软件

文章插图


NETINT其实实在这个月,我们开始开放给客户正式的测试,就是我们新一代的Quadra的芯片 。
3.1硬件架构

视频编码器的智能化 视频编码器软件

文章插图


这个硬件架构比较简单 。我们这个Quadra的芯片是为了编解码专门设计的一个芯片,我们一开始的目的是做硬件编解码,当然之前三年在跟客户交流的业务沟通过程中,我们发现了除了编解码之外我们还需要加一些其他的硬件模块,所以我们在里面会加入一个NPU,也会有Audio DSP来做视、音频的编解码,除了这个,还有2D的引擎来做旋转、缩放、加水印这些硬件加速的工作 。Host端这边沿用上一代产品的NVM标准的存储协议来交互 。
3.2软件架构

视频编码器的智能化 视频编码器软件

文章插图
【视频编码器的智能化 视频编码器软件】

这是它的软件架构,这样做的好处是底层为Quadra FW,用户端是不需要装驱动的,可以使用标准的Open Source NVMe驱动,无论是Linux、Windows还是Android系统 。并且基本适配于所有的CPU和OS,包括国产的一些OS,因为它们都有NVMe的存储驱动;在此之上我们会提供一个libnetint的API库,主要做一些不同实例的管理、参数的设置;最上层会支持FFmpeg的框架来调用 。编解码是这样的一个架构,AI也是一样的,因为我们的AI是为了服务编解码的,所以我们会在FFmpeg中加入一些Filter,来做AI的计算 。


视频编码器的智能化 视频编码器软件

文章插图


这个是我们之前设计的一个方法,其实不仅仅是NPU,CPU也是一样的,我们应该如何最小化CPU的负载,所有我们有一个Fire and Forget 机制,即后置PC在准备完一些cmdbuf,打给NPU以后是不会再作等待的,是一个异步的调用 。直到NPU有一些中断过来时,后置PC才会做这些回调的处理 。


视频编码器的智能化 视频编码器软件

文章插图


如图是整个数据流,Stream进来后,通过PCIe NVMe Interface,其中所有的东西都是在我们的芯片当中完成的,从Decoder开始到缩放,到AI-engine,计算完成后再Encoder,最后出去的是一个Stream Out,在这中间是完全不需要CPU参与,也不需要和主机进行交互的 。


4. 优势场景


接下来会介绍到我们认为的基于ASIC的硬件编码,在哪些场景下比较具有优势 。


视频编码器的智能化 视频编码器软件

文章插图


对于我们来说,首先要解决的问题是确定我们到底要做强编码的产品还是强AI的产品?本次分享的主要是AI辅助编码,对于我们来说,还是以编码为主,AI来做辅助,这也就牵扯到芯片中到底要有多大的AI算力来配多大的编码密度 。因为芯片是一个面积和功耗强相关的东西,当我们将功耗控制到一定程度时可以做高密度的使用 。目前我们Quadra单卡的功耗是在25W以下,这意味着可以做成u.2的形式,之前我们有配置服务器多的时候可以插24张卡,形成一个高密度编码的整机的服务器,所以对于我们来说,最终答案是选择提供合适的AI算力,主要强调编码功能 。