Got a large digital media library thanks to your old DVD and Blue Ray collection? A media server will enhance your movie watching experience.
sFirst, your media library gets displayed like Netflix and other streaming services. You get to resume your playback or add titles to your watchlist.
Other than that, you also get a dedicated page for each title that shows movie synopsis, cast, ratings and more.
That’s not it. You can also ‘stream’ the movies and TV shows to your TV or other computers easily if they are connected to the same network.
There are several media servers available for Linux, but Jellyfin is my favorite open source tool for self-hosting media. Apart from being the media server, it also has the functionality of DVR and live TV (may require some additional configuration).
Hosting a media server is also one of the easiest projects you can build with Raspberry Pi.
In this tutorial, I’ll show you how I set up Jellyfin media server on my Raspberry Pi to stream content to other devices connected to my home network. You should be able to achieve the same following the steps mentioned here.
Requirements
I am using a Raspberry Pi 4 for this project. It has 4 GB of RAM but you can use any Raspberry Pi model, although the performance might vary.
During my testing, there was not much difference between Pi 3 and 4 performance while playing a file locally on the network without any hardware transcoding. However, if you do want to transcode, then I think a Pi 4 will be a good fit for this.
- Raspberry Pi with Raspbian OS (or other Debian/Ubuntu based distro)
- Ethernet cable (optional but provides faster speed)
- Keyboard & mouse (it’s optional as you can SSH into your Raspberry Pi and set up from your regular computer)
- External HDD/SSD (this is where you’ll have your media files stored)
Installing Jellyfin on Raspbian OS
Before you begin adding the Jellyfin repository, make sure your Raspbian OS is updated
sudo apt update && sudo apt full-upgrade -y
First you need to install a package called apt-transport-https
as the apt package manager does not come default with the support of repositories running behind HTTPS.
sudo apt install apt-transport-https lsb-release
Next, you need to import the GPG signing key of the repo:
curl https://repo.jellyfin.org/debian/jellyfin_team.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/jellyfin-archive-keyring.gpg >/dev/null
Now you can add the Jellyfin repository to your system using this command:
echo "deb [signed-by=/usr/share/keyrings/jellyfin-archive-keyring.gpg arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/debian $( lsb_release -c -s ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
- How to build a website with WordPress and what are the best plugins to use: WordPress Web Design Tutorials: How to build a website with WordPress and what are the best plugins to use. Building a website with WordPress is an excellent choice due to its versatility, ease of use, and a vast array of plugins that enhance functionality. Here’s a comprehensive guide to building a WordPress website, along with recommendations for the best plugins.
- The Most Important Stages and Plugins for WordPress Website Development: Developing a WordPress website requires careful planning, execution, and optimisation to ensure it is functional, user-friendly, and effective. The process can be broken into key stages, and each stage benefits from specific plugins to enhance functionality and performance. Here’s a detailed guide to the most important stages of WordPress website development and the essential plugins for each stage.
- What are the most powerful Tools for SEO in WordPress?: Powerful SEO Tools for WordPress: Search Engine Optimisation (SEO) is essential for improving your WordPress website’s visibility in search engines. Here are the most powerful tools to optimise your site effectively:
- How to add shipping modules in CubeCart: Step 1: Log in to Your CubeCart Admin Panel: Open your web browser and navigate to your CubeCart admin login page. Enter your username and password to log in.
Step 2: Navigate to the Extensions Section: Once logged in, go to the left-hand menu and click on Manage Extensions. From the dropdown, select Extensions.
Step 3: Find Shipping Modules: In the Extensions section, locate the Shipping tab to view available shipping modules. You can browse through the list or use the search function to find a specific module. - Gathering domain and IP information with Whois and Dig: In the digital age, understanding the intricacies of domain and IP information is essential for anyone navigating the online landscape. This article explores two powerful tools—WHOIS and DIG—that help gather valuable insights about websites and their underlying infrastructure. Whether you’re a cybersecurity professional, a web developer, or simply curious about online resources, you will learn how to effectively utilize these tools, interpret their outputs, and apply this knowledge to real-world scenarios.
- What are the best WordPress Security plugins and how to set them up the best way: Read a comprehensive guide on the best WordPress security plugins and how to set them up to ensure optimal protection for your WordPress site.
- Will a headland provide enough shelter?
- Learn How To Purchase Your Own Domain Name with Fastdot.com: Open your web browser and go to Fastdot.com. Navigate to the Domains section, either from the homepage or from the main navigation bar.
Step 2: Search for Your Desired Domain Name: In the domain search bar, type the domain name you want to purchase. Fastdot supports a wide range of domain extensions (TLDs), such as .com, .net, .org, .com.au, and many others. Click the Search Domain button. The system will check the availability of your desired domain name.
Since a new repository has been added, you need to run the update command once more to ensure that your system knows about the packages available from this new repo:
sudo apt update
Now it is the time to install Jellyfin.
sudo apt install jellyfin
It will take some time to finish installation as Jellyfin will set up a few things in the background, such as a new user called jellyfin
and this user can execute and need access to read your files.
If everything was set up correctly, you will see something like this:
Nice. Let’s set up Jellyfin and make it streaming ready.
Once Jellyfin has been installed, it will run automatically and to interact with it, you need to access its web UI.
Step 1: Access Jellyfin via web interface
If you are using it locally on the Raspberry Pi itself, then you can simply type localhost:8096
and it will work.
But the whole purpose of setting up a server is to access it from other devices. For that, you need to know the IP address of your Pi.
The easiest way to know the IP Address of your Pi is to just type hostname -I
in the terminal and once you know the IP, just type it in the browser:
http://[YOUR IP ADDRESS]:8096
Step 2: Start Jellyfin configuration
You must set up Jellyfin before you start using it. When you first access Jellyfin, it will ask you to configure it.
Step 3: Create user account
Then you have to set up user and password to protect your server from unauthorized access.
Step 4: Add your media library
Next, tt will ask you to select the media library i.e. the folder where you have stored your movies, shows and media files. You can mount your external drive as well. I suggest enabling auto-mount for external USB.
As you can see in the above screenshot, you have to first select the “Content type” which could be “Movies, TV Shows, Videos” etc.
Then you need to add folders where your media files are located, to do that just press the +
icon. (my media is located in /mnt/usb/movies
folder). There are other settings that you can fiddle with below but I prefer to let them as default.
When you are done with it just press Next
.
Step 5: Set up metadata language
On the next page, Jellyfin will prompt you again to select your preferred language for the metadata, as it maintains the metadata of the media you own locally. Press Next
when done.
Step 6: Allow remote connection for streaming to other devices
This step is is important as here you have to select whether you want to Allow remote connections to this server
i.e. accessing jellyfin from other devices and Enable automatic port mapping
.
It already comes selected by default in my case and then press Next
.
🚧
I DID NOT opt for port mapping that allows accessing the Pi from outside your local network. If not setup securely, port forwarding can be a security risk for all your devices connected to the network.
Step 7: Verify your Jellyfin set up
You are done setting up our Jellyfin and now just press Finish
on the next page.
On the home screen, you are welcomed with all the movie/ TV collections you have added.You can play them either from the browser or from the official app Jellyfin app for your smart TV (needs to download app and use the same URL and port you used to access it via wbe browser).
Although this should be enough for you to enjoy movies and TV series but I think you can still improve a lot here by enabling hardware acceleration.
Optional: Using hardware acceleration for streaming on Jellyfin
If you want to stream your content on multiple devices, you don’t always have to stress out your CPU, which might throttle if not cooled properly. It would be a good idea to let Jellyfin uses Pi’s in-built GPU.
Step 1: Set up Raspberry Pi for hardware acceleration
On your Raspberry Pi, first add Jellyfin to video
user group.
sudo usermod -aG video jellyfin
Then you need to increase our Video memory as transcoding can be a pretty hefty task. You have to edit a config.txt
file:
sudo nano /boot/config.txt
Go to the end of the file and add the following code:
💡
If you are using Pi 4 then 320 MB is good enough but if you are using a Pi 3 then set the video memory to 256MB.
gpu_mem=320
In the above picture, I am increasing Pi’s default GPU memory, which is generally set around 76 MB to 320 MB
Save and exit Nano editor by using CTRL+X
then pressing Y
.
You also need to restart the Pi for the changes to take effect:
sudo reboot now
To verify the changes to the allocated GPU memory, run:
vcgencmd get_mem gpu
and the output should look like this:
Step 2: Enabling hardware acceleration in Jellyfin
You have to go back to our Jellyfin’s web interface and on the home page, at the top right click the User icon and it will take us to the user settings page.
Here, click on the Dashboard
option:
Within the dashboard settings pane, on the left side, click on the Playback
option.
In the playback tab, you can find all the settings related to how media files are played on Raspberry Pi.
Under the Transcoding section, you should see a select box with the heading of Hardware Acceleration. Here you have to set the value to Video4Linux2 (V4L2)
.
V4L2 is the only supported option for the Raspberry Pi hardware. Once done, just scroll to the bottom and hit Save.
To sum it up, turning your Raspberry Pi into a media wizard with Jellyfin isn’t just a tech upgrade – it’s like giving your little single board computer a superhero cape!
Picture this: smoother streaming, snappy performance, and all the fun of hardware transcoding. It’s not just a setup; it’s a playful adventure into making your Raspberry Pi the coolest entertainment sidekick ever.
Get ready for a joyride into the world of media magic on your pint-sized powerhouse!