Two Weeks Using The Jellyfin Streaming Media System

| Comments

I am not sure how to write this blog post without implicating myself in any shady, nefarious, or illegal activities. I will do my best.

I used to rip my own DVD media, then eventually Blu-Ray media. I had a pretty sizable collection. An old blog post indicates that I had five 1 TB hard disks in my arcade cabinet configured in RAID 6. That was back in 2010. It wasn’t too many years later before Netflix and friends made storing so much media obsolete.

Jellyfin under Proxmox

Things in the streaming world are getting tricky again. A lot of people are complaining about the costs of subscribing to so many services, but our large number of streaming subscriptions are still cheaper than my cable bill was in 2002, and we are able to share some of these accounts with friends and family.

What got me thinking about once again sailing the seas of sketchy TV and movie downloads is Amazon. I was three or four seasons deep into watching Northern Exposure when Amazon enabled ads in Prime video streaming. I made it through the third ad before I stopped watching.

For historical reasons, the Amazon account on our living-room TV isn’t mine. It is the account that all of our grandfathered-in Prime shipping nonsense is tied to. I didn’t have the foggiest idea of how to pay Amazon to stop showing me ads at three in the morning, so I just moved on to other shows on other services.

This happened close enough to my migration from my old homelab server to a new N100 mini PC running Proxmox. There’s a handy set of Proxmox helper scripts for installing all sorts of things, and one of those scripts sets up a Jellyfin server in an LXC container. This seemed like a good excuse for hedging my video-streaming bets!

The Jellyfin helper-script installer for Proxmox is fantastic

If you install Jellyfin in a virtual machine, then you need to pass your GPU through to that virtual machine to take advantage of hardware transcoding acceleration. You only get to pass your consumer-grade GPU through to one virtual machine, and that seems like a bummer.

You can share the host GPU with as many LXC containers as you like, and the Proxmox helper script will detect whether you have an Intel, AMD, or Nvidia GPU, it will install the correct libraries to work with your GPU, and it will correctly configure the permissions on your container so that Jellyfin can make use of the GPU.

There really is nothing to it.

My tiny Intel N100 GPU can transcode 1080p HEVC video to 1080p h.264 at 270 frames per second, and it can transcode 2160p 10-bit HEVC video to 2160p at around 75 frames per second.

This is challenging to benchmark, because playing back either of those videos with transcoding enabled does not max out the GPU. When I play a second video stream, GPU utilization rises from around 50% to about 75%. I am pretty confident that this N100 could manage to transcode at least four of those 2160p 10-bit videos at the same time.

The encoding preset in Jellyfin’s server settings is set to auto. I tried adjusting it to the fastest preset, called ultrafast, and transcoding went at the same pace as auto, so my little N100 is already squeezing as already trading as much quality for performance as is possible. The bit rates are high enough that I haven’t noticed any encoding artifacts.

The Tailscale helper script is fantastic!

One of the Proxmox helper scripts not only installs Tailscale in your LXC container, but it also configures the permissions of the container to allow Tailscale to work. That second part is amazing, because I have manually installed two LXC containers since setting up Proxmox, and both times I forgot that I had to make configuration changes to get Tailscale to work.

My phone and tablet have no problem connecting to my Jellyfin server from outside my network, and thanks to Tailscale, I didn’t have to expose my Jellyfin server to the entire world.

My Chromecast with Google TV 4K devices don’t need transcoding

They have been able to play back every weird file I have downloaded directly with no transcoding of the video or audio. That includes the 2160p 10-bit HEVC movie.

This is where I ran into my first Jellyfin bug, and I really don’t understand what is actually happening. That 10-bit movie looks like it has a flat color profile when played in my living room. I am told that you need to enable tone mapping when playing back HDR video on a non-HDR TV.

AI Dwight Rider

It fails to play if I enable tone mapping on the server. If I set the Android TV Jellyfin client to a bitrate other than auto, the colors appear more vibrant. I can only assume the colors now look correct, but I don’t have another identical video to compare to.

I assumed forcing a maximum bitrate would force the video to transcode, and I figured this might be why the tone mapping was working. This is not the case!

The video looks the same whether I enable or disable tone mapping on the server, and the video is STILL PLAYING DIRECT. There isn’t any significant CPU or GPU usage on the server, the dashboard says it is playing direct, and the colors do look correct.

I think this is pretty weird, but all things considered, it is a rather minor glitch.

I have a 1080p Chromecast with Google TV in my office. I haven’t tested it as heavily, but it does seem to play back all my 1080p HEVC video without transcoding. If I had known I would be installing Jellyfin, I would have spent the extra $20 on the 4K model even though the ancient 43” TV in my home office is only 1080p!

NOTE: The Chromecast HD regularly goes on sale for $19.99, and the Chromecast 4K regularly goes on sale for $39.99.

Sometimes my Android TV device gets stuck dropping frames

I may as well mention my only other glitch just to get it out of the way. Sometimes after playing for 10 or 15 minutes, some of my video streams will start dropping frames. The Jellyfin app on my Chromecast doesn’t give me the tools to see what is going on, but it sure looks like it is only playing half the frames.

UPDATE: This also happens occasionally when watching Netflix on my Chromecast 4K. I tried disabling frame-rate matching in the Android settings, and it seems to have fixed this problem while watching both Netflix and Jellyfin. I don’t think this is frame-dropping problem is a Jellyfin problem. I think it is a Chromecast bug!

It almost feels like the Chromecast is falling behind then playing frames faster than it should to catch up, but that can’t be the case, because Jellyfin is setting the TV to 24 Hz and the videos are 24 frames per second. There’s no room there to play anything but the correct frames.

It happened consistently with one set of videos. The 2160p 10-bit movie had zero issues. The 1080p AI upscaled Star Trek episodes only seem to have this problem on occasion after I fast forward past the theme song.

The glitch is easily corrected by backing out of the video and resuming. This may not be perfect, but it isn’t a deal breaker for me. It would be supremely annoying if Jellyfin were my only video service.

Alldocube iPlay Mini 50 playing games

The first time I saw this happen, I reconnected to my Jellyfin server via the local IP address instead of the server’s Tailscale IP address. I know the extra layer of encryption is a lot of work for the Chromecast. I am pretty sure Tailscale can only push data at 20 or 30 megabits per second on the Chromecast, and that may have been a bottleneck for my video files. I didn’t do the math to verify that, but disabling Tailscale didn’t improve the situation.

There are a couple of potentially relevant bugs already listed in Jellyfin’s bug tracker. I assume it is being worked on as we speak, and this probably may be solved in the next few releases.

This is only a problem with my Chromecasts. I haven’t seen this sort of frame dropping on my Android phone, low-end Android tablet, or my computers. My choices seem to be to replace the Chromecasts, wait until Jellyfin solves the problem, or put up with the occasional glitch. I don’t expect Jellyfin to occupy more than 5% of our streaming time, so I am happy for now to just wait and see what happens.

There are things you can download that you can’t pay to stream legitimately!

I am a Star Trek fan. I grew up watching Star Trek: The Next Generation while it was originally airing, and I used to catch two reruns of the original Star Trek on our local PBS station every Saturday night. It is exciting that the studio spent millions of dollars scanning the original film from The Next Generation, redoing most of the special effects, and turning that into an amazing 4K version of what I have only ever seen in broadcast quality.

It is my understanding that they didn’t make their money back, so I don’t expect that they will ever do the same thing with Deep Space Nine or Voyager. The community has picked up some slack here, though, because there are AI upscaled versions of these shows available.

Tom Paris Cyclops Voyager AI Upscale

The upscaling doesn’t always come out perfect. When there isn’t enough information to work with, it might turn Tom Paris into a Constable Odo cosplaying as a cyclops!

I have watched the first season of one of the upscaled copies of Star Trek: Voyager. It isn’t perfect, but I did compare a few frames to what is currently streaming on Paramount+. All the title cards in the upscale are more crisp, everyone’s hair looks slightly better, and the colors a just a little more vibrant.

I never watched Buffy the Vampire Slayer, but the official 4K release is supposed to be quite awful. Some scenes that have been expanded to widescreen have camera and lighting equipment in frame. Some scenes have been cropped instead of expanded, so the top or bottom of the scene is gone. It also sounds like the color grading is quite weird.

The community upscale of Buffy is supposed to be amazing! It is in the original aspect ratio, the color grade tries to match what was originally broadcast, but it is as cleanly upscaled to 4K as they could manage. That sounds fantastic!

There are shows that just aren’t streaming anywhere!

I won’t say that these are classic shows, but I have collected some of my childhood memories that just aren’t available to stream anywhere: Automan, Manimal, and Misfits of Science. They were all available at archive.org!

Best of the 1980s

This is enough of an excuse for me to keep a Jellyfin server up and running!

Why not run Plex?

Plex started to look more than a little sketchy when they were accidentally sharing people’s recently watched video list to their friends. I imagine most Plex users have a giant collection of illegally obtained movies and TV shows. Just the fact that Plex is collecting data about what you store and watch is unacceptable.

Even ignoring that, I would have tried Jellyfin because Jellyfin is open source. I try to avoid commercial software as much as I can. I like knowing that the terms and conditions won’t randomly change, and that I won’t have the rug pulled out from under me.

Conclusion

I knew I didn’t have a ton to say about sketchy downloads, ripping media, and running Jellyfin, but I wanted to write this stuff down anyway! I am no longer any sort of expert on at-home video streaming, playback, or media collecting. I definitely wouldn’t fit in well over at r/DataHoarders!

I am excited to have learned that my little N100 server is more than capable of feeding all our screens at the same time, even if most of those devices happen to require transcoding. I am excited that I get to watch things that aren’t available on any of my streaming services, and it is really nice knowing that we will have some extra entertainment available next time our Internet connection goes down.

What do you think? Have you tried Jellyfin? Do you prefer Plex? Do you have a big old media collection at home? Or are you interested in dipping your toe in the water like I was? Let me know in the comments, or stop by the Butter, What?! Discord server to chat with me about it!

Comments