Jellyfin auf Raspberry Pi 5: Direct Play und Grenzen der Transkodierung
Teil 5 von 7 der Reihe Homelab auf dem Raspberry Pi

Management Summary
Jellyfin macht einen Raspberry Pi 5 zur lokalen Mediathek, wenn die Abspielgeräte die gespeicherten Filme unterstützen. Direct Play bedeutet Wiedergabe ohne Umwandlung und benötigt wenig Rechenleistung. Eine Videoumwandlung während des Abspielens kann den Pi überfordern; passende Geräte oder vorab angepasste Filmkopien sind oft praktikabler. Zuverlässiger Betrieb braucht außerdem ausreichenden Speicherzugriff, ein stabiles Netz, Kühlung und begrenzte Zugriffsrechte. Tests mit echten Filmen zeigen den tatsächlichen Wiedergabemodus.
Inhalt
Jellyfin auf dem Pi 5: kompatible Wiedergabe bevorzugen
Ein Raspberry Pi 5 kann mit Jellyfin eine lokale Mediathek bereitstellen, wenn das Abspielgerät die Dateien unterstützt. Das praktische Ziel ist, unnötige Videoumwandlungen zu vermeiden. Weder SSD noch schnelles Netzwerk garantieren eine Wiedergabe ohne Pufferpausen; Speicher, Bitratenspitzen, WLAN und Fähigkeiten des Abspielgeräts wirken zusammen.
Der Pi 5 besitzt einen HEVC-Hardwaredecoder, aber keinen Hardware-Videoencoder. Jellyfin hat die V4L2-Beschleunigung für Raspberry Pi abgekündigt und bietet für diesen Aufbau keinen unterstützten Hardware-Transkodierungsweg auf dem Pi 5. Die Hardwarebeschleunigung bleibt deshalb auf Keine. Ein eingebundenes /dev/dri ergänzt die fehlende Unterstützung nicht.

Vier Wiedergabearten mit unterschiedlichem Aufwand
| Modus | Arbeit des Servers |
|---|---|
| Direct Play | Die Originaldatei wird ohne Medienumwandlung ausgeliefert. |
| Remux | Das Containerformat ändert sich; Ton und Video bleiben unverändert. |
| Direct Stream | Der Ton wird umgewandelt; das Video bleibt unverändert. |
| Transcode | Das Video wird dekodiert und neu kodiert. |
Auch Remux und reine Tonumwandlung können vergleichsweise wenig Rechenleistung benötigen. Niedrige CPU-Last beweist kein Direct Play. Videotranskodierung, eingebrannte Untertitel und HDR-zu-SDR-Tonemapping können die Leistung des Pi übersteigen. Beim Einbrennen werden Untertitel direkt in das Videobild eingefügt; Tonemapping passt den Helligkeitsbereich eines HDR-Videos an die SDR-Wiedergabe an. Beides kann eine Videoumwandlung erfordern. Ein kompatibles Abspielgerät oder eine vorab umgewandelte Medienkopie vermeidet diese Arbeit häufig während der Wiedergabe.
1. Speicher und Zugriffsrechte vorbereiten
Das Beispiel setzt ein gepflegtes 64-Bit-Raspberry-Pi-OS, Docker Engine und ein aktuelles Compose-Plugin voraus. Das gewählte offizielle Jellyfin-Image muss ARM64 unterstützen. In einem beschreibbaren Projektordner legen die folgenden Befehle Konfigurations- und Cache-Verzeichnisse an und zeigen die numerischen Kennungen des aktuellen Kontos:
mkdir -p config cache
id -u
id -gDiese Kennungen passen nur, wenn der Dienst unter diesem Konto laufen soll. Ein eigenes Dienstkonto benötigt dessen UID/GID sowie Schreibrechte für config und cache. Für Medien sind Leserechte auf Dateien und Durchquerungsrechte für übergeordnete Verzeichnisse nötig. Ein pauschales chmod -R 755 würde Dateien unnötig freigeben und ausführbar machen; bestehende Rechte werden gezielt für das gewählte Konto geprüft.
Eine SSD kann Zugriffe auf Datenbank und Vorschaubilder beschleunigen. Mediendateien können auch auf einer ausreichend schnellen Festplatte oder eingehängten Netzwerkfreigabe liegen. Entscheidend ist die tatsächlich dauerhaft erreichbare Datenrate. Die dokumentierte externe Schnittstelle des Pi 5 ist PCIe 2.0 x1; PCIe 3.0 liegt außerhalb dieser offiziellen Spezifikation. Stabile Stromversorgung, ausreichende Kühlung und ein dauerhaft eingehängter Medienpfad bilden die Grundlage.
2. Einen schlanken Container starten
Die folgende Datei erhält den Namen compose.yaml. Die benachbarte .env definiert JELLYFIN_IMAGE als getestete Versionsreferenz für jellyfin/jellyfin, außerdem JELLYFIN_UID, JELLYFIN_GID und den vorhandenen absoluten MEDIA_PATH. Ein dokumentierter Digest, also ein Prüfwert für den genauen Image-Inhalt, erleichtert die Wiederherstellung desselben Softwarestands; Updates benötigen weiterhin einen bewussten Versionswechsel und eine Sicherung von Konfiguration und Daten.
services:
jellyfin:
image: ${JELLYFIN_IMAGE:?set tested official jellyfin/jellyfin image}
restart: unless-stopped
user: "${JELLYFIN_UID:?set service UID}:${JELLYFIN_GID:?set service GID}"
ports:
- "${JELLYFIN_BIND_IP:-127.0.0.1}:8096:8096/tcp"
volumes:
- ./config:/config
- ./cache:/cache
- type: bind
source: ${MEDIA_PATH:?set existing absolute media directory}
target: /media
read_only: true
bind:
create_host_path: false
security_opt:
- no-new-privileges:trueDie Standardbindung erfolgt an die Loopback-Adresse 127.0.0.1; entfernte Geräte erreichen den Dienst damit nicht. Für ein vertrauenswürdiges Heimnetz kann JELLYFIN_BIND_IP auf die feste private LAN-Adresse des Pi gesetzt werden. Host- und Router-Firewall müssen den Zugriff auf das gewünschte Netz begrenzen; eine Internet-Portweiterleitung ist nicht erforderlich. Der Medien-Mount ist schreibgeschützt, sodass Jellyfin keine Metadaten oder Untertitel in den Medienordnern speichern kann.
docker compose config --quiet prüft die Konfigurationssyntax nach dem Einsetzen der Variablen. docker compose up -d startet den Dienst; docker compose logs jellyfin zeigt Start- und Rechtefehler. Die Weboberfläche liegt unter http://<konfigurierte-Adresse>:8096. Bei der Ersteinrichtung entstehen ein Administratorkonto und Bibliotheken mit Containerpfaden wie /media/movies.
Für diesen direkten Zugriff sind Grafikgeräte, Render-Gruppen, Host-Netzwerk und öffentliche Discovery-URL unnötig. HTTP auf Port 8096 ist unverschlüsselt. Zugriff außerhalb eines vertrauenswürdigen LAN benötigt eine passende VPN- oder HTTPS-Reverse-Proxy-Konfiguration. Das offizielle Image enthält jellyfin-ffmpeg bereits; ein Austausch gegen Host-FFmpeg oder eine manuelle Pfadänderung ist beim normalen Image-Aufbau nicht nötig.
3. Die tatsächliche Wiedergabe prüfen
Die aktive Sitzung im Dashboard nennt Wiedergabemodus und Umwandlungsgrund. Repräsentative Testdateien sollten unterschiedliche Codecs, Tonspuren, Untertitelformate und Bitratenspitzen abdecken. Auch ein HEVC-fähiges Gerät kann wegen Profil, Auflösung, Bitratenlimit oder eingebrannten Untertiteln eine Videoumwandlung benötigen.
Bei einer Umwandlung zeigt das FFmpeg-Protokoll im eingebundenen Konfigurationsverzeichnis die gewählten Spuren und Codecs. copy als Video-Ausgabecodec bedeutet, dass das Video nicht neu kodiert wird; der Ton kann trotzdem umgewandelt werden. libx264 bezeichnet H.264-Kodierung in Software, ist aber nicht der einzig mögliche Encoder. Bei Direct Play muss kein Transkodierungsprotokoll entstehen.
CPU-Last allein belegt keine Hardwarebeschleunigung. Aussagekräftiger sind Umwandlungsgeschwindigkeit, verbleibender Wiedergabepuffer, Speicherwartezeit, Temperatur und Netzwerkdurchsatz zusammen. Dauert die Umwandlung einer Filmminute länger als eine Minute, kann die Umwandlung auf Dauer nicht mit der Wiedergabe Schritt halten. Ein allgemeiner Host-Befehl wie ffmpeg -hwaccel drm beweist weder eine Jellyfin-Integration noch die tatsächliche Verwendung eines bestimmten Hardwaredecoders.
Fragen und Antworten
Erzwingt ein nicht unterstütztes Tonformat immer eine Videotranskodierung?
Nein. Direct Stream kann allein den Ton umwandeln. Remux kann ein unpassendes Containerformat lösen. Bilduntertitel benötigen gegebenenfalls Einbrennen, falls das Abspielgerät diese nicht selbst darstellt; auch Textuntertitel sind nicht universell kompatibel. Maßgeblich ist der konkrete Umwandlungsgrund der Sitzung.
Ist Host-Netzwerk notwendig?
Direkter Zugriff über Port 8096 funktioniert mit Bridge-Netzwerk. DLNA ist seit Jellyfin 10.9 ein separates optionales Plugin. Dessen Containerbetrieb benötigt Host-Netzwerk und lokalen SSDP-Zugriff auf UDP 1900; Client-Discovery über UDP 7359 ist eine andere Funktion. Host-Modus allein installiert kein DLNA und garantiert keinen höheren Durchsatz.
Ist aktive Kühlung immer zwingend?
Der Kühlbedarf hängt von Dauerlast, Gehäuse und Umgebungstemperatur ab. Aktive Kühlung unterstützt stabile Leistung bei hoher Last; nicht jede Transkodierung lastet zwangsläufig alle vier Kerne über die gesamte Filmlänge aus. Temperatur- und Drosselungsmessungen sind belastbarer als eine pauschale Zusage zu lautlosem oder kühlem Betrieb.
Bedeutet eine lokale Mediathek keine externen Verbindungen?
Jellyfin kann ohne Internetzugang arbeiten. Aktivierte Metadatenanbieter, Bilddownloads und Plugins können trotzdem externe Dienste kontaktieren. Lokaler Speicher garantiert deshalb nicht, dass sämtliche Anfragen im LAN bleiben. Jellyfin verlangt kein verpflichtendes Serverabonnement; Hardware, Strom und optionale Dienste verursachen weiterhin Kosten.
Quellen
- Jellyfin-Dokumentation
- Jellyfin: Hardwarebeschleunigung
- Raspberry-Pi-Hardwaredokumentation
- Jellyfin: Hardwarebeschleunigung und Raspberry-Pi-Grenzen
- Jellyfin: Containerinstallation
- Jellyfin: Wiedergabearten und Transkodierung
- Jellyfin: Netzwerkzugriff und Metadaten
- Jellyfin: DLNA-Plugin
- Raspberry Pi 5: Spezifikation
- Docker Compose: Dienstkonfiguration
Homelab auf dem Raspberry Pi
- Raspberry Pi 4 und 5: Vom SSD-Laufwerk booten über den Bootloader
- USV für Raspberry Pi: fünf Lösungen und Auswahlkriterien
- Lokales CI/CD für den Raspberry Pi: Automatisierung von Docker-Compose-Deployments
- Docker-Compose-Heimserver: Traefik, TLS und Update-Prüfung
- Jellyfin auf Raspberry Pi 5: Direct Play und Grenzen der Transkodierung
- Raspberry Pi als gehärtetes WireGuard-VPN-Gateway mit Split-Tunneling
- Raspberry Pi mit Prometheus und Grafana überwachen