TVHeadend mit DVBSky S960

Was ist TVHeadend?

Bei TVHeadend handelt es sich um eine Software mit der TV Inputs empfangen und zentral verwaltet werden. Man erstellt sich damit quasi einen IPTV Server der verschiedene DVB Quellen (DVB-S, DVB-T, DVB-C) im Netzwerk bereitstellen kann. Ein Vorteil ist unter anderem die zentrale Verwaltung der Kanäle, zusammenführen verschiedener Quellen und ein zentrales EPG.

Hardware

Installation

Zur Installation benötigt man ein auf Linux basierendes Betriebssystem. Die Architektur ist dabei egal und kann x86, x64 oder auch ARM sein. Zu beachten ist nur das mit ARM, so weit mir bekannt, kein Transcoding möglich ist. Transcoding benötigt man wenn man den Stream den TVHeadend abgibt umwandeln will um diesen z.B. via Web (z.B. auf dem Webinterface von TVH) ausgeben will.

Ich beschreibe hier die Installation auf einem Ubuntu/Debian System (ARM) in Verbindung mit einem DVBSky S960 USB Empfänger.

Bevor wir uns an TVHeadend machen, sollten wir prüfen ob der Empfänger überhaupt erkannt wird und unter der verwendeten Linux Umgebung läuft.
Dazu wird der Empfänger an den Server angeschlossen. Anschließend öffnen wir ein Terminal oder verbinden und via SSH mit dem Server und geben folgenden Befehl ein:

dmesg | grep dvb

Nun sollte dort etwas wie das folgende stehen:

usbcore: registerd new interface driver dvb_usb_dvbsky
usb 1-3.2: dvb_usb_v2: found a 'DVBSky S960/S860' in warm state
.
.
.
usb 1-3.2: dvb_usb_v2 'DVBSky S960/S860' sucessfully initialized and connected

Steht dort nichts mit „warm state“ sondern sogar „cold state“ wurde der Empfänger zwar erkannt, aber es fehlt der passende Treiber. Steht überhaupt nichts da, unterstütz das Linux System überhaupt keine DVB Geräte. (lsmod)
Im Falle eines fehlenden Treibers (Firmware) sollte dort eine Zeile auftauchen in der das System nach einer Firmware sucht. Bei DVBSky S960 sollte die Firmware „dvb-fe-ds3103.fw“ heißen. Um diese zu installieren, ziehen wir den Empfänger vom Server wieder ab und führen folgende Befehle durch.

cd ~
wget http://www.dvbsky.net/download/linux/dvbsky-firmware.tar.gz
tar xfvz dvbsky-firmware.tar.gz
cd dvbsky-firmware
sudo ./copy-firmware.sh

Wenn das Script ausgeführt wurde sollte das im besten Fall mit „sucessfull“ quittiert werden.
Wenn der Empfänger nun wieder angeschlossen wird wieder mit „dmesg“ prüfen ob der Empfänger nun im „warm state“ ist.
Für den Fall das eine andere Firmware benötigt wird, kann man einfach nach der Datei bei Google suchen, diese herunterladen und nach „/lib/firmware“ kopieren.

Jetzt geht es an den TVHeadend Server. Man kann dazu entweder über APT den Server direkt aus dem Repository installieren oder via GITHub die neueste Version ziehen und selber kompilieren.
Wie es über das Repository geht könnt ihr hier nachlesen: https://tvheadend.org/projects/tvheadend/wiki/AptRepository

Zunächst benötigen wir zum kompilieren von TVH einige Pakete.

sudo apt-get install libcurl4-openssl-dev git build-essential gettext libssl-dev w-scan unzip git-core pkg-config dvb-apps libdbus-1-dev cmake libdbus-glib-1-dev libcurl4-openssl-dev libavahi-client-dev zlib1g-dev libiconv* liburiparser* ca-certificates

Anschließen erstellen wir uns ein neues Verzeichnis namens „build“ (nur der Übersichtlichkeit halber), laden TVH aus dem GIT und kompilieren es.

cd ~
mkdir build
cd build

git clone https://github.com/tvheadend/tvheadend
cd tvheadend

./configure --disable-ffmpeg_static --disable-libav
make
make install

Der verwendete „configure“ Befehl schaltet das Transcoding ab. Wer mit Transcoding kompilieren will benutzt einfach nur „./configure“.
Die einzelnen Vorgänge (configure und make) dauern etwas.

Wenn alles erfolgreich abgeschlossen ist, müssen wir TVHeadend einmal mit folgendem Befehl starten:

sudo /usr/local/bin/tvheadend -f -p /run/tvheadend.pid -C -u root -g root

Nun läuft der Server und ist über die Weboberfläche unter http://<ip-des-servers>:9981 erreichbar. Es sollte ein Assistent aufklappen um TVHeadend zu konfigurieren. Ist das geschehen, beenden wir den TVH Server wieder (STRG + C) und legen ein Systemd Startscript an:

sudo nano /etc/systemd/system/tvheadend.service

Die Datei befüllen wir mit folgendem Inhalt:

[Unit]
Description=tvheadend
After=network.target

[Service]
Type=forking
PIDFile=/run/tvheadend.pid
ExecStart=/usr/local/bin/tvheadend -f -p /run/tvheadend.pid -u root -g root
ExecStop=/usr/bin/rm /run/tvheadend.pid
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Anschließend machen wir das Start Script noch ausführbar, machen es Systemd bekannt, aktivieren und starten den Dienst:

sudo chmod +x /etc/systemd/system/tvheadend.service
sudo systemctl enable tvheadend
sudo systemctl start tvheadend

Damit sollte der Server nun installiert sein und automatisch starten. Die Login Daten wurden im Assistenten vergeben.

5 Kommentare

Zum Kommentar-Formular springen

  1. Hallo Christian,
    habe Probleme mit dem Einrichten von TVheadend.
    bin wohlgemerkt noch nicht mal ein Linux Kücken ,sondern eher noch das Ei 😉
    bin erst vor zwei Wochen von Windows auf Ubuntu umgestiegen und versuche krampfhaft eine DVB-S Software zum laufen zu bekommen.
    Bitte Hilfe.ich bleibe hier stecken:

    eiko@heiko-Latitude-E6440:~/build$ cd tvheadend
    heiko@heiko-Latitude-E6440:~/build/tvheadend$ ./configure
    Checking support/features
    checking for cc execinfo.h … ok
    checking for cc -mmmx … ok
    checking for cc -msse2 … ok
    checking for cc -Wunused-result … ok
    checking for cc getloadavg … ok
    checking for cc atomic32 … ok
    checking for cc atomic64 … ok
    checking for cc atomic_time_t … ok
    checking for cc atomic_ptr … ok
    checking for cc bitops64 … ok
    checking for cc lockowner … ok
    checking for cc qsort_r … ok
    checking for cc stime … ok
    checking for cc gmtoff … ok
    checking for cc recvmmsg … ok
    checking for cc sendmmsg … ok
    checking for cc libiconv … fail
    ^ using build-in glibc iconv routines
    checking for cc ifnames … ok
    checking for cc cclang_threadsan … fail
    checking for py module gzip … ok
    checking for pkg-config … ok
    checking for xgettext … ok
    checking for msgmerge … ok
    checking for gzip … ok
    checking for bzip2 … ok
    checking for pkg openssl … ok (detected 1.1.0g)
    checking for cc linux/dvb/version.h … ok
    checking for pkg zlib … ok (detected 1.2.11)
    checking for pkg libpcre2-8 … fail (detected )
    checking for pkg libpcre … ok (detected 8.39)
    checking for pkg liburiparser … ok (detected 0.8.4)
    checking for pkg avahi-client … ok (detected 0.7)
    checking for cmake … ok
    checking for cc -lstdc++ … ok
    checking for pkg libva >=0.38.0 … fail (detected )
    checking for cc sys/inotify.h … ok
    checking for cc inotify_init1 … ok
    checking for cc dvbcsa/dvbcsa.h … fail
    ERROR: Failed to find dvbcsa library
    heiko@heiko-Latitude-E6440:~/build/tvheadend$ make
    Makefile:25: .config.mk: Datei oder Verzeichnis nicht gefunden
    Makefile:741: /support/.mk: Datei oder Verzeichnis nicht gefunden
    make: *** Keine Regel, um „/support/.mk“ zu erstellen. Schluss.
    heiko@heiko-Latitude-E6440:~/build/tvheadend$

    1. Hi probier mal mit ./configure –disable-tvhcsa

      Wenn das nicht klappt mal ohne transcoding probieren wie oben beschrieben.

  2. Hallo und Danke für den hilfreichen Post.

    Hätten Sie auch Infos zu der Konfiguration für Astra 19.2 und/oder Hotbird 13.0 ?

    Danke und LG

    1. Was genau wird denn benötigt? Im Assistenten kann der jeweilige Satellite einfach ausgewählt werden. Das muss dann nur dem jeweiligen Empfänger hinzugefügt und der Empfänger auch aktiviert werden.
      Anschließend scannt TVH selbst nach Muxes. Diese müssen dann nur noch Kanälen zugeordnet werden, was man automatisch erledigen lassen kann.

    2. Unter „Konfiguration“ –> „Netzwerke“ ein neues Netzwerk anlegen. DVB Input wählen und bei DVB-S kann man dann bei „Vordefinierte Muxes“ den entsprechenden Satelliten auswählen. Wenn man das dann angelegt hat kann man unter „TV-Adapter“ beim eigentlichen Adapter (bei mir Universal LNB only) das angelegte Netzwerk verknüpfen.

      Anschließend scannt der Server nach „Muxes“. In dem Reiter sieht man dann auch einige. Die stehen anfangs bei Suchergebnis auf „Ausstehend“ und sollten später auf „Ok“ stehen. Manche können auch auf „Fail“ stehen. Das kann ggf. richtig sein, aber all zu viele dürften es nicht sein.

Schreibe einen Kommentar

Your email address will not be published.