When transcoding, PMS not using nvenc for encoding, but does use nvdec for decoding

Server Version#: 1.20.2.3343
Player Version#: 4.34.4

Hi. I made a post on reddit but figured it would probably be smart to make one here. I’ve taken a lot of the narrative and tried to distill this post down to the bare bones.

The long and the short of it is this. When transcoding in general, but I’ll specifically talk about HEVC, PMS correctly uses nvdec to decode the HEVC stream, but fails to encode using nvenc.

I’m using nvidia-docker2 with cuda 11.1 and nvidia drivers version 455.23.05. I’m using the linuxserver plex image. From within that container I can run nvidia-smi and it shows it is working and the correct version. I did turn on verbose and debug logs. I won’t post the entirety here, but a small relevant snippet. I hope that’s OK.

Sep 26, 2020 12:42:21.724 [0x7f0fe27fc700] DEBUG - [Transcode] Codecs: testing h264_nvenc (encoder)
Sep 26, 2020 12:42:21.725 [0x7f0fe27fc700] DEBUG - [Transcode] Codecs: hardware transcoding: testing API nvenc
Sep 26, 2020 12:42:21.725 [0x7f0fe27fc700] DEBUG - [Transcode] [FFMPEG] - Loaded lib: libcuda.so.1
...
Sep 26, 2020 12:42:21.788 [0x7f0fe27fc700] ERROR - [Transcode] [FFMPEG] - Cannot load libnvidia-encode.so.1
Sep 26, 2020 12:42:21.788 [0x7f0fe27fc700] ERROR - [Transcode] [FFMPEG] - The minimum required Nvidia driver for nvenc is 418.30 or newer
Sep 26, 2020 12:42:21.788 [0x7f0fe27fc700] VERBOSE - [Transcode] [FFMPEG] - Nvenc unloaded
Sep 26, 2020 12:42:21.806 [0x7f0fe27fc700] WARN - [Transcode] Codecs: avcodec_open2 returned -1 for encoder 'h264_nvenc'

It is telling me the minimum required nvidia driver is 418.30, but I am running 455.23.05

What is the issue here, exactly? Do I need to downgrade my nvidia drivers to something closer to 418.30? Is the docker image I’m using messed up some how?

edit:

I’ve also just tried with the official plex docker image:

nvidia-docker run \
-d \
--name plex \
-e TZ="America/Los_Angeles" \
-e PLEX_CLAIM="claim-xxxxx" \
-e ADVERTISE_IP="http://192.168.1.6:32400/" \
-e PLEX_UID=10010 \
-e PLEX_GID=10005 \
-e ALLOWED_NETWORKS=192.168.1.0/24 \
-e CHANGE_CONFIG_DIR_OWNERSHIP=false \
-p 32400:32400/tcp \
-p 3005:3005/tcp \
-p 8324:8324/tcp \
-p 32469:32469/tcp \
-p 1900:1900/udp \
-p 32410:32410/udp \
-p 32412:32412/udp \
-p 32413:32413/udp \
-p 32414:32414/udp \
-h plex.example.com \
-v ${PWD}/config:/config \
-v ${PWD}/tmp:/tmp \
-v /mnt/btrfs/media/plex/Movies:/data/Movies \
-v /mnt/btrfs/media/plex/TV\ Shows:/data/TV\ Shows \
-v /mnt/btrfs/media/plex/Pre\ Roll:/data/Pre\ Roll \
-v /dev/shm:/transcode \
--gpus all \
plexinc/pms-docker:latest;

And it doesn’t seem to want to use nvdec even.

From within the container, if I run nvidia-smi, I get what is expected except that it won’t show me the cuda version, but it did in the linuxserver container:

root@plex:/# nvidia-smi
Sat Sep 26 13:49:23 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.23.05    Driver Version: 455.23.05    CUDA Version: N/A      |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 1650    On   | 00000000:28:00.0 Off |                  N/A |
| 21%   37C    P8     4W /  75W |      1MiB /  3911MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Yes. It’s (probably not the smartest) on the same drive as my system install is. It’s able to transcode audio with other codecs just fine as well, so I do not believe there’s an issue with not being able to execute the codecs.

do you “believe” or did you verify it?

administrator@server:/opt/docker/plex/config$ ./test.sh
I can execute
administrator@server:/opt/docker/plex/config$ docker exec -it plex bash
root@plex:/# cd config/
root@plex:~# ls
Library  test.sh
root@plex:~# ./test.sh
I can execute
root@plex:~# cat test.sh
#!/usr/bin/env bash

echo "I can execute";
root@plex:~#

Is there a better way to verify?

Look in fstab at the mount point.

UUID=372fd917-225a-4694-8402-06e4bc614209 / ext4 errors=remount-ro 0 1

I solved the issue by uninstalling everything nvidia on my system and then manually installing the 450.66 drivers downloaded from nvidia’s website, then reinstalling nvidia-docker2.

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.