视频转码

一、示例简介

1. 应用场景

传统视频转码技术主要应用领域是数字电视广播和数字媒体前端处; 互联网时代中,视频娱乐市场以内容为王,能够实时转换任意格式的视频内容是未来市场发展的一个核心趋势。海量的视频数据内容需要海量的计算能力,CPU计算资源宝贵,继续使用CPU进行视频处理操作不但难以满足市场需求,甚至逐渐暴露出低效率和高成本的弊端,所以用硬件实现编解码、转码等是非常必要的。

2. 实现方案

为了适应市场的各方面需求,以及为客户提供便捷易上手的解决方案,同时为展示寒武纪智能加速卡的功能和性能,实现了三种视频转码解决方案。

 

二、方案优势

1. 使用寒武纪智能处理卡,为端、云侧推理提供的强大运算能力支撑,并具备视频解码功能。

2. 基于寒武纪硬件加速编解码SDK(cncodec)以第三方库的方式进行开发,可以根据具体场景方便地调节与选择,具有很高的扩展性。

3. 直接调用寒武纪运行时库(CNRT),具有很高的执行效率。

4. 可与寒武纪AI平台同时开发,实现视频转码和AI的高度结合与集成。

 

三、适配规格

1. 硬件平台

寒武纪MLU270系列智能处理卡

寒武纪 MLU270采用寒武纪MLUv02架构,可支持视觉、语音、自然语言处理以及传统机器学习等多样化的人工智能应用,更为视觉应用集成了充裕的视频和图像编解码硬件单元。

MLU270集成了寒武纪在处理器架构领域的一系列创新性技术,处理非稀疏深度学习模型的理论峰值性能提升至上一代思元100的4倍,达到128TOPS(INT8);同时兼容INT4和INT16运算,理论峰值分别达到256TOPS和64TOPS;支持浮点运算和混合精度运算。  

最低配置

8张MLU270对应总共不少于16个CPU核心
配置时服务器需采用Balanced拓扑

不低于2倍加速卡缓存容量的系统内存,256GB

建议配置

8张MLU270对应总共不少于32个CPU核心
配置时服务器需采用Balanced拓扑

不低于3倍加速卡缓存容量的系统内存,384GB

4张MLU270对应总共不少于16个CPU核心
配置时服务器需采用Balanced拓扑

不低于3倍加速卡缓存容量的系统内存,192GB

 

  案例展示

服务器厂商

型号

高度

CPU平台

MLU板卡

插卡数

Inspur

NF5468M5

4U

2* Intel Xeon Scalable Processor

MLU270-X5K

8

NF2180M3

2U

FT2000plus

MLU270-A4K

4

GreatWall

DF720

2U

FT2000plus

MLU270-A4K

2

 

2. 软件环境

依赖寒武纪驱动(Cambricon Driver),寒武纪软件(Cambricon Neuware)中的编解码库(CNCodec)、运行时库CNRT、CNDev和CNDrv等。

 

四、功能介绍

视频转码的系统用例图,如下图所示:

通过系统用例图可发现本系统的主要实现了如下功能:

  • 将视频源数据进行硬件解码;

  • cvt/scale/AI inference;

  • 将视频源数据进行硬件编码     

 

五、实现方案

转码一共有三种方案:

(1)基于FFMpeg-MLU的转码方案;

(2)基于CNStream的转码方案;

(3)基于CNCodec的转码库;

基于CNStream的转码方案主要是CNStream SDK实现转码的操作,具体实现可参考视频结构化中的实现方案,这里不详细叙述;

基于CNCodec的转码库主要是基于CNCodec SDK的原生接口进行实现,需要对CNCodec的具体接口以及实现原理较熟悉,这里也不再详细叙述;

基于FFMpeg-MLU的转码方案主要是将CNCodec SDK集成到原生开源的FFMpeg中,基于原生FFMpeg丰富的生态及便捷的使用接口,但是底层基于MLU硬件实现。这里主要介绍FFMpeg-MLU转码方案。

FFMpeg-MLU优点:

  • FFMpeg是业界使用最广泛的转码平台,无需改变现有的工作流;

  • 使用解码返回Host的架构,可以广泛使用当前已经存在的filter;

  • 广泛的demo程序可以使用,方便验证底层硬件;

  • 可使用FFmpeg中的filter进行端对端1:N编码或1:N转码视频硬件加速通道;

  • 可直接输出YUV,与寒武纪AI能力无缝结合,非常容易集成以下增强功能:

    1. 视频缩放,旋转,色彩变换

    2. 服务器端广告插入

    3. 视频水印,裁剪

    4. 视频去隔行

    5. 视频拼接

    6. 流媒体应用开发

    7. 其他图像视频增强应用

 

1. 转码框架一:

使用硬件解码器与编码器,在解码器与编码器之间,直接连接一个scale resize 算子,算子直接与解码器绑定,算子直接输出到目标尺寸,无需再使用cpu resize操作,然后再做编码操作。

 

2. 转码框架二:

使用硬件解码器与编码器,在解码器与编码器之间,直接连接一个scale resize 算子,算子直接与编码器绑定,算子直接输出到目标尺寸,然后直接做编码操作。

 

3. 转码框架三:

使用硬件解码器与编码器,在解码器与编码器之间,直接连接一个scale resize 算子,算子作为独立的filter模块,算子直接输出到目标尺寸,然后直接做编码操作。

 

4. 转码框架四(与AI联用):

前后处理以filter的形式集成;

推理以filter的形式集成,filter进行离线与在线的推理;

可使用原生命令行操作,也可以基于API开发;

需要丰富的前后处理hwfilter。

 

六、效果展示

1. 实现1920x1080的视频转为352x288:

通过命令行实现:

./ffmpeg -re -y -c:v h264_mludec -i res_4.h264  -s 352x288 -c:v h264_mluenc -b:v 32k -rc cbr -qmin 1 -qmax 39 -bf 4 -g 50  cif.h264

1920x1080  --> 352x288 

 

2. 实现多路视频拼接成一路视频:

通过命令行实现:

./ffmpeg -y -c:v h264_mludec -i <input_1> -i <input_2> -i <input_3> -i <input_4> -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS,scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS,scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1[tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v h264_mluenc out.mp4

 

3. 实现rtsp拉流/转码/rtmp推流:

通过命令行实现:

./ffmpeg  -re -y -stimeout 5000000 -rtsp_transport tcp -c:v h264_mludec -i rtsp://10.100.9.75:554/jellyfish-3-mbps-hd-h264.mkv -s 253x288 -vcodec copy -acodec copy -c:v h264_mluenc -f flv -y rtmp://10.100.8.47:554/live/test

 

七、相关资源

您可以访问Github上的开源仓库:https://github.com/Cambricon/ffmpeg-mlu

申 请 试 用