Correct me if I'm wrong...
Currently transcoding takes place in chunks. The transcoder engine is sent a chunk which it converts and drops into the specified folder, which Plex then prepares to stream and the transcoder engine is sent another chunk. These chunks are sent sequentially, from the start of the movie to the end of it, in order. This means they are processed in order.
If the above group of statements are correct, Carlo has a few things to over-come that may put a monkey wrench in things... If one of the transcoding devices is faster than the others, and it is sent a job which it completes, while the others are still working on their first job(s), it could get sent it second chunk which may even be done before the first chunks by the other devices. Now this chunk is out of order. How would Plex deal with this "out of sequence" chunk?
This is as much about timing as it is about the speed of the CPU's involved. It's also as much about how Plex handles the chunks, too.
Plex does this a bit different than Emby and this is going to be where I may have to rework things a bit.
I think what happens is 1 transcode job gets 1 machine. Since each transcode job has a unique ID the proxy could determine which box it needs to go to. Obviously Carlo will need to confirm, but that's my understanding of things.
Could possibly have to track transcodes and complete this all on the same machine. Until I actually get back into working on this (after work project) I won't know yet.
So Carlos would the best approach for figuring out available transcodes per distributed server be to put in the passmark scores for each listed device somewhere like a list/database? Then let the main agent figure out what resolution/quality level each passed transcode stream is. Like a 720p stream is 1500 passmark vs 1080p being 2000 (or whatever testing shows) and it keeps a running tab vs available passmark for active transcoding clients. once it hits needing more passmark it sends a wol packet to next resource to bring it online. After needs drop down a sleep command is sent?
This is something I've thought about. But to be honest I'm not sure it's going to be needed. For example if it works in "chunks" and these chunks can get spread around "round-robin" style then this will pretty much be moot. In that case it might be as simple as just using the computer with the least CPU use at present. If on the other hand for whatever reason a particular transcode needs to stay pinned to a particular computer then this will be much more important.
These are all GOOD questions which I've already thought about and know to test. These things don't really worry me much at all as I'll just work through them. What I'll find more challenging is taking into consideration how each person may want to use this. Examples:
Admin 1: Wants to run all transcodes on Plex server until it hits say 80% CPU then use client #2 until it hits 90% CPU use then use client #3
Admin 2: Wants to keep Plex CPU as low as possible and wants to do all transcoding first on client #2 then fall back to clinet #1 (Plex Server)
Admin 3: Wants to run transcodes on client #1 (Plex server) until it breaks 50% use then WOL client 2 and use it until 80% then WOL client #3 and use.
What happens if WOL doesn't work or client isn't available. How to reallocate transcode sessions?
So to me getting the "basics" working and figuring out if "chunking" will allow different parts to run on different computer will be the easy part but just figuring out WHICH client to use will be the harder part due to everyone wanting a different configuration.
Make sense?