I thought I’d share how I built my media server and the choices I made, as it’s gotten to a level where I’m almost satisfied with the current configuration (although that won’t last!) and it’s nearly completely autonomous.
So at the heart of it all is a HP ProLiant MicroServer which I managed to pick up for AUD$240 from eBay. I got this specifically as I wanted a machine that drew minimal power but would be an actual complete server.
It’s a 4-bay server, and it comes with a 250GB drive. Unfortunately it only has 2GB of RAM, which I find is probably the worst feature. There are upgrade kits, but I wanted to keep it cheap.
I looked at NAS’s (like Synology) but I wasn’t keen on being locked to one Operating System, and having 3rd Party Software being 1 or 2 steps behind the current release. And I couldn’t find one with a comparable price, especially as I still had to buy the drives as well. At the time I would’ve had to fork over $400+ for a 4-bay NAS.
When it comes to the drive bays, I’m currently running 3x2TB WD Greens for the Data, and they’re not in any RAID configuration. I know this is stupid, but I’m not storing anything truly important on the server, so I can live with a drive dying. I’ve got plans to get some 4TB drives soon to get the storage I need and some form of redundancy configuration.
The latest version of the MicroServer (G8) has some really awesome features (Dual Gigabit LAN, iLO, USB3) but I don’t know if I’m ready to upgrade yet. I’m not sure I’d utilise those new features really.
I built the server on Windows Server 2012 Standard. As of today I’ve upgraded it to 2012 R2, which did have some issues with the Ethernet firmware (but were resolved by following these instructions).
Why Windows Server? Well I got a licence key from DreamSpark from when I was a Uni student, so it was effectively free (I try not to associate this with the cost of my degree). In hindsight it was probably not the best approach, as the overhead of Windows is a bit much for the MicroServer. I’ve seen that an RDP session can at times consume up to 300MB of RAM, which causes problems with clients consuming media at the time.
I have evaluated running FreeNAS on it instead in the future, but 2012 R2 seems to be more performant than normal 2012, so I may not need to switch. If I do switch it’ll either be to FreeNAS or CentOS.
I did try creating a storage pool to get some redundancy with Windows, but I found that when the storage limit is reached in a thin-provisioned pool, the whole pool is just disconnected without warning. That just frustrated me so I went back to normal drives.
This part took me a while to decide the best fit. In the end I chose Plex, as it was the only Media Server software that was really hands off. I actually enjoyed the software so much I’m now a Plex Pass subscriber. I don’t really utilise the exclusives of the subscription, I just wanted to support the company and help make sure the product doesn’t die.
Currently, I have plex offering up TV Shows, Movies, Photos and Music. I simply have 4 different folders where these different content types live on my server:
Plex is accessible through a variety of Applications, but I find the best is the Web Server that it offers up. This is where all the latest features come first and the responsiveness is unmatched by any other plex clients.
Disclaimer: I only download legal copies of content that I have already purchased and have the right to keep a copy of the content for backup and personal use.
I used to use μTorrent, but it’s so riddled with Ads now that I can’t trust it to not load some crapware onto my system. I kept using it for a long time though as it had these key features:
- The ability to watch a folder for .torrent files to load automatically
- The ability to store partially downloaded files in one directory, and completed files in another directory.
- A Web-based Interface
- The ability to Schedule download times to utilise off-peak data allocation.
A looked around but I couldn’t find a Windows-based client that would give me these features. Until qBittorrent came along, which I’ve now switched over to.
So I’ve configured the torrent client to do the following:
- Watch a Dropbox folder called Torrent Loader. This enables me to simply drop torrent files in from any of my devices (including my phone). When the torrent file is loaded it is deleted from the folder.
- Put currently downloading torrents into a folder called Drive:\Torrents\Pending.
- Put completed torrents into a folder called Drive:\Torrents\Completed.
- Put all the torrent files into a folder called Drive:\Torrents\Torrent Files.
- Stop seeding after 2 full copies are seeded. I’ve been stung before by forgetting this and burning through 200GB of data in a day (the curse of the NBN!).
And that’s it really. With all of this glorious automation I look at the torrent client once every month or so.
A Media Server is useless without Metadata associated with your media. Plex is great at this, as it fetches Movie information from themoviedb, TV information from thetvdb, and Music information from last.fm.
And I really can’t stand when my content is not labelled cleanly and correctly.
The only problem is, I don’t want to be manually renaming files and sticking them in the right places. I’m all about automation, so I struggled with this for a while before I came to a good solution:
Years ago I found YAMMM. It’s a sweet little service that watches a directory, renames any movies inside according to a standard and then fetches information from themoviedb to associate with it. I loved it, but I always got frustrated how it couldn’t process TV Shows as well, and development had stopped (but it has started again).
So I hunted around for a while, trying a bunch of tools, all of which sucked a little, until a friend told me about CouchPotato.
Now CouchPotato is primarily for flagging Movies that you “want” and it’ll go and download them for you via torrent or usenet. I tried that out, but I didn’t like how it would occasionally get a full Blu-ray Rip of a movie even though I told it not to get those, wasting bandwidth and space. But the amazing feature I found it could do was:
- Watch a directory (for me it’s Drive:\Torrents\Finished) for new Movies
- Move the new Movie into a defined location (i.e. Drive:\Movies)
- Rename the Movie according to a configured standard.
- Now the file is in the Movies folder, so Plex will see it and take action.
So I just let CouchPotato run in the background, cleaning up the movie files it finds from the completed torrents folder. Nice and simple.
TV was longer than Movies to solve for getting clean and consistent renaming happening on my content. There are quite a few tools out there, but they have so many dealbreaking problems that I nearly gave up on the whole concept entirely.
Then after some more googling I found SickBeard. Again, it’s in the same vein as CouchPotato in that it’s for downloading torrents/usenet on behalf of you, but I found that the watch+rename tool in it worked amazingly.
So I’ve set it to watch the same Drive:\Torrents\Finished folder as CouchPotato, keeping a constant lookout for TV Shows coming in and moving them to the TV folder that Plex is watching.
The only problem? Sometimes a TV Show and a Movie have the same name, so the wrong service may steal it first and try to make something out of it. These false positives are quite rare though, so I don’t get that concerned about it to try to overcome it.
Oh and it won’t touch a new show unless you add it to the system.
To keep my Music consistently tagged correctly, I used to use a paid application called TuneUp, but if you let it run on auto it can actually cause some annoying mis-tags, and the product officially died for a period of time. That death of the product spurred me to find an alternative, which is MusicBrainz Picard.
Any music that I get, whether it be physical copies or through a service like iTunes, I now run it through MusicBrainz Picard. Even if the data looks to be tagged correctly, I still do it.
I’ve configured Picard to move the tagged files to a separate location, which I then move to the Drive:\Music folder. This is the only real mandraulic processing that I do of my media, as new additions are probably once a month or less.
I find sometimes Picard can’t edit the files to rename and re-write tags, and that’s simply from the Read-Only flag being set on them. I’m not sure what’s doing that.
A PS3 is actually pretty good at consuming media from servers, and I used it for quite a while. I got one of the Bluetooth remotes and we used to watch everything through it. It was nice having a single device that could connect to Free-to-air (with the Play TV addon) and my Media Server, as well as play games.
But as my media collection grew, it started to really suck for finding content. I hate scrolling through lists that load only when you get to the bottom, and the names don’t appear unless you stop scrolling for a second, so you can’t see what letter you’re at. The PS3 UI wasn’t designed for that.
Plus, all the rich metadata I have with my media isn’t consumed by the PS3. It just sees a DLNA server and gives you the title of the content.
So that’s where the Roku came in. At the time it looked like a nice simple media client to hook up to my TV, and there wasn’t much competition elsewhere. I ordered a Roku 3 as I wanted the full-featured product (I had to order through Amazon to get it shipped to Australia though).
It’s a really tight product. It’s basically a tiny raspberry-pi-size device with a nice GUI and a standard platform that providers can create applications against. Because of this all the apps have a similar look and feel to them. The remote is simple to use (minimal number of buttons), and you never turn the product off, you just turn the TV off and it’ll go to sleep after a while.
And my favourite feature is the ability to direct play files, rather than stream. This means the processing load is taken off the server and put on the client. If my server tries to transcode/stream a Full HD file, it can cause paused playback for buffering if some other task is running as well (like backups or RDP).
There are a few problems though:
- It’s a product for US Consumers. I can’t even set my timezone in it, as Australian timezones aren’t even offered in the configuration.
- The official Roku app is locality-locked to the US, so I can’t get that either. I had to buy a 3rd party app to get a Roku remote on my phone.
- To use Netflix and Hulu you need to use a different DNS server, which isn’t impossible to set up but I can’t be bothered with it. I then also need to subscribe to those services via some proxying/VPN service.
- The apps are constrained to the platform, so they’re effectively all limited in capability to meet the standards of the device. I can’t utilise all of the Plex Server capabilities as they’re just not available in the app yet and they may not be possible with the framework offered in the Roku.
- Large libraries get hard to search through, especially when it comes to music.
I’m starting to look at alternatives to the Roku, just so I can get to my content even faster. It may even come to building a small PC to connect to the TV and just using a wireless mouse+keyboard with it. That’ll also let me switch out to browsing the web or whatever. If it’s Windows 8 I could use the Windows 8 App as well, which isn’t too bad now (had some stability problems when it first came out).
I see the PS3 as a simple media player, the Plex Web interface as the fully capable product, and the Roku sits somewhere in the middle.
So right now I’m pretty happy with my Media Server. Torrented content will be loaded via Dropbox, it’ll get dumped into a folder that SickBeard or CouchPotato will pick up on, and then it’s cleaned and moved into the main libraries for Plex to offer up to my Client devices.
The Server is running the latest and greatest Windows Server, so I’m not getting any compatibility problems or falling behind the dev cycle for the Applications I run.
99% of the time I don’t have to touch anything, it just keeps humming away in the background.
I should also mention that all of these services on the Media Server offer Web-based interfaces. I use Hamachi to get remote access to my server, so then I can log into the sites via their respective ports for remote administration from anywhere, or I can even RDP in to the server if I need to fix something else.