Construir aceleração de hardware da versão docker ffmpeg gpu para processar dados de fluxo de vídeo
Escreva um Dockerfile com o seguinte conteúdo:
DA nvidia / cuda: 10.1-devel-ubuntu16.04
WORKDIR / tmp
ADICIONE build-ffmpeg.sh build-ffmpeg.sh #Esta
etapa é principalmente para puxar o código-fonte oficial quando é lento para adicionar o diretório a ele
#ADD ffmpeg ffmpeg
RUN chmod + x build-ffmpeg.sh
RUN apt- get update -y && apt-get install -y git build-essential yasm cmake libtool libc6 libc6-dev descompactar wget libnuma1 libnuma-dev frei0r-plugins-dev libgnutls28-dev libass-dev \
libmp3lame-dev libopencore-amrnb-dev libopencore- amrwb- dev libopus-dev librtmp-dev libsoxr-dev libspeex-dev libtheora-dev libvo-amrwbenc-dev libvorbis-dev libvpx-dev libwebp-dev \
libx264-dev libx265-dev libxvidcore-dev libopenjpeg-dev
RUN ./build- ffmpeg. sh
Escreva o script de construção, o conteúdo é o seguinte:
build-ffmpeg.sh
#! / bin / bash
#git clone https://github.com/ffmpeg/ffmpeg.git
# 国内 源
git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
git checkout release / 3.4
./configure --enable-nonfree - -disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags = -Ilocal / include --enable-gpl --enable-version3 --disable-debug - -dis
capaz-ffplay --disable-indev = sndio --disable-outdev = sndio --enable-fontconfig --enable-frei0r --enable-gnutls --enable-grey --enable-libass --enable-libfreetype --enable -libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libopenjpeg --enable-librtmp --enable-libsoxr --enable-libspeex --enable- libtheora --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --extra-cflags = -I / usr / local / cuda / include --extra-ldflags = -L / usr / local / cuda / lib64
make -j 8
make install
Crie a imagem:
docker build. -T ffmpeg-nvidia-gpu
Criar contêiner
docker run --name ffmpeg-gpu --runtime = nvidia -e NVIDIA_DRIVER_CAPABILITIES = computação, utilitário, vídeo -v $ (pwd): / data --net = host -i
td ffmpeg-nvidia-gpu / bin / bash
Entrar no teste do recipiente
docker exec -it ffmpeg-gpu / bin / bash
Comando de teste:
ffmpeg -y -vsync 0 -hwaccel cuvid -i "/tmp/content/input.mp4" -filtro: v hwupload_cuda, scale_npp = w = 576: h = 480: format = yuv420p: interp_algo = lanczos, hwdownload, format = yuv420p -c: uma cópia -c: v h264_nvenc -b: v 5M /tmp/content/output.mp4
ffmpeg -y -vsync 0 -hwaccel cuvid -rtsp_transport tcp -i "rtsp: // admin: [email protected]: 554 / streaming / channels / 1" -filtro: v hwupload_cuda, scale_npp = w = 576: h = 480 : format = yuv420p: interp_algo = lanczos, hwdownload, format = yuv420p -c: uma cópia -c: v h264_nvenc -b: v 5M output.mp4
#Procurei muitas informações. Basicamente, a Internet está processando vídeo. A saída é vídeo, mas a saída não foi encontrada. A aceleração de hardware precisa ser ativada. Como a saída aqui não especifica a codificação de aceleração de hardware, o parâmetro de decodificação - hwaccel cuvid é adicionado Irá relatar um erro
#Depois de ffmpeg -codecs | grep encode query, descobriu-se que a imagem não tem um codificador de aceleração de hardware compatível e só pode ser processada pela cpu
ffmpeg -c: v h264_cuvid -rtsp_transport tcp -i rtsp: // admin: [email protected]: 554 / streaming / channels / 1 -q: v 2 -f image2 -t 01:00:00 -r 5 ./ % 08d.jpg
#Conveniente para jogar em dispositivos móveis
ffmpeg -y -i example.mp4 -c: v h264_nvenc -c: a aac -hls_list_size 0 -hls_time 10 -hls_flags single_file -f hls 1.m3u8
Link de referência:
https://github.com/larry011/docker-ffmpeg-nvidia
https://www.jianshu.com/p/59da3d350488
https://www.jianshu.com/p/c3f4daf2aaa3
https://blog.csdn.net/weixin_34010566/article/details/88902875
https://blog.csdn.net/Q_AN1314/article/details/89435464
https://www.cnblogs.com/shenxingping/p/11387680.html