EPG-Quelle bei IPTV: Wie XMLTV-Daten technisch funktionieren

Eine EPG-Quelle bei IPTV ist eine XMLTV-Datei: ein offenes XML-Format, das Sender und deren Sendungsdaten (Titel, Start- und Endzeit, Beschreibung) speichert. Der Player lädt diese Datei separat von der Kanalliste und ordnet die Einträge über eine Kennung, die tvg-id, den passenden Sendern zu. Stimmen die Kennungen nicht exakt überein, bleibt der elektronische Programmführer (EPG) leer, obwohl der Sender einwandfrei läuft.
Genau an dieser Zuordnung scheitern die meisten EPG-Probleme in der Praxis, nicht am Sender selbst und nicht an der Internetverbindung. Dieser Artikel erklärt, wie eine XMLTV-Datei technisch aufgebaut ist, wie die Zuordnung zur M3U-Playlist funktioniert, wie sich mehrere Quellen kombinieren lassen und woran eine fehlerhafte EPG-Anzeige in der Praxis meist liegt.
Eine XMLTV-Datei besteht aus einem Wurzelelement, das zwei Arten von Einträgen enthält: channel-Elemente, die einen Sender mit einer eindeutigen ID benennen, und programme-Elemente, die eine einzelne Sendung mit Start- und Endzeit, Titel, Kategorie und oft einer Kurzbeschreibung beschreiben. Jede Sendung verweist über ihre Kanal-ID auf genau ein channel-Element.
Da eine Woche Programmdaten für mehrere hundert Sender schnell mehrere hundert Megabyte umfasst, liegt die Datei in der Praxis fast immer komprimiert als .xml.gz vor. Player und EPG-Tools laden diese komprimierte Datei in festen Abständen, meist alle 12 bis 24 Stunden, entpacken sie lokal und bauen daraus die Programmübersicht auf. Zwischen diesen Aktualisierungen zeigt der Player die zuletzt geladenen Daten, auch wenn sich beim Sender inzwischen etwas geändert hat.
Die M3U-Playlist, die die Senderliste liefert, trägt pro Kanal ein Attribut namens tvg-id, üblicherweise in der Zeile #EXTINF:-1 tvg-id="...". Diese ID ist die einzige Verbindung zwischen Playlist und XMLTV-Datei: Der Player sucht in der XMLTV-Datei nach einem channel-Element, dessen ID zeichengenau mit dieser tvg-id übereinstimmt, einschließlich Groß- und Kleinschreibung und eventueller Länderkürzel.
Weicht auch nur ein Zeichen ab, findet der Player keine Übereinstimmung und zeigt für diesen Sender schlicht keine Daten an, obwohl der Stream selbst läuft. Das passiert typischerweise, wenn Playlist-Anbieter und EPG-Quelle unterschiedliche Namenskonventionen verwenden oder wenn ein Sender bei einer Seite umbenannt oder umsortiert wurde, bei der anderen aber nicht. Wer die genaue Schreibweise prüfen will, vergleicht die tvg-id in der Playlist direkt mit den channel-IDs in der geöffneten XMLTV-Datei, statt nur den Sendernamen zu betrachten.
👉 Einrichtung Schritt für Schritt
Die meisten EPG-fähigen Player erlauben das Hinterlegen von mehr als einer XMLTV-URL, weil keine einzelne Quelle alle Sender gleich gut abdeckt. Werden mehrere Quellen eingetragen, gilt in der Regel eine Prioritätsreihenfolge: Taucht dieselbe Kanal-ID in mehreren Quellen auf, gewinnt die zuerst gelistete. Fehlt eine ID in der obersten Quelle, füllt eine weiter unten stehende Quelle die Lücke, sofern sie den Sender ebenfalls führt. Die Reihenfolge der eingetragenen Quellen ist damit genauso wichtig wie deren Anzahl.
Ein reales Beispiel für diesen Kombinationsansatz ist das quelloffene Projekt iptv-org/epg auf GitHub. Es bündelt XMLTV-Daten aus mehreren hundert Einzelquellen, überwiegend länder- oder anbieterspezifische Guide-Seiten, und stellt sie als fertige XMLTV-Dateien bereit, häufig nach Land oder Quelle sortiert. Statt einzelne, oft unbeständige Links manuell zu sammeln, lässt sich darüber eine breitere und aktiver gepflegte Datenbasis einbinden.
Der wahrscheinlichste erste Schritt: prüfen, ob das Problem einzelne Sender oder die gesamte EPG betrifft. Fehlen Daten nur bei bestimmten Sendern, während andere korrekt angezeigt werden, liegt fast immer ein ID-Mismatch vor, also eine tvg-id in der Playlist, die keine passende channel-id in der aktuell genutzten XMLTV-Datei findet. Der zuverlässigste erste Schritt ist der direkte Abgleich beider IDs, nicht ein Neustart der App.
Fällt die EPG dagegen komplett und für alle Sender gleichzeitig aus, ist meist die Quelle selbst nicht mehr erreichbar oder unter einer anderen URL umgezogen. In Foren wie kodinerds.net wurde genau dieses Muster wiederholt beschrieben, unter anderem für die Quelle rytecxmltvGermany, die nach Nutzerberichten zeitweise nicht mehr erreichbar war und Programmdaten für deutschsprachige Sender ersatzlos wegfallen ließ, bis eine alternative Quelle eingebunden wurde. Eine dritte, seltenere Ursache ist ein veralteter lokaler Cache: Manche Apps aktualisieren die geladene XMLTV-Datei nur alle paar Stunden, sodass kurzfristig geänderte Sendezeiten erst mit Verzögerung sichtbar werden. Hilft das Warten auf die nächste automatische Aktualisierung nicht, ist das Entfernen und erneute Hinzufügen der Quelle der zuverlässigste letzte Schritt.
In IPTV-Foren wird regelmäßig nach kostenlosen, deutschsprachigen XMLTV-Quellen gefragt, gerade weil einzelne Links immer wieder ausfallen oder komplett verschwinden. Der Grund liegt in der Natur dieser Quellen: Viele werden von Einzelpersonen oder kleinen Gruppen gepflegt, die Programmdaten von Guide-Webseiten abgreifen. Ändert sich die Struktur der Ursprungsseite oder wird das private Hosting eingestellt, bricht die Quelle ohne Vorwarnung weg, wie es für rytecxmltvGermany berichtet wurde.
Wer sich nicht auf einen einzelnen, unbeständigen Link verlassen will, kombiniert nach dem in diesem Artikel beschriebenen Prinzip mehrere Quellen oder greift auf aktiv gepflegte Sammelprojekte wie iptv-org/epg zurück, die durch mehrere Mitwirkende seltener komplett ausfallen als eine einzelne private XMLTV-URL.
Eine funktionierende EPG-Anzeige bei IPTV ist am Ende eine Frage sauberer technischer Zuordnung: Die tvg-id in der Playlist muss exakt zur channel-id in der XMLTV-Datei passen, die Quelle muss aktuell erreichbar sein, und bei mehreren Quellen entscheidet deren Reihenfolge über das Ergebnis. Wer eine fehlende oder falsche Programmübersicht sieht, prüft zuerst diese Zuordnung und die Erreichbarkeit der Quelle, bevor er nach anderen Ursachen sucht.