环境搭建 Docker内FFmpeg GPU加速

参考文档
这篇文章不是在docker内的
编译过程写的非常详细了,亲测可以使用
注意ffmpeg版本要3.x, 我用4.3 4.2都没有成功

0.安装依赖

yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel

1. 首先宿主机要有显卡驱动

这里省略掉可

2. 再 安装nvidia-docker

3. 再下载 nvidia的基础镜像

选择合适的版本,我选择的是
nvidia/cuda:10.2-cudnn7-devel-centos7
devel字样的 ,里面才有nvcc -V命令
10.2cuda版本

4. 编写Dockerfile

具体如何下载源码包,可以到最上面的参考文档博客中找
https://www.jianshu.com/p/59da3d350488

或者我的分享连接
链接: https://pan.baidu.com/s/1bDxEWuJvD9Mlj79zHHbWFA 密码: f4an

FROM nvidia/cuda:10.2-cudnn7-devel-centos7

MAINTAINER tenten  "vtenten@163.com"

WORKDIR /work

RUN mkdir ffmpeg_source

# 更换yum源
COPY ./docker_env/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum makecache && yum install -y  autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel zip unzip

# 编译 nasm-2.13.02
ADD ./ffmpeg_souRUN cd ffmpeg_source/nasm-2.13.02 && ./autogen.sh && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" && make && make install

# 设置bin目录 lib
ENV PATH="/root/bin:${PATH}"
ENV LD_LIBRARY_PATH="/root/ffmpeg_build/lib"
ENV PKG_CONFIG_PATH="/root/ffmpeg_build/lib/pkgconfig"

# 编译 yasm-1.3.0
ADD ./ffmpeg_source/yasm-1.3.0.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/yasm-1.3.0 && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" && make && make install

# 编译 x264
ADD ./ffmpeg_source/x264.tar.gz  ./ffmpeg_source/rce/nasm-2.13.02.tar.bz2 ./ffmpeg_source/
RUN cd ffmpeg_source/x264  && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" --enable-static && make && make install

# 编译 libfdk_acc
ADD ./ffmpeg_source/fdk-aac.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/fdk-aac && autoreconf -fiv && ./configure --prefix="/root/ffmpeg_build" --disable-sharedi && make && make install

# 编译 libmp3lame
ADD ./ffmpeg_source/lame-3.100.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/lame-3.100 && ./configure --prefix="/root/ffmpeg_build" --bindir="/root/bin" --disable-shared --enable-nasm && make && make install

# 编译 nv-codec-headers
ADD ./ffmpeg_source/nv-codec-headers.tar.gz  ./ffmpeg_source/
RUN cd ffmpeg_source/nv-codec-headers && make PREFIX="/root/ffmpeg_build" BINDDIR="/root/bin" && make install PREFIX="/root/ffmpeg_build" BINDDIR="/root/bin"

# 编译 ffmpeg
ADD ./ffmpeg_source/ffmpeg-3.3.8.tar.bz2  ./ffmpeg_source/
RUN cd ffmpeg_source/ffmpeg-3.3.8 && ./configure --prefix="/root/ffmpeg_build" --pkg-config-flags="--static"  \
    --extra-cflags="-I/root/ffmpeg_build/include -I/usr/local/cuda/include" \
    --extra-ldflags="-L/root/ffmpeg_build/lib -L/usr/local/cuda/lib64"  \
    --extra-libs=-lpthread  --extra-libs=-lm  --bindir="/root/bin" \
    --enable-gpl  --enable-libfdk_aac  --enable-libmp3lame  --enable-libx264  --enable-nonfree \
    --enable-cuda \
    --enable-cuvid \
    --enable-nvenc \
    --enable-libnpp \
    && make && make install && hash -r

测试

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i 1.mp4 -c:v h264_nvenc -b:v 2048k -vf scale_npp=1280:-1 -y out.mp4

错误信息

使用测试命令,可能会报如下错误
Cannot load libnvcuvid.so.1
Cannot load libnvidia-encode.so.1
因为docker容器内没有这两个文件,经过我查找发现,在宿主机中有,我们需要拷贝今容器内,然后再作一个软连接。

ubuntu 系统

# 在这些目录下查找上述文件
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

centos系统

# 在下面这个目录里
/lib64/nvidia

找到这两个文件,我们发现,他们其实是软连接
我们ll命令文件,找到原始文件,
libnvcuvid.so.440.100
libnvidia-encode.so.440.100
后面的尾号可能不一样,它是显卡驱动版本号,
我们把这个拷贝到docker中,然后软连接

# 宿主机
/usr/lib/x86_64-linux-gnu/libnvcuvid.so.440.100
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so.440.100

# 拷贝到docker这里
/lib64/libnvcuvid.so.440.100
/lib64/libnvidia-encode.so.440.100


# docker内软连接
ln -s /lib64/libnvcuvid.so.440.100 /lib64/libnvcuvid.so.1
ln -s /lib64/libnvidia-encode.so.440.100 /lib64/libnvidia-encode.so.1

# 然后上面的操作,也最好写在dockerfile内
已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页