Jellyfin and Emby Setup Guide
Use Jellyfin or Emby as a free or low-cost alternative to Plex for serving VOD content to your IPTV customers.
Jellyfin and Emby Setup Guide
Jellyfin and Emby are media server platforms similar to Plex but with different licensing models. Jellyfin is fully open-source and free, while Emby offers a free tier with a paid Premiere option. Both can serve VOD content to your IPTV customers.
Jellyfin vs Emby vs Plex
| Feature | Jellyfin | Emby | Plex |
|---|---|---|---|
| Cost | Free (open-source) | Free tier + Premiere (paid) | Free tier + Plex Pass (paid) |
| User management | Built-in, no account limit | Built-in | Requires Plex Home/Friends |
| Hardware transcoding | Free | Premiere only | Plex Pass only |
| Client apps | Web, Android, iOS, Roku, Fire TV | Web, Android, iOS, Roku, Fire TV | Broadest device support |
| API | Full REST API | Full REST API | HTTP API |
| Self-hosted | Yes, always | Yes | Yes |
Recommendation: Use Jellyfin if cost is a priority and you want full control. Use Emby if you prefer a slightly more polished UI. Use Plex if your customers are already familiar with it.
Installing Jellyfin
Ubuntu/Debian
curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
sudo systemctl enable jellyfin
sudo systemctl start jellyfin
Jellyfin runs on port 8096 by default. Access the setup wizard at http://your-server-ip:8096.
Docker
docker run -d \
--name jellyfin \
-p 8096:8096 \
-v /path/to/config:/config \
-v /path/to/media:/media \
jellyfin/jellyfin:latest
Installing Emby
Ubuntu/Debian
Download the latest .deb package from emby.media and install:
wget https://github.com/MediaBrowser/Emby.Releases/releases/download/4.8.0/emby-server-deb_4.8.0_amd64.deb
sudo dpkg -i emby-server-deb_4.8.0_amd64.deb
Emby runs on port 8096 (same as Jellyfin -- do not run both on the same port).
Adding Media Libraries
Both Jellyfin and Emby use the same folder structure as Plex:
/media/movies/Movie Name (Year)/Movie Name (Year).mkv
/media/tv/Show Name/Season 01/Show Name - S01E01 - Episode Title.mkv
During the setup wizard:
- Create an admin account.
- Add a Movies library pointing to your movies folder.
- Add a TV Shows library pointing to your series folder.
- Select metadata providers (TMDb recommended).
- Enable remote access.
User Management for IPTV Billing
Unlike Plex, Jellyfin and Emby let you create users directly without needing the customer to have an external account. This makes billing integration simpler.
Creating Users via API (Jellyfin)
POST /Users/New
Content-Type: application/json
Authorization: MediaBrowser Token="your-admin-api-key"
{
"Name": "customer_username",
"Password": "generated_password"
}
Granting Library Access
After creating the user, grant access to specific libraries:
POST /Users/{userId}/Policy
{
"EnableAllFolders": false,
"EnabledFolders": ["library-id-1", "library-id-2"]
}
This lets you create tiered access -- basic customers get Movies only, premium customers get Movies + TV Shows + 4K.
Disabling Users (Suspension/Cancellation)
POST /Users/{userId}/Policy
{
"IsDisabled": true
}
Set IsDisabled back to false to reactivate.
Integrating with IPTVbp
The integration follows the same pattern as Plex:
- Create a product in IPTVbp for the media server add-on.
- Configure a webhook that fires on purchase, renewal, and cancellation.
- Your webhook handler script:
- On purchase: Creates a Jellyfin/Emby user via API and emails credentials.
- On renewal: No action needed (user stays active).
- On cancellation/expiry: Disables the user via API.
- On reactivation: Re-enables the user.
Reverse Proxy Setup
For production, serve Jellyfin/Emby behind a reverse proxy with SSL:
Nginx example for Jellyfin:
server {
listen 443 ssl http2;
server_name media.example.com;
ssl_certificate /etc/letsencrypt/live/media.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/media.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket {
proxy_pass http://127.0.0.1:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Performance Tuning
- Transcoding: Enable hardware acceleration (VAAPI for Intel, NVENC for NVIDIA).
- RAM: Allocate at least 4 GB; more if you expect heavy concurrent usage.
- Storage: Use SSDs for the database/metadata, HDDs for media files.
- Network: Ensure at least 1 Gbps to handle multiple simultaneous streams.
- Throttle transcodes: Limit to 2-3 simultaneous transcodes per server unless you have powerful hardware.
Monitoring
Both Jellyfin and Emby have built-in activity dashboards showing:
- Active streams and their transcode status.
- User activity history.
- Server CPU, memory, and network usage.
Pair this with IPTVbp's billing data to understand which customers are heaviest users and whether your hardware needs upgrading.
Related Articles
Plex Integration for IPTV Billing
Set up Plex as a media server alongside your IPTV panel and manage access through IPTVbp billing.
Media Server Billing Strategies
Pricing models, bundling strategies, and automation tips for selling media server access alongside IPTV subscriptions.
Jellyfin & Emby Setup
Configure Jellyfin or Emby with IPTVbp for automated account provisioning.