Hello,
i’m using a NVIDIA Quadro P2200 and the latest ubuntu linux to transcode multiple Multicast Streams into HLS. I tried different Versions of the NVidia Driver. The latest one and right now i’m on 440.33.01. Headless. The Transcoding works flawless with CPU Encoding and Libx264. But when i switch to cuda 2 of 3 processes will deadlock with a time. I opend three bash shells and made a screencast to show you the problem. At minute six you will notice that the first stream will stop doing anything. https://www.youtube.com/watch?v=QOaf7v_Gwwk
Because i’m using scale_npp, i build ffmpeg by my own:
./configure --enable-libx264 --enable-cuvid --enable-gpl --enable-libnpp --enable-cuda --disable-cuda-sdk --enable-nonfree --extra-cflags=-I/usr/local/cuda-10.2/include --extra-ldflags=-L/usr/local/cuda-10.2/lib64 && make -j 8
I tried different combinations of cuda and driver versions and the behavior was everywhere the same. I also tried different ffmpeg commands with the same result. How can i get HLS encoding working? One single transcoding process working. If i have more than one ffmpeg process all will fail until one single process who will still be working. With another words all the other transcoding processes seems to deadlocking. I looked into the thread stack with gdb -p pid, but it did not help. How to fix that issue?
ffmpeg version N-97495-g2594f6a362 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9 (Ubuntu 9.2.1-9ubuntu2)
configuration: --enable-libx264 --enable-cuvid --enable-gpl --enable-libnpp --enable-cuda --disable-cuda-sdk --enable-nonfree --extra-cflags=-I/usr/local/cuda-10.2/include --extra-ldflags=-L/usr/local/cuda-10.2/lib64
libavutil 56. 43.100 / 56. 43.100
libavcodec 58. 82.100 / 58. 82.100
libavformat 58. 42.101 / 58. 42.101
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 79.100 / 7. 79.100
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Hyper fast Audio and Video encoder
exec $FFMPEG_PATH
-vsync 0
-loglevel debug
-threads:v 1
-threads:a 1
-filter_threads 1
-thread_queue_size 1024
-hwaccel cuda
-hwaccel_device 0
-hwaccel_output_format cuda
-deint adaptive
-i “udp://$MULTICAST_ADDRESS:$PORT”
-filter_complex “[v:0]split=4[temp1][temp2][source][temp3];[temp1]scale_npp=858:480[480p];[temp2]scale_npp=640:360[wide360p];[temp3]scale_npp=426:240[240p]”
-g 50 -sc_threshold 0
-map [wide360p]
-preset medium
-c:v:0 h264_nvenc
-preset fast
-profile:v baseline
-b:v:0 600k
-bufsize 24k
-minrate 400k -maxrate 600k
-map [480p]
-c:v:1 h264_nvenc
-preset medium
-profile:v baseline
-b:v:1 1000k
-bufsize 56k
-minrate 800k -maxrate 1600k
-preset fast
-map [source]
-c:v:2 h264_nvenc
-preset medium
-profile:v baseline
-preset fast
-b:v:2 3600k
-minrate 2000k -maxrate 4000k
-bufsize 144k
-map [240p]
-c:v:3 h264_nvenc
-preset medium
-profile:v baseline
-zerolatency 1
-preset fast
-b:v:3 400k
-bufsize 16k
-map a:0
-c:a aac
-b:a 128k
-ac 2
-map a:1
-c:a aac
-b:a 96k
-ac 2
-f hls
-hls_time 4
-hls_list_size 0
-hls_flags append_list
-hls_allow_cache 0
-hls_playlist_type event
-master_pl_name $MASTER_PLAYLIST_NAME
-var_stream_map “a:0,agroup:audio,default:yes,language:DEU a:1,agroup:audio,language:FR v:0,agroup:audio v:1,agroup:audio, v:2,agroup:audio, v:3,agroup:audio”
$SEGMENT_FILE_NAME
$MEDIA_PLAYLIST_PREFIX