Howto/VDR (Headless)

Achtung!

Die Verwendung dieses Howto geschieht auf eigene Gefahr. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos.

Hinweis:

Diese Howto-Anleitung wurde zuletzt von Limag am 07.04.2018 unter Ubuntu 18.04 erfolgreich getestet.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

  2. Root-Rechte

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Inhaltsverzeichnis
  1. Motivation
  2. Installation
  3. VDR Manager
  4. Shutdown/Wakeup
  5. Komponenten
  6. Probleme

Motivation

Es gibt diverse Anleitungen VDR (Video Disk Recorder) 🇬🇧 zu installieren bzw. zu erweitern. Was dem Einsteiger aber fehlt ist die Übersicht der einzelnen Komponenten und ihr Zusammenspiel. Dieser Artikel stellt exemplarisch eine Installation vor, die die Möglichkeiten heutiger Smart-TVs einbindet. In der Konsequenz wird VDR nicht direkt für die Wiedergabe benutzt, VDR wird "headless" betrieben.

setting.svg.png

Folgende Ziele sollten mit der Installation erreicht werden

Ziel Erläuterung
Geplante Aufnahme Aktuelle TVs nehmen die Sendungen in einem proprietären Format auf, eine Archivierung ist nicht möglich!
Weiterhin werden bei der Programmierung über das eingebaute EPG oft die genauen Sendungszeiten programmiert, was häufig zu einem fehlenden Anfang oder Ende führt.

VDR archiviert im TS-Format und fügt jeder Aufnahme eine konfigurierbare Vor- und Nachlaufzeit hinzu.
Automatische Aufnahmen Wenn im EPG vorher konfigurierte Schlüsselwörter im Sendungstext gefunden werden, wird automatisch eine Aufnahme programmiert. Bei kommerziellen Geräten ein sehr selten vorhandenes Feature.
Mehrere Aufnahmen gleichzeitig Live-TV soll auch während einer Aufnahme möglich sein! Übliche TVs haben nur einen SAT-Tuner, welcher durch die Aufnahme blockiert wird.
Der VDR im Beispiel ist mit einer TWIN-Sat Karte ausgestattet. Durch die Tatsache, dass mehrere TV-Kanäle gemeinsam auf einem Transponder gesendet werden, ist oft auch der gleichzeitige Empfang von mehr als 2 Sendern möglich.
Streamen auf verschiedene Geräte Aufnahmen oder Live-TV eines Android-TVs sind nur auf diesem 🇬🇧 anzuschauen. Auch sonst ist mir kein TV bekannt der auf andere Geräte streamt. VDR streamt zu VLC 🇩🇪, Kodi 🇬🇧 und Ähnlichem.
Sekundärziel: Den alten PC nutzen In unserm Haushalt gibt es einen PC welcher lokal benutzt wird und auch über Samba ein Netzlaufwerk bereitstellt. Hier soll nun auch der VDR gehostet werden. Dabei ist aufgrund des eingeschränkten Bedarfs im Haushalt ein 24/7-Betrieb zu vermeiden.

Installation

Zwingend benötigt wird ein SAT-Empfänger, gern benutzt werden preiswerte Empfänger in Form eines USB-Sticks. Zu diesen Geräten fehlt mir die Erfahrung, ich erwarb 2015 eine Cine S2 🇩🇪 welche seither auch zuverlässig ihren Dienst versieht. Der nötige Treiber cxd2099.m ist in Ubuntu enthalten.

Der PC ist ein handelsübliches Modell.

WOL aktivieren

Für die Aktivierung von WOL gibt es keinen Standardweg. Der Grund ist, dass der Aufweckvorgang selbstständig vom Ethernet-Chip auf dem Motherboard eingeleitet werden muss. Ist WOL im Chip aktiviert und hört dieser, vereinfacht gesagt, 5 mal hintereinander seine MAC-Adresse, veranlasst der Chip das Starten des PCs; kein Betriebssystem ist involviert.

Die MAC-Adresse des Chips und die Aktivierung von WOL kann man dem Konfigurationsdialog entnehmen. connection.png

Für die obrige Schnittstelle gibt man auf einem fernen PC (im gleichen Netzwerk) folgendes Kommando zum Aufwecken ein:

$ wakeonlan 00:24:1d:86:7b:47 

Wakeonlan ist im gleichnamigen Paket enthalten:

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install wakeonlan 

sudo aptitude install wakeonlan 

Funktioniert das Aufwecken nicht wie erwartet sollte man Informationen zum Motherboard und den entsprechenden BIOS-Einstellungen einholen.

VDR Basisinstallation

Für VDR muss folgendes Paket installiert werden:

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install vdr 

sudo aptitude install vdr 

In der Installation startet ein Konfigurator:
vdr-package-config.png

Die Frage nach der Fernbedienung ist in unserem Fall mit None gut beantwortet. Auch wird das Verzeichnis festgelegt, in welchem VDR die Aufnahmen ablegen soll. Hier sollte man sich überlegen, ob man den Vorschlag /var/lib/video/ übernimmt.

Die SAT-Karte findet VDR selbst, dazu werden keine Angaben benötigt Wird ein LNB nach dem Unicable-Standard benutzt ist nach der Installation noch etwas Handarbeit gefragt, man kann unter http://wiki.easy-vdr.de/index.php?title=Unicable 🇩🇪 die entsprechenden Schritte nachlesen.

Der VDR läuft als systemd Service, die Statusabfrage erfolgt mit:

$ systemctl status vdr.service
● vdr.service - Video Disk Recorder
   Loaded: loaded (/lib/systemd/system/vdr.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-03-10 16:07:02 CET; 18min ago
 Main PID: 1133 (vdr)
   Status: "Ready"
    Tasks: 12 (limit: 4915)
   CGroup: /system.slice/vdr.service
           └─1133 /usr/bin/vdr

Mär 10 16:07:10 Webkontor vdr[1133]: [1133] connect from 127.0.0.1, port 59096 - accepted
Mär 10 16:07:12 Webkontor vdr[1133]: [1133] closing SVDRP connection 

Bei Problemen ist das Logfile eine gute Quelle für die Fehleranalyse

$ journalctl -u vdr.service  

LIRC deaktivieren

Einen Fehler sieht man sehr wahrscheinlich

Mär 10 19:04:32 Webkontor vdr[4951]: [4969] ERROR (lirc.c,43): /var/run/lirc/lircd: No such file or directory

Grund ist, dass der VDR gern Verbindung zu seiner Fernbedienung aufnehmen möchte, im hier vorgestellten Headless-Betrieb unnötig.
Wie man

$ man vdr 

entnehmen kann liest VDR seine Kommandozeilenargumente aus dem Verzeichnis /etc/vdr/conf.d/, unter Ubuntu genauer der Datei /etc/vdr/conf.d/00-vdr.conf. Dort ist die Option --lirc auzukommentieren (# voranstellen).

Channellist

Per Default scannt VDR im Hintergrund und legt gefundene Kanäle in der /var/lib/vdr/channels.conf ab.

Hinweis:

Clients wie Kodi oder VDRAdmin arbeiten deutlich performanter mit einer kurzen Kanalliste!

Soll VDR nicht mehr nach Kanälen suchen ist in der /var/lib/vdr/setup.conf der Parameter UpdateChannels zu verändern.

Bedeutung Wert
kein Update 0
Update der Kanal-Namen 1
Update der PIDs 2
Update von Kanal-Namen und PIDs 3
Update von Kanal-Namen, PIDs und neu gefundenen Kanälen 4
Default
Update von Kanal-Namen, PIDs sowie neu gefundenen Kanälen und Transpondern
5

Eine Änderung von 5 auf 3 scheint hier sinnvoll.

Hinweis:

Zum Bearbeiten der Konfigurationsdateien wird in dieser Anleitung der Editor vi benutzt. Er ist in seiner Bedienung effektiv, aber auch sehr speziell. Möchte man sich nicht mit dem Konzept von vi auseinandersetzen, kann man auch einen andern Editor benutzen. Entscheidet man sich z.B. für den Editor Nano, so ersetzt man jedes Vorkommen von vi durch nano.

Hinweis:

Werden Konfigurationsdateien des VDR bearbeitet (z.B. setup.conf, channels.conf) ist der VDR vorher mit systemctl stop vdr.service zu beenden. Ansonsten werden Veränderungen durch VDR überschrieben.

# systemctl stop vdr.service
# vi /var/lib/vdr/setup.conf
# systemctl start vdr.service 

Möchte man diese Kanalliste verkleinern oder sortieren muss die channels.conf bearbeitet werden. Eine Bearbeitung im Texteditor ist möglich aber nicht sinnvoll, besser ist ein spezielles Programm, z.B. Kanaleditor für VDR 🇩🇪. Nach dem Download der ChannelEditor_1.9.2.1.jar ist der Editor bereit, eine Installation des Programms ist nicht nötig. Die Änderungen nimmt man am Besten auf einer Kopie der Kanalliste vor:

$ cp /var/lib/vdr/channels.conf .
$ chmod a+rw channels.conf
$ java -jar ./ChannelEditor_1.9.2.1.jar 

In der GUI ist nun die kopierte channels.conf zu öffnen und zu bearbeiten. Da man auf der Kopie gearbeitet hat, ist die neue channels.conf zum VDR zu kopieren.

# systemctl stop vdr.service
# cp ~/channels.conf /var/lib/vdr/channels.conf
# systemctl start vdr.service 

Die Clients des VDR (Kodi, VDRAdmin, ...) sind auch neu zu starten, um die Änderungen zu übernehmen.

VDRAdmin-AM

Folgende Pakete stellen die Funktionalität bereit.

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install vdradmin-am vdr-plugin-epgsearch vdr-plugin-streamdev-server vlc 

sudo aptitude install vdradmin-am vdr-plugin-epgsearch vdr-plugin-streamdev-server vlc 

Die tägliche Schnittstelle zum VDR soll in diesem Howto eine Webseite sein, bereit gestellt durch das Paket vdradmin-am.

VDRAdmin benutzt das Plugin vdr-plugin-epgsearch für Timer die aufgrund von EPG-Texten generiert werden, der Menüpunkt wird in der Oberfläche schlicht EPG Search genannt.

Das Plugin vdr-plugin-streamdev-server wird benutzt um Live-TV zu streamen; die Wiedergabe erfolgt jedoch nicht im VDRAdmin, sondern im von VDRAdmin aufgerufenen VLC-Player. Der IP-Bereich, der streamen darf, wird in der Datei /var/lib/vdr/plugins/streamdev-server/streamdevhosts.conf festgelegt.

Die letzte Version von VDRAdmin-AM ist Version 3.6.10 von 2014, trotz des Alters handelt es sich um eine leistungsfähige Weboberfläche.
Die Seite ist erreichbar unter der IP des VDR Servers, Port 8001, Bsp: http://192.168.178.55:8001/. Der Default-Login ist linvdr / linvdr.

Vorher ist der Dienst noch zu aktivieren, in dem man in folgender Datei ENABLED="1" setzt und den Dienst neu startet:

# vi /etc/default/vdradmin-am
# systemctl restart vdradmin-am.service 

VDRAdmin-AM Konfiguration

Nach dem erfolgreichen Aufruf der Seite ist der Menüpunkt Configuration aufzurufen.

Eine ausführlichere Beschreibung der Konfiguration findet man rechts oben unter dem Icon qtag.png.

Hat man eine TWIN-Sat Karte im VDR sollte man auch Number of DVB cards auf 2 setzen.

Möchte man über den Webbrowser Live-TV streamen ist das Live-Streaming zu aktivieren. Tatsächlich übernimmt diese Aufgabe dann VLC, der Browser stellt nur eine Playlist zu Verfügung die die Stream-URL enthält: playlist.png

Läuft ein Samba-Server auf dem VDR, kann man auch Path to recordings auf die Freigabe des /var/lib/video Verzeichnises des VDR setzen. Denn Aufnahmen werden nicht, wie Live-Streaming, über vdr-plugin-streamdev-server abgehandelt. Vielmehr wird eine VLC-kompatible Playlist mit dem Pfad zur Datei aus der angegebenen Freigabe angelegt.

Kodi

Kodi ist ein beliebter Multimedia-Client, in diesem Szenario wird er benutzt für

  • Live TV

  • Aufnahmen wiedergeben

  • EPG anzeigen

  • Timer setzen

Vor der Kodi Installation muss man VDR mit dem passenden Plugin vdr-plugin-vnsiserver ausstatten.

  • vdr-plugin-vnsiserver

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install vdr-plugin-vnsiserver 

sudo aptitude install vdr-plugin-vnsiserver 

(Die bei Ubuntu mitgelieferte Version V1.5.2 sollte ausreichen, wenn man aber das neuste Kodi benutzt kann es nötig sein das Plugin selbst neu zu kompilieren, die Quellen sind unter FernetMenta/vdr-plugin-vnsiserver 🇬🇧 zu finden. Auch dieses Plugin benötigt eine Konfiguration über die erlaubten IP-Adressen für den Zugriff, diese sind in allowed_hosts.conf anzugeben.

# systemctl stop vdr.service
# vi /var/lib/vdr/plugins/vnsiserver/allowed_hosts.conf
# systemctl start vdr.service 

Kodi läuft unter sehr vielen Betriebssystemen. Bei Adroid TV erfolgt die Installation über den Google PlayStore für Android TV.

Die Verbindung zum VDR wird über ein im Installationsumfang enthaltenes Kodi-Addon vorgenommen.

Addons->Benutzer Addons->PVR-Clients->VDR VNSI Client vdr-vnsi.png

Möchte man beim Start von Kodi den VDR aufwecken, muss noch unter Einstellungen->System->Energiesparen die entsprechende Option gesetzt werden.

wol1.png

VDR Manager

vdr-manager.png

Für ein nicht ganz so leistungsstarkes Tablett kann man statt Kodi den VDR Manager benutzen. Funktional sind diese beiden Programme ähnlich, zumindest im Bezug auf VDR. Weitere Details kann man dem VDR Manager Wiki 🇬🇧 entnehmen.

Die Installation des Clients erfolgt, wie üblich, über den Google Playstore: VDR Manager 🇩🇪. Das Programm benötigt noch einen externen Video-Player, als geeignet hat sich Videoplayer Für Alle Formate 🇩🇪 erwiesen.

Der Author des VDR Managers hat sich entschlossen über ein eignes Plugin mit dem VDR zu kommunizieren. Dieses ist nicht als Paket vorhanden, man muss es selbst bauen, bevor der VDR Manager konfiguriert werden kann.

$ git clone http://projects.vdr-developer.org/git/vdr-manager.git
$ cd vdr-vdrmanager/ 

In dem Makefile wird SSL deaktiviert: VDRMANAGER_USE_SSL := 0. Dann benötigen wir noch einige Libs und die VDR Header:

$ sudo apt-get install zlib1g-dev libssl-dev vdr-dev pkg-config 

Und können nun das Plugin bauen:

$ make 

Als Ergebnis bekommen wir die Datei libvdr-vdrmanager.so, das Plugin.

Sollen Plugins geladen werden, muss die Konfig-Datei in /etc/vdr/conf.d referenziert sein. Dazu legen wir eine, im wesentlichen leere, Datei an:

# cat /etc/vdr/conf.avail/vdrmanager.conf
[vdrmanager]
# 

Die Konfigurationsdatei wird nun verlinkt und dadurch als aktiv markiert.

# cd /etc/vdr/conf.d
# ln -s ../conf.avail/vdrmanager.conf 50-vdrmanager.conf
# ls -l
lrwxrwxrwx 1 root root   29 Sep  3  2017 50-vdrmanager.conf -> ../conf.avail/vdrmanager.conf 

Das Plugin selbst kommt in das gemeinsame Plugin-Verzeichnis, dabei ergänzen wir im Dateinamen .2.3.8 für die VDR Version:

$ cd /usr/lib/vdr/plugins
$ ls -l
...
-rwxr-xr-x 1 root root  1240632 Apr  6 15:51 libvdr-vdrmanager.so.2.3.8 

Nun ist der VDR neu zu starten und zu überprüfen, ob das Plugin geladen wurde.

# systemctl restart vdr.service
# vdr -V
vdr (2.3.8/2.3.8) - The Video Disk Recorder
...
vdrmanager (0.14) - VDR-Manager plugin 

Der "VDR Manager" kann nun auf dem Tablet/Telefon konfigueriert werden.

Shutdown/Wakeup

VDR hat einen eigenen Mechanismus um nach einer Leerlaufzeit herunterzufahren, diesen kann man auch über Skripte (shutdown-hooks) anpassen. Dieser Mechanismus wird hier nicht verwendet!

Es wird das Skript vdrhelper.py benutzt, die Einbindung ist im Folgenden beschrieben.

Shutdown

VDR ist auf dem hier beschriebenen Server nur ein Dienst, die Lösung sollte daher allgemeiner sein. Die Lösung besteht aus einem Script, dass über einen Crontab halbstündlich Bedingnungen prüft. Nur wenn folgende Bedingungen zutreffen gibt das Script als Rückgabewert 0 zurück, ansonsten 1.

Folgender Befehl bearbeitet die Crontabs

# crontab -e 

Für das oben beschriebene Script muss dazu folgende Zeile hinzugefügt werden.

1
2
# m h  dom mon dow   command
*/30 * * * * /opt/vdrhelper/vdrhelper.py --shutdowncheck&&/sbin/shutdown -h now

Die Erkennung von einer aktuell laufenden Aufnahme kann man vereinfachen durch einen VDR Hook. In dem mitgelieferten Hook-Frame wird eine "Marker-Datei" beim Starten der Aufzeichnung angelegt und beim Beenden gelöscht. Die geschieht mittels touch und rm.

# vi /usr/share/vdr/recording-hooks/R90.custom  

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#
# Custom VDR Recording Action Hook
# ----------------------------------
#
# This is a custom Recording Action Hook. It gets called by vdr
# before a recording starts, after a recording ended and after a
# recording has been edited. It is maintained as a config file in the vdr
# package. All other recording hooks get executed before this one! 

uline_name=`echo $2|sed 's/\//_/g'`

case $1 in
    before)
        # do here whatever you would like to do right BEFORE
        # the recording $2 STARTS
        touch "/tmp/vdrec_$uline_name"
        ;;
    started)
        # do here whatever you would like to do right AFTER
        # the recording $2 STARTED
        ;;
    after)
        # do here whatever you would like to do right AFTER
        # the recording $2 ENDED
        rm -f "/tmp/vdrec_$uline_name"
        ;;
    edited)
        # do here whatever you would like to do right AFTER
        # the recording $2 has been EDITED
        # $3 is the original recording
        ;;
    deleted)
        # do here whatever you would like to do right AFTER
        # the recording $2 has been DELETED
        ;;
esac

Timer Wakeup

Neben dem Shutdown muss der VDR auch selbstständig booten wenn eine Aufnahme kurz bevor steht. Dazu kann man einen Timer in der Uhr des Motherboards setzen. Zum Einschaltzeitpunkt bootet der PC dann selbstständig. Zu beachten ist, dass dieser Timer jedoch gelöscht wird wenn die BIOS-Uhr (hwclock) gesetzt wird. Und Linux speichert beim Shutdown die (genaue) aktuelle Uhrzeit in der BIOS-Uhr, um beim nächsten Systemstart eine Uhrzeit zur Verfügung zu haben.

Diese Aufgabe soll durch eine Service Unit für systemd erreicht werden, auszuführen beim Shutdown.

Im VDR-Wiki 🇩🇪 kann man die Details dazu lesen. In diesem Howto wurde das durch den Service auszuführende Script ersetzt und die Service-Unit wurde in /etc/systemd/system/ angelegt, /lib/systemd/system/ ist für Service-Units der Distribution vorgesehen.

# vi /etc/systemd/system/acpi-rtcwakeup.service 

und füllt ihn mit folgendem Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[Unit]
Description=write alarm time to rtc
Before=ntp.service vdr.service
ConditionPathExists=/sys/class/rtc

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
#/etc/init.d/hwclock.sh is disabled because setting the clock after a timer would disable the timer!
#so set the hwclock here at shutdown
ExecStop=/bin/bash -c '/sbin/hwclock --systohc;sleep 3;/opt/vdrhelper/vdrhelper.py --nexttimer > /sys/class/rtc/rtc0/wakealarm'

[Install]
RequiredBy=vdr.service
# systemctl enable /etc/systemd/system/acpi-rtcwakeup.service
# systemctl start acpi-rtcwakeup.service 

Wie man erkennt wird ERST die BIOS Uhr gestellt und dann der Alarm gesetzt.

Das originale hwclock.sh Script wird deaktiviert durch Einfügen eines exit 0.

# sudo vi /etc/init.d/hwclock.sh 
1
2
3
#!/bin/sh
exit 0
...

Komponenten

Tabellarische Zusammenfassung der verwendeten Komponenten und Versionen, Details sind im Howto selbst beschrieben.

Gerät/Softeware Version Beschreibung
SAT-Karte Karte mit 2 LNB-Anschlüssen, PCIe, Digital Devices Cine S2 V6.5 Twin Tuner DVB-S/S2
02:00.0 Multimedia controller: Digital Devices GmbH Octopus DVB Adapter
TV Philips 43PUS6551 AndroidTV, "Betriebssystem" für Kodi.
Kodi V17.6 "Krypton" oder V18 "Leia" Umfangreicher Streaming Client für VDR. Verfügbar für viele Betriebssysteme.
VDR 2.3.8-2 Video Disc Recoder
streamdev-server 0.6.1-git VDR-Plugin, welches Aufnahmen und Live-TV als Stream bereit stellt. Nutzbar z.B. mit VLC-Player.
vnsiserver 1.5.2-2 VDR-Plugin, welches die Schnittstelle zu Kodi bietet.
VDRAdmin-AM 3.6.10-4 Weboberfläche zum Verwalten und Benutzen des VDR.
vdr-plugin-epgsearch 2.2.0+git20170817-1 VDR-Plugin, welches für die Funktionalität der automatische Aufnahmen in VDRAdmin-AM bereit stellt. VDRAdmin-AM bezeichnet dies schlicht als EPG Search.
vdrmanager 0.14 VDR-Plugin über welches die Android-Software VDR Manager den VDR anspricht.
VDR Manager V12.71 Streaming Client für VDR. Geeignet auch für Tablets nicht die Performance für Kodi aufweisen. Google Play Store 🇩🇪
Videoplayer Für Alle Formate XPlayer 1.3.6.2 VDR Manager benötigt einen externen Videoplayer. Dieser Player ist eine von vielen möglichen Optionen. Google Play Store 🇩🇪
GT-S3SCR4 LNB mit 3 normalen (Legacy)-Ausgängen und einem Unicable-Ausgang.

Probleme

$ journalctl -fu vdr.service
Mär 10 17:55:41 Webkontor vdr[1133]: [3947] buffer usage: 70% (tid=3946)
Mär 10 17:55:42 Webkontor vdr[1133]: [3947] buffer usage: 80% (tid=3946)
Mär 10 17:55:42 Webkontor vdr[1133]: [3947] buffer usage: 90% (tid=3946)
Mär 10 17:55:42 Webkontor vdr[1133]: [3947] ERROR: 1 ring buffer overflow (188 bytes dropped)