一、基础镜像和生成容器
pytorch/pytorch :1.13.1-cuda11.6-cudnn8-devel
生成容器,一定要加NVIDIA_DRIVER_CAPABILITIES=compute,utility,video,graphics,否则侯建无法推流,报错缺少编码之类的。
docker run -it --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video,graphics --shm-size 8g -P --name ffmpeg_torch --env LANG="C.UTF-8" -v `pwd`:/host pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel
二、安装基础的库
一定要装上,基本都有用,省的后面报各式各样的错
删除自带的ffmpeg,在conda里
rm -r /opt/conda
apt update
apt install libx264-dev libx265-dev libass-dev build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev libtool-bin pkg-config libfdk-aac-dev libssl-dev libass-dev libsdl2-dev -y
三、安装nv-codec-headers
make & make install
四、安装ffmpeg
./configure --prefix=/usr/local/ffmpeg --enable-openssl --disable-x86asm --enable-static --enable-shared --enable-ffplay --enable-gpl --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libass --enable-libfreetype --enable-pthreads --enable-cuda --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-libnpp --enable-nonfree --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
make & make install
五、修改系统路径文件
vim .bashrc
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/root/anaconda3/etc/profile.d/conda.sh" ]; then
. "/root/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/root/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig
export PATH=$PATH:/usr/local/ffmpeg/bin/
export LD_LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/ffmpeg/lib
这里面把anconda的路径也加上了
六、还有可能出现的问题
6.1 镜像提交的时候,没有问题,在镜像保存的时候报错:(可能是之前删除了系统自带的ffmpeg)
Error response from daemon: open /var/lib/docker/overlay2merged/opt/conda/bin/ffmpeg: no such file or directory
解决方法:
docker system prune --all
systemctl restart docker
这一步是清除无用的容器和容器,及一部分层,小心,如果镜像没有对应的容器,就会别删掉。
本次就是这样,不小删除所有镜像和容器,然后有重新拉取镜像、安装容器、配置ffmpeg,
docker commit提交容器,docker save保存镜像就没有问题,具体原因未知。
6.2 验证成功
推流测试:
ffmpeg -re -i ${video} -y -an -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -r 25 -g 25 -b:v 5000k -c:v h264_nvenc -bufsize 5000k -pix_fmt yuv420p -tune ll -f flv ${url}
其中video、url是自己的是视频和推流地址。
注意此时:
在容器内容执行 nvidia-smi,并不能显示ffmpeg的进程;但在主机的nvidia-smi命令中可以体现如下:
最后一个关于软件的问题,
相关软件放在了自己的百度网盘/software,没有公开