Zuletzt aktualisiert am 29. Mai 2024
16 Minuten
… oder: “Die vollständige Anleitung für einen Raspberry-Pi Mediaserver”.
Die Idee#
Es haben sich über die Jahrzehnte einige Medien angesammelt, und verstauben nicht erst seit dem aufkommen der Streaming Dienste in Kisten. Meine CD-Sammlung hab ich schon zu Beginn der Digitalisierung umgestellt. Meine DVD Sammlung ist zwar recht klein und überschaubar, aber die Möglichkeiten sie ab zu spielen werden immer weniger, dazu kommt der ganze selbst erstellte digitale Content. Höchste Zeit das alles in einer eigenen Mediathek zu zentral bündeln und zu präsentieren.
- Als Server nehme ich einen Raspberry-Pi den ich hier eh rumliegen hab, daran kommt ne USB-Festplatte.
- Darauf läuft ein Medien-Server, der die Inhalte auf alle möglichen Clients (Browser, iOS, Android,…) streamen kann.
Voila! Soweit die Idee.
Auswahl des PI, und so#
Ich hab einige Raspberrys zum basteln hier rumliegen (Ihr wisst schon: Kinder, und so). Beim Raspberry Pi 3B ruckelt das Bild beim abspielen von digitalisiertem DVD Material über Kodi doch arg, umcodiertes und reduziertes Material spielt er aber ohne Probleme ab. Der Raspberry Pi 4B kommt mit allem besser klar, und hat mit USB 3.0 ne flottere Schnittstelle für die externe Festplatte am Start. Ich denke es ist ratsam immer das derzeit aktuell neueste Modell zu nehmen. Es ist auch clever bei offiziellen Quellen zu kaufen, damit man auch solide Teile bekommt, die den Spezifikationen entsprechen. Schon meine Oma sagte immer: “Wer billig kauft, kauft zwei mal.”…
Wunder darf man von den Dingern nicht erwarten, aber zwei parallele Videostreams und n bisschen Musik stemmen sie ganz gut, wenn nicht in Echtzeit umkodiert werden muss. Für meinen Minihaushalt ist das vollkommen ausreichend. Wer höhere Ansprüche schaut sich nach Mini-PCs bzw. Barebone PCs um, am liebsten passiv gekühlt: zB. Zotac Mini_pcs , oder sowas , …
Ein und zwei Terabyte Festplatten hab ich hier noch rumliegen, aber das reicht vermutlich auf Dauer nicht für das Archiv, da es auch Quellcodes und andere Medien aufnehmen soll. Es darf also eine größere her.
Was brauche ich alles, um das Projekt erfolgreich abschließen zu können, und was kostet mich das?
Einen Raspberry Pi 4B (4GB) - 58,90€
- Netzteil 5,1V, 3A (zum Thema PI Energieversorgung ) - 7,90€
- Gehäuse + separater Kühlkörper, oder
- Ein Gehäuse mit integrierter, passiver Kühlung, das Bluetooth und WLan (hoffentlich) nicht stört: Armor Gehäuse für Raspberry Pi 4 - 9,90€
- Maus, Tastatur (davon ist immer was vorhanden)
- Eine MicroSD Karte mit mindestens 16GB, FAT32 oder extFAT formatiert!
Eine USB 3 Festplatte mit 3Terrabyte (amazon - hier kann ich nur hoffen das die was taugt) - 82,02€
Ein HDMI-Kabel, Typ Micro-HDMI auf HDMI (amazon ) -11,00€
Ein DVD-Laufwerk. In meinem Mac ist keins mehr verbaut. Ich habs auch nie vermisst, bis zu diesem Projekt :-) …also muss ein externer USB SuperDrive her. - 90,00€
Eine Software zum digitalisieren der DVD-Sammlung / CD-Sammlung.
Ein Konzept zur Dateiablage.
Eine Backup-Strategie!
Zeit…
In Summe komme ich auf eine Investition von ca. 170 Euro für das Projekt. Das ist nicht wirklich billig, aber dafür selbst gemacht. Fertige Mediacenter gibt es für mehr , oder weniger Geld. Dazu kommen noch ein paar Nebenkosten wie zB. die 90 Euro für das DVD Laufwerk, ggfs. Lizenzkosten für Software, etc…
Plex, Emby, Jellyfin, Kodi, oder?#
Nach einiger Recherche stellt sich die große Frage welche Software: Plex-Mediaserver oder Kodi-MediaServer , oder doch was anderes? Hier mal ein paar Vor- und Nachteile:
Kodi ist…
in erster Linie ein Player.
extrem anpassbar.
überall installierbar (OS-X, Raspberry, Linux, Windows, Android), nur nicht wirklich auf iOS - Apple hat Kodi bis jetzt nicht im Store zugelassen. Es gibt die App aber auf der Kodi Webseite .
Notlösung: Andere Player können über UPnP (Universal Plug And Play ) auf die Medienbibliothek zugreifen. Das ist zwar nicht schick, aber es funktioniert.
kostenlos und Open Source.
Plex ist…
in erster Linie eine Serversoftware. Anlegen einesPlex-Kontos erforderlich.
Es gibt ein offizielles Plex-Addon für Kodi, damit integriert der Plex-Serve Kodi-Inhalte.
nicht so doll anpassbar - was aber kein Nachteil ist: Läuft und schaut gut aus, OutOfTheBox.
kann auf beliebige Geräte streamen - mit dem kostenpflichtigen Abo.
transkodiert die Mediendateien so, dass sie optimal auf dem jeweiligen Wiedergabegerät laufen.
ein kommerzielles Produkt und nur teilweise kostenlos nutzbar. Es gibt ein Abonnement-System, genannt Plex Pass , oder man zahlt einmalig 120 Euro für eine Lifetime Lizenz.
Jellyfin ist…
- ein Emby Fork ohne Premium-Features, Lizenzkosten (Lifetimelizenz für knapp 100 Euro) oder Abos.
- eine Open Source Alternative für Plex.
- und kann mit Kodi kombiniert werden.
Ich hab alle ausprobiert und mich erstmal für Jellyfin als Basis entschieden. Ich mag nun mal OpenSource, und mag Abos nicht, und zum ausprobieren und vertraut machen mit der Materie reicht das. Jellyfin ist die beste Alternative für den Plex-Server, die ich gefunden hab ;-)
Nachteil: Jellyfin kann (noch) nicht auf Samsung TVs streamen. Dafür soll sich auch eine entsprechende App in der Entwicklung befinden. Die scheint aber noch nicht weit fortgeschritten zu sein. Eine Lösung ist, Kodi auf einem weiteren Raspery-Pi einzusetzen- der dann über ein HDMI-Kabel direkt mit dem TV verbunden ist. Kodi kann über ein Plugin an Jellyfin angebunden werden.
Festplatten und Zugriffsrechte#
Um die angeschlossenen Festplatten und die Zugriffsrechte zu managen wäre ein Fileserver mit einer vernünftigen Benutzeroberfläche nicht schlecht. Da gibt es mit OpenMediaVault eine brauchbare Lösung. OMV unterstützt auch Docker , so das sich Jellyfin darüber problemlos integrieren lässt.
Die Gesamtlösung#
Die Gesamtlösung für den Medienserver besteht aus vier oder fünf Software-Komponenten, die auf dem Raspberry-Pi installiert werden sollen:
OpenMediaFault - Network Attached Storage (NAS) Solution
Docker - Container
Portainer - Container-Verwaltung (optional)
Jellyfin - Die Mediathek
Den Raspberry Pi vorbereiten#
Zuerst muss Raspberry-Pi OS Lite auf dem RPi installiert werden. Das Betriebssystem kommt ohne Benutzeroberfläche, das spart Ressourcen, aber die Konfiguration muss über ein Terminal erfolgen. Das geht bequem aus der Ferne.
Ich brauche:
Einen Raspberry-Pi4 oder Pi400
mit passendem Netzteil (3A)
Eine SD Karte (8 oder 16GB, mindestens Class 4 oder Class 6)
Nur für den ersten Start:
- Tastatur und Monitor
- Ein micoHDMI zu HDMI Kabel
Das Raspberry Pi OS Lite
Das OS muss auf die Karte#
Das geht am besten mit dem Raspberry-Pi Imager .
Der erste Start#
Den Pi verbinden
- SD-Karte einstecken
- Monitor anschließen
- Tastatur anschließen (entfällt beim Pi400)
- Am besten den Raspberry-Pi für den ersten Start über ein Netzwerkkabel mit dem Internet verbinden.
- Den Rechner mit dem Netzteil verbinden, dann bootet er.
Nach dem Bootvorgang am System anmelden.
- Beachte das die angeschlossene Tastatur ein amerikanisches Layout haben könnte. Dann wären die Tasten y und z vertauscht.
- login: pi
- Passwort: raspberry
Aus Gründen der Sicherheit sollte als erstes das Passwort geändert werden:
Die IP-Adresse ermitteln
- Im Terminal:
hostname -I
- Der linke Teil ist die IP Adresse: 192.168.xxx.xx
- Im Terminal:
Im Netzwerk einen Namen vergeben (optional)
- http://fritz.box im Webbrowser aufrufen.
- Dort wechselt man zu Heimnetz -> Netzwerk > Netzwerkverbindungen
- Die Zeile mit der IP Adresse suchen.
- Das Stiftsymbol in der Zeile ganz rechts anwählen.
- Einen Namen für den Server vergeben, zB. raspberry-pi400
- Haken bei der Option “diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen”.
- Unten rechts auf der Seite: ok - speichern
- Der Rechner ist im privaten Netzwerk unter dem Namen raspberry-pi400 erreichbar.
Grundeinstellungen#
Die Grundeinstellungen machen wir im Raspberry Konfigurations-Programm, das wir wie folgt aufrufen:
Im Programm navigieren wir dann wie folgt, um die drei Punkte ab zu arbeiten:
Automatische Anmeldung einschalten
- 1 System Options
- S5 Boot / Auto Login
SSH aktivieren
- 3 Interface Options
- P2 SSH
WLan aktivieren
- 1- System Options
- S1 - Wireless Lan - Enter SSID and passphrase
- Land: DE auswählen
- Name des WLAN-Funknetzes (SSID)
- (Nachschlagen in: fritz.box > WLAN > Funknetz > Name des WLAN-Funknetzes (SSID) - ganz unten auf der Seite)
- return
- Passphrase (fritz.box > WLAN > Sicherheit > WLAn Netzwerkschlüssel)
- return
Entferne Verbindung herstellen#
Die Terminal-App öffnen.
Im Menü -> Shell -> Neue entfernte Verbindung (oder Command + Shift + k)
- Dienst: Sichere Shell (ssh)
- Server: raspberry-pi400
- Benutzer: pi
- SSH (automatisch)
- verbinden
- Ein Terminal-Fenster öffnet sich.
- Passwort eingeben
- Dienst: Sichere Shell (ssh)
Es geht auch im Terminal einfach so:
Wenn das klappt, können wir Tastatur und Monitor abklemmen und wieder ins Lager packen. Ab jetzt greifen wir nur noch remote auf den Raspberry Pi, oder über Webschnittstellen auf die Anwendungen zu.
Auf den neuesten Stand bringen#
https Unterstützung für apt#
Auf Repositories über das Protokoll HTTP Secure zugreifen.
Wir brauchen:
- Eine externe USB3 Festplatte an einen der blauen USB3 Ports anschließen.
- Einen Webbrowser
- Terminal
Vorbereiten und Installation:
Zugangsdaten „admin“ mit dem Passwort „openmediavault“.
Allgemeine Einstellungen -> Web Administrator Passwort ändern.
Festplatte an OpenMediaVault#
Die angeschlossene Festplatte muss jetzt in das System eingebunden, und frei gegeben werden.
Der NAS-Server muss wissen, welche USB-Sticks und USB-Festplatten angeschlossen sind.
- Dateispeicher -> Laufwerke -> suchen
Die auf den Datenträgern enthaltenen Partitionen einbinden
- Datenspeicher -> Dateisysteme -> Festplatte auswählen -> Einbinden -> Anwenden -> Ja
Das “Benutzerverzeichnis” unter „Freigegebene Ordner" hinzufügen
FTP#
Zertifikate#
OpenMediaVault -> Zertifikate -> SSL -> Hinzufügen
Zugriffskontrolle#
- Zugriffskontrolle > Freigegebene Ordner -> Zeile markieren -> Privilegien
- Zugriffskontrolle > Freigegebene Ordner -> Zeile markieren -> ACL
FTP Einstellungen#
- Dienste -> FTP -> Freigaben -> hinzufügen
- Dienste -> FTP -> Allgemeine Einstellungen -> Maximale Verbindungen pro Host = 1 -> 0 (unbegrenzt)
- Dienste -> FTP -> SSL/TLS Zertifikat einstellen
SFTP Plugin#
FTP ist out. Ich möchte natürlich SFTP zum befüllen der Mediathek benutzen. Dazu muss ein Plugin installiert und konfiguriert werden.
System -> Erweiterungen -> suche -> sftp -> OpenMediaVault sftpserver Unsinn jails 5.0.7
Installieren
Dienste -> SFTP -> Einstellungen
Aktivieren
Port 222
Allow access to sftp-access group only
Dienste -> SFTP -> Access List
benutzname: pi
Gemeinsamer Ordner: MEDIA_LIB
Zugriffskontrolle > Benutzer
- Benutzer pi auswählen -> bearbeiten -> Gruppen
- Gruppe sftp-access anklicken
- Speichern und Fehlermeldungen ignorieren.
- Die Gruppe sollte in der 4. Spalte auftauchen.
Für einen maximal schnellen Upload im Heimnetzwerk verwende ich Cross-FTP Enterprise . Dieser FTP Client kann beliebig viele Uploads parallel erledigen. Ich lasse bis zu 50 Threads nebeneinander laufen, und komme so auf erträgliche 50MB/s fürs hochladen.
Docker installieren#
Portainer installieren#
login: admin
password: raspberry
Wie immer nach dem Setup ändern.
Wähle Docker
Connect
Jellyfin über Docker installieren#
- https://hub.docker.com/r/linuxserver/jellyfin
- Den Code kopieren
- http://raspberry-pi400:9000 aufrufen
- Stacks
- Add Stack
- Web-Editor
- Den YAML-Code rein kopieren:
- Code anpassen:
- PUID und PGID ermitteln
- Im Terminal:
- Absoluten Pfad ermitteln
- Openmediavault —> Zugriffskontrolle —> Freigegebene Ordner ->
- Klick rechts auf das Pfeil-Runter Symbol einer Spalte -> Columns -> Absoluter Pfad anzeigen
- Den absolute Pfad aus der Tabellenspalte heraus kopieren.
- Mausklick Rechts auf das Element
- Element Information - bei Safari
- Den Pfad suchen und kopieren
- /srv/dev-disk-by-uuid-3be5a412-3266-4e6b-a816-3bcd77d4da1b/MEDIA_LIB/
Ganz unten links auf der Seite anklicken: deploy the Stack
Jellyfin wird jetzt installiert.
Der Jellyfin Webclient#
Jellyfin ist jetzt über die Adresse im Browser aufrufbar:
und kann dort weiter konfiguriert werden:
https://jellyfin.org/notes/general/administration/configuration.html
Einbinden der Medienverzeichnisse / Medien.
Plugins installieren:
- Bookshelf
- TMDb Box Sets
- InfuseSync, wenn man die App Infuse7 nutzen will
- Kodi Sync Queue, wenn man Kodi anbinden will
- und diverse Provider für Metadaten…
Benutzerprofile anlegen
…
Jetzt muss die Mediathek nur noch gefüllt werden. Wie ich das mache, beschreibe ich im Folgenden.
Der Mailserver#
Das System aktuell halten#
Softwareupdates schließen Sicherheitslücken, beseitigen Fehler, und bringen neue Features. Das ganze muss also jetzt nur noch aktuell gehalten werden:
Docker aktualisieren#
- Die Terminal-App öffnen. Im Menü -> Shell -> Neue entfernte Verbindung (oder Command + Shift + k)
- Dienst: Sichere Shell (ssh)
- Server: raspberry-pi400Benutzer: pi SSH (automatisch)verbinden
- Dienst: Sichere Shell (ssh)
Vorher könnte ich mit version
oder info
prüfen welche Version installiert ist. Das Update selber wird dann über den package managerdurchgeführt:
Portainer aktualisieren#
Das Docker Image von Portainer lässt sich nicht über die Portainer-Weboberfläche aktualisieren, also muss ich wieder die Kommandozeile bemühen:
OpenMediavault aktualisieren#
Das geht bequem über die Benutzeroberfläche:
- System -> Aktualisierungsverwaltung -> …
Medien digitalisieren unter OS-X#
Der nächste Schritt ist alle vorliegenden Film-Medien zu digitalisieren. Im Grunde geht es erst mal darum die folgende Struktur von der DVD auf die Festplatte zu bekommen. Damit sind die Daten erst mal gesichert. Wer mag oder muss, codiert in einem Rutsch um.
Die DVD-Struktur#
- Ordner mit dem Namen des Films
Ordner VIDEO_TS - Video Title Sets, darin die DVD-Dateien:
.VOB - Die Video-Objekte
VIDEO_TS.VOB - Video-Objekte für das Title-Menü &Video-, Audio und Untertiteldateien.
VTS_01_0.VOB - Video-Objekte des VTS-Menüs, wenn es im Titel Set über ein Menü verfügt.
VTS_01_1.VOB - Video-Objekte, hier: 1. Szene des Films. Erste Zahl: Titel-Set, letzte Zahl: Dateinummer.
.IFO - Die Konfigurationsdateien enthalten Daten wieMenüs, Untertitel, Sprachen, Seitenverhältnis,…
.BUP - Sicherungskopien der Konfigurationsdateien der DVD.
Ordner AUDIO_TS - Audio Title Sets
OS-X Tools zum rippen / umcodieren#
Das mache ich mit Mac DVDRipper Pro der DVDSuki Software Inc, das über paddle.com vertrieben wird.
Alternativen sind:
- MakeMKV Beta - ggfs. als Ergänzung für sperrige Inhalte.
- HandBrake - ggfs. zum weiteren umcodieren.
- JDownloader
- VLC Mediaplayer
- Adapter
- …
Viele der Apps verwenden im Hintergrund das freie Komandozeilentool ffmpg und stülpen eine komfortable Benutzeroberfläche drüber. Letztendlich ist dieses rippen im Grunde ein schnödes, vielfaches Copy and Paste - so lange kein Kopierschutz im Spiel ist - dann würde das ja auch illegal werden. Bei umfangreichen Bibliotheken sollte man sich das Leben so einfach wie möglich machen.
Nach dem rippen hab ich ein Archiv mit Rohmaterial im dvdmedia
Format erzeugt. Dateien mit der Endung dvdmedia
sind nur ein Archiv, das leicht entpackt werden kann. Am einfachsten geht das im Finder mit “Paketinhalt anzeigen”. Das dvdmedia
Format ist zwar praktisch, wird aber von Jellyfin - im Gegensatz zum VLC-Mediaplayer - nicht erkannt. Deshalb ist es sinnvoll dieArchive nochmals um zu kodieren und dabei ab zu specken. Das brauch einfach nur Zeit und Geduld.
Am besten ist es man kodiert das Rohmaterial in mp4 Container um, und speckt die Inhalte - Tonspuren, Untertitel, Extras, auf das Nötigste ab. Bei den Untertiteln übernehme ich alles wo de dran steht - ob normal oder erzwungen, oder sonst was. Bei den Tonspuren verfahre ich genauso.
OS-X Tips#
- Das der Videoplayer jedes mal automatisch dazwischen grätscht wenn eine DVD eingelegt wird, kann unter OS-X abgeschaltet werden: Systemeinstellungen -> CDs & DVDs -> Beim Einlegen einer VIDEO-DVD - keine Aktion.
- …
Verzeichnisstruktur der Medien-Bibliothek#
Das ist ein wunder Punkt in jeder Bibliothek: Ordnung hilft, Chaos eher nicht. Eine grundlegende Struktur könnte so aussehen:
Um die Hierarchie flach zu halten, kann man thematisch zusammengehörige Ordner nebeneinander ins Root-Verzeichnis stellen. Wenn man nicht nicht nur Konsument, sondern auch Produzent ist, kann man Verzeichnisse mit der Endung _-_eigene anlegen, die dann eigene Publikationen enthalten.
Dazu gelten dann ein paar heilige Gesetze, damit kein Chaos entstehen kann:
Verzeichnis-Struktur#
Die oben definierte Struktur sollte sich nicht ändern, damit sie von Mediamanagern immer wieder erkannt, und durchforstet werden kann.
Auch Backupfestplatten sollten diese Struktur bei behalten, damit sie vergleichbar bleiben..
Eigene Video und Audiodateien#
- Jede Datei bekommt ihr eigenes Verzeichnis mit dem selben Namen wie die Datei. Da wird dann ggfs. Zusatzmaterial abgelegt.
Filme#
Varianten erkennt Jellyfin durch ein […] hinten dran.
Mehrteilige Filme, zB. Filme mit Überlänge die auf mehrere Datenträger verteil waren, erkennt Jellyfin an der Endung part,pt, cd, disc, disk, dvd.
Jellyfin erkennt die Teile, fügt sie zusammen, und spielt sie nacheinander ab.
Bücher#
Das gängigste Organisationsschema für Bücher ist die Trennung nach eBook und Hörbuch, und dann nach Autor. Für Jellyfin sollte das so aussehen:
TV-Serien#
Damit Jellyfin Serien richtig darstellt sollte die Folgende Form eingehalten werden:
Musik#
Die Musiksammlung lässt sich hervorragend mit der kostlosen App Picard von MusicBrainz für Jellyfin in Form bringen. Doubletten finden sich mit Swinsian .
Erfahrungen#
Der von mir getestete Jellyfin iOS-Client und der Webclient funktionieren prima.
Es gibt noch keinen Client für Samsung TVs. Es befindet sich zwar eine App in der Entwicklung , da tut sich aber nicht viel - Eine Liste von Jellyfin-Clients gibt es hier .
Eine Notlösung ist die Übertragung auf das TV via AirPlay - eine tolle Sachen unter OS-X und iOS.
Nachteil: Wenn Tablet oder Rechner in den Sleepmode gehen, wird der Stream unterbrochen.
Bei der Übertragung via Airplay wird das Seitenverhältnis nicht korrekt übergeben, was zu einem verzerrten Bild führt.
Dieses Problem kann man allerdings mit der App Infuse 7 in der Freeversion umgehen. Die kann auf die Videos (und nur die!) der Jellyfin-Bibliothek zugreifen, und liefert via Airplay das korrekte Seitenverhältnis. Ausserdem geht das Tablet praktischer Weise mit Infuse7 nicht in den Sleppmode.
Kann sein, das der Jellyfin-Server nach einiger Zeit (einigen Tagen) nicht mehr aufrufbar ist, während Portainer und OpenmediaVault problemlos vor sich hin laufen - ich hab noch nicht herausgefunden was das verursacht. Ich darf dann den Jellifin Docker-Container aus Portainer heraus rebooten. Für einen dauerhaften 24/7 Betrieb dürfte das ganze gerne etwas robuster und stabiler sein.
Vielleicht löst sich das ein oder andere Problem mit kommenden Updates. Ich bin ganz zufrieden mit der Lösung, und sie ist ein guter Einstieg in das Thema.
DVDs kodieren und transformieren
- Mac DVDRipper Pro - Um DVDs zu digitalisieren.
- MakeMKV Beta - ggfs. als Ergänzung.
- HandBrake - ggfs. zum weiteren umcodieren.
- JDownloader
- VLC Mediaplayer
- ffmpg
- …
Dateimanagement
- Commander One - Filemanager mit zwei nebeneinander liegenden Dateisystemen. Erleichtert das kopieren und verschieben von Dateien.
- Cross-FTP Enterprise - Daten transportieren mit parallelen Uploads.
- …
Musikdateien organisieren
- Picard von MusicBrainz - Tagger für die Musik-Bibliothek.
- Swinsian - Findet Doubletten
- …
Videodateien organisieren
- TinyMediaManager.org - den TinyMediaManager nutze ich um zusätzliche Informationen zu den Film-Medien ab zu fragen. Unterstützt auch Kodi, Für Jellyfin nicht notwendig.
- …
…
Jellyfin Plugins / Repositories#
Davor
Mariadb + phpMyAdmin + Wordpress mit Portainer auf Raspberry Pi
Danach
Plex-Mediaserver auf Raspberry-Pi installieren