/ffmpeg-mlu-docker-image

Build docker images for [ffmpeg-mlu](https://github.com/Cambricon/ffmpeg-mlu).

Primary LanguageShell

FFmpeg-MLU环境搭建与验证

该教程仅仅用于学习,打通流程; 不对效果负责,不承诺商用。

1. 概述

本工具集主要基于Docker容器进行FFmpeg-MLU环境搭建与验证。力求压缩寒武纪FFmpeg-MLU环境搭建与功能验证的时间成本, 以便快速上手寒武纪FFmpeg-MLU。

ffmpeg-mlu

说明:

基于寒武纪® MLU硬件平台,寒武纪 FFmpeg-MLU使用纯C接口实现硬件加速的视频编解码。

1.1. 硬件环境准备

名称 数量 备注
开发主机/服务器 一台 主流配置即可;电源功率按需配置;PCIe Gen.3 x16/Gen.4 x16
MLU270/MLU370 一套 二选一, 尽量避免混插混用

1.2. 软件环境准备

名称 版本/文件 备注
Linux OS Ubuntu16.04/Ubuntu18.04/CentOS7 宿主机操作系统
以下为MLU270软件依赖包
Driver_MLU270 neuware-mlu270-driver-dkms_4.9.8_all.deb 手动下载
CNToolkit_MLU270 cntoolkit_1.7.5-1.ubuntu16.04_amd64.deb 手动下载
CNCV_MLU270 cncv_0.4.602-1.ubuntu16.04_amd64.deb 手动下载
以下为MLU370软件依赖包
Driver_MLU370 cambricon-mlu-driver-ubuntu18.04-dkms_5.10.22_amd64.deb 手动下载
CNToolkit_MLU370 cntoolkit_3.7.2-1.ubuntu18.04_amd64.deb 手动下载
CNCV_MLU370 cncv_2.3.0-1.ubuntu18.04_amd64.deb 手动下载
FFmpeg-MLU FFmpeg-MLU 自动下载
FFmpeg FFmpeg 自动下载

以上软件包涉及FTP手动下载的,可下载到本地dependent_files目录下,方便对应以下步骤中的提示操作。

以上软件包也可关注微信公众号 【 AIKnight 】, 发送关键字 FFmpeg-MLU 自动获取,获取后放置到本地dependent_files目录下,方便对应以下步骤中的提示操作。

AIKnight公众号

1.3. 资料下载

MLU开发文档: https://developer.cambricon.com/index/document/index/classid/3.html

Neuware SDK: https://cair.cambricon.com/#/home/catalog?type=SDK%20Release

其他开发资料, 可前往寒武纪开发者社区注册账号按需下载。也可在官方提供的专属FTP账户指定路径下载。

2. 目录结构

当前仓库默认基于Docker 进行FFmpeg-MLU 环境搭建与验证。按照以下章节步骤即可快速实现FFmpeg-MLU环境搭建与验证

.
├── build-image-ffmpeg-mlu.sh   #此脚本用于编译Docker 镜像用于搭建FFmpeg-MLU 环境
├── clean.sh                    #清理Build出来的临时目录或文件,包括镜像文件,已加载的镜像,已加载的容器等
├── dependent_files             #此目录主要用于存储仓库所需依赖文件
│   └── README.md
├── docker                      #此目录主要用于存储编译Docker 镜像及验证FFmpeg-MLU 所需依赖文件
│   ├── build-ffmpeg-mlu.sh     #此脚本用于编译FFmpeg-MLU 及相关依赖项, 也可用于裸机下环境搭建
│   ├── clean.sh                #清理当前目录下新编译生存的Docker 镜像文件
│   ├── Dockerfile.16.04        #用于编译Docker 镜像的Dockerfile 文件
│   ├── Dockerfile.18.04        #用于编译Docker 镜像的Dockerfile 文件
│   ├── install_cntoolkit.sh    #安装cntoolkit脚本
│   ├── pip.conf                #切换python的pip源
│   ├── pre_packages18.04.sh    #安装基于操作系统所需依赖包, 也可用于裸机下环境搭建
│   ├── pre_packages.sh         #安装基于操作系统所需依赖包, 也可用于裸机下环境搭建
│   ├── requirements.txt        #requirements文件
│   ├── sources_18.04.list      #Ubuntu18.04 sources文件
│   └── sources_16.04.list      #Ubuntu16.04 sources文件
├── load-image-ffmpeg-mlu.sh    #加载Docker 镜像
├── README.md                   #README
├── res                         #资源图库
├── run-container-ffmpeg-mlu.sh #启动Docker 容器
├── save-image-ffmpeg-mlu.sh    #导出镜像文件,实现镜像内容持久化
├── sync.sh                     #同步[dependent_files] 到临时目录[ffmpeg-mlu]
├── test                        #测试FFmpeg-MLU 相关功能目录
│   ├── api                     #API方式测试
│   ├── cmd                     #命令方式测试
│   ├── data                    #测试数据
│   └── README.md
└── tools                       #常用工具存放目录

如需在裸机HOST上进行环境搭建, 也可以利用docker目录以下脚本实现快速搭建。

.
├── docker
│   ├── build-ffmpeg-mlu.sh     #此脚本用于编译FFmpeg-MLU 及相关依赖项, 也可用于裸机下环境搭建
│   ├── pre_packages.sh         #安装基于操作系统所需依赖包, 也可用于裸机下环境搭建
│   ├── pre_packages18.04.sh    #安装基于操作系统所需依赖包, 也可用于裸机下环境搭建
│   ├── sources_18.04.list      #Ubuntu18.04 sources文件
│   └── sources_16.04.list      #Ubuntu16.04 sources文件

3. 代码下载

git clone https://github.com/CambriconKnight/ffmpeg-mlu-docker-image.git

4. 编译镜像

#编译 ffmpeg-mlu 镜像
./build-image-ffmpeg-mlu.sh

编译镜像实例

ffmpeg-mlu_build_100ms

5. 加载镜像

#加载Docker镜像
./load-image-ffmpeg-mlu.sh

6. 启动容器

#启动Docker容器
./run-container-ffmpeg-mlu.sh
# 安装第三方库,根据实际网络环境情况,需要一定安装时间
cp -rvf /home/share/docker/pre_packages18.04.sh /root/ffmpeg-mlu
cd /root/ffmpeg-mlu
./pre_packages18.04.sh
# 编译ffmpeg-mlu
cp -rvf /home/share/docker/build-ffmpeg-mlu.sh /root/ffmpeg-mlu
cd /root/ffmpeg-mlu
./build-ffmpeg-mlu.sh MLU370

编译FFMpeg-MLU实例

build-ffmpeg-mlu

7. 测试验证

以下测试验证步骤都是基于Docker容器内环境.

7.1. MLU解码

#基于 FFMPEG 命令行方式验证多路并行解码, 可用于上手阶段压测MLU板卡硬件解码能力.
cd /home/share/test/cmd
./test-ffmpeg-mlu-cmd-decode.sh

MLU解码实例-解码128路高清视频

test-ffmpeg-mlu-cmd-decode

7.2. MLU编码

#基于 FFMPEG 命令行方式验证多路并行编码, 可用于上手阶段压测MLU板卡硬件编码能力.
cd /home/share/test/cmd
./test-ffmpeg-mlu-cmd-encode.sh

MLU编码实例-编码24路高清视频

test-ffmpeg-mlu-cmd-encode

7.3. MLU转码

#基于FFMPEG转码有两种方式
#1、命令行方式
cd /home/share/test/cmd
./test-ffmpeg-mlu-cmd.sh
#2、API接口调用方式
cd /home/share/test/api
./test-ffmpeg-mlu-api.sh

8. 保存镜像

保存镜像,供后续环境变更直接使用。

./save-image-ffmpeg-mlu.sh

保存镜像实例

[username@worker1~/nfs/github/ffmpeg-mlu-docker-image]$sudo ./save-image-ffmpeg-mlu.sh
[sudo] password for username:
[# Docker images:
username/ubuntu18.04-ffmpeg-mlu    v1.15.0  ec2351bca63c   About an hour ago   3.59GB
   Images does not exist!
[# Docker container:
4f833ee85d89   username/ubuntu18.04-ffmpeg-mlu:v1.15.0    "/bin/bash"    58 minutes ago   Exited (0) 19 seconds ago   container-ubuntu18.04-ffmpeg-mlu-v1.15.0-username
[# Commit docker container:
sha256:a9823f8021cb33f8dba7238699152e70c398f4367267363da0c2cf91103e1441
   Completed!
[# Docker images:
username/ubuntu18.04-ffmpeg-mlu    v1.15.0-20231121191123    a9823f8021cb   1 second ago    6.02GB
username/ubuntu18.04-ffmpeg-mlu    v1.15.0    ec2351bca63c   About an hour ago   3.59GB
[# Save docker image:
-rw------- 1 root root 5.7G Nov 21 19:14 image-ubuntu18.04-ffmpeg-mlu-v1.15.0-20231121191123.tar.gz  Completed!
[username@worker1~/nfs/github/ffmpeg-mlu-docker-image]$