I have been using a Plex server installed on my Network Attached Storage (NAS) box for quite some time now. With the exception being unable to set some metadata on home movies and videos it has worked pretty well.
But Plex is closed source and over the years there have been some privacy concerns raised about it. And it seems odd that for watching my own videos in my own house I need to be able to connect to some company’s server.
A little while ago I became aware of Jellyfin which is an open source fork of Emby, a competitor with Plex. In general I prefer open source software so it seemed reasonable to at least check out Jellyfin.
For evaluation, I setup a Docker instance of Jellyfin on my laptop configured to access my NAS through my laptop’s file system. The Jellyfin “channel” (client) for Roku is a bit rough and incomplete but the source is available on GitHub and is being worked on so that is likely to improve. Since Jellyfin is a fork of Emby it turns out that the closed source Emby channel for Roku works with a Jellyfin server and is actually quite nice.
Apparently the Emby clients for a number of devices have been updated to specifically block use with a Jellyfin server. But I see no evidence that this has happened yet with the Roku client.
After playing around with the laptop docker Jellyfin server for a while I decide that it was competitive with Plex and I would switch to using Jellyfin.
Jellyfin on the LAN
While my NAS has the Plex server as a supported application it does not support Jellyfin nor does it support Docker. I needed an always on computer to host Jellyfin but I did not want it to be a power hog.
The Plex server on my low performance NAS was unable to transcode videos on the fly. So all my videos are encoded for direct play on the RokuTV. This means that all I need for hosting a Jellyfin server is something that can connect to my NAS and copy the files out. Having enough performance to transcode videos is nice but it is not a requirement.
The obvious solution, at least to me, is a RaspberryPi.
Setting up Jellyfin either directly on the RaspberryPi or in a Docker container on the RaspberryPi is very easy. I tried both but settled on the direct install. I like the idea of being able to update it using standard
sudo apt update and
sudo apt upgrade commands. And, near as I can tell, Docker needs root to run and I like to avoid running things as root.
The only sticking point was deciding how to give access to my media on the NAS to Jellyfin on the RaspberryPi.
Accessing the media
The NAS can be set up to share files using FTP, SMB and/or NFS. I have been leery of NFS from a security point of view and FTP really isn’t the correct protocol for this type of thing. So I initially set up fstab on the RaspberryPi to auto mount the NAS media volume using SMB.
But the RaspberryPi would not run for very long. Sometimes only a few minutes. Rarely as long as a few days. And it was a hard crash, no network connectivity, no lights on the interfaces and no logging that I could find when the RaspberryPi was power cycled to bring it back up.
Searching the web indicated this is not a common problem. In fact, I could not find anyone that reported this type of crash using Jellyfin on a RaspberryPi. My setup is apparently unique in the respect.
Since Jellyfin was running as its own user without
sudo privileges and since the crash symptoms seemed to point to a kernel or driver hang I began to suspect a problem with the SMB mounted directory.
NFS Seems To Fix Crashes
Getting over my aversion to NFS, I enabled support on the NAS and setup the media volume to be shared to the Jellyfin RaspberryPi. I locked things down as best I could with the share restricted to the IP address of the Jellyfin RaspberryPi, etc.
The result was remarkable: Much more responsive Jellyfin server and, so far, no crashes. I guess Linux systems like those on my NAS and on the RaspberryPi are much happier with NFS than with SMB.
Thinking back on it, the SMB share to my laptop has always been a bit slow and a little finicky. I’d always attributed it to Apple’s implementation of SMB. But I wonder now if it is the implementation in the NAS. That would explain why it has been finicky on my laptop and crashes the RaspberryPi.
Unfortunately the Jellyfin channel for Roku is incomplete and does not yet support my home videos. For that I must currently use the proprietary Emby channel for Roku.
I monitored DNS requests from my RokuTV while running the Emby channel through its paces. There is a lookup for
mb3admin.com which is an Emby domain that could be reporting things. Blocking that lookup does not seem to hurt operation of the channel.
There are some Roku OS common lookups, but nothing that looks like it is reporting what videos I have or what I am watching to specifically to Emby. And blocking the lookups for the general Roku tracking domain of
scribe.logs.roku.com doesn’t seem to hurt things either.
The Jellyfin server running on a RaspberryPi using the Emby Roku client/channel works well. Assuming, of course, that you don’t have an issue accessing the media.