Configure Jellyfin Media Server #46

Open
opened 2025-09-14 08:14:13 +00:00 by tonym · 0 comments
Owner

Jellyfin Media Server Configuration Guide

Overview

Jellyfin is a free, open-source media server that lets you manage and stream your personal media collection. It's a complete alternative to proprietary solutions like Plex, offering full control over your media without tracking or premium features.


Container Installation

Docker Run Command

docker run -d \
  --name=jellyfin \
  --restart=unless-stopped \
  -e PUID=99 \
  -e PGID=100 \
  -e TZ=America/Chicago \
  -p 8096:8096 \
  -p 8920:8920 \
  -p 7359:7359/udp \
  -p 1900:1900/udp \
  -v /mnt/user/appdata/jellyfin:/config \
  -v /mnt/user/media/movies:/movies \
  -v /mnt/user/media/tv:/tv \
  -v /mnt/user/media/music:/music \
  --device /dev/dri:/dev/dri \
  linuxserver/jellyfin:latest

Docker Compose

version: "3.8"
services:
  jellyfin:
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    environment:
      - PUID=99
      - PGID=100
      - TZ=America/Chicago
      - JELLYFIN_PublishedServerUrl=http://192.168.0.5:8096
    ports:
      - "8096:8096"
      - "8920:8920"          # HTTPS web port
      - "7359:7359/udp"      # Discovery port
      - "1900:1900/udp"      # DLNA port
    volumes:
      - /mnt/user/appdata/jellyfin:/config
      - /mnt/user/media/movies:/movies:ro
      - /mnt/user/media/tv:/tv:ro
      - /mnt/user/media/music:/music:ro
      - /mnt/user/media/audiobooks:/audiobooks:ro
    devices:
      - /dev/dri:/dev/dri     # Hardware transcoding
    networks:
      - media

Container Configuration

Port Configuration

  • 8096: Web interface (HTTP)
  • 8920: Web interface (HTTPS)
  • 7359/udp: Auto-discovery
  • 1900/udp: DLNA discovery

Volume Mounts

  • /mnt/user/appdata/jellyfin:/config: Configuration and metadata
  • /mnt/user/media/movies:/movies:ro: Movie library (read-only)
  • /mnt/user/media/tv:/tv:ro: TV show library (read-only)
  • /mnt/user/media/music:/music:ro: Music library (read-only)
  • /mnt/user/media/audiobooks:/audiobooks:ro: Audiobook library (read-only)

Environment Variables

  • PUID=99: User ID (nobody)
  • PGID=100: Group ID (users)
  • TZ: Timezone setting
  • JELLYFIN_PublishedServerUrl: Server URL for clients

Hardware Acceleration

  • /dev/dri:/dev/dri: Intel Quick Sync Video
  • For NVIDIA: --gpus all or specific GPU

Initial Configuration

Web Setup Wizard

  1. Access Web Interface: http://your-server-ip:8096
  2. Create Admin User: Set username and password
  3. Add Media Libraries:
    • Movies: /movies
    • TV Shows: /tv
    • Music: /music
    • Audiobooks: /audiobooks
  4. Configure Remote Access: Set up port forwarding if needed
  5. Complete Setup: Finish wizard

Library Configuration

Movie Library Setup

# Recommended folder structure:
/mnt/user/media/movies/
├── Movie Name (Year)/
│   ├── Movie Name (Year).mkv
│   └── Movie Name (Year)-poster.jpg

TV Show Library Setup

# Recommended folder structure:
/mnt/user/media/tv/
├── Show Name/
│   ├── Season 01/
│   │   ├── Show Name - S01E01 - Episode Name.mkv
│   │   └── Show Name - S01E02 - Episode Name.mkv
│   └── poster.jpg

Music Library Setup

# Recommended folder structure:
/mnt/user/media/music/
├── Artist Name/
│   ├── Album Name (Year)/
│   │   ├── 01 - Track Name.flac
│   │   ├── 02 - Track Name.flac
│   │   └── folder.jpg

Service Configuration

Transcoding Settings

Hardware Transcoding (Intel)

  1. Dashboard → Playback → Transcoding
  2. Enable hardware decoding: Intel Quick Sync Video
  3. Enable hardware encoding: Intel Quick Sync Video
  4. Transcoding thread count: Auto
  5. Hardware decoding options:
    • H.264
    • HEVC
    • MPEG2
    • VC1

NVIDIA Hardware Transcoding

# For NVIDIA GPUs
services:
  jellyfin:
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility,video

Network Configuration

Local Network Settings

  1. Dashboard → Networking
  2. LAN Networks: 192.168.0.0/24,172.16.0.0/16
  3. Known Proxies: Add reverse proxy IP if used
  4. Secure Connection Mode: Handled by external HTTPS
  5. Require HTTPS: Disable if using reverse proxy

Remote Access

# Router port forwarding
External Port 8096 → Internal 192.168.0.5:8096
External Port 8920 → Internal 192.168.0.5:8920

User Management

Create Users

  1. Dashboard → Users → Add User
  2. Set Username/Password
  3. Configure Library Access
  4. Set Parental Controls (if needed)

User Profiles

{
  "Name": "Family",
  "EnabledFolders": ["Movies", "TV Shows", "Music"],
  "MaxParentalRating": "PG-13",
  "EnablePlaybackRemuxing": true,
  "EnableContentDeletion": false
}

Integration Points

With *arr Stack

Sonarr Integration

  1. Sonarr Settings → Connect → Add Connection
  2. Type: Jellyfin
  3. Server: http://jellyfin:8096
  4. API Key: From Jellyfin Dashboard → API Keys
  5. Test Connection

Radarr Integration

  1. Radarr Settings → Connect → Add Connection
  2. Type: Jellyfin
  3. Server: http://jellyfin:8096
  4. API Key: Generate in Jellyfin
  5. Update Library: Enable

With Reverse Proxy

Nginx Configuration

server {
    listen 80;
    server_name jellyfin.yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name jellyfin.yourdomain.com;
    
    ssl_certificate /etc/ssl/certs/jellyfin.crt;
    ssl_certificate_key /etc/ssl/private/jellyfin.key;
    
    location / {
        proxy_pass http://192.168.0.5: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;
        
        # WebSocket support for web client
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # Disable buffering for live streams
        proxy_buffering off;
    }
}

Traefik Labels

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.jellyfin.rule=Host(`jellyfin.yourdomain.com`)"
  - "traefik.http.routers.jellyfin.entrypoints=websecure"
  - "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
  - "traefik.http.services.jellyfin.loadbalancer.server.port=8096"

With Home Assistant

# configuration.yaml
media_player:
  - platform: jellyfin
    host: 192.168.0.5
    port: 8096
    username: homeassistant
    password: your-password

Monitoring & Notifications

Health Monitoring

# Check Jellyfin health
curl -I http://localhost:8096/health

# Monitor transcoding sessions
curl -H "X-Emby-Token: YOUR_API_KEY" \
  "http://localhost:8096/Sessions" | jq

Log Monitoring

# Monitor Jellyfin logs
tail -f /mnt/user/appdata/jellyfin/log/log_*.log

# Monitor transcoding logs
tail -f /mnt/user/appdata/jellyfin/log/FFMpeg.*.txt

Performance Monitoring

#!/bin/bash
# Monitor Jellyfin performance
echo "=== Active Sessions ==="
curl -s -H "X-Emby-Token: $API_KEY" "http://localhost:8096/Sessions" | \
  jq ".[] | {User: .UserName, Client: .Client, PlayState: .PlayState.IsPaused}"

echo "=== Hardware Acceleration ==="
docker exec jellyfin cat /proc/meminfo | grep -i gpu

Notification Setup

Gotify Integration

  1. Dashboard → Plugins → Gotify
  2. Install Plugin
  3. Configure Gotify Server URL
  4. Set Application Token
  5. Enable Notifications:
    • New library content
    • Playback start/stop
    • User authentication

Backup Configuration

Configuration Backup

#!/bin/bash
# Backup Jellyfin configuration
DATE=$(date +%Y%m%d)
BACKUP_DIR="/mnt/user/backups/jellyfin"

# Stop container for consistent backup
docker stop jellyfin

# Backup config (exclude cache and logs)
rsync -av --exclude="cache" --exclude="logs" --exclude="transcodes" \
  /mnt/user/appdata/jellyfin/ $BACKUP_DIR/jellyfin_config_$DATE/

# Restart container
docker start jellyfin

# Compress backup
tar -czf $BACKUP_DIR/jellyfin_config_$DATE.tar.gz -C $BACKUP_DIR jellyfin_config_$DATE/
rm -rf $BACKUP_DIR/jellyfin_config_$DATE/

# Retain last 30 days
find $BACKUP_DIR -name "jellyfin_config_*.tar.gz" -mtime +30 -delete

Database Backup

#!/bin/bash
# Backup Jellyfin database
sqlite3 /mnt/user/appdata/jellyfin/data/jellyfin.db ".backup /mnt/user/backups/jellyfin/jellyfin_db_$(date +%Y%m%d).db"

User Data Export

# Export user viewing history and preferences
curl -H "X-Emby-Token: $API_KEY" \
  "http://localhost:8096/Users" > user_data_backup.json

Testing Procedures

Functionality Tests

Basic Streaming Test

# Test direct play
curl -I "http://localhost:8096/Videos/ITEM_ID/stream"

# Test transcoding
curl -I "http://localhost:8096/Videos/ITEM_ID/stream?MaxStreamingBitrate=2000000"

API Tests

# Test authentication
curl -X POST "http://localhost:8096/Users/authenticatebyname" \
  -H "Content-Type: application/json" \
  -d '{"Username":"testuser","Pw":"password"}'

# Test library scan
curl -X POST -H "X-Emby-Token: $API_KEY" \
  "http://localhost:8096/Library/Refresh"

Client Tests

  • Web Client: Test in multiple browsers
  • Mobile Apps: Test iOS/Android apps
  • TV Apps: Test Roku/FireTV/AndroidTV
  • Desktop Apps: Test Jellyfin Media Player

Performance Tests

# Monitor resource usage during playback
docker stats jellyfin

# Test concurrent streams
# Use multiple clients simultaneously

# Monitor transcoding performance
watch -n 1 "docker exec jellyfin ps aux | grep ffmpeg"

Troubleshooting

Common Issues

  1. Hardware Transcoding Not Working:

    # Check device permissions
    ls -la /dev/dri/
    
    # Verify container access
    docker exec jellyfin ls -la /dev/dri/
    
    # Check Intel GPU support
    docker exec jellyfin vainfo
    
  2. Library Not Scanning:

    # Check permissions
    docker exec jellyfin ls -la /movies /tv /music
    
    # Force library scan
    curl -X POST -H "X-Emby-Token: $API_KEY" \
      "http://localhost:8096/Library/Refresh"
    
  3. Playback Issues:

    # Check FFmpeg logs
    docker exec jellyfin tail /config/log/FFMpeg.*.txt
    
    # Test media files
    docker exec jellyfin ffprobe /movies/Movie.mkv
    

Log Analysis

# Main Jellyfin logs
docker logs jellyfin

# Application logs
tail -f /mnt/user/appdata/jellyfin/log/log_*.log

# Transcoding logs
tail -f /mnt/user/appdata/jellyfin/log/FFMpeg.*.txt

# Authentication logs
grep "Authentication" /mnt/user/appdata/jellyfin/log/log_*.log

Network Issues

# Test internal connectivity
curl -I http://localhost:8096

# Test external access
curl -I http://your-external-ip:8096

# Check port forwarding
nmap -p 8096 your-external-ip

Maintenance

Regular Updates

# Update Jellyfin container
docker pull linuxserver/jellyfin:latest
docker stop jellyfin
docker rm jellyfin
docker-compose up -d

Library Maintenance

# Clean up cache
rm -rf /mnt/user/appdata/jellyfin/cache/*
rm -rf /mnt/user/appdata/jellyfin/transcodes/*

# Optimize database
sqlite3 /mnt/user/appdata/jellyfin/data/jellyfin.db "VACUUM;"

Plugin Management

# Update plugins
curl -X POST -H "X-Emby-Token: $API_KEY" \
  "http://localhost:8096/Packages/Installed/Update"

# List installed plugins
curl -H "X-Emby-Token: $API_KEY" \
  "http://localhost:8096/Plugins" | jq

Security Considerations

User Authentication

# Enable strong passwords
# Dashboard → Users → Password Requirements
# - Minimum length: 8
# - Require special characters
# - Require numbers

Network Security

# Restrict access to local network
# Dashboard → Networking → LAN Networks
# Add: 192.168.0.0/24

# Use HTTPS with reverse proxy
# Disable HTTP access from internet

API Security

# Generate API keys for integrations
# Dashboard → API Keys → Add Key
# Use unique keys for each integration
# Rotate keys regularly

Advanced Configuration

Custom CSS Themes

/* Dark theme customization */
/* Dashboard → General → Custom CSS */
:root {
    --accent: #00d4ff;
    --primary: #000000;
    --card: #1a1a1a;
}

.skinHeader {
    background: linear-gradient(45deg, #000, #333);
}

Custom Metadata Agents

<!-- Custom metadata configuration -->
<MetadataOptions>
    <DisabledMetadataFetchers>
        <string>TheMovieDb</string>
    </DisabledMetadataFetchers>
    <LocalMetadataReaderOrder>
        <string>Nfo</string>
        <string>Xml</string>
    </LocalMetadataReaderOrder>
</MetadataOptions>

DLNA Configuration

<!-- Enable DLNA for smart TVs -->
<DlnaOptions>
    <EnableServer>true</EnableServer>
    <EnableDebugLog>false</EnableDebugLog>
    <BlastAliveMessages>true</BlastAliveMessages>
    <ClientDiscoveryIntervalSeconds>60</ClientDiscoveryIntervalSeconds>
</DlnaOptions>

This guide provides comprehensive coverage of Jellyfin media server configuration for streaming personal media collections.

# Jellyfin Media Server Configuration Guide ## Overview Jellyfin is a free, open-source media server that lets you manage and stream your personal media collection. It's a complete alternative to proprietary solutions like Plex, offering full control over your media without tracking or premium features. --- ## Container Installation ### Docker Run Command ```bash docker run -d \ --name=jellyfin \ --restart=unless-stopped \ -e PUID=99 \ -e PGID=100 \ -e TZ=America/Chicago \ -p 8096:8096 \ -p 8920:8920 \ -p 7359:7359/udp \ -p 1900:1900/udp \ -v /mnt/user/appdata/jellyfin:/config \ -v /mnt/user/media/movies:/movies \ -v /mnt/user/media/tv:/tv \ -v /mnt/user/media/music:/music \ --device /dev/dri:/dev/dri \ linuxserver/jellyfin:latest ``` ### Docker Compose ```yaml version: "3.8" services: jellyfin: image: linuxserver/jellyfin:latest container_name: jellyfin restart: unless-stopped environment: - PUID=99 - PGID=100 - TZ=America/Chicago - JELLYFIN_PublishedServerUrl=http://192.168.0.5:8096 ports: - "8096:8096" - "8920:8920" # HTTPS web port - "7359:7359/udp" # Discovery port - "1900:1900/udp" # DLNA port volumes: - /mnt/user/appdata/jellyfin:/config - /mnt/user/media/movies:/movies:ro - /mnt/user/media/tv:/tv:ro - /mnt/user/media/music:/music:ro - /mnt/user/media/audiobooks:/audiobooks:ro devices: - /dev/dri:/dev/dri # Hardware transcoding networks: - media ``` --- ## Container Configuration ### Port Configuration - **8096**: Web interface (HTTP) - **8920**: Web interface (HTTPS) - **7359/udp**: Auto-discovery - **1900/udp**: DLNA discovery ### Volume Mounts - `/mnt/user/appdata/jellyfin:/config`: Configuration and metadata - `/mnt/user/media/movies:/movies:ro`: Movie library (read-only) - `/mnt/user/media/tv:/tv:ro`: TV show library (read-only) - `/mnt/user/media/music:/music:ro`: Music library (read-only) - `/mnt/user/media/audiobooks:/audiobooks:ro`: Audiobook library (read-only) ### Environment Variables - `PUID=99`: User ID (nobody) - `PGID=100`: Group ID (users) - `TZ`: Timezone setting - `JELLYFIN_PublishedServerUrl`: Server URL for clients ### Hardware Acceleration - `/dev/dri:/dev/dri`: Intel Quick Sync Video - For NVIDIA: `--gpus all` or specific GPU --- ## Initial Configuration ### Web Setup Wizard 1. **Access Web Interface**: `http://your-server-ip:8096` 2. **Create Admin User**: Set username and password 3. **Add Media Libraries**: - Movies: `/movies` - TV Shows: `/tv` - Music: `/music` - Audiobooks: `/audiobooks` 4. **Configure Remote Access**: Set up port forwarding if needed 5. **Complete Setup**: Finish wizard ### Library Configuration #### Movie Library Setup ```bash # Recommended folder structure: /mnt/user/media/movies/ ├── Movie Name (Year)/ │ ├── Movie Name (Year).mkv │ └── Movie Name (Year)-poster.jpg ``` #### TV Show Library Setup ```bash # Recommended folder structure: /mnt/user/media/tv/ ├── Show Name/ │ ├── Season 01/ │ │ ├── Show Name - S01E01 - Episode Name.mkv │ │ └── Show Name - S01E02 - Episode Name.mkv │ └── poster.jpg ``` #### Music Library Setup ```bash # Recommended folder structure: /mnt/user/media/music/ ├── Artist Name/ │ ├── Album Name (Year)/ │ │ ├── 01 - Track Name.flac │ │ ├── 02 - Track Name.flac │ │ └── folder.jpg ``` --- ## Service Configuration ### Transcoding Settings #### Hardware Transcoding (Intel) 1. **Dashboard → Playback → Transcoding** 2. **Enable hardware decoding**: Intel Quick Sync Video 3. **Enable hardware encoding**: Intel Quick Sync Video 4. **Transcoding thread count**: Auto 5. **Hardware decoding options**: - H.264 - HEVC - MPEG2 - VC1 #### NVIDIA Hardware Transcoding ```yaml # For NVIDIA GPUs services: jellyfin: runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=all - NVIDIA_DRIVER_CAPABILITIES=compute,utility,video ``` ### Network Configuration #### Local Network Settings 1. **Dashboard → Networking** 2. **LAN Networks**: `192.168.0.0/24,172.16.0.0/16` 3. **Known Proxies**: Add reverse proxy IP if used 4. **Secure Connection Mode**: Handled by external HTTPS 5. **Require HTTPS**: Disable if using reverse proxy #### Remote Access ```bash # Router port forwarding External Port 8096 → Internal 192.168.0.5:8096 External Port 8920 → Internal 192.168.0.5:8920 ``` ### User Management #### Create Users 1. **Dashboard → Users → Add User** 2. **Set Username/Password** 3. **Configure Library Access** 4. **Set Parental Controls** (if needed) #### User Profiles ```json { "Name": "Family", "EnabledFolders": ["Movies", "TV Shows", "Music"], "MaxParentalRating": "PG-13", "EnablePlaybackRemuxing": true, "EnableContentDeletion": false } ``` --- ## Integration Points ### With *arr Stack #### Sonarr Integration 1. **Sonarr Settings → Connect → Add Connection** 2. **Type**: Jellyfin 3. **Server**: http://jellyfin:8096 4. **API Key**: From Jellyfin Dashboard → API Keys 5. **Test Connection** #### Radarr Integration 1. **Radarr Settings → Connect → Add Connection** 2. **Type**: Jellyfin 3. **Server**: http://jellyfin:8096 4. **API Key**: Generate in Jellyfin 5. **Update Library**: Enable ### With Reverse Proxy #### Nginx Configuration ```nginx server { listen 80; server_name jellyfin.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name jellyfin.yourdomain.com; ssl_certificate /etc/ssl/certs/jellyfin.crt; ssl_certificate_key /etc/ssl/private/jellyfin.key; location / { proxy_pass http://192.168.0.5: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; # WebSocket support for web client proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Disable buffering for live streams proxy_buffering off; } } ``` #### Traefik Labels ```yaml labels: - "traefik.enable=true" - "traefik.http.routers.jellyfin.rule=Host(`jellyfin.yourdomain.com`)" - "traefik.http.routers.jellyfin.entrypoints=websecure" - "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt" - "traefik.http.services.jellyfin.loadbalancer.server.port=8096" ``` ### With Home Assistant ```yaml # configuration.yaml media_player: - platform: jellyfin host: 192.168.0.5 port: 8096 username: homeassistant password: your-password ``` --- ## Monitoring & Notifications ### Health Monitoring ```bash # Check Jellyfin health curl -I http://localhost:8096/health # Monitor transcoding sessions curl -H "X-Emby-Token: YOUR_API_KEY" \ "http://localhost:8096/Sessions" | jq ``` ### Log Monitoring ```bash # Monitor Jellyfin logs tail -f /mnt/user/appdata/jellyfin/log/log_*.log # Monitor transcoding logs tail -f /mnt/user/appdata/jellyfin/log/FFMpeg.*.txt ``` ### Performance Monitoring ```bash #!/bin/bash # Monitor Jellyfin performance echo "=== Active Sessions ===" curl -s -H "X-Emby-Token: $API_KEY" "http://localhost:8096/Sessions" | \ jq ".[] | {User: .UserName, Client: .Client, PlayState: .PlayState.IsPaused}" echo "=== Hardware Acceleration ===" docker exec jellyfin cat /proc/meminfo | grep -i gpu ``` ### Notification Setup #### Gotify Integration 1. **Dashboard → Plugins → Gotify** 2. **Install Plugin** 3. **Configure Gotify Server URL** 4. **Set Application Token** 5. **Enable Notifications**: - New library content - Playback start/stop - User authentication --- ## Backup Configuration ### Configuration Backup ```bash #!/bin/bash # Backup Jellyfin configuration DATE=$(date +%Y%m%d) BACKUP_DIR="/mnt/user/backups/jellyfin" # Stop container for consistent backup docker stop jellyfin # Backup config (exclude cache and logs) rsync -av --exclude="cache" --exclude="logs" --exclude="transcodes" \ /mnt/user/appdata/jellyfin/ $BACKUP_DIR/jellyfin_config_$DATE/ # Restart container docker start jellyfin # Compress backup tar -czf $BACKUP_DIR/jellyfin_config_$DATE.tar.gz -C $BACKUP_DIR jellyfin_config_$DATE/ rm -rf $BACKUP_DIR/jellyfin_config_$DATE/ # Retain last 30 days find $BACKUP_DIR -name "jellyfin_config_*.tar.gz" -mtime +30 -delete ``` ### Database Backup ```bash #!/bin/bash # Backup Jellyfin database sqlite3 /mnt/user/appdata/jellyfin/data/jellyfin.db ".backup /mnt/user/backups/jellyfin/jellyfin_db_$(date +%Y%m%d).db" ``` ### User Data Export ```bash # Export user viewing history and preferences curl -H "X-Emby-Token: $API_KEY" \ "http://localhost:8096/Users" > user_data_backup.json ``` --- ## Testing Procedures ### Functionality Tests #### Basic Streaming Test ```bash # Test direct play curl -I "http://localhost:8096/Videos/ITEM_ID/stream" # Test transcoding curl -I "http://localhost:8096/Videos/ITEM_ID/stream?MaxStreamingBitrate=2000000" ``` #### API Tests ```bash # Test authentication curl -X POST "http://localhost:8096/Users/authenticatebyname" \ -H "Content-Type: application/json" \ -d '{"Username":"testuser","Pw":"password"}' # Test library scan curl -X POST -H "X-Emby-Token: $API_KEY" \ "http://localhost:8096/Library/Refresh" ``` #### Client Tests - **Web Client**: Test in multiple browsers - **Mobile Apps**: Test iOS/Android apps - **TV Apps**: Test Roku/FireTV/AndroidTV - **Desktop Apps**: Test Jellyfin Media Player ### Performance Tests ```bash # Monitor resource usage during playback docker stats jellyfin # Test concurrent streams # Use multiple clients simultaneously # Monitor transcoding performance watch -n 1 "docker exec jellyfin ps aux | grep ffmpeg" ``` --- ## Troubleshooting ### Common Issues 1. **Hardware Transcoding Not Working**: ```bash # Check device permissions ls -la /dev/dri/ # Verify container access docker exec jellyfin ls -la /dev/dri/ # Check Intel GPU support docker exec jellyfin vainfo ``` 2. **Library Not Scanning**: ```bash # Check permissions docker exec jellyfin ls -la /movies /tv /music # Force library scan curl -X POST -H "X-Emby-Token: $API_KEY" \ "http://localhost:8096/Library/Refresh" ``` 3. **Playback Issues**: ```bash # Check FFmpeg logs docker exec jellyfin tail /config/log/FFMpeg.*.txt # Test media files docker exec jellyfin ffprobe /movies/Movie.mkv ``` ### Log Analysis ```bash # Main Jellyfin logs docker logs jellyfin # Application logs tail -f /mnt/user/appdata/jellyfin/log/log_*.log # Transcoding logs tail -f /mnt/user/appdata/jellyfin/log/FFMpeg.*.txt # Authentication logs grep "Authentication" /mnt/user/appdata/jellyfin/log/log_*.log ``` ### Network Issues ```bash # Test internal connectivity curl -I http://localhost:8096 # Test external access curl -I http://your-external-ip:8096 # Check port forwarding nmap -p 8096 your-external-ip ``` --- ## Maintenance ### Regular Updates ```bash # Update Jellyfin container docker pull linuxserver/jellyfin:latest docker stop jellyfin docker rm jellyfin docker-compose up -d ``` ### Library Maintenance ```bash # Clean up cache rm -rf /mnt/user/appdata/jellyfin/cache/* rm -rf /mnt/user/appdata/jellyfin/transcodes/* # Optimize database sqlite3 /mnt/user/appdata/jellyfin/data/jellyfin.db "VACUUM;" ``` ### Plugin Management ```bash # Update plugins curl -X POST -H "X-Emby-Token: $API_KEY" \ "http://localhost:8096/Packages/Installed/Update" # List installed plugins curl -H "X-Emby-Token: $API_KEY" \ "http://localhost:8096/Plugins" | jq ``` --- ## Security Considerations ### User Authentication ```bash # Enable strong passwords # Dashboard → Users → Password Requirements # - Minimum length: 8 # - Require special characters # - Require numbers ``` ### Network Security ```bash # Restrict access to local network # Dashboard → Networking → LAN Networks # Add: 192.168.0.0/24 # Use HTTPS with reverse proxy # Disable HTTP access from internet ``` ### API Security ```bash # Generate API keys for integrations # Dashboard → API Keys → Add Key # Use unique keys for each integration # Rotate keys regularly ``` --- ## Advanced Configuration ### Custom CSS Themes ```css /* Dark theme customization */ /* Dashboard → General → Custom CSS */ :root { --accent: #00d4ff; --primary: #000000; --card: #1a1a1a; } .skinHeader { background: linear-gradient(45deg, #000, #333); } ``` ### Custom Metadata Agents ```xml <!-- Custom metadata configuration --> <MetadataOptions> <DisabledMetadataFetchers> <string>TheMovieDb</string> </DisabledMetadataFetchers> <LocalMetadataReaderOrder> <string>Nfo</string> <string>Xml</string> </LocalMetadataReaderOrder> </MetadataOptions> ``` ### DLNA Configuration ```xml <!-- Enable DLNA for smart TVs --> <DlnaOptions> <EnableServer>true</EnableServer> <EnableDebugLog>false</EnableDebugLog> <BlastAliveMessages>true</BlastAliveMessages> <ClientDiscoveryIntervalSeconds>60</ClientDiscoveryIntervalSeconds> </DlnaOptions> ``` This guide provides comprehensive coverage of Jellyfin media server configuration for streaming personal media collections.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tonym/NastyNAS#46
No description provided.