M3U · EPG · Protokolle · xmltv

M3U-Playlists und EPG bei IPTV — technische Grundlagen ohne Vereinfachung

M3U ist keine Audiodatei, EPG kein Sender-Dienst und HLS kein Player. Wer diese Formate versteht, löst EPG-Probleme in Minuten und beurteilt Anbieterqualität am Dateiformat — nicht am Marketing.

M3U-Datei in einem Texteditor geöffnet — EXTINF-Header mit Kanalattributen und HLS-Stream-URL sichtbar

Was eine M3U-Datei technisch ist — und was sie nicht ist

M3U steht für „MP3 URL" — die Endung stammt aus den 1990er-Jahren, als das Format für Audio-Playlists entwickelt wurde. Im IPTV-Kontext hat das Format seinen ursprünglichen Verwendungszweck längst hinter sich gelassen: Eine IPTV-M3U-Datei ist eine einfache UTF-8-Textdatei, die eine geordnete Liste von Stream-URLs enthält — eine pro Kanal — zusammen mit Metadaten für jeden Eintrag.

Die Dateiendung .m3u8 ist dabei keine eigene Kategorie, sondern bezeichnet dieselbe Struktur im UTF-8-Zeichensatz (das „8" steht für UTF-8). Ältere .m3u-Dateien können in anderen Zeichensätzen (ISO-8859-1) kodiert sein, was bei Umlauten zu Darstellungsfehlern führt. Für IPTV ist .m3u8 die modernere und empfohlene Variante.

Wichtig: Eine M3U-Datei enthält keine Videodaten. Sie ist ein Index, der auf die eigentlichen Stream-URLs verweist. Wenn ein Anbieter eine M3U-URL bereitstellt, liefert er damit eine Liste von Verweisen — die Streams selbst liegen auf separaten Servern, oft auf einem CDN.

M3U-URL vs. M3U-Datei

Ihr Anbieter gibt Ihnen typischerweise eine URL, keine Datei. Die URL endet oft auf /get.php?username=…&type=m3u_plus — die App ruft diese URL ab und empfängt die M3U-Textdatei in Echtzeit. „m3u_plus" bezeichnet dabei das erweiterte Format mit #EXTINF-Metadaten, das alle modernen IPTV-Apps erwarten.

Annotiertes M3U-Dateibeispiel: EXTM3U-Header, EXTINF-Zeile mit Attributen und darunterliegende Stream-URL

Aufbau einer M3U-Datei — annotiertes Beispiel

M3U_PLUS FORMAT — VOLLSTÄNDIGES BEISPIEL MIT ERKLÄRUNG # Pflicht-Header — muss die erste Zeile sein #EXTM3U x-tvg-url="https://epg.example.com/epg.xml.gz" # Kanaleintrag: Metadaten-Zeile #EXTINF:-1 tvg-id="ard.de" tvg-name="Das Erste HD" tvg-logo="https://logos.example.com/ard.png" group-title="DE | Öffentlich-rechtlich",Das Erste HD # Stream-URL (muss direkt nach #EXTINF folgen, keine Leerzeile) https://stream.example.com/ard/1080p/index.m3u8 #EXTINF:-1 tvg-id="zdf.de" tvg-name="ZDF HD" tvg-logo="https://logos.example.com/zdf.png" group-title="DE | Öffentlich-rechtlich",ZDF HD https://stream.example.com/zdf/1080p/index.m3u8 #EXTINF:-1 tvg-id="rtl.de" tvg-name="RTL HD" tvg-logo="https://logos.example.com/rtl.png" group-title="DE | Privat",RTL HD https://stream.example.com/rtl/1080p/index.m3u8

Die EXTINF-Attribute im Detail — was jede Eigenschaft bewirkt

Jedes Attribut in der #EXTINF-Zeile hat eine konkrete Funktion im Player. Falsch gesetzte oder fehlende Attribute sind die häufigste Ursache für EPG-Probleme und fehlende Kanallogos.

tvg-id

Die eindeutige Kanal-ID, über die der EPG-Eintrag aus der xmltv-Datei zugeordnet wird. Stimmt dieser Wert nicht mit dem channel id-Attribut in der EPG-XML überein, erscheint kein Programm — das ist der häufigste EPG-Fehler.

tvg-id="ard.de"
tvg-name

Der Anzeigename des Senders im Player. Unabhängig vom Kanal-Label am Ende der EXTINF-Zeile. Manche Apps nutzen diesen Wert für die Suche und Sortierung — er sollte exakt dem EPG-Sendernamen entsprechen.

tvg-name="Das Erste HD"
tvg-logo

URL zu einem Senderlogo (PNG oder JPG). Der Player lädt das Logo und zeigt es in der Kanalliste. Fehlt das Logo oder ist die URL nicht erreichbar, zeigt der Player ein Platzhalter-Icon — kein Fehler, aber optisch unvollständig.

tvg-logo="https://…/ard.png"
group-title

Die Kanalgruppe, unter der der Sender im Player einsortiert wird. Ermöglicht das Ausblenden ganzer Gruppen (z. B. alle nicht-deutschen Sender). Konvention: „DE | Öffentlich-rechtlich", „DE | Privat", „NL | Public" — einheitliche Benennung erleichtert die Verwaltung.

group-title="DE | Öffentlich-rechtlich"
tvg-shift

Zeitversatz für den EPG-Guide in Stunden — positiv oder negativ. Nützlich wenn ein Anbieter EPG-Daten in UTC liefert, aber die Streams in CET/CEST laufen. Für Deutschland: tvg-shift="1" (Winterzeit) oder tvg-shift="2" (Sommerzeit).

tvg-shift="1"
x-tvg-url (im EXTM3U-Header)

Die EPG-URL, die direkt in der Playlist hinterlegt ist. Manche Apps lesen sie automatisch aus. Nicht alle Apps unterstützen dieses Attribut — TiviMate ignoriert es und erwartet die EPG-URL manuell in den Einstellungen.

x-tvg-url="https://…/epg.xml.gz"
Leerzeilen zwischen EXTINF und Stream-URL

Eine Leerzeile zwischen der #EXTINF-Zeile und der darunterliegenden Stream-URL bricht den Kanaleintrag für viele Parser. Der Standard ist: EXTINF-Zeile, direkt darunter die URL, keine Leerzeile dazwischen. Dieser Fehler tritt auf, wenn Playlists manuell in einem Texteditor bearbeitet werden.

EPG und das xmltv-Format — wie der elektronische Programmführer technisch funktioniert

Der EPG (Electronic Programme Guide) ist eine separate XML-Datei, die Sendezeitpläne für alle Kanäle enthält. Das verwendete Format heißt xmltv — ein offener XML-Standard, der aus dem Open-Source-Projekt xmltv.org stammt und von nahezu allen IPTV-Apps und PVR-Systemen unterstützt wird.

Die EPG-Datei besteht aus zwei Hauptbereichen: einer Kanaldefinition (<channel>-Blöcke) und den Programm-Einträgen (<programme>-Blöcke). Der Player lädt die Datei regelmäßig (typischerweise alle 12–24 Stunden) und ordnet die Programmeinträge den Kanälen über die Kanal-ID zu.

Annotiertes xmltv-Beispiel

XMLTV-FORMAT — AUFBAU EINES EPG-EINTRAGS <!-- Kanaldefinition --> <channel id="ard.de"> <display-name lang="de">Das Erste</display-name> <icon src="https://logos.example.com/ard.png"/> </channel> <!-- Programmeintrag für diesen Kanal --> <programme start="20260911200000 +0200" stop="20260911213000 +0200" channel="ard.de"> <title lang="de">Tagesschau</title> <desc lang="de">Die Nachrichten des Tages.</desc> <category lang="de">Nachrichten</category> </programme>
Zeitzonenformat im EPG

Das Datum-Zeitformat im xmltv-Standard lautet: YYYYMMDDHHmmss +HHMM. Der Offset +0200 entspricht CEST (Sommerzeit), +0100 entspricht CET (Winterzeit). Wenn der Anbieter alle Zeiten in UTC (+0000) ausliefert, aber Ihr Player den Offset nicht korrekt auswertet, verschiebt sich die Programmanzeige um 1–2 Stunden. Das ist der typische „Programm-Versatz"-Fehler.

EPG-Zuordnung: Das tvg-id-Prinzip

Die Verbindung zwischen M3U-Kanal und EPG-Programm ist ausschließlich über die ID hergestellt. Der Wert von tvg-id in der M3U muss exakt mit dem Wert von channel id in der EPG-XML übereinstimmen — Groß-/Kleinschreibung inklusive. ard.de und ARD.DE sind für den Parser verschiedene IDs.

M3U tvg-idEPG channel idEPG erscheint?
ard.deard.de✓ Ja
ARD.deard.de✗ Nein (Groß-/Klein)
Das Ersteard.de✗ Nein (anderer Wert)
ard.deard.de (Leerzeichen)✗ Nein (Leerzeichen)

EPG-Dateigröße und Komprimierung

EPG-Dateien für große Senderlisten (5.000+ Kanäle, 7-Tage-Programm) erreichen schnell 50–200 MB. Das ist für manche Player und Geräte zu groß — insbesondere ältere Fire TV Sticks mit wenig RAM. Anbieter komprimieren EPG-Dateien daher oft als GZIP (.xml.gz). TiviMate, OTT Navigator und GSE IPTV unterstützen komprimierte EPG-URLs direkt. Tragen Sie statt der .xml-URL die entsprechende .xml.gz-URL ein.

HLS, MPEG-TS und RTMP — welches Protokoll was bedeutet

Die Stream-URL am Ende jedes M3U-Eintrags verrät bereits das verwendete Protokoll. Für Nutzer ist das nicht nur akademisch: Ältere Geräte oder Apps unterstützen bestimmte Protokolle nicht, und das richtige Protokoll beeinflusst Latenz und Fehlertoleranz.

Vergleichsdiagramm IPTV-Streamprotokolle: HLS-Segmentierung vs. MPEG-TS-Datenstrom schematisch dargestellt
HLS
HTTP Live Streaming · Apple (2009)

Das meistgenutzte IPTV-Protokoll. Der Stream wird in kleine Segmente (2–10 Sekunden) aufgeteilt, die per HTTP einzeln abgerufen werden. URL endet auf .m3u8 (Playlist) oder .ts (Segment). Vorteil: Adaptive Bitrate (ABR) möglich — der Player wechselt automatisch auf niedrigere Qualität bei schlechter Verbindung. Nachteil: Höhere Latenz (Buffer-Vorladung nötig). Empfohlen für alle modernen Geräte.

MPEG-TS
MPEG Transport Stream · UDP-basiert

Ursprüngliches IPTV-Protokoll, übertragen per UDP (kein Verbindungsaufbau, keine Retransmission). URL beginnt mit udp:// oder rtp://. Geringere Latenz als HLS, aber ohne Fehlerkorrektur: Verlorene Pakete erzeugen Bildstörer statt Buffering. Nur in kontrollierten Netzwerken (LAN, VLAN) zuverlässig. Über das öffentliche Internet oft instabil.

RTMP
Real-Time Messaging Protocol · Adobe

Älteres Streaming-Protokoll, ursprünglich für Flash-Player entwickelt. URL beginnt mit rtmp://. Wird im IPTV-Bereich seltener, aber noch vereinzelt genutzt. Neuere Betriebssysteme (iOS/tvOS, Android 12+) haben RTMP-Support entfernt oder eingeschränkt. Falls RTMP-Streams nicht starten: App mit explizitem RTMP-Support wählen (z. B. VLC unter Windows/Linux).

Protokoll URL-Prefix Latenz Fehlertoleranz Gerätekompatibilität 2026
HLS https://…/index.m3u8 Mittel (2–10 s Puffer) Hoch (TCP-Retransmission) Universell — alle modernen Geräte
MPEG-TS (UDP) udp://… / rtp://… Niedrig (< 1 s) Niedrig (kein Retransmit) LAN/Heimnetz; öffentliches Internet meist instabil
RTMP rtmp://… Niedrig bis mittel Mittel Eingeschränkt — iOS/tvOS nicht unterstützt
HTTP (direkt) http://… / https://… Geräteabhängig Mittel (TCP) Gut — abhängig von Player-Unterstützung

Streams mit VLC testen — bevor Sie eine App konfigurieren

VLC ist das schnellste Diagnosewerkzeug für M3U-Streams. Ein Stream, der in VLC nicht läuft, wird in keiner anderen App funktionieren. Ein Stream, der in VLC läuft, ist das Problem in der App — nicht im Stream.

VLC-Test: Einzelnen Stream prüfen

VLC — STREAM DIREKT ÖFFNEN (WINDOWS / MACOS / LINUX) VLC → Medien → Netzwerk öffnen (Strg+N)
→ Stream-URL eintragen (aus der M3U kopieren)
→ Öffnen klicken

Oder per Kommandozeile:
vlc "https://stream.example.com/ard/index.m3u8"

# Vollständige M3U-Playlist öffnen:
vlc "https://ihr-anbieter.com/get.php?username=X&password=Y&type=m3u_plus"

ffprobe: Stream-Eigenschaften analysieren

Mit ffprobe (Teil des ffmpeg-Pakets) können Sie exakte Stream-Parameter abrufen: Codec, Auflösung, Bitrate, Audio-Format. Das hilft bei der Diagnose von Kompatibilitätsproblemen — z. B. wenn ein Stream in VLC läuft, aber auf dem Fire TV Stick ruckelt.

FFPROBE — STREAM-INFO ABRUFEN ffprobe -v quiet -print_format json -show_streams \
"https://stream.example.com/ard/index.m3u8"

# Gibt aus: Codec (h264/hevc), Auflösung (1920x1080),
# Bitrate (ca. Kbit/s), Audio-Codec (aac/ac3/eac3)

Was VLC-Diagnose zeigt

VLC-VerhaltenDiagnose-Aussage
Stream läuft flüssig in VLCURL und Server korrekt; Problem liegt in der App oder im Gerät
VLC zeigt „404 Not Found"Stream-URL abgelaufen oder falsch; M3U neu laden
VLC zeigt „403 Forbidden"Abonnement abgelaufen oder IP-Sperre aktiv
VLC startet, bricht nach 2 s abToken-basierte URL (zeitlich begrenzt); M3U neu abrufen
Video in VLC, kein TonAudio-Codec nicht unterstützt (AC3/EAC3) — in VLC Einstellungen → Audio → Codec prüfen
VLC lädt unbegrenzt, kein BildUDP-Stream (MPEG-TS) — VLC benötigt Port-Freigabe; oder Server nicht erreichbar
EPG-Datei im Browser prüfen

Öffnen Sie die EPG-URL direkt im Browser. Eine gültige xmltv-Datei zeigt XML-Code mit <tv>-Root-Element. Wenn der Browser eine Fehlerseite oder keine Daten zeigt, ist die EPG-URL falsch oder der Server nicht erreichbar — unabhängig von der App. Komprimierte .xml.gz-Dateien werden im Browser als Download angeboten, nicht als Text angezeigt — das ist korrekt.

Kanalgruppen, Playlist-Qualität und was eine sorgfältig gepflegte M3U von einer schlechten unterscheidet

Merkmale einer qualitativ hochwertigen M3U

  • Konsistente tvg-id-Vergabe: Alle Sender haben eine eindeutige, EPG-kompatible ID — keine Duplikate, keine Leerzeichen, keine Sonderzeichen.
  • Vollständige group-title-Zuordnung: Jeder Kanal gehört einer logischen Gruppe an. Kein Sender landet in einer leeren oder falschen Gruppe.
  • Funktionierende Logo-URLs: Alle tvg-logo-URLs sind erreichbar und liefern ein Bild — nicht ein 404 oder ein falsches Logo.
  • Saubere UTF-8-Kodierung: Umlaute (ä, ö, ü) und Sonderzeichen erscheinen korrekt — kein Zeichensatz-Mischmasch.
  • Aktive Stream-URLs: Alle URLs sind erreichbar und liefern einen aktiven Stream — nicht nur technisch korrekt formatierte URLs zu inaktiven Streams.
  • Regelmäßige Aktualisierung: Tote Streams werden zeitnah entfernt oder ersetzt — die Playlist wächst nicht nur, sondern wird bereinigt.

Woran man eine schlecht gewartete Playlist erkennt

  • Doppelte Kanäle: Derselbe Sender erscheint 3–5 Mal mit leicht verschiedenen Namen — oft Überreste von zusammengeführten Quellen ohne Bereinigung.
  • Generische group-titles: Alle 10.000 Kanäle sind in „Alle Sender" oder „Gruppe 1" sortiert — keine nutzbare Struktur.
  • Fehlende tvg-id: Viele Einträge haben kein tvg-id-Attribut oder einen generischen Wert wie ch1 — EPG-Zuordnung unmöglich.
  • Tote Streams ohne Bereinigung: Beim Testen laufen 30–40 % der Streams nicht — die Senderzahl ist nominal hoch, die Verfügbarkeit niedrig.
  • RTMP-only bei Premium-Sendern: Sport- und Premium-Kanäle liefern ausschließlich RTMP-Streams — auf Apple TV und iOS nicht abspielbar.
Eigene M3U-Playlist erstellen

Sie können eine eigene M3U-Playlist aus öffentlich verfügbaren Streams zusammenstellen — z. B. öffentlich-rechtliche Sender. Wie das funktioniert und welche rechtlichen Einschränkungen gelten: M3U-Playlist erstellen und testen.

Fragen zu M3U, EPG und Stream-Protokollen

Inhaltlich sind beide Formate identisch aufgebaut. Der Unterschied liegt im Zeichensatz: .m3u-Dateien können in verschiedenen Zeichensätzen (ISO-8859-1, Windows-1252 oder UTF-8) kodiert sein. .m3u8-Dateien sind per Definition immer UTF-8 — was für Umlaute in deutschen Sendernamen wichtig ist. Für IPTV empfiehlt sich immer UTF-8, also .m3u8. Die meisten IPTV-Apps akzeptieren beide Endungen und lesen den Zeichensatz automatisch aus.
Die häufigsten Ursachen: (1) Die tvg-id in der M3U stimmt nicht exakt mit dem channel id-Attribut in der EPG-XML überein — Groß-/Kleinschreibung und Leerzeichen beachten. (2) Der EPG-Zeitversatz im Player ist falsch eingestellt — für Deutschland +1 (Winter) oder +2 (Sommer) in Stunden, oder 0 wenn die EPG-Datei bereits lokale Zeit enthält. (3) Die EPG-Datei ist zu groß für den Player — komprimierte .xml.gz-Version verwenden. (4) Die EPG-URL ist nicht mehr erreichbar — im Browser direkt prüfen.
HLS steht für HTTP Live Streaming — ein von Apple entwickeltes Protokoll, das einen Videostream in kleine Segmente aufteilt (typischerweise 2–10 Sekunden je Segment). Der Player lädt zunächst eine Index-Datei im M3U8-Format, die auf die einzelnen Segmente verweist. Daher enden HLS-Stream-URLs auf .m3u8 — es ist tatsächlich eine weitere M3U-Datei, nur auf einer anderen Ebene. Das Hauptvorteil von HLS: Adaptive Bitrate Streaming — der Player kann automatisch auf eine niedrigere Qualitätsstufe wechseln, wenn die Bandbreite sinkt.
Öffnen Sie VLC Media Player auf einem PC oder Mac und wählen Sie Medien → Netzwerk öffnen (Tastenkürzel: Strg+N / Cmd+N). Kopieren Sie die Stream-URL direkt aus der M3U-Datei (eine einzelne URL, nicht die gesamte M3U) und fügen Sie sie ein. Wenn der Stream in VLC läuft, ist die URL korrekt und der Server erreichbar. Wenn VLC eine Fehlermeldung zeigt (404, 403, Timeout), liegt das Problem beim Server oder beim Abonnement — nicht bei Ihrer App-Konfiguration.
Der EPG-Zeitversatz korrigiert eine Diskrepanz zwischen der Zeitzone in der EPG-Datei und der lokalen Zeit des Geräts. Wenn ein Anbieter EPG-Daten in UTC (0-Offset) ausliefert, Ihr Gerät aber auf CET (UTC+1, Winterzeit) eingestellt ist, erscheint das Programm im EPG eine Stunde zu früh. Einstellung +1 in TiviMate schiebt die Anzeige um eine Stunde nach rechts. Für Deutschland: +1 im Winter (CET), +2 im Sommer (CEST). Falls die EPG-Datei bereits lokale Zeit enthält (erkennbar an +0100 oder +0200 im Zeitstempel), ist der korrekte Versatz 0.
Xtream Codes ist ein Panel-System, das IPTV-Anbieter zur Verwaltung von Abonnements nutzen. Statt einer statischen M3U-URL übergeben Sie drei Werte an die App: Server-URL (Host), Benutzername und Passwort. Die App ruft darüber dynamisch die aktuelle Senderliste, Kanalgruppen und VOD-Inhalte ab. Vorteil: Kanaländerungen werden automatisch synchronisiert, ohne dass Sie eine neue URL eintragen müssen. TiviMate und OTT Navigator unterstützen Xtream Codes vollständig und empfehlen diesen Eingabemodus gegenüber der statischen M3U-URL.

EPG-Problem oder Stream-Frage? Wir helfen via WhatsApp

tvg-id-Abgleich, EPG-URL-Test oder Protokollfrage — konkrete technische Hilfe direkt über WhatsApp.