A more performant Plex Media Server build

I’m currently using on my QNAP NAS systems as the PMS, but unfortunately, because it has an Annapurina Labs quad-core ARM processor in it, scanning the media (or doing anything else with it) is quite slow.

My thought right now is that because I LIKE the fact that typically, the NAS units consume less power than an actual server, my thought is that I would just get a mini PC (whether it’s from Minisforum, Beelink, Morefine, ASRock Industrial, Intel NUC, etc.) and use the NAS to be the “dumb” data server, but then use the mini PC to actually do all of the “heavy lifting”/data processing work.

I don’t know what would be the implications of trying to, for example, run the media scan over a gigabit ethernet network. (Some of the mini PCs have a 2.5 GbE NIC, but I don’t have any 2.5 GbE capable switches at the moment.)

Does the community here think that this would work or would this be an absolutely terrible idea?

What would be the catches/gotchas that I should pay attention to/be aware of if I am going to try and set up something like this?

Your thoughts would be greatly appreciated.

I looked at Plex in the past but it didn’t do all that I wanted, I use Kodi with MariaDB.

My NAS keeps my movies with Bluray rips of 50GB+ in size, I connect to it via tablets or mini pc’s (Lenovo m900 tiny which I can buy for cheap). I have no issues with streaming my media over ethernet or wifi, or over VPN when I dial home.

However, I have set it up so that a few meg of the file buffers before play starts, I don’t transcode so there is hardly any load on the server, the client plays the file flawlessly.

You should be able to buffer the file right now so I can’t see a need of getting any new kit. Those Android boxes are a bit crapy but will work ok.

It’s not the buffering that’s the issue.*

(*Well…not really. Playing 2160p video on my Samsung TV, because the Samsung TV doesn’t have enough power to actually transcode the 2160p audio streams down from DTS:X to PCM, and therefore; requires the server to do it, but that’s a separate issue altogether.)

The issue is, for example, with TV shows (e.g. my own DVD rips), Plex now will do the thing where it will try to detect the intros of the episodes so that if you want to skip the intros, there will be a button that will pop up on the bottom right hand corner of the TV for that.

So that’s all fine and dandy.

The problem is the detection algorithm/task/process on the server side, results in a high CPU load, which whilst the Annapurina Labs ARM CPU can handle it, it isn’t the most performant for that task/process.

This problem was also exacerbated by the fact that the data itself (my entire media library) recently went through a data migration process (had to offload the data and then load it back onto the server again) because I was going to shrink the storage array volume, which, despite there being unused space (i.e. safe to shrink), to actually perform the volume shrink operation, you had to offload all of the data, delete the volume, and then recreate said volume with the new, smaller capacity. Again, not a Plex issue, but that was what happened which led to the data migration off and back onto the server, which is what led to the system now having to do the intro detections again.

In theory, once it goes through it now, it would only need to process the new media that’s added (e.g. any new shows that I am ripping).

But until it gets to that point, processing the existing rips is what’s taking a really long time, and this processing is what I would like to offload onto another system so that a) it would do it faster, and b) it would relegate the NAS back to just being a dumb, file/data server.

That’s the theory/the idea being this.

(I use Plex rather than Kodi and MariaDB because it requires less administration on my part. Linus (Sebastian) also has issues with Plex, but as he also stated, it works for his home theater and his wife/kids, and therefore; if it works, and it isn’t broken, then there is little reason to switch to something else.)

(On my local network, I have not problems connecting to it and playing media from it (generally, and broadly speaking, with the exception of trying to play 2160p media, but that again, is a bit of a Samsung issue (which causes the media to require transcoding), moreso than a Plex issue. And the Annapurina Labs ARM CPUs really isn’t that powerful for on-the-fly transcoding for 2160p content. But that’s also a bit of a sidebar issue/non-issue. (I have a mini PC to handle the 2160p playback. And I think that I might have tested it before and even an 8-core 5900HX wasn’t really able to do the on-the-fly transcoding any better (and for some reason, when I was testing it on my 6700k with a 3090, it wasn’t using NVENC neither. Again, sidebar problems.)

Right now, I am just focused on speeding up the intro detection (primarily).

Ah ok I see what you mean now. Others have the same issues as you perhaps try the following "Disable video transcoding" slows down series intro detection - #2 by mkilbride2599_gmail_com - Plex Features - Plex Forum some suggestions there.

I suspect even if you get new kit, you will continue to have the same problem until you identify the solution.

Thank you.

Yeah, I don’t really mind the intro detection.

I was just hoping to make that part of the process go/run faster by at least, offloading the CPU demand onto another system, and then said system to send the processed results back to the dumb server.

That was the idea/theory behind this proposal of a project.

(Sadly, I can’t tell if the bottleneck will be trying to read the media files over standard GbE (i.e. do I need faster network when reading the media files off the NAS which has 8 HGST 10 TB SATA HDDs in it), or if the NAS was already processing the intro detection as fast as it can go (the HDDs themselves being the bottleneck) vs. do I need to re-migrate the server again, where I put a more powerful processor AND all of the hard drives all in the same, local system, so that it WON’T be reading the media files over ANY sort of a network.)

I haven’t been able to ascertain the last part.

(I did try to run it over the network, and it seems to be pegging the GbE NIC at almost full, network load, when it is reading the media files for the intro detection. Not really sure if that’s actually doing the processing any faster though because my 8-core AMD Ryzen 9 5900HX processor doesn’t seem to end up jumping to 100% CPU utilisation, so I’m not sure if the intro detection isn’t multi-core/multi-processor capable or if there is a bottleneck somewhere in the line that’s preventing the intro detection from running really any (nor) that much faster.)

I run Plex Server on an old HP EliteDesk 800 G1 with an i7 processor and Window 10, and I don’t even worry about processing power. I have it connected to an HDHomeRun tuner. It has run flawlessly. I perform updates, and that’s about it.

How well does it perform when it is searching for intros to shows that you might have or other similar types of tasks/operations?

I tested the Analyze button, and it took a couple seconds for a TV show i recorded. I have it set to analyze when it is recorded, so maybe that had something to do with it.

I have not noticed any lag when doing anything with Plex. I use an old HP computer with an Intel i7 for playback, too. I don’t notice any lag when jumping ahead or moving back on a video. Both server and player perform very well. No complaints.

I think that the “real” test (or at least devising a test that is similar to my situation) would be if you were to delete the metadata database and then have your system re-analyze all of the files and “re-compute” the intro detection and also all of the “chapter” thumbnails as well – that would be a lot closer of a test.

If you are playing it back on the same system as the Plex Media Server, then I don’t think that you would have any issues either.

The question is what happens if you the host of your server is a very low powered ARM processor (or maybe even go all the way down to a Raspberry Pi), and then see how well that analyze function performs when it has to re-scan your library and generate that metadata all over again.

I know that once my database has been rebuilt, adding new files to it would be significantly less of an issue, but right now, my system is still doing the initial rebuild following the server/data migration.

If you have to say, transcode a 2160p video to an iPad for example, then it will also really tell how performant your system is with respect to that.

(I try to do the transcode on the fly so that I don’t have to keep multiple copies of the same files on my server, provided that it is able to perform said on-the-fly transcode fast enough without buffering issues.)

I can’t answer how well a raspberry Pi or ARM processor will handle things, but I don’t imagine very well, especially transcoding 4k video. My database had to rebuild last week because I was messing around with things but I didn’t look at the CPU or HDD R/W speeds so I can’t answer whether my process was slow because of bottlenecks there.

What I can, hopefully help you answer, is my current/past experiences. A lower CPU is only going to make transcoding, intro detection, audio analysis and things like that go slower. I do the same as you and keep 1 version of each movie (except 4k) and transcoding dvd/Blu-ray movies is relatively “cheap” on the CPU but transcoding 4k is very demanding. I keep my 4k movies in a separate Plex library and only share with people who can direct playback. Those who can’t, only have access to the Blu-ray version.

My system can transcode a 4k video file (and audio) to my phone with about 5-10 second initial buffering then can stream without issues but the CPU is at 100% utilization on all cores. And it takes about 3-4 hours to detect the intros for my tv shows (just north of 5tb). I currently have a 6 core VM setup. I used to have an older cpu so had Plex as a 4 core VM and that couldn’t reliably handle 4k transcode playback at all (constant buffering, just unwatchable).

It sounds like you want on the fly 4k transcoding which, although may be possible, I highly suspect will be unrealistic on an ARM or raspberry Pi CPU (if you try it, let me know!). So you’ll want a higher CPU for that playback and the higher CPU will also help with intro detection. I’ve never looked into offloading intro detection, not sure if you can, but if you find a way, again, I’d be interested in what you find and your results.

Thank you.

I appreciate your insights.

So…the “weird” thing, I guess, is that my TV can handle the 4K video playback without any issues. (It’s a Samsung QN90A 65".) So, the Plex Media Server dashboard will show that it will direct play the video stream. However, apparently Samsung TVs (nor LG TVs) support DTS:X natively, and therefore; that HAS to be transcoded to like PCM or some other audio format that said Samsung TV CAN handle, and THAT is where I am having the most significant bottleneck.

A LOT of transcoding tests, predominantly tests video transcode performance, because TYPICALLY, that WOULD be the most demanding workload.

However, the same review sites (for computer hardware, whether it’s CPUs and/or GPUs), don’t really pay nearly as much attention in terms of AUDIO transcode performance, since MOST of the tests and/or benchmarks they run, is video+audio together.

But that isn’t the case here.

And as a result, the audio-only transcode is actually quite a LOT slower than the video transcode, IF you’re ONLY transcoding just the audio. (i.e. video+audio transcode can use multi-core processors/multithreading) But, it would appear that audio-only transcode either does not or cannot.

(There is a distinct possiblity that my iPad Air 2 might be too old to be able to play 4K videos “natively” (as in there’s no hardware decode on the processor in said iPad Air 2 vs. newer phones/iPads that would have better hardware decode support for that.)

But the presumed DTS:X → PCM transcode - it’s so slow and so bad (no hardware acceleration (not video, so no NVENC support nor QuickSync support, etc.) that it makes trying to play 4K movies on my TV (without the help of a mini PC and/or HTPC), a non-starter.

(There’s a sidebar proposal right now where I am thinking about consolidating at LEAST my 4 or 5 NAS systems down to a single, 32-core/64-thread (dual 16 core/32 thread Xeon) server, and then Plex can run as its own either Container and/or VM, and I can give it all 32-cores and/or 64-threads so that if and/or when it has to rebuild and re-index the entire library, it will have a LOT more processing power than the quad-core Annapurina Labs ARM processor that my QNAP NAS currently has. But this proposal is something else entirely.)

The original plan for this was to either move the Plex Media Server onto my Core i7-6700K (4-core/8-thread), but I think that even that wouldn’t really be fast enough for on-the-fly 4K transcoding. (And I’ve also tested it with a 3090 installed, hoping to be able to use NVENC and hoping that it would make good use of said 3090, but not really. I mean, the 3090 helped a little bit, but not nearly as much nor as fast as I thought that it was supposed to be able to handle.)

So that’s why, I ended up thinking about doing the server consolidation instead.

I appreciate your input, your thoughts, and your insights though.

Thank you.