Blog Digitalgesellschaft Verwaltungsbetrieb Textarchiv Textarchiv Walter Kirk (✝) Impressum
DVB-T2 mit Tvheadend und Kodi
VorbemerkungServer Tvheadend GitInstallationKonfigurationDesktop-EintragDateinamenVor- und NachaufzeichnungSpeicherort und NachbearbeitungGesamtstrukturRechte auf Home-VerzeichnisRechte auf die VideosverzeichnisseSkriptverzeichnis und RechteLog-Verzeichnis (Optional)Eintrag in Tvheadend (Nachbearbeitung)TestManuellKontrolleBeispielhafte Rechteübersicht (Endzustand)Scriptesetup-Tvheadend-speicher.shinstall-Tvheadend-postproc.shClient KodiClient TVHPlayerKein Ton bei Sendergruppe ZDFMobilChecklisteZusammenfassung
Mit dem Blogbeitrag Fernsehen am PC wird die Einrichtung von DVB-T2 im Linux-Betriebssystem beschrieben (Distribution: Ubuntu).
In diesem Blogbeitrag wird auf die Nutzung des Serversystems Tvheadend in Verbindung mit Kodi eingegangen, weil damit erweiterte Möglichkeiten der Nutzung und Nachbearbeitung möglich werden.
Es gibt auch die Möglichkeit, Tvheadend aus dem Snap-Store zu installieren (Ubuntu). Diese Version ist seit 2022 nicht mehr aktualisiert worden.
Das von Michael Marley veröffentlichte Server-System Tvheadend wird als Nightly Build zur Verfügung gestellt, muss jedoch zum Repository als PPA hinzugefügt werden.
xxxxxxxxxxtest@testgeraet:~$ sudo add-apt-repository ppa:mamarley/Tvheadend-gittest@testgeraet:~$ sudo apt updatetest@testgeraet:~$ sudo apt install tvheadend

Eine detaillierte Übersicht bietet diese Seite: How to set up Tvheadend with your DVB-T2 receiver
Standardmäßig wird in Gnome kein App-Eintrag für das Web-Interface von Tvheadend bei dieser Form der Installation angelegt, sodass der manuelle Start nur mit Eingabe der Daten im Web-Browser oder der automatische Start gar nicht eingerichtet werden kann. Mit Hilfe der folgenden Schritt-für-Schritt-Ausführung lässt sich dieser Mangel beheben:
Schritt 1: .desktop-Datei anlegen
Datei erstellen
xxxxxxxxxx~/.local/share/applications/tvheadend.desktop
(mit einem Texteditor wie gedit, nano oder kate)
Folgenden Inhalt einfügen:
xxxxxxxxxx[Desktop Entry]Type=ApplicationName=TVHeadend WebinterfaceComment=Öffnet das TVHeadend-Webinterface im BrowserExec=xdg-open http://127.0.0.1:9981Icon=/home/<Nutzername>/.local/share/icons/tvheadend.pngTerminal=falseCategories=AudioVideo;Network;StartupNotify=true
<Nutzername> durch den eigenen tatsächlichen Benutzernamen ersetzen.
Der Icon-Pfad sollte auf das .png der eigenen Wahl zeigen.
Schritt 2: Berechtigungen setzen
Datei ausführbar machen:
xxxxxxxxxxchmod +x ~/.local/share/applications/tvheadend.desktopSchritt 3: GNOME-Integration
Bei erneuter Anmeldung erscheint der Eintrag im App-Menü oder in der Aktivitäten-Übersicht unter dem Namen TVHeadend Webinterface.
Man kann ihn ihn dann:
an die Favoritenleiste (Dash) anheften,
über die Suche starten,
oder in Autostart einbinden (durch Kopie nach ~/.config/autostart/).
Wer seine eigenen Spezifikationen in Tvheadend einstellen möchte, kann dies im Menü
xxxxxxxxxxConfiguration → General → Recording
vornehmen. Im default profile unter Format String/Pathname Specification ist voreingestellt: $t$n.$x. Hier lassen sich die eigenen Konventionen speichern, z.B. JJJJ-titel.ext mit
xxxxxxxxxx%Y-$t.$x
Ausgabe: 2025-Videotitel.ts
Kurz erklärt:
%Y → Jahr (z. B. 2025)
- → Trennzeichen (frei wählbar)
$t → Titel der Sendung
.$x → Punkt + Dateiendung (z. B. .ts).
Wichtig ist das Zeichen $ und nicht wie üblich das Zeichen % vor den Schaltern.
Damit Fehlaufnahmen vermieden werden (Time Missing), sind im default profile die Dauer für Vor- und Nachaufzeichnungen einzustellen (Pre- bzw. Post-Recording), beispielsweise für Vor: 1 Min, und Nach: 2 Min. Nicht immer reicht das aus. Dann sollten die Einstellungen weiterhin angepasst werden.
Tipp: Für ARTE.tv hat sich ein Zeitfenster für Vor von 3 Min. und Nach von 3 Min. als praktikabel erwiesen.
Hier sind alle beteiligten Ordner, ihre korrekten Rechte und die passenden Befehle für Skriptausführung und Nachbearbeitung in Tvheadend aufgeführt.
Hier die relevanten Verzeichnisse:
| Zweck | Pfad | Beschreibung |
|---|---|---|
| Home-Verzeichnis | /home/Nutzer | Basis aller Daten |
| videos | /home/Nutzer/videos | Hauptordner für alle videos |
| DVB-T | /home/Nutzer/videos/032-dvb-t | Tvheadend-Arbeitsbereich |
| Aufnahmen (TS) | /home/Nutzer/videos/032-dvb-t/aufnahmen | Speichert Tvheadend-TS-Dateien |
| MKV-Ausgabe | /home/Nutzer/videos/032-dvb-t/mkv | Zielverzeichnis der umgewandelten MKVs |
| Skripte | /home/Nutzer/bin | Enthält get-m2t-to-mkv-fernsehen.sh |
| Logs | /home/Nutzer/000-dokumente-system/080-backup/log | Ausgabe/Log-Dateien deines Skripts |
hts (der Tvheadend-Benutzer) muss das Home betreten dürfen, aber nicht lesen:
xxxxxxxxxxtest@testgeraet:~$ sudo chmod o+rx /home/NutzerDamit bleibt Home privat, aber Dienste wie Tvheadend dürfen hinein.
xxxxxxxxxxtest@testgeraet:~$ sudo chown -R Nutzer:video /home/Nutzer/videostest@testgeraet:~$ sudo chmod -R 775 /home/Nutzer/videosDamit kann:
Nutzer alles lesen/schreiben
hts (Mitglied der Gruppe video) Dateien lesen und schreiben
Prüfen, ob hts in der Gruppe video ist:
xxxxxxxxxxtest@testgeraet:~$ id htsFalls nicht:
xxxxxxxxxxtest@testgeraet:~$ sudo usermod -aG video htstest@testgeraet:~$ sudo systemctl restart TvheadendVerzeichnis:
xxxxxxxxxx/home/Nutzer/binRechte:
xxxxxxxxxxtest@testgeraet:~$ sudo chown -R Nutzer:video /home/Nutzer/bintest@testgeraet:~$ sudo chmod -R 775 /home/Nutzer/binSkript selbst (z. B. /home/Nutzer/bin/get-m2t-to-mkv-fernsehen.sh):
xxxxxxxxxxtest@testgeraet:~$ sudo chmod +x /home/Nutzer/bin/get-m2t-to-mkv-fernsehen.shTvheadend (hts) muss auch ins Log schreiben dürfen:
xxxxxxxxxxtest@testgeraet:~$ sudo chown -R Nutzer:video /home/Nutzer/000-dokumente-system/080-backup/logtest@testgeraet:~$sudo chmod -R 775 /home/Nutzer/000-dokumente-system/080-backup/logIn der Tvheadend-Weboberfläche:
Menü: Konfiguration → Aufnahmen → Nachbearbeitung
Eintrag:
xxxxxxxxxx/home/Nutzer/bin/get-m2t-to-mkv-fernsehen.sh "%f" "%t"
Bedeutung:
%f = vollständiger Pfad zur .ts-Datei
%t = Titel der Aufnahme
xxxxxxxxxxtest@testgeraet:~$ sudo -u hts /home/Nutzer/bin/get-m2t-to-mkv-fernsehen.sh \"/home/Nutzer/videos/032-dvb-t/aufnahmen/Beispiel.ts" \"Beispiel"MKV-Datei sollte in /home/Nutzer/videos/032-dvb-t/mkv/ liegen
Log-Einträge unter /home/Nutzer/000-dokumente-system/080-backup/log
xxxxxxxxxxdrwxr-xr-x 3 root root /homedrwxr-xr-x 29 Nutzer Nutzer /home/Nutzerdrwxrwxr-x 6 Nutzer video /home/Nutzer/videosdrwxrwxr-x 6 Nutzer video /home/Nutzer/videos/032-dvb-tdrwxrwxr-x 3 Nutzer video /home/Nutzer/videos/032-dvb-t/aufnahmendrwxrwxr-x 3 Nutzer video /home/Nutzer/videos/032-dvb-t/mkvdrwxrwxr-x 4 Nutzer video /home/Nutzer/bindrwxrwxr-x 4 Nutzer video /home/Nutzer/000-dokumente-system/080-backup/logDamit ist das System:
sicher (keine übermäßigen Rechte),
funktionsfähig (hts kann alles ausführen und schreiben),
sauber strukturiert für spätere Erweiterungen.
Mit Hilfe von Bash-Scripts lassen sich einige Vorgänge vereinfacht erledigen. Die Scripte sind auf die eigenen Verhältnisse anzupassen.
xxxxxxxxxx
# ================================================# Tvheadend – Aufnahmespeicher & Nachbearbeitung# ================================================# Autor: Wolfgang Kirk + ChatGPT# Datum: 2025-10-27# -----------------------------------------------
# === Konfiguration ===USER_MAIN="Nutzer"GROUP_MAIN="video"TVH_USER="hts"
# HauptverzeichnisseHOME_DIR="/home/${USER_MAIN}"MEDIA_ROOT="${HOME_DIR}/videos"DVB_DIR="${MEDIA_ROOT}/032-dvb-t"RECORD_DIR="${DVB_DIR}/aufnahmen"MKV_DIR="${DVB_DIR}/mkv"BIN_DIR="${HOME_DIR}/bin"LOG_DIR="${HOME_DIR}/000-dokumente-system/080-backup/log"
# NachbearbeitungsskriptSCRIPT_NAME="get-m2t-to-mkv-fernsehen.sh"SCRIPT_SOURCE="./${SCRIPT_NAME}" # hier liegt dein eigenes SkriptSCRIPT_TARGET="${BIN_DIR}/${SCRIPT_NAME}"
# ================================================echo "==> Tvheadend-Setup wird gestartet..."set -e
# 1️⃣ Home-Verzeichnis: Durchführungsrecht für andereecho "==> Rechte auf ${HOME_DIR}"sudo chmod o+rx "${HOME_DIR}"
# 2️⃣ Verzeichnisse anlegenecho "==> Erstelle videosverzeichnisse..."sudo mkdir -p "${RECORD_DIR}" "${MKV_DIR}" "${BIN_DIR}" "${LOG_DIR}"
# 3️⃣ Eigentümer & Gruppe setzenecho "==> Setze Eigentümer und Gruppe..."sudo chown -R ${USER_MAIN}:${GROUP_MAIN} "${MEDIA_ROOT}" "${BIN_DIR}" "${LOG_DIR}"
# 4️⃣ Zugriffsrechte setzenecho "==> Setze Verzeichnisrechte..."sudo chmod -R 775 "${MEDIA_ROOT}" "${BIN_DIR}" "${LOG_DIR}"
# 5️⃣ Prüfen, ob Tvheadend-Benutzer in Gruppe video istecho "==> Prüfe Gruppenmitgliedschaft..."if ! id -nG "${TVH_USER}" | grep -qw "${GROUP_MAIN}"; then echo " -> ${TVH_USER} ist NICHT in Gruppe ${GROUP_MAIN}, füge hinzu..." sudo usermod -aG "${GROUP_MAIN}" "${TVH_USER}" echo " -> Bitte nach Abschluss: sudo systemctl restart Tvheadend"else echo " -> ${TVH_USER} ist bereits in Gruppe ${GROUP_MAIN}"fi
# 6️⃣ Nachbearbeitungsskript kopierenif [ -f "${SCRIPT_SOURCE}" ]; then echo "==> Kopiere Nachbearbeitungsskript..." sudo cp "${SCRIPT_SOURCE}" "${SCRIPT_TARGET}" sudo chown ${USER_MAIN}:${GROUP_MAIN} "${SCRIPT_TARGET}" sudo chmod 775 "${SCRIPT_TARGET}"else echo "WARNUNG: Nachbearbeitungsskript (${SCRIPT_SOURCE}) wurde nicht gefunden!"fi
# 7️⃣ Zusammenfassungecho ""echo "=============================================="echo " Setup abgeschlossen!"echo "----------------------------------------------"echo " Verzeichnisse:"echo " Aufnahmen: ${RECORD_DIR}"echo " MKV-Ziel: ${MKV_DIR}"echo " Logs: ${LOG_DIR}"echo ""echo " Nachbearbeitungsskript:"echo " ${SCRIPT_TARGET}"echo ""echo " Rechte:"echo " Besitzer: ${USER_MAIN}:${GROUP_MAIN}"echo " Tvheadend-Benutzer: ${TVH_USER} (muss in Gruppe ${GROUP_MAIN} sein)"echo ""echo " Tvheadend-Konfiguration (Web-GUI):"echo " Nachbearbeitung: ${SCRIPT_TARGET} \"%f\" \"%t\""echo "=============================================="
xxxxxxxxxx# -------------------------------------------------------------# Tvheadend Postprocessing Script – Setup# -------------------------------------------------------------# Zweck:# - installiert das Nachbearbeitungs-Skript für Aufnahmen# - setzt korrekte Rechte# - trägt das Script in das DVR-Profil "default" ein# -------------------------------------------------------------
Autor: Wolfgang Kirk + ChatGPT
set -e
# --- Einstellungen anpassen ---POSTPROC_SRC="/home/Nutzer/bin/get-m2t-to-mkv-fernsehen.sh"POSTPROC_DST="/usr/local/bin/get-m2t-to-mkv-fernsehen.sh"TVH_CONFIG_DIR="/home/hts/.hts/Tvheadend/config/dvr"PROFILE_FILE="$TVH_CONFIG_DIR/default"
# --- prüfen, ob Quellscript existiert ---if [ ! -f "$POSTPROC_SRC" ]; then echo "❌ Fehler: Quelldatei $POSTPROC_SRC nicht gefunden!" exit 1fi
# --- Kopieren und Rechte setzen ---sudo mkdir -p "$(dirname "$POSTPROC_DST")"sudo cp "$POSTPROC_SRC" "$POSTPROC_DST"sudo chown root:root "$POSTPROC_DST"sudo chmod 755 "$POSTPROC_DST"echo "✅ Script installiert unter: $POSTPROC_DST"
# --- DVR-Profil vorbereiten ---sudo mkdir -p "$TVH_CONFIG_DIR"sudo chown -R hts:video "$(dirname "$TVH_CONFIG_DIR")"
# --- Profildatei anlegen, falls nicht vorhanden ---if [ ! -f "$PROFILE_FILE" ]; then echo "⚙️ Erstelle neues DVR-Profil: default" sudo tee "$PROFILE_FILE" >/dev/null <<EOF{ "enabled": true, "name": "default", "comment": "Standardprofil mit MKV-Nachbearbeitung", "storage": "/home/Nutzer/videos/032-dvb-t/aufnahmen", "postproc": "$POSTPROC_DST \"%f\" \"%t\"", "owner": "hts", "creator": "admin"}EOF sudo chown hts:video "$PROFILE_FILE" sudo chmod 644 "$PROFILE_FILE"else echo "📁 DVR-Profil existiert bereits – aktualisiere Postproc-Eintrag" sudo sed -i "s#\"postproc\": \".*\"#\"postproc\": \"$POSTPROC_DST \\\"%f\\\" \\\"%t\\\"\"#g" "$PROFILE_FILE"fi
# --- Neustart von Tvheadend ---echo "🔄 Neustart von Tvheadend ..."sudo systemctl restart Tvheadend
echo "✅ Einrichtung abgeschlossen!"echo "ℹ️ Postprocessing wird ab jetzt automatisch mit dem DVR-Profil 'default' ausgeführt."Als Player wird Kodi eingesetzt, das aus den Repositories installiert werden kann:
xxxxxxxxxxtest@testgeraet:~$ sudo apt install kodi kodi-pvr-hts
Um auf Tvheadend zugreifen zu können, ist das AddOn PVR-HTS mit den Zugangsdaten für den Server einzurichten.

Kodi legt bei Aufnahmen über einen Timer standardmäßig einen separaten Ordner an, weil die Aufnahmefunktion (z. B. über VDR oder PVR-Addons) die Struktur Titel/Datum.rec verwendet. Dieses Verhalten lässt sich nicht direkt in Kodi deaktivieren, da es vom Backend (z. B. VDR oder dem PVR-Plugin) vorgegeben wird.
Um das zu vermeiden kann folgendes eingestellt werden: Ordnerstruktur nicht als Filmordner behandeln
Gehe in Kodi zu „Videos hinzufügen…“ und wähle das Verzeichnis mit den VDR-Aufnahmen aus.
Wähle als Medientyp „TV-Aufnahmen“ oder „Videos“ (nicht „Filme“).
Wichtig: Deaktiviere die Option „Filme liegen in getrennten Ordnern, die dem Filmtitel entsprechen“.
Dadurch wird jeder .ts-Stream als einzelne Datei angezeigt, ohne dass Kodi versucht, einen separaten Ordner pro Titel anzulegen.
Wem Kodi zu aufwendig ist, sollte sich das Programm TVHPlayer ansehen.
1. Vor dem Start ist im Tvheadend eine Einstellung nach dem Schritt-für-Schritt-Fix vorzunehmen.
TVhPlayer: Fehler Expecting value: line 1 column 1 (char 0) Schritt‑für‑Schritt‑Fix
Kurzbeschreibung
Beim Start von TVHPlayer erscheint die Fehlermeldung:
xxxxxxxxxxUnexpected error: Expecting value: line 1 column 1 (char 0)
Ursache
TVhPlayer erwartet eine HTTP-Authentifizierung im Format Plain oder Digest+Plain. Wenn TVHeadend nur Digest verwendet, liefert der Server eine Antwort, die TVhPlayer nicht korrekt parsen kann - es entsteht die oben genannte Fehlermeldung.
Lösung (Schritt‑für‑Schritt)
TVHeadend Webinterface öffnen
Öffne deinen Browser und melde dich am TVHeadend-Webinterface an:
xxxxxxxxxxhttp://<deine-server-ip>:9981
Beispiel lokal:
xxxxxxxxxxhttp://127.0.0.1:9981
Zu den Einstellungen navigieren
Im oberen Menü wähle:
xxxxxxxxxxConfiguration → General → Base
HTTP Server Settings finden
Scrolle in der Seite „Base“ zu HTTP Server Settings (oder „HTTP Authentication“ / „Authentication type“ — je nach Version leicht variierend).
Authentifizierungstyp ändern
Stelle sicher, dass die Option auf Digest and Plain gesetzt ist.
Kurze Zusammenfassung
Problem: TVhPlayer kann JSON-Antwort nicht parsen (leere/ungültige Antwort bei Authentifizierung).
Fix: TVHeadend → Configuration → General → Base → HTTP Server Settings → Digest and Plain aktivieren.
Ergebnis: TVhPlayer verbindet wieder fehlerfrei.
2. Vorteile
Mit TVHPlayer kann DVB-T2 genutzt werden und darüber hinaus
ist das Programm einfacher einzurichten,
ist die Terminierung von Aufnahmen bei Tvheadend vereinfacht möglich,
sind die Sender übersichtlich aufgeführt.

Die Sender der Gruppe ZDFMobil können unter Umständen keinen Ton ausgeben. Das kann auch an den Einstellungen für das Ausgabegerät liegen, z.B. HDMI.
Lösungsansatz unter Ubuntu 26.10:
1. Installation von PavuControl
xxxxxxxxxxtest@testgeraet:~$ sudo apt install pavucontrol
2. Lautstärkeregler öffnen
Wenn die Ausgabe über HDMI auf einen Receiver erfolgt, diese Ausgabeart auswählen und bis auf pcm alle Alternativen deaktivieren, mindestens jedoch E-AC-3. Dann sollte der Ton über TVHPlayer auch bei der Sendergruppe ZDFMobil ohne Behinderung erfolgen.
3. PavuControl speichert die Änderung nicht selbst, sondern gibt sie an WirePlumber für das in Ubuntu genutzte Pipewire weiter. Somit werden Eingriffe in das System erst mal nicht erforderlich.
| Schritt-für-Schritt |
|---|
| 1. Programme Tvheadend und Kodi/PVR-HTS installieren |
| 2. Tvheadend konfigurieren |
| 2.1 Verzeichnisse anlegen |
| 2.2 Rechte setzen |
| 2.3 Zugangsverfahren ändern (TVHPlayer) |
| 3. Kodi einrichten |
| 4. TVHPlayer installieren |
| 5. Lautstärkeregler installieren (pavuconrtol) |
Fernsehen auf dem PC mit Tvheadend und Kodi ist eine Alternative, weil das System auf die eigenen Bedürfnisse weitestgehend angepasst werden kann, einschließlich der Weiterbearbeitung von Videodateien (Postprozess).
Darüber hinaus
ist laut (subjektiver) Wahrnehmung die Bildqualität des Fernsehens und die Nutzung der Ressourcen deutlich verbessert,
werden die EPG-Daten besser aktualisiert,
lassen sich Aufnahmen einfacher planen,
ist der Server über einen Browser steuerbar.

Wolfgang Kirk

Veröffentlicht: 2025-11-01, 08:00 Uhr aktualisiert: 2025-12-02, 15:40 Uhr