TvHeadend mit Docker und Sundtek SkyTV Ultimate

Aus

Tvheadend, oft abgekürzt als TVH, ist eine Serveranwendung zum Streamen von LinuxTV-Quellen über HTTP, HTSP und SAT>IP. Unterstützt werden gängige Formate, unter anderem DVB-T, DVB-S und DVB-C. Über eine eingebaute Weboberfläche können Kanäle kombiniert und verwaltet werden.

Hier zeige ich wie Ihr TvHeadend mittels Docker auf eure DiskStation installiert und eine Sundtek SkyTV Ultimate als USB-SAT-Dongle verwenden könnt.

Vorbereitungen

Voraussetzungen

  • DSM >= 6.0 (Docker gibt es auch schon ab DSM 5.2. Damit habe ich es aber nicht probiert
  • Docker Version ist recht egal, würde aber >= 18.xx sehr empfehlen
  • Möglichkeit sich per SSH auf seine Synology per admin/root zu verbinden, da sich Geräte (Devices) nicht per DSM und Docker-App zu den Containern durchreichen lassen.
  • Linux Grundkenntnisse sind empfohlen um etwas zu verstehen was man da tut
  • TV Karte/USB Dongle. Ich verwende hier eine Sundtek SkyTV Ultimate v8. Für andere Karten müsst ihr die Treiber entsprechend selber bereitstellen.
  • Dieser Container wird für die Systemarchitekturen "amd64/arm32v7/arm64v8 bereitgestellt. Er wurde von mir aber nur mit der amd64-Architektur getestet!

Sundtek SkyTV Ultimate vorbereiten

  • Im DSM im Paketmanager geht ihr auf Einstellungen / Paketquellen und fügt folgende hinzu: http://sundtek.de/synology
  • Anschließend installiert ihr das Paket "Sundtek TV Tuner Driver" (v0.38) unter den Community Paketen
  • Wenn installiert öffnet ihr die App "Sundtek Driver Setup" und setzt den Haken bei "Only create /dev/dvb nodes for Docker" und drückt auf "Save"
  • Das Device an sich sollte unter "Detected Devices" nicht auftauchen, da nur die nodes erstellt und nicht der Treiber gestartet wurde wenn der Haken gesetzt ist

Gemeinsamen Ordner für die Docker Konfigurationen erstellen

  • Um die TvHeadend Konfiguration permanent speichern zu können benötigen wir einen Ordner (Volume) für unseren Container
  • Ich habe mir für alle Docker Konfigurationen im DSM einen eigenen Gemeinsamen Ordner erstellt: /volume1/docker (Dies ist Optional)
  • In diesem Gemeinsamen Ordner "docker" oder eben in einem Ordner eurer Wahl erstellt ihr nun einen neuen Ordner "tvheadend": /volume1/docker/tvheadend
  • Im Ordner "tvheadend" benötigt ihn nun folgende Ordner:
/volume1/docker/tvheadend/config
/volume1/docker/tvheadend/picons
/volume1/docker/tvheadend/sundtek
  • Zusätzlich ist ein Ordner "recordings" für Aufnahmen Empfehlenswert. Hier habe ich mir einfach einen neuen Ordner im vorhandenen Gemeinsamen Ordner video erstellt: /volume1/video/recordings

Sundtek Treiber für die Installation im Container herunterladen

  • Jetzt verbindet ihr euch per SSH als admin auf eure DiskStation
  • nun gebt ihr euch root Rechte mit "sudo su" (anschließend nochmal das admin-Passwort eingeben)
  • Jetzt laden wir den Treiber wie folgt (achtet auf die richtigen Pfade!):
cd /volume1/docker/tvheadend/sundtek
wget http://sundtek.de/media/sundtek_netinst.sh
chmod 777 sundtek_netinst.sh
(./sundtek_netinst.sh nicht ausführen, da die nodes schon von von der Paket-Installation vorhanden sind!)

Docker

Docker Container installieren

  • Jetzt verbindet ihr euch wieder per SSH als admin auf eure DiskStation
  • wieder gebt ihr euch root Rechte mit "sudo su" (anschließend nochmal das admin-Passwort eingeben)
  • Nun erstellt ihr euch als erstes ein neues Docker-Netzwerk. So hängt dieser Container nicht im Default-Netzwerk und kann von anderen Containern nicht erreicht werden. Da TvHeadend unverschlüsselt ist, ist dies sehr zu empfehlen!
docker network create tvheadend-net
  • Nun wird der Container wie folgt installiert:
docker container run -d --restart always \
    --name tvheadend \
    --network tvheadend-net \
    -e PUID=1024 \
    -e PGID=100 \
    -e TZ=Europe/Berlin \
    -p 9981:9981 \
    -p 9982:9982 \
    -v /volume1/video/recordings:/recordings \
    -v /volume1/docker/tvheadend/config:/config \
    -v /volume1/docker/tvheadend/picons:/picons \
    -v /volume1/docker/tvheadend/sundtek:/sundtek \
    -v /etc/localtime:/etc/localtime:ro \
    --device /dev/dri:/dev/dri \
    --device /dev/dvb:/dev/dvb \
    --device=/dev/bus/usb \
    linuxserver/tvheadend:amd64-latest
  • Zur Erklärung:
  • -d lässt den Container im Hintergrund laufen
  • --restart always sorgt dafür, dass der Container nach einem Neustart oder Fehler von alleine wieder versucht zu starten
  • --name tvheadend legt nur den Namen des Containers fest. (Kann geändert werden wenn gewünscht)
  • --network tvheadend-net verbindet den Container mit dem vorher angelegten Netzwerk
  • -e TZ=Europe/Berlin setzt die Zeitzone auf Europe/Berlin
  • -e PUID=1024 sorgt dafür das alle Dateien vom tvheadend-Prozess im Docker Container die User-ID 1024 haben. 1024 ist die ID vom admin-Account im DSM. So gehören die Dateien dann alle dem admin und er kann diese lesen/schreiben
  • -e GUID=100 sorgt dafür das alle Dateien vom tvheadend-Prozess im Docker Container die Group-ID 100 haben. 100 ist die ID von der Gruppe Users im DSM. So können auch alle Benutzer in der Gruppe Users die Dateien Lesen
  • -p 9981:9981 reicht den Host-Port 9981 (DiskStation) auf den TvHeadend Container Port 9981 durch. (TvHeadend Weboberfläche)
  • -p 9982:9982 reicht den Host-Port 9982 (DiskStation) auf den TvHeadend Container Port 9982 durch. (Port für TvHeadend HTSP-Streams)
  • -v /volume1/video/recordings/tvheadend:/recordings reicht den Ordner recordings im Video Ordner der DSM auf den Internen Ordner /recordings durch. (Optional, muss existieren und vorher erstellt worden sein. Dient für TV Aufnahmen.)
  • -v /volume1/docker/tvheadend/config:/config reicht den Ordner config im tvheadend Ordner der DSM auf den Internen Ordner /config durch. (Hier liegen die Konfigurations-Dateien)
  • -v /volume1/docker/tvheadend/picons:/picons reicht den Ordner picons im tvheadend Ordner der DSM auf den Internen Ordner /picons durch. (Ist für die Picons von TvHeadend)
  • -v /volume1/docker/tvheadend/sundtek:/sundtek reicht den Ordner sundtek im tvheadend Ordner der DSM auf den Internen Ordner /sundtek durch. (Hier liegt unser oben geladenes Treiber-Installations-Script)
  • -v /etc/localtime:/etc/localtime:ro reicht die Datei /etc/localtime (ro = read only, nur lesbar) in den Container durch und überschreibt dort diese. Sorgt dafür, das die Systemzeit von der DiskStation dem Container verfügbar gemacht wird.
  • --device /dev/dri:/dev/dri reicht das Gerät /dev/dri an den Container weiter. Dieses Gerät ist für das Video Rendern zuständig.
  • --device /dev/dvb:/dev/dvb reicht die Geräte in /dev/dvb an den Container weiter. Diese Geräte repräsentieren die Sundtek SkyTV Ultimate Karte.
  • --device /dev/bus/usb:/dev/bus/usb reicht den USB-Bus an den Container weiter. Ohne das ist der Sundtek-Treiber nicht fähig die Sat-Karte anzusprechen.
  • linuxserver/tvheadend:amd64-latest ist das verwendete Image von https://hub.docker.com/r/linuxserver/tvheadend
Hinweis:
Wer eine ARM-Architektur hat ändert das Image entsprechend ab auf:
linuxserver/tvheadend:arm32v7-latest
oder
linuxserver/tvheadend:arm64v8-latest


Sundtek Treiber im Docker Container installieren

  • Jetzt verbindet ihr euch wieder per SSH als admin auf eure DiskStation
  • wieder gebt ihr euch root Rechte mit "sudo su" (anschließend nochmal das admin-Passwort eingeben)
  • Jetzt öffnet ihr eine Bash in dem Docker Container selbst (tvheadend ist hier euer Containername!)
docker container exec -it tvheadend /bin/bash
  • Eure Shell ändert ihren Promt und ihr gebt folgendes ein: (Die Container ID nach root@ ist bei euch eine andere!)
root@d2d92d6e0a3c:/# cd /sundtek
root@d2d92d6e0a3c:/# ./sundtek_netinst.sh -docker -use-custom-path=/sundtek
# Installation mit "J" bestätigen
root@d2d92d6e0a3c:/# exit

Docker Container + ggfls DiskStation neustarten

  • nach der Treiberinstallation im Container muss zumindest der Container einmal neugestartet werden. Dies könnt ihr entweder über die Docker-App im DSM machen oder per Befehl:
docker container restart tvheadend
  • Falls das Device nicht funktioniert oder sichtbar ist unter TvHeadend ggfls mal die DiskStation neustarten

TvHeadend

TvHeadend aufrufen und initial einrichten

  • Der Container sollte nun per Browser aufrufbar sein: http://<IP eurer Diskstation oder Domain>:9981
  • Empfohlen ist unter Konfiguration/Benutzer/Zugriffseinträge direkt einen Admin-Account zu erstellen, unter Konfiguration/Benutzer/Passwörter ein Passwort zu vergeben und den Eintrag mit * umgehend zu löschen, da man sonst ohne Authentifizierung und mit Admin-Rechten auf die Weboberfläche kommt!
  • Das Device war bei mir zwar unter Konfiguration/DVB-Inputs sichtbar, aber deaktiviert. Muss also Aktiviert werden


Das wars. Viel Spaß

3x3cut0r 16:06 Uhr, 07. Mai 2020 (CEST)