Giter Site home page Giter Site logo

pabloromeo / clusterplex Goto Github PK

View Code? Open in Web Editor NEW
381.0 381.0 30.0 2.05 MB

ClusterPlex is an extended version of Plex, which supports distributed Workers across a cluster to handle transcoding requests.

License: MIT License

Shell 13.91% JavaScript 82.21% Dockerfile 3.87%
cluster distributed-transcoding docker docker-swarm kubernetes plex plex-media-server swarm transcoding

clusterplex's People

Contributors

auzi68 avatar brandan-schmitz avatar dependabot[bot] avatar margaale avatar pabloromeo avatar robertlestak avatar seang96 avatar seji64 avatar sjdaws avatar somecynic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clusterplex's Issues

Per Worker Stream Limits

Is your feature request related to a problem? Please describe.

No.

Describe the solution you'd like

It would be great to be able to set per worker limits via an environment variable or something. This is great to have if node have varying number of resources and are not identical hardware.

Describe alternatives you've considered
None of the existing worker selection strategies quite fit the use case of nodes with different hardware. All of the existing methods assume you are always using CPU transcodes instead of hardware transcodes (my k8s cluster and my existing Plex server all have GPUs and Plex primarily uses direct play / hardware transcode).

Stream not starting; cwd => "/run/s6/services/plex" or "/config/Library/Application Support/..."

Hello guys,
I am trying now since 6 hours to get the cluster as simple as possible to work, but i doesnt.

Currently I am using this docker-compose.yml (with docker hub image *-amd64-1.2.9):
docker-compose.yml.txt

  • /docker/plex/live/ <-- is the directory, where every persistent data goes
  • /mount/media/Filme <--- all my movies

After starting a movie, plex sends the command to the orchestrator:

plex_1               | Dolby, Dolby Digital, Dolby Digital Plus, Dolby TrueHD and the double D symbol are trademarks of Dolby Laboratories.
plex_1               | Calling external transcoder: /app/transcoder.js
plex_1               | ON_DEATH: debug mode enabled for pid [537]
plex_1               | Setting VERBOSE to ON
plex_1               | Sending request to orchestrator on: http://plex-orchestrator:3500
plex_1               | cwd => "/config/Library/Application Support/Plex Media Server/Cache/Transcode/Sessions/plex-transcode-xf4ofurs5sj3hwfvbn81edps-d373fcf8-f964-4000-8949-b3d9a07586ba"
plex_1               | args => ["-codec:0","h264","-codec:1","eac3_eae","-eae_prefix:1","xf4ofurs5sj3hwfvbn81edps_","-ss","0","-noaccurate_seek","-analyzeduration","20000000","-probesize","20000000","-i","/data/movies/Murder Mystery 2019/Murder.Mystery.2019.German.DL.1080p.WebHD.x264-GSG9/Murder.Mystery.2019.German.DL.1080p.WebHD.x264-GSG9.mkv","-map","0:0","-metadata:s:0","language=eng","-codec:0","copy","-filter_complex","[0:1] aresample=async=1:ocl='stereo':rematrix_maxval=0.000000dB:osr=48000[0]","-map","[0]","-metadata:s:1","language=ger","-codec:1","aac","-b:1","256k","-f","dash","-seg_duration","5","-init_seg_name","init-stream$RepresentationID$.m4s","-media_seg_name","chunk-stream$RepresentationID$-$Number%05d$.m4s","-window_size","5","-delete_removed","false","-skip_to_segment","1","-time_delta","0.0625","-manifest_name","http://10.100.10.1:32400/video/:/transcode/session/xf4ofurs5sj3hwfvbn81edps/d373fcf8-f964-4000-8949-b3d9a07586ba/manifest?X-Plex-Http-Pipeline=infinite","-avoid_negative_ts","disabled","-map_metadata","-1","-map_chapters","-1","dash","-map","0:3","-metadata:s:0","language=ger","-codec:0","ass","-f","segment","-segment_format","ass","-segment_time","1","-segment_header_filename","sub-header","-segment_start_number","0","-segment_list","http://10.100.10.1:32400/video/:/transcode/session/xf4ofurs5sj3hwfvbn81edps/d373fcf8-f964-4000-8949-b3d9a07586ba/seglist?stream=subtitles&X-Plex-Http-Pipeline=infinite","-segment_list_type","csv","-segment_list_size","5","-segment_list_separate_stream_times","1","-segment_format_options","ignore_readorder=1","-segment_list_unfinished","1","-fflags","+flush_packets","sub-chunk-%05d","-start_at_zero","-copyts","-vsync","cfr","-y","-nostats","-loglevel","verbose","-loglevel_plex","verbose","-progressurl","http://10.100.10.1:32400/video/:/transcode/session/xf4ofurs5sj3hwfvbn81edps/d373fcf8-f964-4000-8949-b3d9a07586ba/progress"]
plex_1               | env => {"PUID":"1000","PLEX_ARCH":"amd64","HOSTNAME":"28fa04dde4eb","LANGUAGE":"en_US.UTF-8","TRANSCODE_OPERATING_MODE":"both","ORCHESTRATOR_URL":"http://plex-orchestrator:3500","PWD":"/config/Library/Application Support/Plex Media Server/Cache/Transcode/Sessions/plex-transcode-xf4ofurs5sj3hwfvbn81edps-d373fcf8-f964-4000-8949-b3d9a07586ba","PLEX_DOWNLOAD":"https://downloads.plex.tv/plex-media-server-new","PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS":"6","NVIDIA_DRIVER_CAPABILITIES":"compute,video,utility","PMS_IP":"10.100.10.1","TZ":"Europe/London","PLEX_MEDIA_SERVER_USER":"abc","HOME":"/root","LANG":"en_US.UTF-8","PGID":"1000","TERM":"xterm","PLEX_MEDIA_SERVER_INFO_VENDOR":"Docker","PLEX_MEDIA_SERVER_HOME":"/usr/lib/plexmediaserver","X_PLEX_TOKEN":"efYQfzCaA2Rr_m1nfYab","PLEX_MEDIA_SERVER_INFO_MODEL":"x86_64","SHLVL":"0","LD_LIBRARY_PATH":"/usr/lib","PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION":"5.11.0-31-generic","LIBVA_DRIVERS_PATH":"/usr/lib/plexmediaserver/lib/dri","PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR":"/config/Library/Application Support","CWD":"/","PATH":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","VERSION":"docker","EAE_ROOT":"/config/Library/Application Support/Plex Media Server/Cache/Transcode/Sessions/EasyAudioEncoder","DEBIAN_FRONTEND":"noninteractive","PLEX_MEDIA_SERVER_INFO_DEVICE":"Docker Container (LinuxServer.io)","FFMPEG_EXTERNAL_LIBS":"/config/Library/Application\\ Support/Plex\\ Media\\ Server/Codecs/73e06c8-3759-linux-x86_64/","TRANSCODER_VERBOSE":"1"}

So the cwd (current working directory) is: /config/Library/Application Support/Plex Media Server/Cache/Transcode/Sessions/plex-transcode-xf4ofurs5sj3hwfvbn81edps-d373fcf8-f964-4000-8949-b3d9a07586ba
which is also accessible through worker1, because I'm sharing the config directory with plex and worker1
/docker/plex/live/config:/config

Worker1 is able to start transcoding and outputs its files to
/config/Library/Application Support/Plex Media Server/Cache/Transcode/Sessions/plex-transcode-xf4ofurs5sj3hwfvbn81edps-d373fcf8-f964-4000-8949-b3d9a07586ba
plex_files
(just an example, not that plex-transcode-xf4of... directory)

But the files dont get published by plex to the webbrowser
plex not starting

Now I read that we should change the transcoder output to /tmp/transcode or /transcode via the plex ui
#41 (comment)
But this changes the cwd to "/run/s6/services/plex", so the worker can not start to transcode (the directory does not exists, even it would exist. it would be written to that directory, not to /tmp/transcode

Does someone has an idea, how to get it working? Or does someone has a working docker-compose for testing?

Dynamic Allocation

Clusterplex is a great project just from reading the documentation. Wouldn't it be great if there was a mechanism to automatically deploy new workers as needed and destroy when not needed. This would allow, once we reach a certain number of tasks per worker a new worker is deployed. There could be some default settings like

DEFAULT_WORKERS - Minimal amount of workers to start
MAX_JOBS_WORKER - Maximum number of sessions per node that can be overwritten by node

Then, each node if they can support more or less the global MAX_JOBS_WORK then

NODE_JOBS_WORKER - Specific node maximum jobs

Then, the orchestrator can keep track of tasks on each node, and when a certain treshold has been met, jobs will not be sent to that node, and when the overall threshold of all nodes has been met, a new worker is spawned. This worker, once demand has went below threshold, would be killed.

THis could be as easy as increasing the number of deployed instances of a specific service. The start-up commands for the new services would be configured and used.

Clusterplex Worker Protocol Documentation -- Allow 3rd party workers to integrate with Clusterplex

Is your feature request related to a problem? Please describe.
I'm currently trying to setup a Clusterplex instance in Kubernetes using NVIDIA Jetson Nanos. NVIDIA in their infinite wisdom does not support normal hardware acceleration for video and audio codecs (i.e. CUDA) on the Tegra GPUs as they have their own dedicated hardware for video encoding and decoding. This also requires a special version of FFMPEG that cannot be bootstrapped in the normal Linux Server Plex Container as again in NVIDIA's infinite wisdom uses Ubuntu 18.04 as the most up to date supported version for the Jetson and when trying to compile the Jetson Supported FFMPEG in the container, the built binary fails to start due to incompatibles between Ubuntu LTS releases.

My solution is writing a compatible worker that is domain specific for the Jetson (https://github.com/donicrosby/clusterplex-jetson) so that other people can use your awesome software to build really powerful plex servers with these powerful boards. Because the Jetson supports HVEC and x264 on hardware with specific codecs the worker would replace the -codec:v of the transcoder with the hardware accelerated ones so that none of the transcoding is done via the CPU.

Describe the solution you'd like
Just a simple README on what JSON objects need to be passed to the Orchestrator over the websocket and when possibly some diagrams (I know that's asking for a lot...) so that people who have specific hardware like the Jetson can use Clusterplex workers on them.

Describe alternatives you've considered
Add support in the worker to pass either a YAML or JSON config file with a "swap-out" mapping of video and audio codecs, this would mean the worker would look for the -codec:v and -codec:a options in the command and replace them with the possibly hardware accelerated ones. This would allow for 3rd party implementations of FFMPEG to be pointed in containers after installing your worker.js and it should "just work"

Additional context
None

Issue transcoding at the worker

Describe the bug
A clear and concise description of what the bug is.

After some troubleshooting, I finally managed to get call to the worker but the worker has trouble running the transcoder. I logged into the worker and I was able to see it is there. This seems to be the last step if you got any ideas that would be great.

To Reproduce
Steps to reproduce the behavior:
Unsure how to reproduce as it may be specific to my docker swarm stack. These plex files for each worker are locally on their machines.

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Orchestrator screenshot
image

Worker specific error I located
image

Desktop (please complete the following information):
Docker nodes are running on proxmox cluster.

Additional context

I am feeling it has to the with the how the URLs was parsed because I also had issues mounting the transcoder with the recommened swarm template and had to revert to your worker template and that seem download all the codecs properly to the shared folder.

Again I am unsure where the problem lies, but the worker gets the call, but maybe there is trouble loading the file or providing the right url ?

I don't know if its relevant but the worker nodes don't seem to have the plex config fully installed ?
image

Verbose logging

Describe the bug
When i deploy in docker swarm with docker mods, the movie doesn't start, but in the dashboard section of plex, the time of the movie is already running. How can i debug this?

yaml

version: '3.8'
services:
  plex:
    image: ghcr.io/linuxserver/plex
    environment:
      DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_dockermod:latest"
      VERSION: docker
      PUID: 1000
      PGID: 1000
      TZ: Europe/Berlin
      NVIDIA_VISIBLE_DEVICES: all
      NVIDIA_DRIVER_CAPABILITIES: all
      ORCHESTRATOR_URL: http://plex-orchestrator:3500
      PMS_SERVICE: plex     # This service. If you disable Local Relay then you must use PMS_IP instead
      PMS_PORT: "32400"
      TRANSCODE_OPERATING_MODE: remote #(local|remote|both)
      TRANSCODER_VERBOSE: "1"   # 1=verbose, 0=silent
      LOCAL_RELAY_ENABLED: "1"
      LOCAL_RELAY_PORT: "32499"
    volumes:
      - /mnt/docker/plex/config:/config
      - /mnt/transcode:/transcode  #glusterfs volume on both docker hosts
      - /mnt/merge/:/cloud	   #media folder
      - /etc/localtime:/etc/localtime:ro
      - /mnt/docker/plex/tmp:/tmp	#ramdisk too small when generating thumbnails etc. for new media
    networks:
      - pirate
    deploy:
      placement:
        constraints: [node.labels.type == cpu]
      mode: replicated
      replicas: 1


  plex-orchestrator:
    image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
    deploy:
      mode: replicated
      replicas: 1
      update_config:
        order: start-first
      placement:
        constraints: [node.labels.type == cpu]
    healthcheck:
      test: curl -fsS http://localhost:3500/health > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 30s
    environment:
      TZ: Europe/Berlin
      LISTENING_PORT: 3500
      WORKER_SELECTION_STRATEGY: "LOAD_RANK" # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
    volumes:
      - /etc/localtime:/etc/localtime:ro

  plex-worker:
    image: ghcr.io/linuxserver/plex:latest
    hostname: "plex-worker-{{.Node.Hostname}}"
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.labels.type == gpu]
    environment:
      DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest"
      NVIDIA_VISIBLE_DEVICES: all
      NVIDIA_DRIVER_CAPABILITIES: all
      VERSION: docker
      PUID: 1000
      PGID: 1000
      TZ: Europe/Berlin
      LISTENING_PORT: 3501      # used by the healthcheck
      STAT_CPU_INTERVAL: 2000   # interval for reporting worker load metrics
      ORCHESTRATOR_URL: http://plex-orchestrator:3500
      EAE_SUPPORT: "1"
      FFMPEG_HWACCEL: "true"
    healthcheck:
      test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 240s
    volumes:
      - /mnt/transcode:/transcode        #glusterfs volume
      - /mnt/merge:/cloud                   #media folder

networks:
  pirate:
    driver: overlay
    driver_opts:
      com.docker.network.driver.mtu: 1200

Expected behavior
the worker should transcode

Server (please complete the following information):

  • OS: Ubuntu 22.04.3 LTS

Additional context
I can see that there is a sub-folder created in the /transcode directory, but there are no files inside.

Error in container start up

Currently getting this error when the containers start.
standard_init_linux.go:219: exec user process caused: exec format error
I’m using the example compose that was linked in the readme with modified bindings.
I’m also running this on unraid, but that shouldn’t affect any docker processes

Problem reaching plex from workers

Describe the bug
It is giving me the following error from the worker container:

[tcp @ 0x7fcf32b59640] Failed to resolve hostname plex: Try again

To Reproduce
Steps to reproduce the behavior:

  1. Go to plex main server
  2. Click on any video
  3. Check worker container log
  4. See error

Expected behavior
It does the transcoding

Additional context
I am using a machine (low power) with plex + clusterplex_dockermod and also clusterplex_orchestrator. I have commented out port 1900 (it causes conflict when starting the container)
Another machine (high power) with plex + clusterplex_worker_dockermod.

The config is copied from the main server to the worker, at least for now, to make it easier to configure the /transcode path.

Main machine has a shared folder which worker connects to using cifs for data and transcode folders.

I can add whatever needed info here. What could be the issue? I see no reference to plex as it is in the configuration files

Documentation Update for PMS_IP variable

In fact, if you want to give it a shot, just set the PMS_IP value to the string "plex". Since "plex" is the service name in the stack it should resolve to it's IP.

I should actually explain it better in the docs. The PMS_IP is actually sent over to the orchestrator and it's used by the worker to later report transcode status back to the actual Plex server. So technically it's just the location at where to report back, and in the case of Swarm, that can be any node in the cluster. It's used to replace a hardcoded 127.0.0.1 specified by Plex in the transcode instructions. Come to think of it, maybe I can find a workaround so that this setting isn't even mandatory and resolved internally to the IP assigned by docker to the "plex" service. And just have the PMS_IP as an override in case someone runs Plex OUTSIDE of the cluster.

Originally posted by @pabloromeo in #123 (comment)

help configuring server and workers

Hello, I would like to know if with the solution presented here it is possible to create a plex cluster where the main machine will have the plex server and orchestrator and in the workers for transcode use hardware (quick sync or nvidia cards)
I have tried several ways and I am not getting it to work properly.
And also if the main machine needs to have physical hardware equal to what will be used in the workers.

ex: if I use nvidia in the workers do I have to have an nvidia card in the main one?
And for Quick Sync too?
I am using ubuntu 20.04 and docker swarm.
My comand is : docker stack deploy --compose-file docker-compose.yaml plex
But i cant add devices to use hardware.

Thanks

workers getting 404 when downloading codecs

My workers are getting a 404 when trying to download the codecs.

I did make sure my workers were able to get to the internet:
root@plex-worker-docker2:/# wget google.com --2022-03-21 17:08:44-- http://google.com/ Resolving google.com (google.com)... 74.125.21.139, 74.125.21.101, 74.125.21.138, ... Connecting to google.com (google.com)|74.125.21.139|:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://www.google.com/ [following] --2022-03-21 17:08:44-- http://www.google.com/ Resolving www.google.com (www.google.com)... 172.217.164.68, 2607:f8b0:4002:815::2004 Connecting to www.google.com (www.google.com)|172.217.164.68|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html’

Worker logs:
_plex_plex-worker.yiwdx3jmyl9ltwrobwnc6ttgg.2vvb3kyfzlcqfwksj1boktur4_logs.txt

When trying to manually download the link (https://downloads.plex.tv/codecs//linux-x86_64-standard/libxbin_decoder.so) I get page not found and redirected to https://www.plex.tv/media-server-downloads/

ENOENT on Worker

OUTPUT from Worker logs:

##################################################
ON_DEATH: debug mode enabled for pid [8361]
Computed CPU ops => 763017
Initializing Worker 7a3d7913-ba42-4318-bbef-dd70ef23fafa|US4-Plex2
Worker listening on port 3501
Worker connected on socket GF3epqq76pvLIxZEAABx
Received task request
Transcoding failed:
{ Error: spawn /usr/lib/plexmediaserver/Plex Transcoder ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn /usr/lib/plexmediaserver/Plex Transcoder',
path: '/usr/lib/plexmediaserver/Plex Transcoder',
spawnargs:
[ '-codec:0',
'h264',
'-codec:1',
'ac3',
'-analyzeduration',
'20000000',
'-probesize',
'20000000',
'-i',
'/storage/public/Movies/Movies/20,000 Leagues Under the Sea (1954)/20,000 Leagues Under the Sea (1954).mkv',
'-filter_complex',
'[0:0]scale=w=720:h=282[0];[0]format=pix_fmts=yuv420p|nv12[1]',
'-map',
'[1]',
'-codec:0',
'libx264',
'-crf:0',
'18',
'-maxrate:0',
'1686k',
'-bufsize:0',
'3372k',
'-r:0',
'23.975999999999999',
'-preset:0',
'veryfast',
'-x264opts:0',
'subme=2:me_range=4:rc_lookahead=10:me=dia:no_chroma_me:8x8dct=0:partitions=none',
'-force_key_frames:0',
'expr:gte(t,n_forced3)',
'-filter_complex',
'[0:1] aresample=async=1:ocl='stereo':rematrix_maxval=0.000000dB:osr=48000[2]',
'-map',
'[2]',
'-metadata:s:1',
'language=eng',
'-codec:1',
'aac',
'-b:1',
'217k',
'-f',
'dash',
'-seg_duration',
'3',
'-init_seg_name',
'init-stream$RepresentationID$.m4s',
'-media_seg_name',
'chunk-stream$RepresentationID$-$Number%05d$.m4s',
'-window_size',
'5',
'-delete_removed',
'false',
'-skip_to_segment',
'1',
'-time_delta',
'0.0625',
'-manifest_name',
'http://192.168.116.147:32400/video/:/transcode/session/bos1g6uj5nmgmr0x2x4xtan2/ee6e5090-687b-4e0f-8a9b-e2ddc3342240/manifest?X-Plex-Http-Pipeline=infinite',
'-avoid_negative_ts',
'disabled',
'-map_metadata',
'-1',
'-map_chapters',
'-1',
'dash',
'-start_at_zero',
'-copyts',
'-vsync',
'cfr',
'-y',
'-nostats',
'-loglevel',
'verbose',
'-loglevel_plex',
'verbose',
'-progressurl',
'http://192.168.116.147:32400/video/:/transcode/session/bos1g6uj5nmgmr0x2x4xtan2/ee6e5090-687b-4e0f-8a9b-e2ddc3342240/progress' ] }
Orchestrator notified
Removing process from taskMap
Received task request
Transcoding failed:
{ Error: spawn /usr/lib/plexmediaserver/Plex Transcoder ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn /usr/lib/plexmediaserver/Plex Transcoder',
path: '/usr/lib/plexmediaserver/Plex Transcoder',
spawnargs:
[ '-codec:0',
'h264',
'-codec:1',
'ac3',
'-ss',
'120',
'-analyzeduration',
'20000000',
'-probesize',
'20000000',
'-i',
'/storage/public/Movies/Movies/20,000 Leagues Under the Sea (1954)/20,000 Leagues Under the Sea (1954).mkv',
'-filter_complex',
'[0:0]scale=w=720:h=282[0];[0]format=pix_fmts=yuv420p|nv12[1]',
'-map',
'[1]',
'-codec:0',
'libx264',
'-crf:0',
'18',
'-maxrate:0',
'1686k',
'-bufsize:0',
'3372k',
'-r:0',
'23.975999999999999',
'-preset:0',
'veryfast',
'-x264opts:0',
'subme=2:me_range=4:rc_lookahead=10:me=dia:no_chroma_me:8x8dct=0:partitions=none',
'-force_key_frames:0',
'expr:gte(t,n_forced
3)',
'-filter_complex',
'[0:1] aresample=async=1:ocl='stereo':rematrix_maxval=0.000000dB:osr=48000[2]',
'-map',
'[2]',
'-metadata:s:1',
'language=eng',
'-codec:1',
'aac',
'-b:1',
'217k',
'-f',
'dash',
'-seg_duration',
'3',
'-init_seg_name',
'init-stream$RepresentationID$.m4s',
'-media_seg_name',
'chunk-stream$RepresentationID$-$Number%05d$.m4s',
'-window_size',
'5',
'-delete_removed',
'false',
'-skip_to_segment',
'41',
'-time_delta',
'0.0625',
'-manifest_name',
'http://192.168.116.147:32400/video/:/transcode/session/bos1g6uj5nmgmr0x2x4xtan2/c12e8fcb-e6c3-4f24-9822-600d969b8b25/manifest?X-Plex-Http-Pipeline=infinite',
'-avoid_negative_ts',
'disabled',
'-map_metadata',
'-1',
'-map_chapters',
'-1',
'dash',
'-start_at_zero',
'-copyts',
'-y',
'-nostats',
'-loglevel',
'verbose',
'-loglevel_plex',
'verbose',
'-progressurl',
'http://192.168.116.147:32400/video/:/transcode/session/bos1g6uj5nmgmr0x2x4xtan2/c12e8fcb-e6c3-4f24-9822-600d969b8b25/progress' ] }
Orchestrator notified
Removing process from taskMap
################################################

I have tried the following:
Verified permission on the executable : /usr/lib/plexmediaserver/Plex Transcoder.
Verified that plex is being installed to the correct path IE the /usr/lib/plexmediaserver/Plex Transcoder exists.
Simplified path to transcoder to /app/transcoder AND updated config variables with exact same results.
Initiated remote transcode using 'testpayload' argument which is successful.
Initiated remote transcode with minimal arguments IE "-i /movies/movie.mp4": The transcoder is executing but fails due to missing arguments.

I think this is related to how node is parsing one of the current Plex arguments being passed. as simplifying the argument seems to get the transcoder to execute on the worker but if an entire normal argument set from Plex is used the worker is unable to execute the transcoder correctly and thinks the path to the executable does not exist.

force certain IP to certain worker and vise versa

I am looking at this project as a alt from Unicorn Transcoder. I had to modify code to allow me to set when certain IPs play content, it would go to certain transcoders/workers. This was done as my main server is in a datacenter but I have a copy of all the content locally at home and have a small system that transcodes locally instead of pulling from the internet.

Reviewing the code, I wouldn't know where to start or if this is possible but I am asking here to see if it be possible to build but based on the style I am not sure?

Docker Compose failed to read dockerfile

Describe the bug
I have been at this for a month now trying to get this all to work and met with problem after problem.
This is probably not an issue with the actual code/repo but with my setup.
I copied the docker-compose.yaml file and adjusted to my setup but when I try to run docker compose, i'm met with this error:

failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount3198982547/Dockerfile: no such file or directory

Here is my docker-compse.yaml file:

version: '3.8'

services:
  plex:
    container_name: plex
    build:
      context: ./pms
      dockerfile: ./extended-image/Dockerfile-development
    environment:
      VERSION: docker
      PUID: 1000
      PGID: 1000
      TZ: America/Chicago
      ORCHESTRATOR_URL: http://plex-orchestrator:3500
      PMS_SERVICE: plex     # This service. If you disable Local Relay then you must use PMS_IP instead
      PMS_PORT: "50000"
      TRANSCODE_OPERATING_MODE: both #(local|remote|both)
      TRANSCODER_VERBOSE: "1"   # 1=verbose, 0=silent
      LOCAL_RELAY_ENABLED: "1"
      LOCAL_RELAY_PORT: "32499"
    healthcheck:
      test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 30s
    volumes:
      - /srv/dockerdata/plex/config:/config
      - /mnt/share/treshare/transcode/plex:/transcode
      - /mnt/share/treshare/Torrents/Completed/TV:/data/tv
      - /mnt/share/treshare/Torrents/Completed/Movies:/data/movies
    ports:
      - 32499:32499   # LOCAL_RELAY_PORT
      - 50000:32400
      - 3005:3005
      - 8324:8324
      - 1900:1900/udp
      - 32410:32410/udp
      - 32412:32412/udp
      - 32413:32413/udp
      - 32414:32414/udp

  plex-orchestrator:
    container_name: plex-orchestrator
    build: ./orchestrator
    healthcheck:
      test: curl -fsS http://localhost:3500/health > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 30s
    environment:
      TZ: America/Chicago
      LISTENING_PORT: 3500
      WORKER_SELECTION_STRATEGY: "LOAD_RANK" # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
    volumes:
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 3500:3500

  plex-worker:
    build:
      context: ./worker
      dockerfile: ./extended-image/Dockerfile-development
    deploy:
      mode: replicated
      replicas: 1
    environment:
      VERSION: docker
      PUID: 1000
      PGID: 1000
      TZ: America/Chicago
      LISTENING_PORT: 3501      # used by the healthcheck
      STAT_CPU_INTERVAL: 2000   # interval for reporting worker load metrics
      ORCHESTRATOR_URL: http://plex-orchestrator:3500
      EAE_SUPPORT: "1"
    healthcheck:
      test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 240s
    volumes:
      - /srv/dockerdata/plex/codecs:/codecs
      - /mnt/share/treshare/Torrents/Completed/TV:/data/tv
      - /mnt/share/treshare/Torrents/Completed/Movies:/data/movies
      - /mnt/share/treshare/transcode/plex:/transcode
volumes:
  plex-config:
  transcode-volume:
  codecs:

Here are the directories I have under /srv/dockerdata/plex:
image

To Reproduce
Steps to reproduce the behavior:

  1. Create a docker-compose.yaml file with code above
  2. try to run `docker compuse up' on it

Expected behavior
Should build and run all the services

Desktop (please complete the following information):

  • OS: Ubuntu 22.04

Video never plays when using remote transcoding, despite worker logs

Remote transcoding appears to be working (judging by the logs on the worker), but video never plays. The player (both in app and browser) just sits there spinning.

If I switch to local transcoding only, it plays just fine.

Logs from worker:

[AVIOContext @ 0x7f77319999c0] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00474' starts with packet stream:0 pts:2518133 pts_time:2518.13 frame:75544
*** 1 dup!
    Last message repeated 43 times
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7736596680] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00474' count:474 ended
[AVIOContext @ 0x7f773c7e3ec0] Statistics: 0 seeks, 2 writeouts
[segment @ 0x7f7736ba8040] Opening 'chunk-00475' for writing
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7731999600] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00475' starts with packet stream:0 pts:2526467 pts_time:2526.47 frame:75794
*** 1 dup!
    Last message repeated 16 times
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7731998a00] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00475' count:475 ended
[AVIOContext @ 0x7f773c7e3ec0] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] Opening 'chunk-00476' for writing
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7736596680] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00476' starts with packet stream:0 pts:2528967 pts_time:2528.97 frame:75869
*** 1 dup!
    Last message repeated 42 times
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7731999dc0] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00476' count:476 ended
[AVIOContext @ 0x7f773c7e3ec0] Statistics: 0 seeks, 3 writeouts
[segment @ 0x7f7736ba8040] Opening 'chunk-00477' for writing
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7731998a00] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00477' starts with packet stream:0 pts:2537300 pts_time:2537.3 frame:76119
*** 1 dup!
    Last message repeated 31 times
*** 2 dup!
*** 1 dup!
    Last message repeated 9 times
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7736596680] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00477' count:477 ended
[AVIOContext @ 0x7f773c7e3ec0] Statistics: 0 seeks, 3 writeouts
[segment @ 0x7f7736ba8040] Opening 'chunk-00478' for writing
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f7731999600] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00478' starts with packet stream:0 pts:2545633 pts_time:2545.63 frame:76369
*** 1 dup!
Killing child process for task 878ccd44-3ed3-4b1f-944b-8f4264adeb00
Removing process from taskMap
    Last message repeated 20 times
[segment @ 0x7f7736ba8040] Opening 'http://mediaserver:32400/video/:/transcode/session/658qje7co7d2xuiq4syamcso/dfadd804-7aed-407e-9556-c7fa5618b665/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f7734f4b100] Starting connection attempt to 172.16.50.119 port 32400
[tcp @ 0x7f7734f4b100] Successfully connected to 172.16.50.119 port 32400
[AVIOContext @ 0x7f77319988c0] Statistics: 0 seeks, 1 writeouts
[segment @ 0x7f7736ba8040] segment:'chunk-00478' count:478 ended
[AVIOContext @ 0x7f773c7e3ec0] Statistics: 0 seeks, 2 writeouts
frame=76524 fps=159 q=-1.0 Lsize=N/A time=00:42:29.69 bitrate=N/A dup=13576 drop=0 speed=5.31x    
video:157307kB audio:47330kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Input file #0 (/mnt/Media/Documentaries/Four Blood Moons (2015)/Four Blood Moons (2015).mkv):
  Input stream #0:0 (video): 62956 packets read (510708041 bytes); 62949 frames decoded; 
  Input stream #0:1 (audio): 109870 packets read (48465734 bytes); 
  Total: 172826 packets (559173775 bytes) demuxed
Output file #0 (chunk-%05d):
  Output stream #0:0 (video): 76524 frames encoded; 76524 packets muxed (161081877 bytes); 
  Output stream #0:1 (audio): 109870 packets muxed (48465734 bytes); 
  Total: 186394 packets (209547611 bytes) muxed
[libx264 @ 0x7f773ad9d600] frame I:541   Avg QP:16.82  size: 24965
[libx264 @ 0x7f773ad9d600] frame P:23295 Avg QP:19.84  size:  4766
[libx264 @ 0x7f773ad9d600] frame B:52688 Avg QP:22.95  size:   694
[libx264 @ 0x7f773ad9d600] consecutive B-frames:  2.9% 13.2%  7.7% 76.1%
[libx264 @ 0x7f773ad9d600] mb I  I16..4: 21.6% 28.2% 50.1%
[libx264 @ 0x7f773ad9d600] mb P  I16..4:  4.2%  6.1%  2.1%  P16..4: 24.6% 11.6%  7.1%  0.0%  0.0%    skip:44.3%
[libx264 @ 0x7f773ad9d600] mb B  I16..4:  0.4%  0.6%  0.1%  B16..8:  7.9%  2.9%  0.4%  direct: 2.5%  skip:85.2%  L0:39.6% L1:39.9% BI:20.5%
[libx264 @ 0x7f773ad9d600] 8x8 transform intra:46.9% inter:32.5%
[libx264 @ 0x7f773ad9d600] coded y,uvDC,uvAC intra: 53.1% 46.9% 15.7% inter: 5.9% 6.3% 0.2%
[libx264 @ 0x7f773ad9d600] i16 v,h,dc,p: 51% 24% 17%  8%
[libx264 @ 0x7f773ad9d600] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 21% 19%  4%  5%  6%  5%  5%  6%
[libx264 @ 0x7f773ad9d600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 28% 20% 11%  6%  7%  8%  7%  7%  6%
[libx264 @ 0x7f773ad9d600] i8c dc,h,v,p: 59% 16% 20%  5%
[libx264 @ 0x7f773ad9d600] Weighted P-Frames: Y:5.4% UV:1.8%
[libx264 @ 0x7f773ad9d600] kb/s:505.19
[AVIOContext @ 0x7f773c7e3c40] Statistics: 560090694 bytes read, 2 seeks
Exiting normally, received signal 15.
Completed transcode
Removing process from taskMap

Possible Plex Update removed required variable for codecs

Describe the bug
When starting a worker container, codecs fail to download as CLUSTERPLEX_PLEX_CODECS_VERSION is undefined in start.sh, this results in broken URLS when trying to fetch codecs from https://downloads.plex.tv/codecs/${CLUSTERPLEX_PLEX_CODECS_VERSION}/${CLUSTERPLEX_PLEX_CODEC_ARCH}/${codec}.so

To Reproduce
Steps to reproduce the behavior:

  1. Start worker container using dockermods configuration

Expected behavior
Codecs to download without 404 errors

Desktop (please complete the following information):

  • OS: Unraid, linux docker
  • Version: 6.10.3

Additional context
I haven't started doing deep dive into the image yet, but reaching out in case I missed something critical, or important that you may have encountered before, if not, was going to fork the repo and do some builds on my own end to see what I could figure out.

Remote transcoding not playing back but still happening

Describe the bug
When remote transcoding, everything seems to be running fine, but the actual pms never plays back content even tho worrkers seem to transcode properly.

To Reproduce
Brand new install with recommended setup, and NFS share mounted across all swarm nodes

Desktop (please complete the following information):

  • Hosts are Ubuntu 20.04
  • Docker Engine 20.10.7

Additional context
When starting a playback that is supposed to be remotely transcoded, web player loads to infinity, while worker is transcoding and orchestrator waits on in progress status :

LOGS FROM PMS :

Calling external transcoder: /app/transcoder.js
ON_DEATH: debug mode enabled for pid [561]
Setting VERBOSE to ON
Sending request to orchestrator on: http://plex-orchestrator:3500
cwd => "/tmp/transcode/Transcode/Sessions/plex-transcode-dgu72pnrfonpbdfugze6624a-0144862e-968f-4e4b-8e7c-f4b857ba0813"
args => ["-codec:0","hevc","-analyzeduration","20000000","-probesize","20000000","-i","/data/tv/blue.mountain.state.s02e02.the.fingering.webdl-1080p.x265.mkv","-filter_complex","[0:0]scale=w=1920:h=1080[0];[0]format=pix_fmts=yuv420p|nv12[1]","-map","[1]"
,"-codec:0","libx264","-crf:0","16","-maxrate:0","16866k","-bufsize:0","33732k","-r:0","23.975999999999999","-preset:0","veryfast","-x264opts:0","subme=0:me_range=4:rc_lookahead=10:me=dia:no_chroma_me:8x8dct=0:partitions=none","-force_key_frames:0","expr
:gte(t,n_forced*1)","-map","0:1","-metadata:s:1","language=eng","-codec:1","copy","-copypriorss:1","0","-f","dash","-seg_duration","1","-dash_segment_type","mp4","-init_seg_name","init-stream$RepresentationID$.m4s","-media_seg_name","chunk-stream$Represe
ntationID$-$Number%05d$.m4s","-window_size","5","-delete_removed","false","-skip_to_segment","1","-time_delta","0.0625","-manifest_name","http://192.168.1.110:32400/video/:/transcode/session/dgu72pnrfonpbdfugze6624a/0144862e-968f-4e4b-8e7c-f4b857ba0813/m
anifest?X-Plex-Http-Pipeline=infinite","-avoid_negative_ts","disabled","-map_metadata","-1","-map_chapters","-1","dash","-start_at_zero","-copyts","-vsync","cfr","-y","-nostats","-loglevel","verbose","-loglevel_plex","verbose","-progressurl","http://192.
168.1.110:32400/video/:/transcode/session/dgu72pnrfonpbdfugze6624a/0144862e-968f-4e4b-8e7c-f4b857ba0813/progress"]
env => {"PUID":"1000","PLEX_ARCH":"amd64","HOSTNAME":"7e92b15cc140","LANGUAGE":"en_US.UTF-8","ALLOWED_NETWORKS":"192.168.1.0/24","TRANSCODE_OPERATING_MODE":"both","ADVERTISE_IP":"\"http://192.168.1.110,http://192.168.1.111\"","ORCHESTRATOR_URL":"http://p
lex-orchestrator:3500","PWD":"/tmp/transcode/Transcode/Sessions/plex-transcode-dgu72pnrfonpbdfugze6624a-0144862e-968f-4e4b-8e7c-f4b857ba0813","PLEX_DOWNLOAD":"https://downloads.plex.tv/plex-media-server-new","PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS":"6","NVID
IA_DRIVER_CAPABILITIES":"compute,video,utility","PMS_IP":"192.168.1.110","PLEX_PASS":"no","TZ":"Europe/Paris","PLEX_MEDIA_SERVER_USER":"abc","HOME":"/root","LANG":"en_US.UTF-8","PGID":"1000","TERM":"xterm","PLEX_MEDIA_SERVER_INFO_VENDOR":"Docker","PLEX_M
EDIA_SERVER_HOME":"/usr/lib/plexmediaserver","X_PLEX_TOKEN":"Ng6cCEFzXNxM3HeqzoD_","PLEX_MEDIA_SERVER_INFO_MODEL":"x86_64","SHLVL":"0","LD_LIBRARY_PATH":"/usr/lib","PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION":"5.4.0-88-generic","LIBVA_DRIVERS_PATH":"/usr/li
b/plexmediaserver/lib/dri","PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR":"/config/Library/Application Support","CWD":"/","PATH":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","VERSION":"docker","DEBIAN_FRONTEND":"noninteractive","PLEX_MEDIA
_SERVER_INFO_DEVICE":"Docker Container (LinuxServer.io)","FFMPEG_EXTERNAL_LIBS":"/config/Library/Application\\ Support/Plex\\ Media\\ Server/Codecs/be22e26-4019-linux-x86_64/","TRANSCODER_VERBOSE":"1"}
JobPoster connected, announcing
Orchestrator requesting pending work
Sending request to orchestrator on: http://plex-orchestrator:3500

LOGS FROM ORCHESTRATOR :

Setting up websockets
Ready
Server listening on port 3500
Client connected: oK67sucJbsQwocZsAAAB
Registering worker 8eb9e5a4-5fba-4091-86a8-1bbeac1e85f8|plex-worker-cluster01
Registered new worker: 8eb9e5a4-5fba-4091-86a8-1bbeac1e85f8|plex-worker-cluster01
Client connected: Bb20m07I7N83EiCuAAAD
Registering worker bad06902-7ded-4c15-b59b-7168008ee8f5|plex-worker-cluster02
Registered new worker: bad06902-7ded-4c15-b59b-7168008ee8f5|plex-worker-cluster02
Client connected: qU6HO7VqZezNrD2OAAAF
Registered new job poster: bdd2fe9f-3536-4259-bfb1-c065484461dc|7e92b15cc140
Creating single task for the job
Queueing job 30d7ffbc-ac02-4e10-9331-68f6d2a5852a
Queueing task fd7e9be7-cee4-4c40-af0c-5be6ed64bb80
Running task fd7e9be7-cee4-4c40-af0c-5be6ed64bb80
Forwarding work request to bad06902-7ded-4c15-b59b-7168008ee8f5|plex-worker-cluster02
Received update for task fd7e9be7-cee4-4c40-af0c-5be6ed64bb80, status: received
Received update for task fd7e9be7-cee4-4c40-af0c-5be6ed64bb80, status: inprogress

LOGS FROM WORKER :

[Parsed_scale_0 @ 0x7f8eac4db480] w:1920 h:1080 flags:'bilinear' interl:0
Stream mapping:
  Stream #0:0 (hevc) -> scale
  format -> Stream #0:0 (libx264)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[Parsed_scale_0 @ 0x7f8ea8cef140] w:1920 h:1080 flags:'bilinear' interl:0
[graph 0 input from stream 0:0 @ 0x7f8ea8cefc00] w:1920 h:1080 pixfmt:yuv420p10le tb:1/1000 fr:24000/1001 sar:1/1 sws_param:flags=2
[Parsed_scale_0 @ 0x7f8ea8cef140] w:1920 h:1080 fmt:yuv420p10le sar:1/1 -> w:1920 h:1080 fmt:yuv420p sar:1/1 flags:0x2
[libx264 @ 0x7f8eac41d940] using SAR=1/1
[libx264 @ 0x7f8eac41d940] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x7f8eac41d940] profile Main, level 4.1, 4:2:0, 8-bit
[libx264 @ 0x7f8eac41d940] 264 - core 161 - H.264/MPEG-4 AVC codec - Copyleft 2003-2020 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=4 chroma_me=0 trel
lis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=9 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 wei
ghtp=1 keyint=250 keyint_min=23 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=crf mbtree=1 crf=16.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=16866 vbv_bufsize=33732 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
[dash @ 0x7f8eac424040] No bit rate set for stream 0
[dash @ 0x7f8eac424040] Opening 'init-stream0.m4s' for writing
[mp4 @ 0x7f8eac4259c0] Empty MOOV enabled; disabling automatic bitstream filtering
[dash @ 0x7f8eac424040] Representation 0 init segment will be written to: init-stream0.m4s
[dash @ 0x7f8eac424040] No bit rate set for stream 1
[dash @ 0x7f8eac424040] Opening 'init-stream1.m4s' for writing
[mp4 @ 0x7f8eac425380] Empty MOOV enabled; disabling automatic bitstream filtering
[dash @ 0x7f8eac424040] Representation 1 init segment will be written to: init-stream1.m4s
Output #0, dash, to 'dash':
  Metadata:
    encoder         : Lavf58.27.104
    Stream #0:0: Video: h264 (libx264), 1 reference frame, yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 11988 tbn, 23.98 tbc (default)
    Metadata:
      encoder         : Lavc58.52.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 16866000/0/0 buffer size: 33732000 vbv_delay: -1
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp
[AVIOContext @ 0x7f8e9c543400] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7f8eac424040] Opening 'chunk-stream0-00001.m4s.tmp' for writing
[AVIOContext @ 0x7f8e9c543bc0] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7f8eac424040] Opening 'chunk-stream1-00001.m4s.tmp' for writing
[AVIOContext @ 0x7f8e9c543400] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7f8eac424040] Representation 0 media segment 2 written to: chunk-stream0-00001.m4s
[AVIOContext @ 0x7f8e9b1a4d00] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7f8eac424040] Representation 1 media segment 2 written to: chunk-stream1-00001.m4s
[dash @ 0x7f8eac424040] Opening 'http://192.168.1.110:32400/video/:/transcode/session/g1by5i2qpuntsb0sdgyarimg/4405e0c3-d6a8-40b1-8eb9-c0241875322f/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7f8eac41b9c0] Starting connection attempt to 192.168.1.110 port 32400
[tcp @ 0x7f8eac41b9c0] Successfully connected to 192.168.1.110 port 32400
[AVIOContext @ 0x7f8eac43c2c0] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7f8eac424040] Opening 'chunk-stream0-00002.m4s.tmp' for writing
[dash @ 0x7f8eac424040] Opening 'chunk-stream1-00002.m4s.tmp' for writing

And of course the stack file

version: '3.9'

services:
  plex:
    image: ghcr.io/pabloromeo/clusterplex_pms:latest #ghcr.io/linuxserver/plex:latest
    deploy:
      mode: replicated
      replicas: 1
      labels:
          - "traefik.enable=true"
          - "traefik.http.routers.plex.entrypoints=https"
          - "traefik.http.routers.plex.tls=true"
          - "traefik.http.routers.plex.rule=Host(`plextest.ednz.fr`)"
          - "traefik.http.services.plex.loadbalancer.server.port=32400"
    environment:
            #- DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_dockermod:latest
      - VERSION=docker
      - PUID=1000
      - PGID=1000
      - UMASK=002
      - TZ=Europe/Paris
      - ADVERTISE_IP="http://192.168.1.110,http://192.168.1.111"
      - ALLOWED_NETWORKS=192.168.1.0/24
      - PLEX_PASS=no
      - ORCHESTRATOR_URL=http://plex-orchestrator:3500
      - PMS_IP=192.168.1.110
      - TRANSCODE_OPERATING_MODE=remote #(local|remote|both)
      - TRANSCODER_VERBOSE=1   # 1=verbose, 0=silent
    healthcheck:
      test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 30s
    volumes:
      - ./config:/config
      - ./backups:/backups
      - ./tv:/data/tv
      - ./movies:/data/movies
      - ./transcode:/tmp
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 32469:32469
      - 32400:32400
      - 3005:3005
      - 8324:8324
      - 1900:1900/udp
      - 32410:32410/udp
      - 32412:32412/udp
      - 32413:32413/udp
      - 32414:32414/udp
    networks:
      - traefik-public
      - internal

  plex-orchestrator:
    image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
    deploy:
      mode: replicated
      replicas: 1
      update_config:
        order: start-first
    environment:
      - TZ=Europe/Paris
      - STREAM_SPLITTING=OFF # ON | OFF (default)
      - LISTENING_PORT=3500
      - WORKER_SELECTION_STRATEGY=LOAD_CPU # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
    healthcheck:
      test: curl -fsS http://localhost:3500/health > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 30s
    volumes:
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 3500:3500
    networks:
      - internal

  plex-worker:
    image: ghcr.io/pabloromeo/clusterplex_worker:latest #ghcr.io/linuxserver/plex:latest
    hostname: "plex-worker-{{.Node.Hostname}}"
    deploy:
      mode: global
      update_config:
        order: start-first
    environment:
            #- DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest
      - VERSION=docker
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - LISTENING_PORT=3501      # used by the healthcheck
      - STAT_CPU_INTERVAL=2000   # interval for reporting worker load metrics
      - ORCHESTRATOR_URL=http://plex-orchestrator:3500
    healthcheck:
      test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
      interval: 15s
      timeout: 15s
      retries: 5
      start_period: 240s
    volumes:
      - ./codecs:/codecs # (optional, can be used to share codecs)
      - ./tv:/data/tv
      - ./movies:/data/movies
      - ./transcode:/tmp
      - /etc/localtime:/etc/localtime:ro
    networks:
      - internal

networks:
  internal:
    driver: overlay
  traefik-public:
    external: true

All this time the CPU load crearly shows that the worker is in fact transcoding.
Thanks for everything so far this project is insanely interesting !!!

clusterplex_dockermod:latest could not be found on ghcr.io

Hello, I've followed the installation instructions for k8s, and everything seems to be right for me.
But when initializing the cluster-pms pods I get this error:
[mod-init] pabloromeo/clusterplex_dockermod:latest could not be found on ghcr.io

It's a single node k3s on hetzner.
It seems to be a network problem at cluster level, but I confess I don't know where to look for the problem.

It's more a request for help than a bug.
Thank you for your help and this very interesting project.

how to let prometheus know there are metrics to be scanned

I got this working in my cluster. But prometheus doesn't seem to see the metrics. I even added the annotations and still not seeing it. Is there something specific that is needed to get prom to pick up the metrics. I tested and can get to the /metrics page.

Kubernetes Helm Chart

Is your feature request related to a problem? Please describe.

No.

Describe the solution you'd like

It would be great to have a Helm Chart to be able to install the cluster on a Kubernetes cluster.

Describe alternatives you've considered

There could be raw docs on how to install on a Kubernetes cluster as a starting point, but Docker Swarm is not really a viable alternative when you are running a cluster.

Secured connection

First of all, thank you for your project, it's an improvement for my plex server that I was waiting for a long time.
I have been able to dispatch transcoding between 3 node, with VAAPI HW transcoding working.

My only concern is something not in your documentation, and discovered during my tests : It seems we need to accept unsecured connection to our server to permit the worker to communicate with it.
Maybe it's something you could improve ?

I also saw that you were testing a stream splitting feature. Have you had success in this way? That would be really great.

Thank you again and congratulations for this project.

kubernetes / i915 gpu, no hardware acceleration option

I have my cluster configured to run the workers on nodes that have the i915 intel gpu enabled. I have it configured in the resource limits and they are being assigned to the right nodes. But when I watch the gpu usage on the nodes, there is 0 gpu work happening but the cpu's are getting hit hard. In the settings for the clusterplex instance i do not see the option to enable hardware transcoding.

image

Any suggestions?

Transcode not working ? no logs on any node/container

setting up the cluster, everything goes according to plan apparently, I'm using the example config with the custom containers (not the docker mods, tho the mods one have had the same behaviour). the server installs correctly, and I'm seeing :

Worker connected on socket EBKSwQ_lpPPHxRJ5AAAB
Worker connected on socket jzfODhEilMwaWJ7xAAAD
Worker connected on socket het-G-oC57htxvFcAAAF
Worker connected on socket hXDeGp3sXBW5hBHLAAAH
on the workers side

ON_DEATH: debug mode enabled for pid [1]
Initializing orchestrator
Using Worker Selection Strategy: LOAD_RANK
Stream-Splitting: DISABLED
Setting up websockets
Ready
Server listening on port 3500
Client connected: EBKSwQ_lpPPHxRJ5AAAB
Registering worker 3062a4c0-a201-4887-8fa3-de6905787c2b|plex-worker-ubuntu04
Registered new worker: 3062a4c0-a201-4887-8fa3-de6905787c2b|plex-worker-ubuntu04
Client connected: jzfODhEilMwaWJ7xAAAD
Registering worker f96419bd-dcb6-40ed-87bd-8ed1000b0bd1|plex-worker-ubuntu02
Registered new worker: f96419bd-dcb6-40ed-87bd-8ed1000b0bd1|plex-worker-ubuntu02
Client connected: het-G-oC57htxvFcAAAF
Registering worker e2d7ee0f-8a32-438d-a0d0-85a4ae95e539|plex-worker-ubuntu01
Registered new worker: e2d7ee0f-8a32-438d-a0d0-85a4ae95e539|plex-worker-ubuntu01
Client connected: hXDeGp3sXBW5hBHLAAAH
Registering worker 4215fa59-563d-4131-b6c2-87d5fffd5142|plex-worker-ubuntu03
Registered new worker: 4215fa59-563d-4131-b6c2-87d5fffd5142|plex-worker-ubuntu03
on the orchestrator side

[cont-init.d] 60-plex-update: executing...
Docker is used for versioning skip update check
[cont-init.d] 60-plex-update: exited 0.
[cont-init.d] 90-custom-folders: executing...
[cont-init.d] 90-custom-folders: exited 0.
[cont-init.d] 99-custom-scripts: executing...
[custom-init] no custom files found exiting...
[cont-init.d] 99-custom-scripts: exited 0.
[cont-init.d] done.
[services.d] starting services
Starting Plex Media Server.
[services.d] done.
Critical: libusb_init failed
on the server side

but past that no logs whatsoever, trying to play any content results in a playback error as follow:
Error code: s100X (Network)

I think none of the containers are actually talking tho the metrics are showing up just fine. The really weird thing is that there are no logs anywhere.
docker service logs -f --raw plex_plex-{anything} register logs until everything is started then nothing at all.

I'm running a 4 node cluster in Ubuntu 20.04 VMs freshly installed and on a totally normal network.

Thanks in advance for any help you might get me.

Issue with Direct Stream

Hello, I am a bit new to Linux, but I got ClusterPlex setup and working with 8 total servers. I am running into an issue where if a user has Direct Stream enabled, the video will get stuck buffering at 33% until it fails playback.

Direct Play is working fine, but Direct Stream seems to be an issue. When users disable Direct Stream, it seems to resolve the problem. Is this a known issue or is there something I can do to fix this issue?

Show not playing and continues logging

Describe the bug
So when i use this the show does not play however i am not using the PMS in docker but i have a specific VM that has been pre-built and in use for some time. The error i keep seeing in the Orch logs is below. The error comes up for both my 01 and 02 workers.

Client connected: CYRO6j_K8WdQOe4SAAGQ
Client disconnected: tW0yBEgTTd6K-U_uAAGP
Unregistering worker at socket tW0yBEgTTd6K-U_uAAGP
Killing pending tasks for worker: 44558382-25c1-496c-bdf3-2d036fb66506
Unregistering worker 44558382-25c1-496c-bdf3-2d036fb66506|OS-Plex-Cluster_plex-worker-ie01-dnp01
Registering worker 44558382-25c1-496c-bdf3-2d036fb66506|OS-Plex-Cluster_plex-worker-ie01-dnp01
Registered new worker: 44558382-25c1-496c-bdf3-2d036fb66506|OS-Plex-Cluster_plex-worker-ie01-dnp01
Client connected: ooruJyadlQf_jMZaAAGR

To Reproduce
Steps to reproduce the behavior:
This is a fresh install

Expected behavior
When i try and play a movie/show that is transcoding it just keeps refreshing. I can see on the worker node the transcoding is running but not playing, I also see the above logs continue to print on the orch server logs

Screenshots

Desktop (please complete the following information):

  • OS: PMS - CentOS 7, Docker Swarm 19.03.13,
  • Version 7.8, 19.03.13

Additional context
On the client side
[libx264 @ 0x1a3e980] frame P:91 Avg QP:19.88 size: 1915
[libx264 @ 0x1a3e980] frame B:211 Avg QP:21.50 size: 444
[libx264 @ 0x1a3e980] consecutive B-frames: 7.4% 1.9% 7.8% 82.8%
[libx264 @ 0x1a3e980] mb I I16..4: 6.4% 72.2% 21.5%
[libx264 @ 0x1a3e980] mb P I16..4: 4.3% 30.7% 3.5% P16..4: 17.8% 13.4% 6.4% 0.0% 0.0% skip:23.9%
[libx264 @ 0x1a3e980] mb B I16..4: 1.1% 6.3% 0.1% B16..8: 21.4% 4.5% 0.3% direct: 2.9% skip:63.3% L0:29.7% L1:49.5% BI:20.8%
[libx264 @ 0x1a3e980] 8x8 transform intra:79.9% inter:34.8%
[libx264 @ 0x1a3e980] coded y,uvDC,uvAC intra: 46.0% 21.2% 1.6% inter: 6.6% 2.3% 0.0%
[libx264 @ 0x1a3e980] i16 v,h,dc,p: 18% 18% 9% 55%
[libx264 @ 0x1a3e980] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 22% 26% 6% 3% 4% 3% 5% 4%
[libx264 @ 0x1a3e980] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 24% 18% 7% 6% 5% 6% 6% 7%
[libx264 @ 0x1a3e980] i8c dc,h,v,p: 74% 13% 11% 1%
[libx264 @ 0x1a3e980] Weighted P-Frames: Y:20.9% UV:4.4%
[libx264 @ 0x1a3e980] kb/s:183.32
[aac @ 0x1a3fd80] Qavg: 13036.340
[AVIOContext @ 0x17d3940] Statistics: 15709280 bytes read, 4 seeks
Conversion failed!
Completed transcode
Removing process from taskMap
Worker disconnected
Worker connected on socket 6vgDF09QLvYeqseSAAGh

Extra
So as mentioned i have taken the PMS code you have and installed on the my PMS VM, which works when TRANSCODE_OPERATING_MODE = 'local' so that shows your pms code works great for that as it redirects to the local transcoder binary, but for some reason i cannot get the docker worker,orch working correctly..

hello. Thanks for the answer, but there is something I am not understanding or interpreting correctly.

          hello. Thanks for the answer, but there is something I am not understanding or interpreting correctly.

i am using PlexPass

tests how I tried:

test1 :

version: '3.8'

services:
plex:
image: ghcr.io/linuxserver/plex:latest
deploy:
mode: replicated
replicas: 1
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_dockermod:latest"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Europe/London
ORCHESTRATOR_URL: http://192.168.1.10:3500
PMS_SERVICE: 192.168.1.10 # This service. If you disable Local Relay then you must use PMS_IP instead
PMS_PORT: "32400"
TRANSCODE_OPERATING_MODE: remote #(local|remote|both)
TRANSCODER_VERBOSE: "1" # 1=verbose, 0=silent
LOCAL_RELAY_ENABLED: "1"
LOCAL_RELAY_PORT: "32499"
healthcheck:
test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
volumes:
- /media/config:/config
- /media/mydata/Series:/data/tv
- /media/mydata/Movies:/data/movies
- /media/mydata/transcode:/transcode
ports:
- 32499:32499 # LOCAL_RELAY_PORT
- 32400:32400
- 3005:3005
- 8324:8324
- 1900:1900/udp
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
devices:
- /dev/dri:/dev/dri

plex-orchestrator:
image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
deploy:
mode: replicated
replicas: 1
update_config:
order: start-first
healthcheck:
test: curl -fsS http://localhost:3500/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
environment:
TZ: Europe/London
LISTENING_PORT: 3500
WORKER_SELECTION_STRATEGY: "LOAD_RANK" # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- 3500:3500

plex-worker:
image: ghcr.io/linuxserver/plex:latest
hostname: "plex-worker-{{.Node.hostname}}"
deploy:
mode: replicated
replicas: 1
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest"
FFMPEG_HWACCEL: "vaapi"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Europe/London
LISTENING_PORT: 3501 # used by the healthcheck
STAT_CPU_INTERVAL: 2000 # interval for reporting worker load metrics
ORCHESTRATOR_URL: http://192.168.1.10:3500
EAE_SUPPORT: "1"
healthcheck:
test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 240s
volumes:
- /media/codecs:/codecs # (optional)
- /media/mydata/Series:/data/tv
- /media/mydata/Movies:/data/movies
- /media/mydata/transcode:/transcode
devices:
- /dev/dri:/dev/dri

Running : docker-compose up

  • it starts but is in same machine

Running : docker stack deploy --compose-file docker-compose.yaml plexserver

  • to run this command i need to remove
    devices:
    - /dev/dri:/dev/dri
    from server and worker losing gpu transcoding

test2:

i run two docker-compose one on server and other on worker

on Server:

version: '3.8'

services:
plex:
image: ghcr.io/linuxserver/plex:latest
deploy:
mode: replicated
replicas: 1
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_dockermod:latest"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Europe/London
ORCHESTRATOR_URL: http://192.168.1.10:3500
PMS_SERVICE: 192.168.1.10 # This service. If you disable Local Relay then you must use PMS_IP instead
PMS_PORT: "32400"
TRANSCODE_OPERATING_MODE: remote #(local|remote|both)
TRANSCODER_VERBOSE: "1" # 1=verbose, 0=silent
LOCAL_RELAY_ENABLED: "1"
LOCAL_RELAY_PORT: "32499"
healthcheck:
test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
volumes:
- /media/config:/config
- /media/mydata/Series:/data/tv
- /media/mydata/Movies:/data/movies
- /media/mydata/transcode:/transcode
ports:
- 32499:32499 # LOCAL_RELAY_PORT
- 32400:32400
- 3005:3005
- 8324:8324
- 1900:1900/udp
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
devices:
- /dev/dri:/dev/dri

plex-orchestrator:
image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
deploy:
mode: replicated
replicas: 1
update_config:
order: start-first
healthcheck:
test: curl -fsS http://localhost:3500/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
environment:
TZ: Europe/London
LISTENING_PORT: 3500
WORKER_SELECTION_STRATEGY: "LOAD_RANK" # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- 3500:3500

on Worker:

version: '3.8'

services:
plex-worker:
image: ghcr.io/linuxserver/plex:latest
hostname: "plex-worker-{{.Node.hostname}}"
deploy:
mode: replicated
replicas: 1
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest"
FFMPEG_HWACCEL: "vaapi"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Europe/London
LISTENING_PORT: 3501 # used by the healthcheck
STAT_CPU_INTERVAL: 2000 # interval for reporting worker load metrics
ORCHESTRATOR_URL: http://192.168.1.10:3500
EAE_SUPPORT: "1"
healthcheck:
test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 240s
volumes:
- /media/codecs:/codecs # (optional)
- /media/mydata/Series:/data/tv
- /media/mydata/Movies:/data/movies
- /media/mydata/transcode:/transcode
devices:
- /dev/dri:/dev/dri

Running : docker-compose up ( in both machines )

  • it works. but I need a cpu with quiksync on the server. if use nvidia is the same.
  • not sure if everything works fine ( orchestrator / workloads ... )

Originally posted by @pitzonept in #205 (comment)

Worker can't find iHD_drv_video.so

Describe the bug
When trying to play a transcoded video via a worker, the video fails to play. Worker logs indicate it cannot find iHD_drv_video.so. When I disable ClusterPlex and just use my "normal" PMS pod, HW transcoding works fine.

Intel GPU drivers are installed via Intel device plugins Helm chart: https://intel.github.io/helm-charts/

Same issue happens when using either standard Plex image with DOCKER_MOD or the ClusterPlex image

Relevant log file for worker:

[AVHWDeviceContext @ 0x7fa6496df6c0] libva: VA-API version 1.18.0
[AVHWDeviceContext @ 0x7fa6496df6c0] libva: Trying to open /config/Library/Application Support/Plex Media Server/Cache/va-dri-linux-x86_64/iHD_drv_video.so
[AVHWDeviceContext @ 0x7fa6496df6c0] libva: va_openDriver() returns -1
[AVHWDeviceContext @ 0x7fa6496df6c0] libva: Trying to open /config/Library/Application Support/Plex Media Server/Cache/va-dri-linux-x86_64/i965_drv_video.so
[AVHWDeviceContext @ 0x7fa6496df6c0] libva: va_openDriver() returns -1
[AVHWDeviceContext @ 0x7fa6496df6c0] Failed to initialise VAAPI connection: -1 (unknown libva error).
Device creation failed: -5.
Failed to set value 'vaapi=vaapi:/dev/dri/renderD128' for option 'init_hw_device': I/O error
Error parsing global options: I/O error
Completed transcode
Removing process from taskMap

The /config/Library/Application Support/ folder is empty, so it explains why it can't find the driver. Tried placing the driver that I pulled off the Plex server in the codecs PV, but no difference.

Environment
K3S v1.26.5+k3s1
Nodes are Beelink U59's with Intel N5105 processor

Transcode / playback issue

Describe the bug
A clear and concise description of what the bug is.
When I try to play any video the transcode fails without error.
To Reproduce
Steps to reproduce the behavior:
try to play any video from plex.

Expected behavior
When I click play in an app I get "an error occourred while attempthing to play this video. Please check your connection and try again." When I try to play it from the website, nothing happens.
Screenshots
This is the orchestrator
"
2023-03-15T05:41:04.552586805Z Client connected: fu7ur583DRW1WXqrAAAR
2023-03-15T05:41:04.566900442Z Registered new job poster: 31145a72-f2f2-45c6-b340-ebccb03675c9|921a3e6433f3
2023-03-15T05:41:04.571448724Z Creating single task for the job
2023-03-15T05:41:04.571527598Z Queueing job 858fb3ef-6fe6-45b7-827b-c2ca2d87b32a
2023-03-15T05:41:04.571595468Z Queueing task c08c1932-3e0e-4eec-8f87-4764fe6b916d
2023-03-15T05:41:05.362643171Z Running task c08c1932-3e0e-4eec-8f87-4764fe6b916d
2023-03-15T05:41:05.362699409Z Forwarding work request to 61e7d910-e32b-4683-93e2-ed7164c36985|plex-worker-server02
2023-03-15T05:41:05.365880226Z Received update for task c08c1932-3e0e-4eec-8f87-4764fe6b916d, status: received
2023-03-15T05:41:05.388256239Z Received update for task c08c1932-3e0e-4eec-8f87-4764fe6b916d, status: inprogress
2023-03-15T05:41:06.003645397Z Received update for task c08c1932-3e0e-4eec-8f87-4764fe6b916d, status: done
2023-03-15T05:41:06.003703485Z Task c08c1932-3e0e-4eec-8f87-4764fe6b916d complete, result: false
2023-03-15T05:41:06.003721435Z Task c08c1932-3e0e-4eec-8f87-4764fe6b916d complete
2023-03-15T05:41:06.003762827Z Job 858fb3ef-6fe6-45b7-827b-c2ca2d87b32a complete, tasks: 1, result: false
2023-03-15T05:41:06.004278202Z JobPoster notified
2023-03-15T05:41:06.004315698Z Removing job 858fb3ef-6fe6-45b7-827b-c2ca2d87b32a
2023-03-15T05:41:06.004331424Z Job 858fb3ef-6fe6-45b7-827b-c2ca2d87b32a complete
2023-03-15T05:41:06.018897883Z Client disconnected: fu7ur583DRW1WXqrAAAR
2023-03-15T05:41:06.018950972Z Removing job-poster 31145a72-f2f2-45c6-b340-ebccb03675c9|921a3e6433f3 from pool
"

this is the worker
"
2023-03-15T05:41:05.364918230Z Received task request
2023-03-15T05:41:05.366698629Z EAE Support - Spawning EasyAudioEncoder from "/codecs/2584b51-4483-linux-x86_64-standard/EasyAudioEncoder/EasyAudioEncoder/EasyAudioEncoder", cwd => /tmp/pms-ea3e913c-2292-4754-a804-5ac7dac84d99/EasyAudioEncoder
2023-03-15T05:41:05.387978299Z Dolby, Dolby Digital, Dolby Digital Plus, Dolby TrueHD and the double D symbol are trademarks of Dolby Laboratories.
2023-03-15T05:41:05.393974889Z [tcp @ 0x7efc1bd18640] Starting connection attempt to 10.0.1.152 port 32499
2023-03-15T05:41:05.394952799Z [tcp @ 0x7efc1bd18640] Successfully connected to 10.0.1.152 port 32499
2023-03-15T05:41:05.397305495Z ffmpeg version 2584b51-4483 Copyright (c) 2000-2022 the FFmpeg developers
2023-03-15T05:41:05.399547960Z built with Plex clang version 11.0.1 (https://plex.tv 9b997da8e5b47bdb4a9425b3a3b290be393b4b1f)
2023-03-15T05:41:05.402139467Z configuration: --disable-static --enable-shared --disable-libx264 --disable-hwaccels --disable-protocol=concat --external-decoder=h264 --enable-debug --enable-muxers --enable-libxml2 --fatal-warnings --disable-gmp --disable-avdevice --disable-bzlib --disable-sdl2 --disable-decoders --disable-devices --disable-encoders --disable-ffprobe --disable-ffplay --disable-doc --disable-iconv --disable-lzma --disable-schannel --disable-linux-perf --disable-mediacodec --enable-eae --disable-protocol='udp,udplite' --arch=x86_64 --target-os=linux --strip=true --cc=x86_64-linux-musl-clang --pkg-config=/data/jenkins/conan_build/243798787/plexconantool/plex-pkg-config --pkg-config-flags=--static --enable-cuda-llvm --enable-libdrm --enable-opencl --enable-cross-compile --ar=llvm-ar --nm=llvm-nm --ranlib=llvm-ranlib --extra-ldflags='-Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/libpciaccess/0.16-15/rcombs/nvdec-copy/package/7763a87432c78a82fd36373080b064286892cea3/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/libdrm/2.4.112-8/rcombs/nvdec-copy/package/5d5758c451445ffc145f6d0eac5c69539db0f342/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/iconv/1.16-31/rcombs/nvdec-copy/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/intel-gmmlib/22.1.5-1/rcombs/nvdec-copy/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/libva/2.15.0-3/rcombs/nvdec-copy/package/f0f4893209b867ce448a96e25ef4d6b158311557/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/libpciaccess/0.16-15/rcombs/nvdec-copy/package/7763a87432c78a82fd36373080b064286892cea3/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/libdrm/2.4.112-8/rcombs/nvdec-copy/package/5d5758c451445ffc145f6d0eac5c69539db0f342/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/iconv/1.16-31/rcombs/nvdec-copy/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/intel-gmmlib/22.1.5-1/rcombs/nvdec-copy/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/lib -Wl,-rpath,/data/jenkins/conan_build/243798787/conan/.conan/data/libva/2.15.0-3/rcombs/nvdec-copy/package/f0f4893209b867ce448a96e25ef4d6b158311557/lib -m64 -L/data/jenkins/conan_build/243798787/conan/.conan/data/opus/1.2.1-33/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libvorbis/1.3.5-37/rcombs/nvdec-copy/package/76eba14299c6c14bf4759b1da21aec07c9ca1a2f/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/dav1d/1.0.0-13/rcombs/nvdec-copy/package/4d954bcc6be6a68b775ef1b1bae9dd65e4e237ff/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/ffnvcodec/11.0.10.1-315ad74-0/rcombs/nvdec-copy/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/x264/161-1086f45-26/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/zvbi/0.2.35-59/rcombs/nvdec-copy/package/7366a567f554439fb9e7a3415c9d1c2ea2b75360/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/rtmpdump/2.4-105/rcombs/nvdec-copy/package/23eb151cc372234cf231da9b165c1667f99ae0e2/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libass/0.16.0-3/rcombs/nvdec-copy/package/d81dbed7e8ad560c9ec55240308ceb55b203927d/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/mp3lame/3.98.4-32/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/intel-media-driver/22.4.4-4/rcombs/nvdec-copy/package/f19c9ea11b5a6b248dc6879124f3ca0409aeeee5/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/intel-vaapi-driver/2.4.1-26/rcombs/nvdec-copy/package/60668d03878c5b09fa34470ad2ae57975546be1c/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/opencl-icd-loader/v2022.01.04-169f05d-1/rcombs/nvdec-copy/package/417850def17ad9bd3a83ff74d4be34ee79a8b0c3/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libogg/1.3.2-33/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/gnutls/3.7.2-10/rcombs/nvdec-copy/package/fdf5e8161de02405686d740969e8af389619df46/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/fribidi/1.0.12-1/rcombs/nvdec-copy/package/464531ac2a3f2ab2167bd10d1214603bc8116983/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/harfbuzz/4.2.1-2/rcombs/nvdec-copy/package/53415d552ac96104f622ffa8d8530937a40b4271/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libva/2.15.0-3/rcombs/nvdec-copy/package/f0f4893209b867ce448a96e25ef4d6b158311557/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/intel-gmmlib/22.1.5-1/rcombs/nvdec-copy/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/nettle/3.7.3-6/rcombs/nvdec-copy/package/33d6d59c31a8ebdda675cdb28c77aeebdbee4273/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/iconv/1.16-31/rcombs/nvdec-copy/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/fontconfig/2.14.0-2/rcombs/nvdec-copy/package/aacc2a7710dfa87ed80d4eea45b80c93243fe456/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libdrm/2.4.112-8/rcombs/nvdec-copy/package/5d5758c451445ffc145f6d0eac5c69539db0f342/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libxml2/2.9.11-e1bcffea-12/rcombs/nvdec-copy/package/33406d37abb556848190dcd6097a9849aa894baf/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/gmp/6.2.0-14/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/freetype2/2.12.1-24/rcombs/nvdec-copy/package/82a00e1e4cc2e8878bb79ae9b5e2235fd8280e6a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/expat/2.2.5-34/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libuuid/1.0.3-27/rcombs/nvdec-copy/package/841d526523d3550ac4d52807df94cbbedce37e2c/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libpciaccess/0.16-15/rcombs/nvdec-copy/package/7763a87432c78a82fd36373080b064286892cea3/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libpthread-stubs/0.4-34/rcombs/nvdec-copy/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/bzip2/1.0.6-37/rcombs/nvdec-copy/package/618bb3c469051b52e1349cf1a297263df374d15a/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/libpng/1.6.37-39/rcombs/nvdec-copy/package/33406d37abb556848190dcd6097a9849aa894baf/lib -L/data/jenkins/conan_build/243798787/conan/.conan/data/zlib/1.2.11-31/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/lib -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -g2 -gdwarf-4 -Wl,--build-id=sha1 -flto=thin -fwhole-program-vtables -Wl,--icf=all -Wl,--threads=6 -Wl,-O2 -l:libgcompat.so.0 -Wl,-rpath,'''XORIGIN/../lib''' -Wl,-rpath,'''XORIGIN/lib''' -Wl,--thinlto-cache-dir=/data/jenkins/conan_build/243798787/conan/.conan/data/ffmpeg/2.0-2584b516928-1/rcombs/nvdec-copy/build/4df17a4d5943a4dd808810c802af6e342e8aabf2/lto_cache/' --extra-libs= --enable-decoder=png --enable-decoder=apng --enable-decoder=bmp --enable-decoder=mjpeg --enable-decoder=thp --enable-decoder=gif --enable-decoder=dirac --enable-decoder=ffv1 --enable-decoder=ffvhuff --enable-decoder=huffyuv --enable-decoder=libdav1d --enable-decoder=av1 --enable-decoder=rawvideo --enable-decoder=zero12v --enable-decoder=ayuv --enable-decoder=r210 --enable-decoder=v210 --enable-decoder=v210x --enable-decoder=v308 --enable-decoder=v408 --enable-decoder=v410 --enable-decoder=y41p --enable-decoder=yuv4 --enable-decoder=ansi --enable-decoder=alac --enable-decoder=flac --enable-decoder=vorbis --enable-decoder=opus --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=pcm_alaw --enable-decoder=pcm_mulaw --enable-decoder=ass --enable-decoder=dvbsub --enable-decoder=dvdsub --enable-decoder=ccaption --enable-decoder=pgssub --enable-decoder=jacosub --enable-decoder=microdvd --enable-decoder=movtext --enable-decoder=mpl2 --enable-decoder=pjs --enable-decoder=realtext --enable-decoder=sami --enable-decoder=ssa --enable-decoder=stl --enable-decoder=subrip --enable-decoder=subviewer --enable-decoder=text --enable-decoder=vplayer --enable-decoder=webvtt --enable-decoder=xsub --enable-decoder=eac3_eae --enable-decoder=truehd_eae --enable-decoder=mlp_eae --enable-encoder=flac --enable-encoder=alac --enable-encoder=libvorbis --enable-encoder=libopus --enable-encoder=mjpeg --enable-encoder=png --enable-encoder=rawvideo --enable-encoder=wrapped_avframe --enable-encoder=ass --enable-encoder=dvbsub --enable-encoder=dvdsub --enable-encoder=movtext --enable-encoder=ssa --enable-encoder=subrip --enable-encoder=text --enable-encoder=webvtt --enable-encoder=xsub --enable-encoder=pcm_f32be --enable-encoder=pcm_f32le --enable-encoder=pcm_f64be --enable-encoder=pcm_f64le --enable-encoder=pcm_s8 --enable-encoder=pcm_s8_planar --enable-encoder=pcm_s16be --enable-encoder=pcm_s16be_planar --enable-encoder=pcm_s16le --enable-encoder=pcm_s16le_planar --enable-encoder=pcm_s24be --enable-encoder=pcm_s24le --enable-encoder=pcm_s24le_planar --enable-encoder=pcm_s32be --enable-encoder=pcm_s32le --enable-encoder=pcm_s32le_planar --enable-encoder=pcm_u8 --enable-encoder=pcm_u16be --enable-encoder=pcm_u16le --enable-encoder=pcm_u24be --enable-encoder=pcm_u24le --enable-encoder=pcm_u32be --enable-encoder=pcm_u32le --enable-encoder=h264_vaapi --enable-encoder=hevc_vaapi --enable-encoder=h264_nvenc --enable-encoder=eac3_eae --enable-hwaccel=av1_vaapi --enable-hwaccel=av1_nvdec --prefix=/data/jenkins/conan_build/243798787/conan/.conan/data/ffmpeg/2.0-2584b516928-1/rcombs/nvdec-copy/build/4df17a4d5943a4dd808810c802af6e342e8aabf2/transcoder-install --enable-libzvbi --enable-gnutls --enable-libass --enable-librtmp --enable-libopus --enable-libvorbis --enable-libdav1d --extra-cflags='-m64 -O3 -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g2 -gdwarf-4 -fcommon -flto=thin -fwhole-program-vtables -I/data/jenkins/conan_build/243798787/conan/.conan/data/opus/1.2.1-33/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libvorbis/1.3.5-37/rcombs/nvdec-copy/package/76eba14299c6c14bf4759b1da21aec07c9ca1a2f/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/dav1d/1.0.0-13/rcombs/nvdec-copy/package/4d954bcc6be6a68b775ef1b1bae9dd65e4e237ff/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/ffnvcodec/11.0.10.1-315ad74-0/rcombs/nvdec-copy/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/x264/161-1086f45-26/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/zvbi/0.2.35-59/rcombs/nvdec-copy/package/7366a567f554439fb9e7a3415c9d1c2ea2b75360/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/rtmpdump/2.4-105/rcombs/nvdec-copy/package/23eb151cc372234cf231da9b165c1667f99ae0e2/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libass/0.16.0-3/rcombs/nvdec-copy/package/d81dbed7e8ad560c9ec55240308ceb55b203927d/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/mp3lame/3.98.4-32/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/intel-media-driver/22.4.4-4/rcombs/nvdec-copy/package/f19c9ea11b5a6b248dc6879124f3ca0409aeeee5/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libogg/1.3.2-33/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/gnutls/3.7.2-10/rcombs/nvdec-copy/package/fdf5e8161de02405686d740969e8af389619df46/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/fribidi/1.0.12-1/rcombs/nvdec-copy/package/464531ac2a3f2ab2167bd10d1214603bc8116983/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/harfbuzz/4.2.1-2/rcombs/nvdec-copy/package/53415d552ac96104f622ffa8d8530937a40b4271/include/harfbuzz -I/data/jenkins/conan_build/243798787/conan/.conan/data/libva/2.15.0-3/rcombs/nvdec-copy/package/f0f4893209b867ce448a96e25ef4d6b158311557/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/intel-gmmlib/22.1.5-1/rcombs/nvdec-copy/package/d7d5d1f35ff92a8c39da6b47605055e839a42a9c/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/opencl-headers/v2022.01.04-59ac4dc-1/rcombs/nvdec-copy/package/5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/nettle/3.7.3-6/rcombs/nvdec-copy/package/33d6d59c31a8ebdda675cdb28c77aeebdbee4273/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/iconv/1.16-31/rcombs/nvdec-copy/package/da4999666f4b1709dd93ae40fffdb2c6f130b23f/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/fontconfig/2.14.0-2/rcombs/nvdec-copy/package/aacc2a7710dfa87ed80d4eea45b80c93243fe456/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libdrm/2.4.112-8/rcombs/nvdec-copy/package/5d5758c451445ffc145f6d0eac5c69539db0f342/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libdrm/2.4.112-8/rcombs/nvdec-copy/package/5d5758c451445ffc145f6d0eac5c69539db0f342/include/libdrm -I/data/jenkins/conan_build/243798787/conan/.conan/data/libxml2/2.9.11-e1bcffea-12/rcombs/nvdec-copy/package/33406d37abb556848190dcd6097a9849aa894baf/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libxml2/2.9.11-e1bcffea-12/rcombs/nvdec-copy/package/33406d37abb556848190dcd6097a9849aa894baf/include/libxml2 -I/data/jenkins/conan_build/243798787/conan/.conan/data/gmp/6.2.0-14/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/freetype2/2.12.1-24/rcombs/nvdec-copy/package/82a00e1e4cc2e8878bb79ae9b5e2235fd8280e6a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/expat/2.2.5-34/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libuuid/1.0.3-27/rcombs/nvdec-copy/package/841d526523d3550ac4d52807df94cbbedce37e2c/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libpciaccess/0.16-15/rcombs/nvdec-copy/package/7763a87432c78a82fd36373080b064286892cea3/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/bzip2/1.0.6-37/rcombs/nvdec-copy/package/618bb3c469051b52e1349cf1a297263df374d15a/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/libpng/1.6.37-39/rcombs/nvdec-copy/package/33406d37abb556848190dcd6097a9849aa894baf/include -I/data/jenkins/conan_build/243798787/conan/.conan/data/zlib/1.2.11-31/rcombs/nvdec-copy/package/64edc78a49b81c2615dad7b22a9ac90cc029860a/include -DLIBXML_STATIC -DFRIBIDI_LIB_STATIC -DNDEBUG'
2023-03-15T05:41:05.405239529Z libavutil 57. 24.101 / 57. 24.101
2023-03-15T05:41:05.407631434Z libavcodec 59. 25.100 / 59. 25.100
2023-03-15T05:41:05.409684991Z libavformat 59. 20.101 / 59. 20.101
2023-03-15T05:41:05.411781017Z libavfilter 8. 29.100 / 8. 29.100
2023-03-15T05:41:05.413885560Z libswscale 6. 6.100 / 6. 6.100
2023-03-15T05:41:05.415886897Z libswresample 4. 6.100 / 4. 6.100
2023-03-15T05:41:05.418433277Z Rescanning for external libs: '/codecs/2584b51-4483-linux-x86_64-standard/'
2023-03-15T05:41:05.420488484Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpcm_bluray_decoder.so
2023-03-15T05:41:05.422798449Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvp6f_decoder.so
2023-03-15T05:41:05.425219509Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxbin_decoder.so
2023-03-15T05:41:05.428003953Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libaac_latm_decoder.so
2023-03-15T05:41:05.430948708Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_dtk_decoder.so
2023-03-15T05:41:05.433358018Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmsrle_decoder.so
2023-03-15T05:41:05.435820419Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwmv3image_decoder.so
2023-03-15T05:41:05.438767904Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/librv10_decoder.so
2023-03-15T05:41:05.441526932Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmszh_decoder.so
2023-03-15T05:41:05.443954908Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libbinkaudio_dct_decoder.so
2023-03-15T05:41:05.446722314Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libinterplay_video_decoder.so
2023-03-15T05:41:05.449419069Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdsd_lsbf_planar_decoder.so
2023-03-15T05:41:05.451966473Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libiac_decoder.so
2023-03-15T05:41:05.455137223Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libavrp_decoder.so
2023-03-15T05:41:05.457613283Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_afc_decoder.so
2023-03-15T05:41:05.460003618Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxface_decoder.so
2023-03-15T05:41:05.462673532Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libiff_ilbm_decoder.so
2023-03-15T05:41:05.465540305Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libbrender_pix_decoder.so
2023-03-15T05:41:05.468000912Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmp3on4_decoder.so
2023-03-15T05:41:05.470638021Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvqa_decoder.so
2023-03-15T05:41:05.472884791Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdxv_decoder.so
2023-03-15T05:41:05.475143393Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libg729_decoder.so
2023-03-15T05:41:05.477862863Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmpeg4_decoder.so
2023-03-15T05:41:05.480506044Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libloco_decoder.so
2023-03-15T05:41:05.483010669Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libroq_decoder.so
2023-03-15T05:41:05.485604599Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmace6_decoder.so
2023-03-15T05:41:05.488375556Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_rad_decoder.so
2023-03-15T05:41:05.490911769Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdvvideo_decoder.so
2023-03-15T05:41:05.493315774Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_ws_decoder.so
2023-03-15T05:41:05.495984126Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxma1_decoder.so
2023-03-15T05:41:05.498242626Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpam_decoder.so
2023-03-15T05:41:05.500510307Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsgirle_decoder.so
2023-03-15T05:41:05.502827404Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvmdaudio_decoder.so
2023-03-15T05:41:05.504971803Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libindeo2_decoder.so
2023-03-15T05:41:05.507114213Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libape_decoder.so
2023-03-15T05:41:05.509706207Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libac3_encoder.so
2023-03-15T05:41:05.512339424Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/librscc_decoder.so
2023-03-15T05:41:05.514819093Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmss2_decoder.so
2023-03-15T05:41:05.517571668Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libeacmv_decoder.so
2023-03-15T05:41:05.520193941Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/librv30_decoder.so
2023-03-15T05:41:05.522474241Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libgsm_decoder.so
2023-03-15T05:41:05.524687099Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtruemotion2_decoder.so
2023-03-15T05:41:05.527054527Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcook_decoder.so
2023-03-15T05:41:05.529290500Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libffwavesynth_decoder.so
2023-03-15T05:41:05.531726276Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsvq3_decoder.so
2023-03-15T05:41:05.534009277Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpictor_decoder.so
2023-03-15T05:41:05.536870190Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvp7_decoder.so
2023-03-15T05:41:05.539146865Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsmackaud_decoder.so
2023-03-15T05:41:05.541377297Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsdx2_dpcm_decoder.so
2023-03-15T05:41:05.544088689Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_psx_decoder.so
2023-03-15T05:41:05.546374850Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libr10k_decoder.so
2023-03-15T05:41:05.548693225Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpgmyuv_decoder.so
2023-03-15T05:41:05.551467962Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdpx_decoder.so
2023-03-15T05:41:05.553754487Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmsvideo1_decoder.so
2023-03-15T05:41:05.556227195Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpaf_audio_decoder.so
2023-03-15T05:41:05.558481056Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_thp_decoder.so
2023-03-15T05:41:05.560807413Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsgi_decoder.so
2023-03-15T05:41:05.563120101Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtta_decoder.so
2023-03-15T05:41:05.565479157Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsp5x_decoder.so
2023-03-15T05:41:05.568027317Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_adx_decoder.so
2023-03-15T05:41:05.570257589Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ms_decoder.so
2023-03-15T05:41:05.572453082Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libptx_decoder.so
2023-03-15T05:41:05.574788212Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ct_decoder.so
2023-03-15T05:41:05.577373628Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libavui_decoder.so
2023-03-15T05:41:05.579835654Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libescape124_decoder.so
2023-03-15T05:41:05.582007644Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libasv1_decoder.so
2023-03-15T05:41:05.584534871Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtarga_decoder.so
2023-03-15T05:41:05.586589668Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_qt_decoder.so
2023-03-15T05:41:05.588721105Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libutvideo_decoder.so
2023-03-15T05:41:05.590980616Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ea_r3_decoder.so
2023-03-15T05:41:05.593428541Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libexr_decoder.so
2023-03-15T05:41:05.596031855Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libyop_decoder.so
2023-03-15T05:41:05.598545079Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libhap_decoder.so
2023-03-15T05:41:05.600973526Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvp9_decoder.so
2023-03-15T05:41:05.603664432Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libatrac3p_decoder.so
2023-03-15T05:41:05.605988685Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libh263p_decoder.so
2023-03-15T05:41:05.608216583Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxbm_decoder.so
2023-03-15T05:41:05.610890947Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwebp_decoder.so
2023-03-15T05:41:05.613311324Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsnow_decoder.so
2023-03-15T05:41:05.615974096Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libscreenpresso_decoder.so
2023-03-15T05:41:05.618467624Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcdxl_decoder.so
2023-03-15T05:41:05.621087334Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_sbpro_2_decoder.so
2023-03-15T05:41:05.623472696Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libaac_decoder.so
2023-03-15T05:41:05.625838056Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxan_wc4_decoder.so
2023-03-15T05:41:05.628436227Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libqcelp_decoder.so
2023-03-15T05:41:05.630593714Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libjpegls_decoder.so
2023-03-15T05:41:05.633039046Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdfa_decoder.so
2023-03-15T05:41:05.635180179Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/liblagarith_decoder.so
2023-03-15T05:41:05.637603194Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_ea_eacs_decoder.so
2023-03-15T05:41:05.639968094Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvp6a_decoder.so
2023-03-15T05:41:05.640337245Z [AVIOContext @ 0x7efc1a7fb840] Statistics: 0 bytes read, 0 seeks
2023-03-15T05:41:05.641313549Z [tcp @ 0x7efc1ab20ec0] Starting connection attempt to 10.0.1.152 port 32499
2023-03-15T05:41:05.641933709Z [tcp @ 0x7efc1ab20ec0] Successfully connected to 10.0.1.152 port 32499
2023-03-15T05:41:05.644573905Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libeatgq_decoder.so
2023-03-15T05:41:05.646621447Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsmc_decoder.so
2023-03-15T05:41:05.649082063Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ea_xas_decoder.so
2023-03-15T05:41:05.651384560Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwmavoice_decoder.so
2023-03-15T05:41:05.653567962Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtruemotion2rt_decoder.so
2023-03-15T05:41:05.655852070Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmp3_decoder.so
2023-03-15T05:41:05.658292741Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libprores_decoder.so
2023-03-15T05:41:05.660575413Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtwinvq_decoder.so
2023-03-15T05:41:05.663171910Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmvc2_decoder.so
2023-03-15T05:41:05.665458385Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libbethsoftvid_decoder.so
2023-03-15T05:41:05.667828061Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libg2m_decoder.so
2023-03-15T05:41:05.670198256Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcdgraphics_decoder.so
2023-03-15T05:41:05.672790237Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libindeo3_decoder.so
2023-03-15T05:41:05.675404948Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libidcin_decoder.so
2023-03-15T05:41:05.677963980Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libshorten_decoder.so
2023-03-15T05:41:05.680506851Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_dk4_decoder.so
2023-03-15T05:41:05.683109967Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libflashsv_decoder.so
2023-03-15T05:41:05.685675584Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdsicinaudio_decoder.so
2023-03-15T05:41:05.687628323Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libatrac3_decoder.so
2023-03-15T05:41:05.689523233Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwmav1_decoder.so
2023-03-15T05:41:05.691520045Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcomfortnoise_decoder.so
2023-03-15T05:41:05.693752442Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmace3_decoder.so
2023-03-15T05:41:05.695688202Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_amv_decoder.so
2023-03-15T05:41:05.697982803Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libac3_decoder.so
2023-03-15T05:41:05.699976250Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsvq1_decoder.so
2023-03-15T05:41:05.702258817Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libppm_decoder.so
2023-03-15T05:41:05.704147773Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libamrnb_decoder.so
2023-03-15T05:41:05.706043650Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcyuv_decoder.so
2023-03-15T05:41:05.707974651Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmsa1_decoder.so
2023-03-15T05:41:05.710302819Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libimc_decoder.so
2023-03-15T05:41:05.712318600Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtak_decoder.so
2023-03-15T05:41:05.714681237Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libon2avc_decoder.so
2023-03-15T05:41:05.716792671Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libaura_decoder.so
2023-03-15T05:41:05.719155706Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ea_maxis_xa_decoder.so
2023-03-15T05:41:05.721516502Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libhevc_decoder.so
2023-03-15T05:41:05.723999461Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libbinkaudio_rdft_decoder.so
2023-03-15T05:41:05.726280889Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtiff_decoder.so
2023-03-15T05:41:05.728706831Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libals_decoder.so
2023-03-15T05:41:05.731014617Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ea_r1_decoder.so
2023-03-15T05:41:05.733311574Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdds_decoder.so
2023-03-15T05:41:05.735192639Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcljr_decoder.so
2023-03-15T05:41:05.737078865Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libcavs_decoder.so
2023-03-15T05:41:05.739021390Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxwd_decoder.so
2023-03-15T05:41:05.740882511Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libinterplay_dpcm_decoder.so
2023-03-15T05:41:05.742713369Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmsmpeg4v2_decoder.so
2023-03-15T05:41:05.744630644Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwmv2_decoder.so
2023-03-15T05:41:05.746582984Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libasv2_decoder.so
2023-03-15T05:41:05.748536930Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libulti_decoder.so
2023-03-15T05:41:05.750572229Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ea_decoder.so
2023-03-15T05:41:05.752472716Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libeatgv_decoder.so
2023-03-15T05:41:05.754683207Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdnxhd_decoder.so
2023-03-15T05:41:05.756572521Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwmalossless_decoder.so
2023-03-15T05:41:05.759167425Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvp8_decoder.so
2023-03-15T05:41:05.761709433Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/librl2_decoder.so
2023-03-15T05:41:05.764498552Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libaasc_decoder.so
2023-03-15T05:41:05.767238632Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtarga_y216_decoder.so
2023-03-15T05:41:05.769881885Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libnellymoser_decoder.so
2023-03-15T05:41:05.772347647Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libwmav2_decoder.so
2023-03-15T05:41:05.775081310Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_dat4_decoder.so
2023-03-15T05:41:05.777384674Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_xa_decoder.so
2023-03-15T05:41:05.779704745Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libqdraw_decoder.so
2023-03-15T05:41:05.782107118Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libanm_decoder.so
2023-03-15T05:41:05.784413582Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_oki_decoder.so
2023-03-15T05:41:05.786787267Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_wav_decoder.so
2023-03-15T05:41:05.789634281Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libh264_decoder.so
2023-03-15T05:41:05.792539797Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libevrc_decoder.so
2023-03-15T05:41:05.795280528Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libdxa_decoder.so
2023-03-15T05:41:05.797948615Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_ea_sead_decoder.so
2023-03-15T05:41:05.800656177Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_ima_smjpeg_decoder.so
2023-03-15T05:41:05.803363032Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libadpcm_yamaha_decoder.so
2023-03-15T05:41:05.806038662Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpbm_decoder.so
2023-03-15T05:41:05.808787475Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpcm_dvd_decoder.so
2023-03-15T05:41:05.811484374Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libindeo5_decoder.so
2023-03-15T05:41:05.814202492Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvc1_decoder.so
2023-03-15T05:41:05.817086237Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libfraps_decoder.so
2023-03-15T05:41:05.819817595Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libra_144_decoder.so
2023-03-15T05:41:05.822488328Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxan_wc3_decoder.so
2023-03-15T05:41:05.825227409Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvmnc_decoder.so
2023-03-15T05:41:05.827456473Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmotionpixels_decoder.so
2023-03-15T05:41:05.829828236Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libaac_lc_decoder.so
2023-03-15T05:41:05.832722253Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libbintext_decoder.so
2023-03-15T05:41:05.835401537Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libzmbv_decoder.so
2023-03-15T05:41:05.838171413Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libaura2_decoder.so
2023-03-15T05:41:05.840880909Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libh263_decoder.so
2023-03-15T05:41:05.843780889Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libflv_decoder.so
2023-03-15T05:41:05.846606169Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmdec_decoder.so
2023-03-15T05:41:05.849397674Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libmjpegb_decoder.so
2023-03-15T05:41:05.852168135Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libxan_dpcm_decoder.so
2023-03-15T05:41:05.854911303Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libpcx_decoder.so
2023-03-15T05:41:05.857241236Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsubviewer1_decoder.so
2023-03-15T05:41:05.859913802Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libhq_hqa_decoder.so
2023-03-15T05:41:05.862652765Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libvp6_decoder.so
2023-03-15T05:41:05.864994098Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libsol_dpcm_decoder.so
2023-03-15T05:41:05.867864001Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libfourxm_decoder.so
2023-03-15T05:41:05.870593633Z Loading external lib /codecs/2584b51-4483-linux-x86_64-standard/libtscc2_decoder.so
2023-03-15T05:41:06.002415192Z Completed transcode
2023-03-15T05:41:06.002725546Z Removing process from taskMap
"

Desktop (please complete the following information):

  • OS: IOS app, desktop website
  • Version latest version

Additional context
This is the docker-compose file i'm using:

version: '3.8'

services:
plex:
image: ghcr.io/linuxserver/plex:latest
deploy:
mode: replicated
replicas: 1
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_dockermod:latest"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Europe/London
ORCHESTRATOR_URL: http://plex-orchestrator:3500
PMS_SERVICE: plex # This service. If you disable Local Relay then you must use PMS_IP instead
PMS_PORT: "32400"
TRANSCODE_OPERATING_MODE: remote #(local|remote|both)
TRANSCODER_VERBOSE: "1" # 1=verbose, 0=silent
LOCAL_RELAY_ENABLED: "1"
LOCAL_RELAY_PORT: "32499"
healthcheck:
test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
volumes:
- /mnt/glusterfs/plex/config:/config
- /mnt/media/TV-programmes:/data/tv
- /mnt/media/Films:/data/movies
- /mnt/glusterfs/plex/transcode:/transcode
networks:
- public_network
ports:
- 32499:32499 # LOCAL_RELAY_PORT
- 32400:32400
- 3005:3005
- 8324:8324
- 1900:1900/udp
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp

plex-orchestrator:
image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
deploy:
mode: replicated
replicas: 1
update_config:
order: start-first
healthcheck:
test: curl -fsS http://localhost:3500/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
environment:
TZ: Europe/London
LISTENING_PORT: 3500
WORKER_SELECTION_STRATEGY: "LOAD_TASKS" # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
- public_network
ports:
- 3500:3500

plex-worker:
image: ghcr.io/linuxserver/plex:latest
hostname: "plex-worker-{{.Node.Hostname}}"
deploy:
mode: global
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Europe/London
LISTENING_PORT: 3501 # used by the healthcheck
STAT_CPU_INTERVAL: 2000 # interval for reporting worker load metrics
ORCHESTRATOR_URL: http://plex-orchestrator:3500
EAE_SUPPORT: "1"
healthcheck:
test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 240s
volumes:
- /opt/plex/codecs:/codecs # (optional)
- /mnt/media/TV-programmes:/data/tv
- /mnt/media/Films:/data/movies
- /mnt/glusterfs/plex/transcode:/transcode
networks:
- public_network

networks:
public_network:
external: true

Unable to transcode, orchestrator exits

Describe the bug
When attempting to transcode the orchestrator exits.

To Reproduce
I have plex/orchestrator on one machine, transcoders on others.

Plex/orchestrator compose file:

version: "3"
networks:
  default:
    external:
      name: containers
services:
  plex:
    container_name: plex
    devices:
      - /dev/dri:/dev/dri
    environment:
      - DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_dockermod
      - ORCHESTRATOR_URL=http://10.11.12.13:3500
      - PGID=65534
      - PLEX_CLAIM=claim-rxWvbwVxSzbAs2vw3c8C
      - PMS_IP=10.11.12.13
      - PUID=65534
      - TRANSCODE_OPERATING_MODE=remote
      - TRANSCODER_VERBOSE=1
      - TZ=Australia/Melbourne
      - VERSION=docker
    image: linuxserver/plex
    network_mode: host
    volumes:
      - /lardlad/beta/containers/data/plex:/config
      - /lardlad/beta/containers/data/plex/transcode:/transcode
      - /lardlad/beta/media/preroll:/media/preroll
      - /lardlad/beta/media/movies:/media/movies
      - /lardlad/beta/media/tvshows:/media/tvshows
      - /lardlad/beta/media/workouts:/media/workouts
      - /lardlad/beta/media/videos:/media/videos
  plex-orchestrator:
    container_name: plex-orchestrator
    environment:
      - LISTENING_PORT=3500
      - TZ=Australia/Melbourne
      - WORKER_SELECTION_STRATEGY="LOAD_RANK"
    image: ghcr.io/pabloromeo/clusterplex_orchestrator
    ports:
      - 3500:3500/tcp

Worker compose file:

version: "3"
networks:
  default:
    external:
      name: containers
services:
  plex-transcoder:
    container_name: plex-transcoder
    devices:
      - /dev/dri:/dev/dri
    environment:
      - DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_worker_dockermod
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
      - LISTENING_PORT=3501
      - ORCHESTRATOR_URL=http://10.11.12.13:3500
      - PGID=65534
      - PLEX_CLAIM=claim-rxWvbwVxSzbAs2vw3c8C
      - PUID=65534
      - STAT_CPU_INTERVAL=2000
      - TZ=Australia/Melbourne
      - VERSION=docker
    hostname: plex-transcoder-${HOSTNAME}
    image: linuxserver/plex
    runtime: nvidia
    volumes:
      - /dev/shm:/dev/shm
      - /lardlad/beta/containers/data/plex/codecs:/codecs
      - /lardlad/beta/containers/data/plex:/config
      - /lardlad/beta/containers/data/plex/transcode:/transcode
      - /lardlad/beta/media/preroll:/media/preroll
      - /lardlad/beta/media/movies:/media/movies
      - /lardlad/beta/media/tvshows:/media/tvshows
      - /lardlad/beta/media/workouts:/media/workouts
      - /lardlad/beta/media/videos:/media/videos

Expected behavior
Orchestrator should pass job to worker.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):
RHEL8, Docker.

Additional context

Logs from plex docker:

[scott@krusty compose]$ sudo docker-compose -f plex.yaml -p plex up
Creating plex-orchestrator ... done
Creating plex              ... done
Attaching to plex, plex-orchestrator
plex                 | [mod-init] Attempting to run Docker Modification Logic
plex                 | [mod-init] Applying pabloromeo/clusterplex_dockermod files to container
plex-orchestrator    | ON_DEATH: debug mode enabled for pid [1]
plex-orchestrator    | Initializing orchestrator
plex-orchestrator    | Using Worker Selection Strategy: "LOAD_RANK"
plex-orchestrator    | Stream-Splitting: DISABLED
plex-orchestrator    | Setting up websockets
plex-orchestrator    | Ready
plex-orchestrator    | Server listening on port 3500
plex-orchestrator    | Client connected: qQOCAD0aZoNx3ibZAAAB
plex-orchestrator    | Registering worker 01600e13-eb1a-428c-a94a-071b4a7ded9f|plex-transcoder-kent.thenursery.josc
plex-orchestrator    | Registered new worker: 01600e13-eb1a-428c-a94a-071b4a7ded9f|plex-transcoder-kent.thenursery.josc
plex                 | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
plex                 | [s6-init] ensuring user provided files have correct perms...exited 0.
plex                 | [fix-attrs.d] applying ownership & permissions fixes...
plex                 | [fix-attrs.d] done.
plex                 | [cont-init.d] executing container initialization scripts...
plex                 | [cont-init.d] 01-envfile: executing...
plex                 | [cont-init.d] 01-envfile: exited 0.
plex                 | [cont-init.d] 10-adduser: executing...
plex                 |
plex                 | -------------------------------------
plex                 |           _         ()
plex                 |          | |  ___   _    __
plex                 |          | | / __| | |  /  \
plex                 |          | | \__ \ | | | () |
plex                 |          |_| |___/ |_|  \__/
plex                 |
plex                 |
plex                 | Brought to you by linuxserver.io
plex                 | -------------------------------------
plex                 |
plex                 | To support LSIO projects visit:
plex                 | https://www.linuxserver.io/donate/
plex                 | -------------------------------------
plex                 | GID/UID
plex                 | -------------------------------------
plex                 |
plex                 | User uid:    65534
plex                 | User gid:    65534
plex                 | -------------------------------------
plex                 |
plex                 | [cont-init.d] 10-adduser: exited 0.
plex                 | [cont-init.d] 40-chown-files: executing...
plex                 | [cont-init.d] 40-chown-files: exited 0.
plex                 | [cont-init.d] 45-plex-claim: executing...
plex                 | [cont-init.d] 45-plex-claim: exited 0.
plex                 | [cont-init.d] 50-gid-video: executing...
plex                 | [cont-init.d] 50-gid-video: exited 0.
plex                 | [cont-init.d] 60-plex-update: executing...
plex                 | Docker is used for versioning skip update check
plex                 | [cont-init.d] 60-plex-update: exited 0.
plex                 | [cont-init.d] 90-custom-folders: executing...
plex                 | [cont-init.d] 90-custom-folders: exited 0.
plex                 | [cont-init.d] 92-install-nodejs: executing...
plex                 | **** install runtime packages ****
plex                 | **** apt-get update ****
plex                 | Get:1 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
plex                 | Get:2 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
plex                 | Get:3 http://archive.ubuntu.com/ubuntu focal-security InRelease [114 kB]
plex                 | Get:4 http://archive.ubuntu.com/ubuntu focal/restricted Sources [7,198 B]
plex                 | Get:5 http://archive.ubuntu.com/ubuntu focal/multiverse Sources [208 kB]
plex                 | Get:6 http://archive.ubuntu.com/ubuntu focal/universe Sources [12.3 MB]
plex-orchestrator    | Client disconnected: qQOCAD0aZoNx3ibZAAAB
plex-orchestrator    | Unregistering worker at socket qQOCAD0aZoNx3ibZAAAB
plex-orchestrator    | Killing pending tasks for worker: 01600e13-eb1a-428c-a94a-071b4a7ded9f
plex-orchestrator    | Unregistering worker 01600e13-eb1a-428c-a94a-071b4a7ded9f|plex-transcoder-kent.thenursery.josc
plex                 | Get:7 http://archive.ubuntu.com/ubuntu focal/main Sources [1,079 kB]
plex                 | Get:8 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1,275 kB]
plex                 | Get:9 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB]
plex                 | Get:10 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB]
plex                 | Get:11 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB]
plex                 | Get:12 http://archive.ubuntu.com/ubuntu focal-updates/universe Sources [238 kB]
plex                 | Get:13 http://archive.ubuntu.com/ubuntu focal-updates/main Sources [551 kB]
plex                 | Get:14 http://archive.ubuntu.com/ubuntu focal-updates/multiverse Sources [20.7 kB]
plex                 | Get:15 http://archive.ubuntu.com/ubuntu focal-updates/restricted Sources [31.4 kB]
plex                 | Get:16 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [630 kB]
plex                 | Get:17 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1,080 kB]
plex                 | Get:18 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [1,580 kB]
plex                 | Get:19 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [33.3 kB]
plex                 | Get:20 http://archive.ubuntu.com/ubuntu focal-security/universe Sources [85.9 kB]
plex                 | Get:21 http://archive.ubuntu.com/ubuntu focal-security/multiverse Sources [8,644 B]
plex                 | Get:22 http://archive.ubuntu.com/ubuntu focal-security/restricted Sources [31.4 kB]
plex                 | Get:23 http://archive.ubuntu.com/ubuntu focal-security/main Sources [223 kB]
plex                 | Get:24 http://archive.ubuntu.com/ubuntu focal-security/universe amd64 Packages [793 kB]
plex                 | Get:25 http://archive.ubuntu.com/ubuntu focal-security/main amd64 Packages [1,131 kB]
plex                 | Get:26 http://archive.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [577 kB]
plex                 | Get:27 http://archive.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [30.1 kB]
plex                 | Fetched 34.0 MB in 10s (3,546 kB/s)
plex                 | Reading package lists...
plex                 | **** install libatomic1, file ****
plex                 | Reading package lists...
plex                 | Building dependency tree...
plex                 | Reading state information...
plex                 | The following additional packages will be installed:
plex                 |   libmagic-mgc libmagic1
plex                 | The following NEW packages will be installed:
plex                 |   file libatomic1 libmagic-mgc libmagic1
plex                 | 0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.
plex                 | Need to get 327 kB of archives.
plex                 | After this operation, 6,220 kB of additional disk space will be used.
plex                 | Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 libmagic-mgc amd64 1:5.38-4 [218 kB]
plex                 | Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libmagic1 amd64 1:5.38-4 [75.9 kB]
plex                 | Get:3 http://archive.ubuntu.com/ubuntu focal/main amd64 file amd64 1:5.38-4 [23.3 kB]
plex                 | Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libatomic1 amd64 10.3.0-1ubuntu1~20.04 [9,284 B]
plex                 | Fetched 327 kB in 2s (143 kB/s)
plex                 | Selecting previously unselected package libmagic-mgc.
(Reading database ... 10550 files and directories currently installed.)
plex                 | Preparing to unpack .../libmagic-mgc_1%3a5.38-4_amd64.deb ...
plex                 | Unpacking libmagic-mgc (1:5.38-4) ...
plex                 | Selecting previously unselected package libmagic1:amd64.
plex                 | Preparing to unpack .../libmagic1_1%3a5.38-4_amd64.deb ...
plex                 | Unpacking libmagic1:amd64 (1:5.38-4) ...
plex                 | Selecting previously unselected package file.
plex                 | Preparing to unpack .../file_1%3a5.38-4_amd64.deb ...
plex                 | Unpacking file (1:5.38-4) ...
plex                 | Selecting previously unselected package libatomic1:amd64.
plex                 | Preparing to unpack .../libatomic1_10.3.0-1ubuntu1~20.04_amd64.deb ...
plex                 | Unpacking libatomic1:amd64 (10.3.0-1ubuntu1~20.04) ...
plex                 | Setting up libmagic-mgc (1:5.38-4) ...
plex                 | Setting up libmagic1:amd64 (1:5.38-4) ...
plex                 | Setting up file (1:5.38-4) ...
plex                 | Setting up libatomic1:amd64 (10.3.0-1ubuntu1~20.04) ...
plex                 | Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
plex                 | **** install 'n' ****
plex                 |   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
plex                 |                                  Dload  Upload   Total   Spent    Left  Speed
100 46963  100 46963    0     0   132k      0 --:--:-- --:--:-- --:--:--  131k
plex                 | **** install nodejs ****
plex                 |   installing : node-v14.18.0
plex                 |        mkdir : /usr/local/n/versions/node/14.18.0
plex                 |        fetch : https://nodejs.org/dist/v14.18.0/node-v14.18.0-linux-x64.tar.gz
plex-orchestrator    | Client connected: J3b_zH6V5QD4FnqdAAAD
plex-orchestrator    | Registering worker 58dd9872-1826-4bbc-b501-4fd79536b6da|plex-transcoder-kent.thenursery.josc
plex-orchestrator    | Registered new worker: 58dd9872-1826-4bbc-b501-4fd79536b6da|plex-transcoder-kent.thenursery.josc
plex                 |    installed : v14.18.0 (with npm 6.14.15)
plex                 | [cont-init.d] 92-install-nodejs: exited 0.
plex                 | [cont-init.d] 93-install-transcoder-shim: executing...
plex                 | **** Transcoder is still original, rename ****
plex                 | **** Move shim to destination ****
plex                 | **** Make the shim executable ****
plex                 | [cont-init.d] 93-install-transcoder-shim: exited 0.
plex                 | [cont-init.d] 94-npm-install: executing...
plex                 | **** Running npm install ****
plex                 | npm WARN [email protected] No description
plex                 | npm WARN [email protected] No repository field.
plex                 |
plex                 | added 18 packages from 17 contributors and audited 18 packages in 0.895s
plex                 | found 0 vulnerabilities
plex                 |
plex                 | [cont-init.d] 94-npm-install: exited 0.
plex                 | [cont-init.d] 99-custom-scripts: executing...
plex                 | [custom-init] no custom files found exiting...
plex                 | [cont-init.d] 99-custom-scripts: exited 0.
plex                 | [cont-init.d] done.
plex                 | [services.d] starting services
plex                 | [services.d] done.
plex                 | Starting Plex Media Server.
plex                 | Critical: libusb_init failed
plex                 | Calling external transcoder: /app/transcoder.js
plex                 | ON_DEATH: debug mode enabled for pid [929]
plex                 | Setting VERBOSE to ON
plex                 | Sending request to orchestrator on: http://10.11.12.13:3500
plex                 | cwd => "/transcode/Transcode/Sessions/plex-transcode-c16o4r0xdcailoy5r5fc5vts-46a28b9d-6859-4684-84dd-d665b3b6e3f6"
plex                 | args => ["-codec:#0x01","h264","-codec:#0x02","aac","-analyzeduration","20000000","-probesize","20000000","-i","/media/preroll/skotflix.mp4","-filter_complex","[0:#0x01]scale=w=1920:h=1080[0];[0]format=pix_fmts=yuv420p|nv12[1]","-map","[1]","-metadata:s:0","language=eng","-codec:0","libx264","-crf:0","16","-maxrate:0","324k","-bufsize:0","648k","-r:0","30","-preset:0","veryfast","-x264opts:0","subme=2:me_range=4:rc_lookahead=10:me=hex:8x8dct=1","-force_key_frames:0","expr:gte(t,n_forced*3)","-filter_complex","[0:#0x02] aresample=async=1:ocl='stereo':rematrix_maxval=0.000000dB:osr=48000[2]","-map","[2]","-metadata:s:1","language=eng","-codec:1","aac","-b:1","256k","-f","dash","-seg_duration","3","-dash_segment_type","mp4","-init_seg_name","init-stream$RepresentationID$.m4s","-media_seg_name","chunk-stream$RepresentationID$-$Number%05d$.m4s","-window_size","5","-delete_removed","false","-skip_to_segment","1","-time_delta","0.0625","-manifest_name","http://10.11.12.13:32400/video/:/transcode/session/c16o4r0xdcailoy5r5fc5vts/46a28b9d-6859-4684-84dd-d665b3b6e3f6/manifest?X-Plex-Http-Pipeline=infinite","-avoid_negative_ts","disabled","-map_metadata","-1","-map_chapters","-1","dash","-start_at_zero","-copyts","-vsync","cfr","-y","-nostats","-loglevel","verbose","-loglevel_plex","verbose","-progressurl","http://10.11.12.13:32400/video/:/transcode/session/c16o4r0xdcailoy5r5fc5vts/46a28b9d-6859-4684-84dd-d665b3b6e3f6/progress"]
plex                 | env => {"PUID":"65534","PLEX_ARCH":"amd64","HOSTNAME":"krusty.thenursery.josc","LANGUAGE":"en_US.UTF-8","TRANSCODE_OPERATING_MODE":"remote","ORCHESTRATOR_URL":"http://10.11.12.13:3500","PWD":"/transcode/Transcode/Sessions/plex-transcode-c16o4r0xdcailoy5r5fc5vts-46a28b9d-6859-4684-84dd-d665b3b6e3f6","PLEX_DOWNLOAD":"https://downloads.plex.tv/plex-media-server-new","PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS":"6","NVIDIA_DRIVER_CAPABILITIES":"compute,video,utility","PMS_IP":"10.11.12.13","TZ":"Australia/Melbourne","PLEX_MEDIA_SERVER_USER":"abc","HOME":"/root","LANG":"en_US.UTF-8","PGID":"65534","PLEX_CLAIM":"claim-rxWvbwVxSzbAs2vw3c8C","TERM":"xterm","PLEX_MEDIA_SERVER_INFO_VENDOR":"Docker","PLEX_MEDIA_SERVER_HOME":"/usr/lib/plexmediaserver","DOCKER_MODS":"ghcr.io/pabloromeo/clusterplex_dockermod","X_PLEX_TOKEN":"wAwDjSc-_3qwjua63Yap","PLEX_MEDIA_SERVER_INFO_MODEL":"x86_64","SHLVL":"0","LD_LIBRARY_PATH":"/usr/lib","PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION":"4.18.0-305.19.1.el8_4.x86_64","LIBVA_DRIVERS_PATH":"/usr/lib/plexmediaserver/lib/dri","PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR":"/config/Library/Application Support","CWD":"/","PATH":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","VERSION":"docker","DEBIAN_FRONTEND":"noninteractive","PLEX_MEDIA_SERVER_INFO_DEVICE":"Docker Container (LinuxServer.io)","FFMPEG_EXTERNAL_LIBS":"/config/Library/Application\\ Support/Plex\\ Media\\ Server/Codecs/be22e26-4019-linux-x86_64/","TRANSCODER_VERBOSE":"1"}
plex-orchestrator    | Client connected: ioVr-IHGnKsxImbUAAAF
plex                 | JobPoster connected, announcing
plex-orchestrator    | Registered new job poster: 0e280c34-2287-4e37-a64b-63a4bf4a38db|krusty.thenursery.josc
plex                 | Orchestrator requesting pending work
plex                 | Sending request to orchestrator on: http://10.11.12.13:3500
plex-orchestrator    | Creating single task for the job
plex-orchestrator    | Queueing job 23386abf-9847-41d2-a7bf-a633bfa4bb2c
plex-orchestrator    | Queueing task 0cc77691-9429-4f6f-b3e9-d32db1558ccb
plex-orchestrator    | Running task 0cc77691-9429-4f6f-b3e9-d32db1558ccb
plex-orchestrator    | /app/orchestrator.js:94
plex-orchestrator    |         return this.workerSelectionStrategy();
plex-orchestrator    |                     ^
plex-orchestrator    |
plex-orchestrator    | TypeError: this.workerSelectionStrategy is not a function
plex-orchestrator    |     at WorkerSet.getNextAvailableWorker (/app/orchestrator.js:94:21)
plex-orchestrator    |     at WorkQueue.runTask [as onRunTask] (/app/orchestrator.js:379:30)
plex-orchestrator    |     at WorkQueue.step (/app/orchestrator.js:354:22)
plex-orchestrator    |     at Timeout._onTimeout (/app/orchestrator.js:278:34)
plex-orchestrator    |     at listOnTimeout (internal/timers.js:557:17)
plex-orchestrator    |     at processTimers (internal/timers.js:500:7)
plex-orchestrator exited with code 1
plex                 | Calling external transcoder: /app/transcoder.js
plex                 | ON_DEATH: debug mode enabled for pid [937]
plex                 | Setting VERBOSE to ON
plex                 | Sending request to orchestrator on: http://10.11.12.13:3500
plex                 | cwd => "/transcode/Transcode/Sessions/plex-transcode-4j624853i7o9gb6ac3f23g81-fb1b524a-d76e-47b3-a8ec-2a78b2f80338"
plex                 | args => ["-codec:0","hevc","-codec:2","aac","-analyzeduration","20000000","-probesize","20000000","-i","/media/movies/Free Guy (2020)/Free.Guy.2021.MULTI.VFF.1080p.10bit.BluRay.HE-AAC.5.1.x265.mkv","-filter_complex","[0:0]scale=w=1920:h=808[0];[0]format=pix_fmts=yuv420p|nv12[1]","-map","[1]","-codec:0","libx264","-crf:0","16","-maxrate:0","10804k","-bufsize:0","21608k","-r:0","23.975999999999999","-preset:0","veryfast","-x264opts:0","subme=2:me_range=4:rc_lookahead=10:me=hex:8x8dct=1","-force_key_frames:0","expr:gte(t,n_forced*3)","-filter_complex","[0:2] aresample=async=1:ocl='stereo':rematrix_maxval=0.000000dB:osr=48000[2]","-map","[2]","-metadata:s:1","language=eng","-codec:1","aac","-b:1","256k","-f","dash","-seg_duration","3","-dash_segment_type","mp4","-init_seg_name","init-stream$RepresentationID$.m4s","-media_seg_name","chunk-stream$RepresentationID$-$Number%05d$.m4s","-window_size","5","-delete_removed","false","-skip_to_segment","1","-time_delta","0.0625","-manifest_name","http://10.11.12.13:32400/video/:/transcode/session/4j624853i7o9gb6ac3f23g81/fb1b524a-d76e-47b3-a8ec-2a78b2f80338/manifest?X-Plex-Http-Pipeline=infinite","-avoid_negative_ts","disabled","-map_metadata","-1","-map_chapters","-1","dash","-map","0:6","-metadata:s:0","language=eng","-codec:0","ass","-f","segment","-segment_format","ass","-segment_time","1","-segment_header_filename","sub-header","-segment_start_number","0","-segment_list","http://10.11.12.13:32400/video/:/transcode/session/4j624853i7o9gb6ac3f23g81/fb1b524a-d76e-47b3-a8ec-2a78b2f80338/manifest?stream=subtitles&X-Plex-Http-Pipeline=infinite","-segment_list_type","csv","-segment_list_size","5","-segment_list_separate_stream_times","1","-segment_format_options","ignore_readorder=1","-segment_list_unfinished","1","-fflags","+flush_packets","sub-chunk-%05d","-start_at_zero","-copyts","-vsync","cfr","-y","-nostats","-loglevel","verbose","-loglevel_plex","verbose","-progressurl","http://10.11.12.13:32400/video/:/transcode/session/4j624853i7o9gb6ac3f23g81/fb1b524a-d76e-47b3-a8ec-2a78b2f80338/progress"]
plex                 | env => {"PUID":"65534","PLEX_ARCH":"amd64","HOSTNAME":"krusty.thenursery.josc","LANGUAGE":"en_US.UTF-8","TRANSCODE_OPERATING_MODE":"remote","ORCHESTRATOR_URL":"http://10.11.12.13:3500","PWD":"/transcode/Transcode/Sessions/plex-transcode-4j624853i7o9gb6ac3f23g81-fb1b524a-d76e-47b3-a8ec-2a78b2f80338","PLEX_DOWNLOAD":"https://downloads.plex.tv/plex-media-server-new","PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS":"6","NVIDIA_DRIVER_CAPABILITIES":"compute,video,utility","PMS_IP":"10.11.12.13","TZ":"Australia/Melbourne","PLEX_MEDIA_SERVER_USER":"abc","HOME":"/root","LANG":"en_US.UTF-8","PGID":"65534","PLEX_CLAIM":"claim-rxWvbwVxSzbAs2vw3c8C","TERM":"xterm","PLEX_MEDIA_SERVER_INFO_VENDOR":"Docker","PLEX_MEDIA_SERVER_HOME":"/usr/lib/plexmediaserver","DOCKER_MODS":"ghcr.io/pabloromeo/clusterplex_dockermod","X_PLEX_TOKEN":"wAwDjSc-_3qwjua63Yap","PLEX_MEDIA_SERVER_INFO_MODEL":"x86_64","SHLVL":"0","LD_LIBRARY_PATH":"/usr/lib","PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION":"4.18.0-305.19.1.el8_4.x86_64","LIBVA_DRIVERS_PATH":"/usr/lib/plexmediaserver/lib/dri","PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR":"/config/Library/Application Support","CWD":"/","PATH":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","VERSION":"docker","DEBIAN_FRONTEND":"noninteractive","PLEX_MEDIA_SERVER_INFO_DEVICE":"Docker Container (LinuxServer.io)","FFMPEG_EXTERNAL_LIBS":"/config/Library/Application\\ Support/Plex\\ Media\\ Server/Codecs/be22e26-4019-linux-x86_64/","TRANSCODER_VERBOSE":"1"}
^CGracefully stopping... (press Ctrl+C again to force)
Stopping plex              ... done

Logs from worker docker:

[scott@kent compose]$ sudo docker-compose -f plex-transcoder.yaml -p plex-transcoder up
Starting plex-transcoder ... done
Attaching to plex-transcoder
plex-transcoder    | [mod-init] Attempting to run Docker Modification Logic
plex-transcoder    | [mod-init] Applying pabloromeo/clusterplex_worker_dockermod files to container
plex-transcoder    | [mod-init] pabloromeo/clusterplex_worker_dockermod at sha256:e093eb6d87039239e601ca7c560e2b2a16fe41ebd492d7c8028495e6fdd02001 has been previously applied skipping
plex-transcoder    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
plex-transcoder    | [s6-init] ensuring user provided files have correct perms...exited 0.
plex-transcoder    | [fix-attrs.d] applying ownership & permissions fixes...
plex-transcoder    | [fix-attrs.d] done.
plex-transcoder    | [cont-init.d] executing container initialization scripts...
plex-transcoder    | [cont-init.d] 01-envfile: executing...
plex-transcoder    | [cont-init.d] 01-envfile: exited 0.
plex-transcoder    | [cont-init.d] 10-adduser: executing...
plex-transcoder    | usermod: no changes
plex-transcoder    |
plex-transcoder    | -------------------------------------
plex-transcoder    |           _         ()
plex-transcoder    |          | |  ___   _    __
plex-transcoder    |          | | / __| | |  /  \
plex-transcoder    |          | | \__ \ | | | () |
plex-transcoder    |          |_| |___/ |_|  \__/
plex-transcoder    |
plex-transcoder    |
plex-transcoder    | Brought to you by linuxserver.io
plex-transcoder    | -------------------------------------
plex-transcoder    |
plex-transcoder    | To support LSIO projects visit:
plex-transcoder    | https://www.linuxserver.io/donate/
plex-transcoder    | -------------------------------------
plex-transcoder    | GID/UID
plex-transcoder    | -------------------------------------
plex-transcoder    |
plex-transcoder    | User uid:    65534
plex-transcoder    | User gid:    65534
plex-transcoder    | -------------------------------------
plex-transcoder    |
plex-transcoder    | [cont-init.d] 10-adduser: exited 0.
plex-transcoder    | [cont-init.d] 40-chown-files: executing...
plex-transcoder    | [cont-init.d] 40-chown-files: exited 0.
plex-transcoder    | [cont-init.d] 45-plex-claim: executing...
plex-transcoder    | [cont-init.d] 45-plex-claim: exited 0.
plex-transcoder    | [cont-init.d] 50-gid-video: executing...
plex-transcoder    | [cont-init.d] 50-gid-video: exited 0.
plex-transcoder    | [cont-init.d] 60-plex-update: executing...
plex-transcoder    | Docker is used for versioning skip update check
plex-transcoder    | [cont-init.d] 60-plex-update: exited 0.
plex-transcoder    | [cont-init.d] 90-custom-folders: executing...
plex-transcoder    | [cont-init.d] 90-custom-folders: exited 0.
plex-transcoder    | [cont-init.d] 92-install-dependencies: executing...
plex-transcoder    | **** node is installed, skipping... ****
plex-transcoder    | [cont-init.d] 92-install-dependencies: exited 0.
plex-transcoder    | [cont-init.d] 93-install-shim: executing...
plex-transcoder    | **** Root executable is already clusterplex-worker, only update ****
plex-transcoder    | **** Move shim to destination ****
plex-transcoder    | **** Make the shim executable ****
plex-transcoder    | [cont-init.d] 93-install-shim: exited 0.
plex-transcoder    | [cont-init.d] 94-npm-install: executing...
plex-transcoder    | **** Running npm install ****
plex-transcoder    | npm WARN [email protected] No description
plex-transcoder    | npm WARN [email protected] No repository field.
plex-transcoder    |
plex-transcoder    | audited 74 packages in 1.016s
plex-transcoder    | found 0 vulnerabilities
plex-transcoder    |
plex-transcoder    | [cont-init.d] 94-npm-install: exited 0.
plex-transcoder    | [cont-init.d] 99-custom-scripts: executing...
plex-transcoder    | [custom-init] no custom files found exiting...
plex-transcoder    | [cont-init.d] 99-custom-scripts: exited 0.
plex-transcoder    | [cont-init.d] done.
plex-transcoder    | [services.d] starting services
plex-transcoder    | [services.d] done.
plex-transcoder    | Starting Plex Media Server.
plex-transcoder    | CLUSTERPLEX_PLEX_VERSION => '1.24.3.5033-757abe6b4'
plex-transcoder    | CLUSTERPLEX_PLEX_CODECS_VERSION => 'be22e26-4019'
plex-transcoder    | CLUSTERPLEX_PLEX_EAE_VERSION => 'eae-69c1de6-42'
plex-transcoder    | PLEX_ARCH => 'amd64'
plex-transcoder    | CLUSTERPLEX_PLEX_CODEC_ARCH => linux-x86_64-standard
plex-transcoder    | Codec location => /codecs/be22e26-4019-linux-x86_64-standard
plex-transcoder    | Processing codec libaac_decoder...
plex-transcoder    | Codec libaac_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libaac_encoder...
plex-transcoder    | Codec libaac_encoder.so already exists. Skipping
plex-transcoder    | Processing codec libaac_latm_decoder...
plex-transcoder    | Codec libaac_latm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libaac_lc_decoder...
plex-transcoder    | Codec libaac_lc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libaasc_decoder...
plex-transcoder    | Codec libaasc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libac3_decoder...
plex-transcoder    | Codec libac3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libac3_encoder...
plex-transcoder    | Codec libac3_encoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_4xm_decoder...
plex-transcoder    | Codec libadpcm_4xm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_adx_decoder...
plex-transcoder    | Codec libadpcm_adx_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_afc_decoder...
plex-transcoder    | Codec libadpcm_afc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_aica_decoder...
plex-transcoder    | Codec libadpcm_aica_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ct_decoder...
plex-transcoder    | Codec libadpcm_ct_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_dtk_decoder...
plex-transcoder    | Codec libadpcm_dtk_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ea_decoder...
plex-transcoder    | Codec libadpcm_ea_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ea_maxis_xa_decoder...
plex-transcoder    | Codec libadpcm_ea_maxis_xa_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ea_r1_decoder...
plex-transcoder    | Codec libadpcm_ea_r1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ea_r2_decoder...
plex-transcoder    | Codec libadpcm_ea_r2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ea_r3_decoder...
plex-transcoder    | Codec libadpcm_ea_r3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ea_xas_decoder...
plex-transcoder    | Codec libadpcm_ea_xas_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_g722_decoder...
plex-transcoder    | Codec libadpcm_g722_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_g726_decoder...
plex-transcoder    | Codec libadpcm_g726_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_g726le_decoder...
plex-transcoder    | Codec libadpcm_g726le_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_amv_decoder...
plex-transcoder    | Codec libadpcm_ima_amv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_apc_decoder...
plex-transcoder    | Codec libadpcm_ima_apc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_dat4_decoder...
plex-transcoder    | Codec libadpcm_ima_dat4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_dk3_decoder...
plex-transcoder    | Codec libadpcm_ima_dk3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_dk4_decoder...
plex-transcoder    | Codec libadpcm_ima_dk4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_ea_eacs_decoder...
plex-transcoder    | Codec libadpcm_ima_ea_eacs_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_ea_sead_decoder...
plex-transcoder    | Codec libadpcm_ima_ea_sead_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_iss_decoder...
plex-transcoder    | Codec libadpcm_ima_iss_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_oki_decoder...
plex-transcoder    | Codec libadpcm_ima_oki_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_qt_decoder...
plex-transcoder    | Codec libadpcm_ima_qt_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_rad_decoder...
plex-transcoder    | Codec libadpcm_ima_rad_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_smjpeg_decoder...
plex-transcoder    | Codec libadpcm_ima_smjpeg_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_wav_decoder...
plex-transcoder    | Codec libadpcm_ima_wav_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ima_ws_decoder...
plex-transcoder    | Codec libadpcm_ima_ws_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_ms_decoder...
plex-transcoder    | Codec libadpcm_ms_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_psx_decoder...
plex-transcoder    | Codec libadpcm_psx_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_sbpro_2_decoder...
plex-transcoder    | Codec libadpcm_sbpro_2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_sbpro_3_decoder...
plex-transcoder    | Codec libadpcm_sbpro_3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_sbpro_4_decoder...
plex-transcoder    | Codec libadpcm_sbpro_4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_swf_decoder...
plex-transcoder    | Codec libadpcm_swf_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_thp_decoder...
plex-transcoder    | Codec libadpcm_thp_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_thp_le_decoder...
plex-transcoder    | Codec libadpcm_thp_le_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_vima_decoder...
plex-transcoder    | Codec libadpcm_vima_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_xa_decoder...
plex-transcoder    | Codec libadpcm_xa_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libadpcm_yamaha_decoder...
plex-transcoder    | Codec libadpcm_yamaha_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libaic_decoder...
plex-transcoder    | Codec libaic_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libalias_pix_decoder...
plex-transcoder    | Codec libalias_pix_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libals_decoder...
plex-transcoder    | Codec libals_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libamrnb_decoder...
plex-transcoder    | Codec libamrnb_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libamrwb_decoder...
plex-transcoder    | Codec libamrwb_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libamv_decoder...
plex-transcoder    | Codec libamv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libanm_decoder...
plex-transcoder    | Codec libanm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libape_decoder...
plex-transcoder    | Codec libape_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libasv1_decoder...
plex-transcoder    | Codec libasv1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libasv2_decoder...
plex-transcoder    | Codec libasv2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libatrac1_decoder...
plex-transcoder    | Codec libatrac1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libatrac3_decoder...
plex-transcoder    | Codec libatrac3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libatrac3p_decoder...
plex-transcoder    | Codec libatrac3p_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libaura2_decoder...
plex-transcoder    | Codec libaura2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libaura_decoder...
plex-transcoder    | Codec libaura_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libavrn_decoder...
plex-transcoder    | Codec libavrn_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libavrp_decoder...
plex-transcoder    | Codec libavrp_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libavs_decoder...
plex-transcoder    | Codec libavs_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libavui_decoder...
plex-transcoder    | Codec libavui_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbethsoftvid_decoder...
plex-transcoder    | Codec libbethsoftvid_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbfi_decoder...
plex-transcoder    | Codec libbfi_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbinkaudio_dct_decoder...
plex-transcoder    | Codec libbinkaudio_dct_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbinkaudio_rdft_decoder...
plex-transcoder    | Codec libbinkaudio_rdft_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbink_decoder...
plex-transcoder    | Codec libbink_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbintext_decoder...
plex-transcoder    | Codec libbintext_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbmv_audio_decoder...
plex-transcoder    | Codec libbmv_audio_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbmv_video_decoder...
plex-transcoder    | Codec libbmv_video_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libbrender_pix_decoder...
plex-transcoder    | Codec libbrender_pix_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libc93_decoder...
plex-transcoder    | Codec libc93_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcavs_decoder...
plex-transcoder    | Codec libcavs_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcdgraphics_decoder...
plex-transcoder    | Codec libcdgraphics_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcdxl_decoder...
plex-transcoder    | Codec libcdxl_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcfhd_decoder...
plex-transcoder    | Codec libcfhd_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcinepak_decoder...
plex-transcoder    | Codec libcinepak_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcljr_decoder...
plex-transcoder    | Codec libcljr_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcllc_decoder...
plex-transcoder    | Codec libcllc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcomfortnoise_decoder...
plex-transcoder    | Codec libcomfortnoise_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcook_decoder...
plex-transcoder    | Codec libcook_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcpia_decoder...
plex-transcoder    | Codec libcpia_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcscd_decoder...
plex-transcoder    | Codec libcscd_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libcyuv_decoder...
plex-transcoder    | Codec libcyuv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdca_decoder...
plex-transcoder    | Codec libdca_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdds_decoder...
plex-transcoder    | Codec libdds_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdfa_decoder...
plex-transcoder    | Codec libdfa_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdnxhd_decoder...
plex-transcoder    | Codec libdnxhd_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdpx_decoder...
plex-transcoder    | Codec libdpx_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdsd_lsbf_decoder...
plex-transcoder    | Codec libdsd_lsbf_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdsd_lsbf_planar_decoder...
plex-transcoder    | Codec libdsd_lsbf_planar_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdsd_msbf_decoder...
plex-transcoder    | Codec libdsd_msbf_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdsd_msbf_planar_decoder...
plex-transcoder    | Codec libdsd_msbf_planar_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdsicinaudio_decoder...
plex-transcoder    | Codec libdsicinaudio_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdsicinvideo_decoder...
plex-transcoder    | Codec libdsicinvideo_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdss_sp_decoder...
plex-transcoder    | Codec libdss_sp_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdvaudio_decoder...
plex-transcoder    | Codec libdvaudio_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdvvideo_decoder...
plex-transcoder    | Codec libdvvideo_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdxa_decoder...
plex-transcoder    | Codec libdxa_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdxtory_decoder...
plex-transcoder    | Codec libdxtory_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libdxv_decoder...
plex-transcoder    | Codec libdxv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeacmv_decoder...
plex-transcoder    | Codec libeacmv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeamad_decoder...
plex-transcoder    | Codec libeamad_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeatgq_decoder...
plex-transcoder    | Codec libeatgq_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeatgv_decoder...
plex-transcoder    | Codec libeatgv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeatqi_decoder...
plex-transcoder    | Codec libeatqi_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeightbps_decoder...
plex-transcoder    | Codec libeightbps_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libeightsvx_exp_decoder...
plex-transcoder    | Codec libeightsvx_exp_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libescape124_decoder...
plex-transcoder    | Codec libescape124_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libescape130_decoder...
plex-transcoder    | Codec libescape130_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libevrc_decoder...
plex-transcoder    | Codec libevrc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libexr_decoder...
plex-transcoder    | Codec libexr_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libffwavesynth_decoder...
plex-transcoder    | Codec libffwavesynth_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libfic_decoder...
plex-transcoder    | Codec libfic_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libflashsv2_decoder...
plex-transcoder    | Codec libflashsv2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libflashsv_decoder...
plex-transcoder    | Codec libflashsv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libflic_decoder...
plex-transcoder    | Codec libflic_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libflv_decoder...
plex-transcoder    | Codec libflv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libfourxm_decoder...
plex-transcoder    | Codec libfourxm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libfraps_decoder...
plex-transcoder    | Codec libfraps_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libfrwu_decoder...
plex-transcoder    | Codec libfrwu_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libg2m_decoder...
plex-transcoder    | Codec libg2m_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libg723_1_decoder...
plex-transcoder    | Codec libg723_1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libg729_decoder...
plex-transcoder    | Codec libg729_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libgsm_decoder...
plex-transcoder    | Codec libgsm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libgsm_ms_decoder...
plex-transcoder    | Codec libgsm_ms_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libh261_decoder...
plex-transcoder    | Codec libh261_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libh263_decoder...
plex-transcoder    | Codec libh263_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libh263i_decoder...
plex-transcoder    | Codec libh263i_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libh263p_decoder...
plex-transcoder    | Codec libh263p_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libh264_decoder...
plex-transcoder    | Codec libh264_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libhap_decoder...
plex-transcoder    | Codec libhap_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libhevc_decoder...
plex-transcoder    | Codec libhevc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libhnm4_video_decoder...
plex-transcoder    | Codec libhnm4_video_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libhq_hqa_decoder...
plex-transcoder    | Codec libhq_hqa_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libhqx_decoder...
plex-transcoder    | Codec libhqx_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libiac_decoder...
plex-transcoder    | Codec libiac_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libidcin_decoder...
plex-transcoder    | Codec libidcin_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libidf_decoder...
plex-transcoder    | Codec libidf_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libiff_ilbm_decoder...
plex-transcoder    | Codec libiff_ilbm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libimc_decoder...
plex-transcoder    | Codec libimc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libindeo2_decoder...
plex-transcoder    | Codec libindeo2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libindeo3_decoder...
plex-transcoder    | Codec libindeo3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libindeo4_decoder...
plex-transcoder    | Codec libindeo4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libindeo5_decoder...
plex-transcoder    | Codec libindeo5_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libinterplay_acm_decoder...
plex-transcoder    | Codec libinterplay_acm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libinterplay_dpcm_decoder...
plex-transcoder    | Codec libinterplay_dpcm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libinterplay_video_decoder...
plex-transcoder    | Codec libinterplay_video_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libjpeg2000_decoder...
plex-transcoder    | Codec libjpeg2000_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libjpegls_decoder...
plex-transcoder    | Codec libjpegls_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libjv_decoder...
plex-transcoder    | Codec libjv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libkgv1_decoder...
plex-transcoder    | Codec libkgv1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libkmvc_decoder...
plex-transcoder    | Codec libkmvc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec liblagarith_decoder...
plex-transcoder    | Codec liblagarith_decoder.so already exists. Skipping
plex-transcoder    | Processing codec liblibmp3lame_encoder...
plex-transcoder    | Codec liblibmp3lame_encoder.so already exists. Skipping
plex-transcoder    | Processing codec liblibx264_encoder...
plex-transcoder    | Codec liblibx264_encoder.so already exists. Skipping
plex-transcoder    | Processing codec libloco_decoder...
plex-transcoder    | Codec libloco_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmace3_decoder...
plex-transcoder    | Codec libmace3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmace6_decoder...
plex-transcoder    | Codec libmace6_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmdec_decoder...
plex-transcoder    | Codec libmdec_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmetasound_decoder...
plex-transcoder    | Codec libmetasound_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmimic_decoder...
plex-transcoder    | Codec libmimic_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmjpegb_decoder...
plex-transcoder    | Codec libmjpegb_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmmvideo_decoder...
plex-transcoder    | Codec libmmvideo_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmotionpixels_decoder...
plex-transcoder    | Codec libmotionpixels_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmp1_decoder...
plex-transcoder    | Codec libmp1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmp2_decoder...
plex-transcoder    | Codec libmp2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmp3adu_decoder...
plex-transcoder    | Codec libmp3adu_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmp3_decoder...
plex-transcoder    | Codec libmp3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmp3on4_decoder...
plex-transcoder    | Codec libmp3on4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmpc7_decoder...
plex-transcoder    | Codec libmpc7_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmpc8_decoder...
plex-transcoder    | Codec libmpc8_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmpeg1video_decoder...
plex-transcoder    | Codec libmpeg1video_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmpeg2video_decoder...
plex-transcoder    | Codec libmpeg2video_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmpeg4_decoder...
plex-transcoder    | Codec libmpeg4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmsa1_decoder...
plex-transcoder    | Codec libmsa1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmsmpeg4v1_decoder...
plex-transcoder    | Codec libmsmpeg4v1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmsmpeg4v2_decoder...
plex-transcoder    | Codec libmsmpeg4v2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmsmpeg4v3_decoder...
plex-transcoder    | Codec libmsmpeg4v3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmsrle_decoder...
plex-transcoder    | Codec libmsrle_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmss1_decoder...
plex-transcoder    | Codec libmss1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmss2_decoder...
plex-transcoder    | Codec libmss2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmsvideo1_decoder...
plex-transcoder    | Codec libmsvideo1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmszh_decoder...
plex-transcoder    | Codec libmszh_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmts2_decoder...
plex-transcoder    | Codec libmts2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmvc1_decoder...
plex-transcoder    | Codec libmvc1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmvc2_decoder...
plex-transcoder    | Codec libmvc2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libmxpeg_decoder...
plex-transcoder    | Codec libmxpeg_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libnellymoser_decoder...
plex-transcoder    | Codec libnellymoser_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libnuv_decoder...
plex-transcoder    | Codec libnuv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libon2avc_decoder...
plex-transcoder    | Codec libon2avc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpaf_audio_decoder...
plex-transcoder    | Codec libpaf_audio_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpaf_video_decoder...
plex-transcoder    | Codec libpaf_video_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpam_decoder...
plex-transcoder    | Codec libpam_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpbm_decoder...
plex-transcoder    | Codec libpbm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpcm_bluray_decoder...
plex-transcoder    | Codec libpcm_bluray_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpcm_dvd_decoder...
plex-transcoder    | Codec libpcm_dvd_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpcx_decoder...
plex-transcoder    | Codec libpcx_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpgm_decoder...
plex-transcoder    | Codec libpgm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpgmyuv_decoder...
plex-transcoder    | Codec libpgmyuv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libpictor_decoder...
plex-transcoder    | Codec libpictor_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libppm_decoder...
plex-transcoder    | Codec libppm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libprores_decoder...
plex-transcoder    | Codec libprores_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libptx_decoder...
plex-transcoder    | Codec libptx_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libqcelp_decoder...
plex-transcoder    | Codec libqcelp_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libqdm2_decoder...
plex-transcoder    | Codec libqdm2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libqdraw_decoder...
plex-transcoder    | Codec libqdraw_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libqpeg_decoder...
plex-transcoder    | Codec libqpeg_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libqtrle_decoder...
plex-transcoder    | Codec libqtrle_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libr10k_decoder...
plex-transcoder    | Codec libr10k_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libra_144_decoder...
plex-transcoder    | Codec libra_144_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libra_288_decoder...
plex-transcoder    | Codec libra_288_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libralf_decoder...
plex-transcoder    | Codec libralf_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librl2_decoder...
plex-transcoder    | Codec librl2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libroq_decoder...
plex-transcoder    | Codec libroq_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libroq_dpcm_decoder...
plex-transcoder    | Codec libroq_dpcm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librpza_decoder...
plex-transcoder    | Codec librpza_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librscc_decoder...
plex-transcoder    | Codec librscc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librv10_decoder...
plex-transcoder    | Codec librv10_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librv20_decoder...
plex-transcoder    | Codec librv20_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librv30_decoder...
plex-transcoder    | Codec librv30_decoder.so already exists. Skipping
plex-transcoder    | Processing codec librv40_decoder...
plex-transcoder    | Codec librv40_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libs302m_decoder...
plex-transcoder    | Codec libs302m_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsanm_decoder...
plex-transcoder    | Codec libsanm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libscreenpresso_decoder...
plex-transcoder    | Codec libscreenpresso_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsdx2_dpcm_decoder...
plex-transcoder    | Codec libsdx2_dpcm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsgi_decoder...
plex-transcoder    | Codec libsgi_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsgirle_decoder...
plex-transcoder    | Codec libsgirle_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libshorten_decoder...
plex-transcoder    | Codec libshorten_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsipr_decoder...
plex-transcoder    | Codec libsipr_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsmackaud_decoder...
plex-transcoder    | Codec libsmackaud_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsmacker_decoder...
plex-transcoder    | Codec libsmacker_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsmc_decoder...
plex-transcoder    | Codec libsmc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsmvjpeg_decoder...
plex-transcoder    | Codec libsmvjpeg_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsnow_decoder...
plex-transcoder    | Codec libsnow_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsol_dpcm_decoder...
plex-transcoder    | Codec libsol_dpcm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsonic_decoder...
plex-transcoder    | Codec libsonic_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsp5x_decoder...
plex-transcoder    | Codec libsp5x_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsubviewer1_decoder...
plex-transcoder    | Codec libsubviewer1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsunrast_decoder...
plex-transcoder    | Codec libsunrast_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsvq1_decoder...
plex-transcoder    | Codec libsvq1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libsvq3_decoder...
plex-transcoder    | Codec libsvq3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtak_decoder...
plex-transcoder    | Codec libtak_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtarga_decoder...
plex-transcoder    | Codec libtarga_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtarga_y216_decoder...
plex-transcoder    | Codec libtarga_y216_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtdsc_decoder...
plex-transcoder    | Codec libtdsc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtheora_decoder...
plex-transcoder    | Codec libtheora_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtiertexseqvideo_decoder...
plex-transcoder    | Codec libtiertexseqvideo_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtiff_decoder...
plex-transcoder    | Codec libtiff_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtmv_decoder...
plex-transcoder    | Codec libtmv_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtruemotion1_decoder...
plex-transcoder    | Codec libtruemotion1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtruemotion2_decoder...
plex-transcoder    | Codec libtruemotion2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtruemotion2rt_decoder...
plex-transcoder    | Codec libtruemotion2rt_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtruespeech_decoder...
plex-transcoder    | Codec libtruespeech_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtscc2_decoder...
plex-transcoder    | Codec libtscc2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtscc_decoder...
plex-transcoder    | Codec libtscc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtta_decoder...
plex-transcoder    | Codec libtta_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtwinvq_decoder...
plex-transcoder    | Codec libtwinvq_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libtxd_decoder...
plex-transcoder    | Codec libtxd_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libulti_decoder...
plex-transcoder    | Codec libulti_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libutvideo_decoder...
plex-transcoder    | Codec libutvideo_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvb_decoder...
plex-transcoder    | Codec libvb_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvble_decoder...
plex-transcoder    | Codec libvble_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvc1_decoder...
plex-transcoder    | Codec libvc1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvc1image_decoder...
plex-transcoder    | Codec libvc1image_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvcr1_decoder...
plex-transcoder    | Codec libvcr1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvmdaudio_decoder...
plex-transcoder    | Codec libvmdaudio_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvmdvideo_decoder...
plex-transcoder    | Codec libvmdvideo_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvmnc_decoder...
plex-transcoder    | Codec libvmnc_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp3_decoder...
plex-transcoder    | Codec libvp3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp5_decoder...
plex-transcoder    | Codec libvp5_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp6a_decoder...
plex-transcoder    | Codec libvp6a_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp6_decoder...
plex-transcoder    | Codec libvp6_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp6f_decoder...
plex-transcoder    | Codec libvp6f_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp7_decoder...
plex-transcoder    | Codec libvp7_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp8_decoder...
plex-transcoder    | Codec libvp8_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvp9_decoder...
plex-transcoder    | Codec libvp9_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libvqa_decoder...
plex-transcoder    | Codec libvqa_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwavpack_decoder...
plex-transcoder    | Codec libwavpack_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwebp_decoder...
plex-transcoder    | Codec libwebp_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmalossless_decoder...
plex-transcoder    | Codec libwmalossless_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmapro_decoder...
plex-transcoder    | Codec libwmapro_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmav1_decoder...
plex-transcoder    | Codec libwmav1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmav2_decoder...
plex-transcoder    | Codec libwmav2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmavoice_decoder...
plex-transcoder    | Codec libwmavoice_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmv1_decoder...
plex-transcoder    | Codec libwmv1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmv2_decoder...
plex-transcoder    | Codec libwmv2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmv3_decoder...
plex-transcoder    | Codec libwmv3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwmv3image_decoder...
plex-transcoder    | Codec libwmv3image_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libwnv1_decoder...
plex-transcoder    | Codec libwnv1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libws_snd1_decoder...
plex-transcoder    | Codec libws_snd1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxan_dpcm_decoder...
plex-transcoder    | Codec libxan_dpcm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxan_wc3_decoder...
plex-transcoder    | Codec libxan_wc3_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxan_wc4_decoder...
plex-transcoder    | Codec libxan_wc4_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxbin_decoder...
plex-transcoder    | Codec libxbin_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxbm_decoder...
plex-transcoder    | Codec libxbm_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxface_decoder...
plex-transcoder    | Codec libxface_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxl_decoder...
plex-transcoder    | Codec libxl_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxma1_decoder...
plex-transcoder    | Codec libxma1_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxma2_decoder...
plex-transcoder    | Codec libxma2_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libxwd_decoder...
plex-transcoder    | Codec libxwd_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libyop_decoder...
plex-transcoder    | Codec libyop_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libzerocodec_decoder...
plex-transcoder    | Codec libzerocodec_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libzlib_decoder...
plex-transcoder    | Codec libzlib_decoder.so already exists. Skipping
plex-transcoder    | Processing codec libzmbv_decoder...
plex-transcoder    | Codec libzmbv_decoder.so already exists. Skipping
plex-transcoder    | ON_DEATH: debug mode enabled for pid [466]
plex-transcoder    | Computed CPU ops => 676698
plex-transcoder    | Initializing Worker 58dd9872-1826-4bbc-b501-4fd79536b6da|plex-transcoder-kent.thenursery.josc
plex-transcoder    | Worker listening on port 3501
plex-transcoder    | Worker connected on socket J3b_zH6V5QD4FnqdAAAD
plex-transcoder    | Worker disconnected

The function seems to work fine the first time because I can see output in the logs:

plex-orchestrator    | Using Worker Selection Strategy: "LOAD_RANK"

Optimized Versions

When I try to generate optimized versions, only one movie is processed at once. Is it possible to let the worker do this job and for an example in idle time, let all the workers prepare optimized versions for movies?

Support arm64 workers

Is your feature request related to a problem? Please describe.
When downloading the codecs for the plex media server there is no arm64 in the architecture switch

Describe the solution you'd like
add arm64 to the codec switch so that things like the NVIDIA Jetson Nano can download the needed codecs

Describe alternatives you've considered
forking the worker docker mod and adding it myself

Additional context
N/A

No image for orchestrator job?

I am using portainer and trying to pull the orchestrator image but i'm getting an error that "there is no such image".
Wondering if anyone else is getting this?

Amazing! Requesting Live TV

Currently Live TV fails to do a remote transcode so it is forced to transcode on the PMS.

Would love to be able to scale Live TV transcodes as this is the most used feature of my PMS.

clusterplex_worker_dockermod ARM

👋

Amazing project here 🎉

REQUEST

  • ghcr.io/pabloromeo/clusterplex_worker_dockermod is only available for AMD64 and not ARM.
    Could we have the ARM version too?

I can open a PR too if someone point me to the right direction (may I change the gh workflow to include ARM version too? )

my installation features with proxmox LXC

######## installation using proxmox #######

As I tryed installing in a proxmox cluster with LXC and have many issue before this runing well, I offer you my functional solution based in this tools.
1 Plex server :

  • create a LXC container ubuntu x64 based with no priviliged option inactivated
  • create 5 folders :
    * /var/lib/plexmediaserver
    * /usr/lib/plexmediaserver
    * /data // in my example, this folder contain plex data
    * /app
    * /opt/clusterplex
    I personaly use nfs folder for data and usr sub directory so, you can enable nfs in lxc options.
    for var sub folder, I mount a local folder from my proxmox server (I don't know why nfs share not working)
  • install plex on it with .deb file.
  • rename "/usr/lib/plexmediaserver/Plex Transcoder" to "/usr/lib/plexmediaserver/originalTranscoder"
  • go to /opt/clusterplex folder and execute :
    * /app
    * /opt/clusterplex
    * apt-get update
    * apt-get install curl gcc g++ make git rsync
    * git clone https://github.com/pabloromeo/clusterplex.git
    * cd clusterplex/pms
    * rsync -a ./* /app/
    * curl -sL https://deb.nodesource.com/setup_10.x | bash -
    * apt-get update
    * apt-get install nodejs
    * cd /app
    * npm install
    * cp /app/transcoder-shim.sh "/usr/lib/plexmediaserver/Plex Transcoder"

you can edit /app/transcoder.js with this start of file :
################
const ORCHESTRATOR_URL = process.env.ORCHESTRATOR_URL || 'http://orchestratorIP:3500'
const TRANSCODER_PATH = process.env.TRANSCODER_PATH || '/usr/lib/plexmediaserver/'
const TRANSCODER_NAME = process.env.TRANSCODER_NAME || 'Plex Transcoder'
const TRANSCODER_LOCAL_NAME = process.env.TRANSCODER_LOCAL_NAME || 'originalTranscoder'
const PMS_IP = process.env.PMS_IP || '192.168.0.1'
const TRANSCODER_VERBOSE = process.env.TRANSCODER_VERBOSE || '0'
// Operating mode:
// local
// remote
// both
const TRANSCODE_OPERATING_MODE = process.env.TRANSCODE_OPERATING_MODE || 'remote'
#################

normaly, just change your plex server ip and your orchestrator server ip.

2 Orchestrator :

  • create a LXC container debian x64 based with no priviliged option inactivated
  • create 2 folders :
    * /app
    * /opt/clusterplex
    install needed features :
    * apt-get update
    * apt-get install curl gcc g++ make git rsync
    * git clone https://github.com/pabloromeo/clusterplex.git
    * cd clusterplex/orchestrator
    * rsync -a ./* /app/
    * curl -sL https://deb.nodesource.com/setup_10.x | bash -
    * apt-get update
    * apt-get install nodejs
    * cd /app
    * npm install
    * node server.js

and let run service to check. when all is finish, you can kill process and user pm2 to autostart sercvices :
* cd /app
* pm2 start server.js
* pm2 save

3 Worker :

  • create a LXC container debian x64 based with no priviliged option inactivated
  • create 5 folders :
    * /var/lib/plexmediaserver
    * /usr/lib/plexmediaserver
    * /data // in my example, this folder contain plex data
    * /app
    * /opt/clusterplex
    mount folders same as plex server.
    install needed features :
    * apt-get update
    * apt-get install curl gcc g++ make git rsync
    * git clone https://github.com/pabloromeo/clusterplex.git
    * cd clusterplex/worker
    * rsync -a ./* /app/
    * curl -sL https://deb.nodesource.com/setup_10.x | bash -
    * apt-get update
    * apt-get install nodejs
    * cd /app
    * npm install
    edit /app/worker.js file with this start :
    ###########################
    const STAT_CPU_INTERVAL = process.env.STAT_CPU_INTERVAL || 10000
    const ORCHESTRATOR_URL = process.env.ORCHESTRATOR_URL || 'http://orchestratorIP:3500'
    const TRANSCODER_PATH = process.env.TRANSCODER_PATH || '/usr/lib/plexmediaserver/'
    const TRANSCODER_NAME = process.env.TRANSCODER_NAME || 'originalTranscoder'
    ###########################

normaly, just change your orchestrator server ip.
run service :
* node worker.js

and let run service to check. when all is finish, you can kill process and user pm2 to autostart sercvices :
* cd /app
* pm2 start worker.js
* pm2 save

if you need more informations, please ask.

Error while decoding stream. Unknown error occurres. Inserting silence

Describe the bug

My worker nodes are having issues decoding and the logs are pretty vague. Because of the issue, they're giving up and inserting silence into the stream, making the audio cut in and out.

My transcode folder is a RWX volume in longhorn.

To Reproduce

Use ArgoCD to deploy clusterplex (master branch) with the values.yml included in the additional context section.

Expected behavior

No errors while decoding, a clear audio stream without cutting out.

Additional context

Log file:

[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 12800 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
    Last message repeated 4 times
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 5632 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 12800 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
[AVIOContext @ 0x7fedf1eb0340] Statistics: 1079 bytes read, 0 seeks
[tcp @ 0x7fedee038b80] Starting connection attempt to 10.43.4.243 port 32499
[tcp @ 0x7fedee038b80] Successfully connected to 10.43.4.243 port 32499
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
    Last message repeated 3 times
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 5632 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 12800 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 12800 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
    Last message repeated 4 times
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 5632 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 16384 audio samples of silence
    Last message repeated 4 times
[Parsed_aresample_0 @ 0x7fedf3784440] [SWR @ 0x7feded7a8580] adding 5632 audio samples of silence
[eac3_eae @ 0x7fedf2aa1bc0] error reading output: -1313558101 (Unknown error occurred)
Error while decoding stream #0:1: Unknown error occurred

Values.yml

global:
  timezone: America/Denver
  sharedStorage:
    transcode:
      enabled: true
      storageClass: longhorn-one-replica
      size: 25Gi
      retain: true
    media:
      enabled: true
      existingClaim: plex-media
      retain: true
    additionalMediaVolumes: {}

pms:
  config:
    plexClaimToken: 
    port: 32400
    localRelayEnabled: true
    relayPort: 32499
    pmsIP: "10.0.0.210"
  serviceConfig:
    type: ClusterIP

  ingressConfig:
    enabled: true
    ingressClassName: traefik
    hosts:
        host: plex.<my-domain>
        paths:
            path: /
            pathType: Prefix
    tls: 
      - secretName: plex-<my-domain>-tls
        hosts:
          - plex.<my-domain>

  configVolume:
    enabled: true
    storageClass: longhorn
    accessMode: ReadWriteOnce
    size: 75Gi
    retain: true

  healthProbes:
    startup: true
    readiness: true
    liveness: true

  resources:
    requests:
      cpu: 2000m
      memory: 2Gi
    limits:
      cpu: 3500m
      memory: 7Gi

worker:
  config:
    replicas: 7

  codecVolumes:
    enabled: true
    accessMode: ReadWriteOnce
    size: 1Gi
    storageClass: longhorn-one-replica
  resources:
    requests:
      cpu: 1000m
      memory: 1Gi
    limits:
      cpu: 3500m
      memory: 3Gi
  
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchLabels:
              name: clusterplex-worker
          topologyKey: kubernetes.io/hostname
        weight: 100
      - podAffinityTerm:
          labelSelector:
            matchLabels:
              name: clusterplex-pms
          topologyKey: kubernetes.io/hostname
        weight: 50

Codec download issue

Hi!

Today I restarted my workers and I notice that codecs are not being found in plex downloads.

--2023-01-13 11:34:46-- https://downloads.plex.tv/codecs//linux-x86_64-standard/librv20_decoder.so Resolving downloads.plex.tv (downloads.plex.tv)... 104.18.19.96, 104.18.18.96, 2606:4700::6812:1360, ... Connecting to downloads.plex.tv (downloads.plex.tv)|104.18.19.96|:443... connected. HTTP request sent, awaiting response... 404 Not Found

Please, could you provide a new location or update the worker image with new URLs?

Thanks in advance!

List Helm chart on Artifacthub

Adding the helm chart from this repository to Artifacthub would be a great way to make it more discoverable. It has become kinda a central location for searching for helm charts and other k8s deployment resources.

You would want to add a artifacthub-repo.yml file to the gh-pages branch before adding the repo on Artifacthub. This will allow it to show on their site as the verified publisher. The email address needs to match the one used for the account on ArtifactHub.
https://github.com/artifacthub/hub/blob/master/docs/metadata/artifacthub-repo.yml

repositoryID: clusterplex
owners:
  - name: pabloromeo
    email: [email protected]

JS Error in Worker Logs when transcoding VAAPI (Intel iGPU Cluster)

Hey there! Awesome software and work, looks extremely promising!
I'm getting an error when transcoding VAAPI (viewed in worker logs).
I'm not a very efficient JS dev, so I'm not entirely sure what it's about.
Any help is appreciated! This is the only clustering project I could find for Plex, so I'm very hopeful!

Orchestrator notified
Removing process from taskMap
Received task request
Setting hwaccel to VAAPI
Transcoding failed:
Error: spawn /usr/lib/plexmediaserver/Plex Transcoder ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:274:19)
    at onErrorNT (internal/child_process.js:469:16)
    at processTicksAndRejections (internal/process/task_queues.js:82:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn /usr/lib/plexmediaserver/Plex Transcoder',
  path: '/usr/lib/plexmediaserver/Plex Transcoder',
  spawnargs: [
    '-hwaccel',
    'VAAPI',
    '-codec:0',
    'hevc',
    '-codec:1',
    'ac3',
    '-analyzeduration',
    '20000000',

Hardware transcoding between Synology NAS and Linux Laptop with NVIDIA GPU doesn't seem to work.

Hi @pabloromeo, I've been trying my hardest to get this system working smoothly and I think I'm out of luck,so I'm hoping to get your assistance. I'm not sure exactly what you will require from me, but I will get whatever logs / files you need.

My setup:

  • Plex and Orchestrator - running on Synology NAS 1520+. Using docker-compose as per:
    `version: '3.8'

services:
plex:
container_name: plex
image: ghcr.io/linuxserver/plex:latest
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_dockermod:latest"
VERSION: docker
PUID: 1027
PGID: 65538
TZ: Australia/Brisbane
ORCHESTRATOR_URL: http://plex-orchestrator:3500
PMS_SERVICE: 192.168.0.2 # This service. If you disable Local Relay then you must use PMS_IP instead
PMS_PORT: "32400"
TRANSCODE_OPERATING_MODE: both #(local|remote|both)
TRANSCODER_VERBOSE: "1" # 1=verbose, 0=silent
LOCAL_RELAY_ENABLED: "1"
LOCAL_RELAY_PORT: "32499"
ADVERTISE_IP: http://192.168.0.2:32400/
healthcheck:
test: curl -fsS http://localhost:32400/identity > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
volumes:
- /volume1/docker/plex:/config
- /volume1/docker/plex/PostProcessing:/PlexPostProc
- /volume1/docker/plex/Resources:/usr/lib/plexmediaserver/resources
- /volume1/Plex/Library:/media
- /volume1/docker/plex/transcode:/transcode
ports:
- 32499:32499 # LOCAL_RELAY_PORT
- 32400:32400
- 3005:3005
- 8324:8324
- 1901:1900/udp
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
restart: always

plex-orchestrator:
container_name: plex_orchestrator
image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
healthcheck:
test: curl -fsS http://plex-orchestrator:3500/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 30s
environment:
TZ: Australia/Brisbane
LISTENING_PORT: 3500
WORKER_SELECTION_STRATEGY: "LOAD_RANK" # RR | LOAD_CPU | LOAD_TASKS | LOAD_RANK (default)
volumes:
- /etc/localtime:/etc/localtime:ro
ports:
- 3500:3500
restart: always
`
This boots and runs the main plex server and orchestrator fine, as far as I know, however, it does seem to be detected as a remote server sometimes even though it is LAN connected to the network.

The following is my worker config, which is running on an old laptop with an NVIDIA GPU,with the drivers installed and reporting CUDA working etc.
`version: '3.8'

services:
plex-worker:
image: ghcr.io/linuxserver/plex:latest
hostname: "plex-worker"
container_name: plex_worker
deploy:
mode: replicated
replicas: 2
devices:
- /dev/dri:/dev/dri
environment:
DOCKER_MODS: "ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest"
FFMPEG_HWACCEL: "nvdec"
VERSION: docker
PUID: 1000
PGID: 1000
TZ: Australia/Brisbane
LISTENING_PORT: 3501 # used by the healthcheck
STAT_CPU_INTERVAL: 2000 # interval for reporting worker load metrics
ORCHESTRATOR_URL: http://192.168.0.2:3500
EAE_SUPPORT: "1"
NVIDIA_VISIBLE_DEVICES: "all"
NVIDIA_DRIVER_CAPABILITIES: "compute,video,utility"
healthcheck:
test: curl -fsS http://localhost:3501/health > /dev/null || exit 1
interval: 15s
timeout: 15s
retries: 5
start_period: 240s
volumes:
- /plex/codecs:/codecs # (optional))
- /volume1/Plex/Library:/media
- /volume1/docker/plex/transcode:/transcode
restart: always
runtime: nvidia`

Using these, I am able to get the workers talking to the orchestrator, however, it appears that the workers do increase the GPU usage by about 200MB, but the CPU is still massively high (strangely reporting 195% usage). If I access the transcode directory,files are appearing, and it seems the size of them should be sufficient for the playback to start, but it is just continuously loading, until it eventually fails.

I also noted like in a previous issue, that the plex log does seem to report the request coming from a non-local IP (my external IP), even though everything is local. Not sure if that is the issue, but if you are able to help me troubleshoot why the setup isn't working for me, I'm hoping it might help others in similar situations fix it too.

Thanks!

Issues downloading new Codecs

Describe the bug
Issue downloading codecs

To Reproduce
Deploy latest version

Expected behavior
A clear and concise description of what you expected to happen.

Error

First the start.sh script line "CLUSTERPLEX_PLEX_CODECS_VERSION=$(strings "Plex Transcoder" | grep -Po '[0-9a-f]{7}-[0-9]{4}$')" returns no codec version, changed "CLUSTERPLEX_PLEX_CODECS_VERSION=$(strings "Plex Transcoder" | grep -i '%s version' | awk '{print $3}')" to get the version which works but still no codecs download

--2021-08-29 12:13:23-- https://downloads.plex.tv/codecs/1.6-02cff92dbb-1/linux-x86_64-standard/libzmbv_decoder.so
Resolving downloads.plex.tv (downloads.plex.tv)... 104.18.12.47, 104.18.13.47, 2606:4700::6812:d2f, ...
Connecting to downloads.plex.tv (downloads.plex.tv)|104.18.12.47|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2021-08-29 12:13:24 ERROR 404: Not Found.

ips are changing

Hello,

please don't judge me that hard, in case this is the wrong place to ask. How do I choose the right IPs? Everytime I start the stack, new subnet and new IPs r assigned. what is the best way to assign IPs? The ip of which container schould be specified as "pms ip"? What is a Cluster-IP? Is it the first ip of the subnet?

EAE watchfolder is not writable

Hello,
I've been using your great work for 6 months on k3s mono node with local storage.

Describe the bug
I'm encountering a problem when transcoding EAC3 sound, I've activated the logs (plex/TRANSCODER_VERBOSE) and I have this error :

[eac3_eae @ 0x7fd68da60080] EAE watchfolder is not writable: /tmp/pms-999c8aa9-f2b9-49c1-811c-3d1a14f11462/EasyAudioEncoder/Convert to WAV (to 8ch or less)/7c10c4dc1049389c-com-plexapp-android_1002-0-test.tmp

I can't find any information about this problem on the net. Do you have any idea what the problem is?

Don't hesitate to ask me for further information.

Issue with credit detection

End credit detection is offered by plex server since 1.31.0.

There is definitely a lot to fix on PLEX team side (forum is full of bug reports), but I think there is also an issue specifically when using clusterplex, as I have been able to use it when disactivating the docker mod, but was not able to use it whit docker mod enabled (log showing a "Job failed: Decryption failed" error in this case.

Is someone been able to use PLEX credit detection while using clusterplex ?

Transcoder runs, but nothing is happening

Describe the bug
It took me a while to get the setup running, debugigng on very low levels determined that the TMP path had a wrong permission which didn't show up in the console/log, generating errors when installing binutils to use strings. Therefor all my codecs where missing because the version couldn't be parsed. (This all just to inform you to perhaps add an extra check to see if binutils could be installed?).

Now that's tackled, it seems my stack is running and the transcoder is receiving transcode data from Plex (yay!).
However, it seems that nothing is happening when it starts to Transcode.

After loading the codecs, the container logs immediately get spammed with:

Output #0, dash, to 'dash':
  Metadata:
    encoder         : Lavf58.65.101
    Stream #0:0(eng): Video: h264, 1 reference frame, yuv420p(tv, bt709, progressive, left), 1920x1080 (0x0) [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 11988 tbn (default)
    Metadata:
      encoder         : Lavc58.117.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 9299000/0/0 buffer size: 18598000 vbv_delay: N/A
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp, delay 1024, 130 kb/s (default)
    Metadata:
      encoder         : Lavc58.117.101 aac
Not writing 'clli' atom. No content light level info.
Not writing 'mdcv' atom. Missing mastering metadata.
Not writing 'clli' atom. No content light level info.
Not writing 'mdcv' atom. Missing mastering metadata.
[AVIOContext @ 0x7fb5254d3180] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7fb537286040] Opening 'chunk-stream0-00001.m4s.tmp' for writing
[AVIOContext @ 0x7fb5254d3d40] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7fb537286040] Opening 'chunk-stream1-00001.m4s.tmp' for writing
[AVIOContext @ 0x7fb522a99480] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7fb537286040] Representation 0 media segment 2 written to: chunk-stream0-00001.m4s
[AVIOContext @ 0x7fb5254d3c00] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7fb537286040] Representation 1 media segment 2 written to: chunk-stream1-00001.m4s
[dash @ 0x7fb537286040] Opening 'http://10.10.10.200:32400/video/:/transcode/session/uxsoberj00kw5lkbsikj8lbk/54eca413-dd02-4bf4-b625-7bfe598c72c7/manifest?X-Plex-Http-Pipeline=infinite' for writing
[tcp @ 0x7fb535c78240] Starting connection attempt to 10.10.10.200 port 32400
[tcp @ 0x7fb535c78240] Successfully connected to 10.10.10.200 port 32400
[AVIOContext @ 0x7fb5254d3c00] Statistics: 0 seeks, 1 writeouts
[dash @ 0x7fb537286040] Opening 'chunk-stream0-00002.m4s.tmp' for writing
[dash @ 0x7fb537286040] Opening 'chunk-stream1-00002.m4s.tmp' for writing

FYI: 10.10.10.200 is the local subnet IP of the server running Plex

This keeps running and after a while Plex console reports:
Timed out waiting for segment. and Transcode runner appears to have died

Desktop (please complete the following information):

  • OS: Ubuntu 21.10
  • Docker version: 20.10.7 (build f0df350)
  • Setup used: Linuxserver images with docker-mods (the example docker-compose.yml)

"EAE timeout! EAE not running, or wrong folder?" Error

I'm getting the following error while trying to decode any stream:

[eac3_eae @ 0x7fb3ebb36b40] EAE timeout! EAE not running, or wrong folder? Could not read '/tmp/pms-32e985ec-1ab9-498f-b346-30ca02b0356f/EasyAudioEncoder/Convert to WAV (to 8ch or less)/j7b2umlssurwlcz1dzb8ba86_950-0-6.wav'
[eac3_eae @ 0x7fb3ebb36b40] error reading output
Error while decoding stream #0:1: I/O error

Full log: hjyw270k9k3dg3oc1dx9bqddm_logs.txt

I ran a 'chmod -R 777' on my entire plex folder to make sure it wasn't a permissions issue. My transcoder temporary directory that is set in the plex settings is '/tmp/transcode'.

This is the output from /tmp/pms-5180a806-8e56-46e9-ab20-2ac8f0e46c64/EasyAudioEncoder/Convert to WAV (to 8ch or less)/

root@docker1:/mnt/gvf2/plex# ls tmp/pms-5180a806-8e56-46e9-ab20-2ac8f0e46c64/EasyAudioEncoder/Convert\ to\ WAV\ \(to\ 8ch\ or\ less\)/
9hii6u6sfw4vvfowncgfck95_981-0-54.ec3  9hii6u6sfw4vvfowncgfck95_981-0-55.ec3

The WAV file isn't in there.

My plex stack: plexstack.txt

help wanted: Plex remote access

Hi! I was wondering if someone could help me with setting up remote access with plex. I was able to setup docker-swarm, GlusterFS and all the shares but setting up remote access is proven to be difficulted.
3 identical pc's are the hosts and there all in my home network. I have used the with-dockermods.yaml template and changed only the Timezone and volumes parts.
Everything seems to start fine and transcoding works on my local network.

Thanks in advance!

Non ARM version

First -- This is totally cool and my hats off to you for putting this together! That said I would like to run this without rebuilding the pms container and other bits containers you have on a 64bit intel cpu, is there any chance you could provide a docker stack config / buildout for 64 bit intel cpus? I noticed all of the orchestrator and PMS docker containers you had were for ARM cpus, kind of makes sense .. but I'd like to run the orchestrator and PMS on non ARM architecture.

If "I'm doing this wrong" just let me know :) Thanks!!

Ability to modify transcoder arguments to utilize node capabilities

TLDR; method and/or advice on how to implement argument substitution to take advantage of HW accels on worker node platforms.

Hey Guys, gals, non-binary pals!

I'm working on a low power embedded cluster (repository describing project here)

I've forked the UnicornTranscoder project already, and found a way to insert/substitute custom arguments into the FFmpeg arguments to take advantage of certain hardware acceleration functions based on the available devices. unfortunately such a solution is rather inelegant from a management and orchestration standpoint.

to mitigate this I was initially looking at the Kube_plex project, but this looks much more fit for purpose.

For now I've forked the repo and begun to look into how it deals with passing arguments, and if something simplistic like a case:switch statement could achieve what I'm looking for.

The first and easiest of changes would be to "always" insert -hwaccel auto to allow FFmpeg and it's build in platform parcer to accelerate a portion of the transcoding. secondary to that would be dealing with things such as vaapi (for Intel and AMD/ATI) and vdpau/CUDA for Nvidia discrete cards

Ideally this would be on the worker side and eventually have a configuration script select the relevant hwaccels available on platform such as OpenCL, AMF, VDPAU etc.

Would love your thoughts!

-FelixCLC

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.