Hosting a Home Media server is easy.

2025 was a busy year for my family. My daughter and my wife traveled the whole country to contest chess championships. And I also traveled alone a couple of times. We bought a DJI Pocket 3 so my wife can take as many moments of our daughter as possible. We planed to also make vlogs out of it. But the plan was just a plan. We didn’t have so much time to edit all those videos. And the amount of videos just piped up as our daughter keeps contesting more and more tournaments.

Soon, the laptop storage is no longer enough for those 4K videos my wife has taken. So I decided to relocate them to my HDD on the old PC. But I don’t want to put them in the corner and never look back. I want my wife can easily access them without any hassle. And I found Jellyfin, a free media system allows me to self-host. Setting it up was easy and straight forward. I just wrapped the installation script and ran it on my PC. Add a nginx configuration to access to it with HTTPS. BAM! It just works.

But when I played some videos, I noticed the video is subtle even on home network.

-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.162, port 39962
[  5] local 192.168.1.24 port 5201 connected to 192.168.1.162 port 39978
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  1.00 MBytes  8.38 Mbits/sec                  
[  5]   1.00-2.00   sec  1.12 MBytes  9.44 Mbits/sec                  
[  5]   2.00-3.00   sec  1.12 MBytes  9.44 Mbits/sec                  
[  5]   3.00-4.00   sec  1.12 MBytes  9.44 Mbits/sec                  
[  5]   4.00-5.00   sec  1.12 MBytes  9.44 Mbits/sec                  
[  5]   5.00-6.00   sec  1.12 MBytes  9.44 Mbits/sec                  
[  5]   6.00-7.00   sec   896 KBytes  7.34 Mbits/sec                  
[  5]   7.00-8.00   sec  1.00 MBytes  8.39 Mbits/sec                  
[  5]   8.00-9.00   sec  1.12 MBytes  9.44 Mbits/sec                  
[  5]   9.00-10.00  sec  1.12 MBytes  9.44 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.03  sec  10.8 MBytes  8.99 Mbits/sec                  receiver
-----------------------------------------------------------

I tested the network speed and it seems not as fast as I expected. I use a coper cable I found in my bag of abandoned stuffs. I unplugged and unrolled the cable and test again, hoped that I don’t have to buy a new one.

Connecting to host 192.168.1.24, port 5201
[  5] local 192.168.1.162 port 56958 connected to 192.168.1.24 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  96.1 MBytes   805 Mbits/sec    0   1.94 MBytes       
[  5]   1.00-2.00   sec  98.9 MBytes   829 Mbits/sec    0   1.94 MBytes       
[  5]   2.00-3.00   sec   104 MBytes   877 Mbits/sec    0   1.94 MBytes       
[  5]   3.00-4.00   sec  98.6 MBytes   827 Mbits/sec    0   1.94 MBytes       
[  5]   4.00-5.00   sec   104 MBytes   874 Mbits/sec    0   1.94 MBytes       
[  5]   5.00-6.00   sec   102 MBytes   854 Mbits/sec    0   1.94 MBytes       
[  5]   6.00-7.00   sec   103 MBytes   867 Mbits/sec    0   1.94 MBytes       
[  5]   7.00-8.00   sec   102 MBytes   852 Mbits/sec    0   1.94 MBytes       
[  5]   8.00-9.00   sec   103 MBytes   863 Mbits/sec    0   1.94 MBytes       
[  5]   9.00-10.00  sec   101 MBytes   845 Mbits/sec    0   1.94 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1016 MBytes   852 Mbits/sec    0             sender
[  5]   0.00-10.01  sec  1014 MBytes   850 Mbits/sec                  receiver

That’s much better. Almost a Gbits/s. And now I can watch my videos smoothly.

Playback Info
  Player Html Video Player
  Play method Transcoding
  Protocol https
  Stream type HLS
Video Info
  Player dimensions 1921x1003
  Video resolution 2688x1512
  Dropped frames 0
  Corrupted frames 0
Transcoding Info
  Video codec H264
  Audio codec AAC (direct)
  Audio channels 2
  Bitrate 47.1 Mbps
  Transcoding progress 16.3%
  Transcoding framerate 32 fps (1.07x)
  Reason for transcoding The video codec is not supported
Original Media Info
  Container mov
  Size 1.3 GiB
  Bitrate 49.7 Mbps
  Video codec HEVC Main 10
  Video bitrate 46.8 Mbps
  Video range type SDR
  Audio codec AAC LC
  Audio bitrate 317 kbps
  Audio channels 2
  Audio sample rate 48000 Hz

But it didn’t end here. I realized some of videos still subtle. They are 3840x2160 HEVC SDR videos, that current Chrome on Arch doesn’t supports. My PC has AMD Ryzen 5 1600 CPU, which is old and probably not the best at transcoding videos to lower resolution format. My AMD GPU is also old, and 4K video is out of dimensions range to use accelerated hardware transcoding.

I did a quick check on Youtube 4K videos, and saw the videos that I received have vp09 codec. Maybe if I really want to watch my videos in 4K on Jellyfin, I have to transcode those videos to this format using a background job. Or even convert 2K and 4K videos to HD to watch on phones. Because my phone can watch those videos in original codec just fine. I will come back to this problem as it requires redesigning the system.

In the mean time, I find an other interesting problem to look into. My current https setup is self-signed, and it problematic to open the Jellyfin website.