Since the Media Players post, I’ve been working on refining our setup and getting it to the point where I can stop tinkering with it and just leave it be to run. I believe I’m finally close to that point. With that in mind, here is the last post in this series, covering all of the back end servers and front end players and everything that goes in between.
There is a lot of information here, so feel free to ask questions if I’m unclear on anything. I’m including a few options for alternative configurations that will accomplish close to the same thing for people just in case your needs aren’t the same as mine.
I’ll also preface this by saying that everything in my setup must pass the Wife Acceptance Test. When a three year old starts nattering and chatting random things at her when she’s trying to find the one show that he wants to watch, she’ll literally have a panic attack if there is too much information or things aren’t working. So any solution that I chose must be reliable and easy to use when you have a small child playing the drums on whats left of her sanity. I should also mention that she has MS which has impacted some of her cognition — when faced with software that seems to change for the sake of changing it goes well beyond frustrating and maddening for her and straight into rage inducing.
In our household, we’ve got a pretty big mix of devices that we consume media on, and I wanted a solution that would work on all of them. I didn’t necessarily need it to offer pause and resume on different device types, i.e. stop watching in the living room and resume watching on a tablet in the bedroom, but its nice to have. My final configuration allows for this — if you use the right player.
Here is the list of devices we consume media on:
- Our main TV, a 65″ Sony Android TV (2015 model). In addition to the various apps on the TV, we also have the following connected to it, each for a specific task:
- Two Amazon Fire Kids Edition tablets
- A Nexus 5X
- A OnePlus 3
- Two Dell Chromebooks
- An Asus ZenPad S 8 tablet
While not as huge of a list as others, I’m sure, its still a pretty diverse mix of devices. The biggest advantage is that they’re all running some flavor of Android.
This gives us a couple requirements for the software. First, it must work on every device listed above. Second, it must pass the Wife Acceptance Test as mentioned above. Third, it must have individual accounts that splits the kids content from our content. Fourth, it must also be able to be used by a 3 year old on a tablet. Last, it needs to be extremely reliable and “just run” without constantly tweaking it.
There are three obvious choices here: Plex, Emby and Kodi. Plex and Emby both require a server application running somewhere, and Kodi is standalone. Both the Plex and Emby servers will run on our Synology DS1515+ that I talked about in my last post. Both Plex and Emby are best with a software subscription. I opted to purchase lifetime subscription for both of them. As of this writing, a lifetime subscription for Plex is $150 and Emby is $100. With Plex you can get away with not purchasing a subscription, but with Emby it is pretty much required.
I’m not going to do a big comparison of features between Plex and Emby. The both have almost identical feature sets, including PVR functionality now, which could potentially replace MythTV. Plex has more platforms that it is compatible with, but for me that didn’t really make much difference as both of them run on everything I use.
On all of the Android devices, I have both Plex and Emby installed. I mostly use Emby as Plex seems to have more issues with playback on Android. The kids mostly use Plex as they’re more familiar with it. On the Roku, playback through Plex is always perfect. It mostly seems to be with videos that are encoded with AC3 audio, but not always. Emby is quite a bit slower than Plex, but so far we have had virtually no playback issues on any device except the Sony TV. I’m pretty sure that any issues that I’ve had are due to the Sony. The processor in the Sony is in my opinion a bit under powered, and it only has only 1GB of RAM and 16GB of storage. It does okay, but I really would have liked something more, especially from a company like Sony where I have certain expectations.
Kodi runs fine on all of these and I have no issues pointing video sources directly at an NFS share on the Synology. The interface is a bit sluggish on the Sony TV, as is the database sync and lookup, but it does run. I’ll talk about Kodi more later.
Whether you choose to run Plex or Emby, you’ll need a backend server. One of the reasons I chose the Synology NAS was that it could run the servers on them and it has just enough horsepower to transcode a single stream. If our kids were each watching something on their tablets though, there would be some buffering and stuttering issues if the media can’t direct play on it.
Since I also still run MythTV, I opted for purchasing a small Gigabyte Brix box to run things on. I configured it with a Transcend 256GB M.2 SSD, 16GB of Crucial RAM and the most important part, a Pulse 8 USB CEC adapter.
I decided to take the load off of the Synology and put both the Plex and Emby servers on the Brix, as well as the MythTV backend. All local databases for the media servers are stored on the SSD so metadata retrieval is very fast. All of the media is stored on the Synology and accessed via NFS by the Brix, and then streamed from the Brix to the client. Since the Brix has an i5 processor in it, it is able to transcode up to about 3 1080p streams if necessary.
For MythTV, the MySQL database is located on the Brix SSD as well, and all recordings are stored on the Synology.
Mostly we use Emby on all of our devices now, for one big reason: Kodi. That may sound like a contradiction, but it has actually worked out extremely well.
Kodi and Emby are Better Together
Kodi has the best video playback engine out of all of the renderers I have tried (and there have been many). Kodi also also has plugins for hundreds of other media sources including PVR plugins for MythTV. Kodi’s MythTV plugins allow you to use the Myth backend to watch recordings, watch live TV and schedule recordings. The Kodi interface to Myth is almost as good as the native Myth frontend.
Emby and Plex can both act as a PVR now as well, but neither of them have automatic commercial detection or the schedule capabilities that Myth does. When playing back a Myth recording on Kodi, the autodetected commercials are automatically skipped during playback. That was something I wasn’t expecting when I first tried it out.
Now, if you add the Kodi for Emby plugin to both the Emby server and Kodi, you get something very nice. The combination of the two allows you to use Emby for all of your metadata lookups, and use Kodi for playback. When you login to Kodi, it syncs all changes directly from Emby incrementally, usually taking just a few seconds.
Kodi takes all of the libraries it has access to through Emby and merges them into a single “Movies” or “TV Shows” library within Kodi. For example, I have four libraries setup: Kids TV, Kids Movies, TV and Movies. The “Parents” profile has access to all four libraries, the “Kids” profile only has access to Kids TV and Kids Movies. If I login to Kodi with the Parents profile, it merges the two TV libraries into a single Kodi library. It does the same with movies. This is not a bad thing, but something to keep in mind as you’re organizing your media and setting up accounts.
Now, the Kodi plugin takes things one step further, too. It keeps track of the playback status across all devices. To Emby, Kodi is another client much like an Android client. This means when you stop playback on Kodi, it will save your state on the Emby server so you can resume on another Kodi (with Emby) or another Emby client. Watched states are also all done on the server making things pretty seamless for moving from room to room.
There are plugins to do this with Plex as well, but they are not nearly as cleanly implemented as Emby for Kodi.
One Remote to Rule them All
One of the key elements required to pass the Wife Acceptance Test is ease of use. If she has to perform some esoteric ritual any time she wants to watch TV or put on something for the kids, she’ll be just as likely to take a cricket bat to the entire setup as she would be to use it. Since the Sony is an Android TV, it already has apps to do just about anything. The remote even has a Netflix button on it, and we get everything we want but HBO Go (seriously Comcast, why don’t you work with Android TV yet?). With the Roku, its two remotes. Plus of course the remotes for the PS4 and other things.
The combination of Kodi, the Brix and the Pulse 8 CEC adapter solve the remote problem nicely. I have the Brix on HDMI 2 which is an “MHL” port. I enable CEC on the TV and like magic, the Sony remote also controls Kodi. It was almost completely automatic. I did have to change a few permissions in /dev on the Kodi box to allow the Kodi process to access the Pulse 8, but other than that it works flawlessly. All of the buttons are recognized. I also mapped the Red button to Delete, the Yellow button to automatically switch to the Kids profile, the blue button to toggle the watched status of a program, and the green button to Info. As one other convenience step, I set the “TV” button on the remote to switch to HDMI 2, which is Kodi.
From within Kodi, I can access everything in the Emby library and the MythTV recordings. I can even watch live TV within Kodi, again utilizing MythTV. You can schedule recordings through Kodi as well, but I find it much easier to use MythWeb, which I’ve also installed on the Brix.
It all works very, very well. I’m currently running Kodi 16 (Jarvis) using the ReFocus theme, but I’m very excited for Kodi 17. The new default theme for Kodi 17 is simply fantastic, it is easy to navigate and is just beautiful to look at. As soon as Kodi 17 is officially released, I’ll be upgrading.
As I said before, this was a really long post, and I didn’t even include any screen shots or sample configurations. If anyone wants to see any or wants more information about anything, just let me know. I’ll try to followup or include configuration examples for each component in its own post.