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 install libcurl4-openssl-dev git build-essential gettext libssl-dev w-scan unzip git-core pkg-config dvb-apps dvb-tools libdbus-1-dev cmake libdbus-glib-1-dev libdvbcsa-dev libcurl4-openssl-dev libavahi-client-dev zlib1g-dev libiconv* liburiparser* ca-certificates python libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavresample-dev

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
sudo 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.

10 Kommentare

  1. achja…. auch trotz dem bereits genannten Fehler kann ich nicht einfach mit dem nächsten Befehl
    sudo /usr/local/bin/tvheadend -f -p /run/tvheadend.pid -C -u root -g root
    weitermachen.

    Muss da beim Starten des Service nicht das rote Lämpchen am DVB-S2-Kästchen leuchten? (Beim Windows10 wenn ich das Programm hierfür starte, leuchtet das rote Lämpchen immer während dem Betrieb)
    Grünes Lämpchen ist ja klar… das ist für Power.

    Aktuell bringe ich das rote Lämpchen nicht zum Leuchten.

    Währe supi, wenn ihr mir Tipps geben bzw. helfen könnt!
    Vielen Dank vorab

  2. Ich habe mir extra den oben empfohlenen DVB-S-USB-STick gekauft und versucht, nach dieser Anleitung Schritt für Schritt zu installieren. Doch leider kommen bei mir immer Fehler wie folgt:
    Entweder so:
    root@server:~/build/tvheadend# ./configure –disable-ffmpeg_static –disable-libav
    oder so:
    root@server:~/build/tvheadend# ./configure
    oder so:
    root@server:~/build/tvheadend# ./configure –disable-tvhcsa

    Es kommen immer diese Fehler:
    Checking support/features
    checking for cc execinfo.h … ok
    checking for cc -mmmx … fail
    checking for cc -msse2 … fail
    checking for cc -Wunused-result … ok
    checking for cc -fstack-protector … ok
    checking for cc -fstack-protector-strong … ok
    checking for cc -fstack-check … ok
    checking for cc -fPIE … ok
    checking for cc strlcat … fail
    checking for cc strlcpy … fail
    checking for cc fdatasync … 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.0j)
    checking for cc linux/dvb/version.h … ok
    checking for pkg zlib … ok (detected 1.2.8)
    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.6.32)
    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

    Was mache ich falsch und wie kann ich es besser machen?

    Ich kann auch danach kein „make“ oder „make install“ machen. 🙁

    • Habs mit einer Neuinstallation nochmal versuchen wollen, jedoch ohne Erfolg.

      Betriebssystem: Raspberry 3b+

      root@iptv:~/build/tvheadend# cat /etc/os-release
      PRETTY_NAME=“Raspbian GNU/Linux 9 (stretch)“
      NAME=“Raspbian GNU/Linux“
      VERSION_ID=“9″
      VERSION=“9 (stretch)“
      ID=raspbian
      ID_LIKE=debian
      HOME_URL=“http://www.raspbian.org/“
      SUPPORT_URL=“http://www.raspbian.org/RaspbianForums“
      BUG_REPORT_URL=“http://www.raspbian.org/RaspbianBugs“

      root@iptv:/home/pi# dmesg dmesg | grep dvb
      [ 4.441950] usb 1-1.1.3: dvb_usb_v2: found a ‚DVBSky S960/S860‘ in warm state
      [ 4.442389] usb 1-1.1.3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
      [ 4.442467] dvbdev: DVB: registering new adapter (DVBSky S960/S860)
      [ 4.444545] usb 1-1.1.3: dvb_usb_v2: MAC address: 00:17:42:54:96:0c
      [ 4.624502] Registered IR keymap rc-dvbsky
      [ 4.624924] usb 1-1.1.3: dvb_usb_v2: schedule remote query interval to 300 msecs
      [ 4.624942] usb 1-1.1.3: dvb_usb_v2: ‚DVBSky S960/S860‘ successfully initialized and connected
      [ 4.626713] usbcore: registered new interface driver dvb_usb_dvbsky
      [ 8.585416] m88ds3103 3-0068: downloading firmware from file ‚dvb-demod-m88ds3103.fw‘

      root@iptv:~/build/tvheadend# sudo apt install libcurl4-openssl-dev git build-essential gettext libssl-dev w-scan unzip git-core pkg-config dvb-apps dvb-tools libdbus-1-dev cmake libdbus-glib-1-dev libcurl4-openssl-dev libavahi-client-dev zlib1g-dev libiconv* liburiparser* ca-certificates
      Paketlisten werden gelesen… Fertig
      Abhängigkeitsbaum wird aufgebaut.
      Statusinformationen werden eingelesen…. Fertig
      Note, selecting ‚libiconv-hook1‘ for glob ‚libiconv*‘
      Note, selecting ‚libiconv-hook-dev‘ for glob ‚libiconv*‘
      Note, selecting ‚liburiparser-dev‘ for glob ‚liburiparser*‘
      Note, selecting ‚liburiparser-doc‘ for glob ‚liburiparser*‘
      Note, selecting ‚liburiparser1‘ for glob ‚liburiparser*‘
      build-essential ist schon die neueste Version (12.3).
      ca-certificates ist schon die neueste Version (20161130+nmu1+deb9u1).
      cmake ist schon die neueste Version (3.7.2-1).
      dvb-tools ist schon die neueste Version (1.12.3-1).
      gettext ist schon die neueste Version (0.19.8.1-2).
      git ist schon die neueste Version (1:2.11.0-3+deb9u4).
      git-core ist schon die neueste Version (1:2.11.0-3+deb9u4).
      libavahi-client-dev ist schon die neueste Version (0.6.32-2).
      libcurl4-openssl-dev ist schon die neueste Version (7.52.1-5+deb9u9).
      libdbus-1-dev ist schon die neueste Version (1.10.26-0+deb9u1).
      libdbus-glib-1-dev ist schon die neueste Version (0.108-2).
      libiconv-hook-dev ist schon die neueste Version (0.0.20021209-11).
      libiconv-hook1 ist schon die neueste Version (0.0.20021209-11).
      libssl-dev ist schon die neueste Version (1.1.0j-1~deb9u1).
      liburiparser-dev ist schon die neueste Version (0.8.4-1+deb9u1).
      liburiparser-doc ist schon die neueste Version (0.8.4-1+deb9u1).
      liburiparser1 ist schon die neueste Version (0.8.4-1+deb9u1).
      unzip ist schon die neueste Version (6.0-21).
      w-scan ist schon die neueste Version (20161022-1).
      zlib1g-dev ist schon die neueste Version (1:1.2.8.dfsg-5).
      dvb-apps ist schon die neueste Version (1.1.1+rev1500-1.1+b1).
      pkg-config ist schon die neueste Version (0.29-4+b1).
      Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
      libboost-date-time1.61.0 libboost-filesystem1.61.0 libboost-iostreams1.61.0 libboost-system1.61.0 libpango1.0-0 libpangox-1.0-0 realpath vlc-plugin-notify vlc-plugin-samba
      vlc-plugin-video-splitter vlc-plugin-visualization
      Verwenden Sie »sudo apt autoremove«, um sie zu entfernen.
      0 aktualisiert, 0 neu installiert, 0 zu entfernen und 13 nicht aktualisiert.
      root@iptv:~/build/tvheadend#

      root@iptv:~/build/tvheadend# ./configure –disable-ffmpeg_static –disable-libav
      Checking support/features
      checking for cc execinfo.h … ok
      checking for cc -mmmx … fail
      checking for cc -msse2 … fail
      checking for cc -Wunused-result … ok
      checking for cc -fstack-protector … ok
      checking for cc -fstack-protector-strong … ok
      checking for cc -fstack-check … ok
      checking for cc -fPIE … ok
      checking for cc strlcat … fail
      checking for cc strlcpy … fail
      checking for cc fdatasync … 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.0j)
      checking for cc linux/dvb/version.h … ok
      checking for pkg zlib … ok (detected 1.2.8)
      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.6.32)
      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

      Warum sind da immer noch so viele Errors?
      Was mache ich falsch?

  3. 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$

  4. 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

    • 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.

    • 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.