Rechtlicher Hinweis vor dem Start

Eine M3U-Playlist ist nur so legal wie die Stream-URLs, die sie enthält. Öffentlich zugängliche Streams öffentlich-rechtlicher Sender (ARD, ZDF, arte) für den privaten Eigengebrauch zu aggregieren, ist urheberrechtlich weniger problematisch als das Einbinden lizenzpflichtiger Inhalte ohne Rechtegrundlage. Kommerzielle Nutzung und Weiterverteilung sind in jedem Fall ausgeschlossen. Lesen Sie dazu: IPTV und Urheberrecht in Deutschland.

Was Sie vor dem ersten Eintrag brauchen

Eine M3U-Playlist ist eine einfache Textdatei. Sie brauchen keinen speziellen Editor — ein einfacher Texteditor wie Notepad++ (Windows), BBEdit (macOS) oder VS Code (alle Plattformen) reicht aus. Entscheidend ist, dass der Editor die Datei in UTF-8 ohne BOM speichert. Ein BOM (Byte Order Mark) am Dateianfang — ein unsichtbares Zeichen, das manche Windows-Editoren automatisch einfügen — bricht den M3U-Header und verhindert das korrekte Parsen durch IPTV-Apps.

Außerdem brauchen Sie für jeden Sender, den Sie einbinden möchten, eine funktionsfähige Stream-URL. Bevor Sie die URL in die Playlist eintragen, testen Sie sie in VLC: Medien → Netzwerk öffnen → URL einfügen. Läuft der Stream in VLC, läuft er auch in Ihrer Playlist. Läuft er nicht, liegt das Problem beim Stream, nicht bei Ihrer Playlist-Syntax.

UTF-8 ohne BOM — Einstellung im Editor

Notepad++: Format → UTF-8 (ohne BOM) | VS Code: Unten rechts auf die Kodierungsanzeige klicken → „UTF-8" wählen (nicht „UTF-8 with BOM") | Windows-Notepad (Standard): Speichern unter → Kodierung → UTF-8 ohne BOM (ab Windows 10 verfügbar).

Die vollständige M3U-Struktur — Zeile für Zeile

Jede M3U-Datei beginnt zwingend mit #EXTM3U als erster Zeile. Danach folgt für jeden Kanal ein Zweizeiler: erst die Metadatenzeile (#EXTINF), direkt darunter die Stream-URL. Keine Leerzeile zwischen beiden.

M3U8 — VOLLSTÄNDIGE BEISPIELDATEI MIT DEUTSCHEN SENDERN # Pflicht-Header — erste Zeile der Datei, keine Leerzeile davor #EXTM3U x-tvg-url="https://epg-provider.example.com/de.xml.gz" # ÖR-Sender Gruppe 1 #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 https://stream1.example.com/ard/hd/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://stream1.example.com/zdf/hd/index.m3u8 #EXTINF:-1 tvg-id="arte.de" tvg-name="arte HD" tvg-logo="https://logos.example.com/arte.png" group-title="DE | Öffentlich-rechtlich",arte HD https://stream1.example.com/arte/hd/index.m3u8 # Internationale Sender Gruppe 2 #EXTINF:-1 tvg-id="npo1.nl" tvg-name="NPO 1" tvg-logo="https://logos.example.com/npo1.png" group-title="NL | Public",NPO 1 https://stream2.example.com/npo1/hd/index.m3u8

Häufige Syntaxfehler und wie man sie vermeidet

FehlerSymptomLösung
Leerzeile zwischen #EXTINF und URL Kanal erscheint nicht oder ohne Metadaten #EXTINF-Zeile und URL-Zeile direkt aufeinanderfolgend, keine Leerzeile dazwischen
UTF-8 mit BOM gespeichert Erste Zeile wird nicht als #EXTM3U erkannt; alle Kanäle fehlen Editor auf „UTF-8 ohne BOM" umstellen; Datei neu speichern
Anführungszeichen fehlen um Attributwerte Kanal-Metadaten werden nicht korrekt geparst Alle Attributwerte in doppelte Anführungszeichen einschließen: tvg-id="ard.de"
Komma vor dem Kanalnamen fehlt Kanalname erscheint leer oder inkorrekt Am Ende der #EXTINF-Zeile steht immer ein Komma, dann der Kanalname: …,Das Erste HD
tvg-id stimmt nicht mit EPG-Kanal-ID überein Kanäle spielen ab, aber kein EPG sichtbar EPG-XML-Datei im Texteditor öffnen; exakte channel id-Werte abgleichen — Groß-/Kleinschreibung beachten
Sonderzeichen in URLs nicht URL-enkodiert Bestimmte Streams laden nicht Leerzeichen in URLs als %20, & als & kodieren
Windows-Zeilenenden (CRLF) statt Unix (LF) Kanäle auf manchen Linux-/Android-Parsern nicht erkannt Im Editor auf LF-Zeilenenden umstellen: Notepad++ → Bearbeiten → Zeilenenden-Konvertierung → Unix

EPG-IDs korrekt zuordnen

Der häufigste Grund, warum eine technisch korrekte M3U keine EPG-Daten zeigt, ist eine nicht übereinstimmende tvg-id. Der Wert in der M3U muss zeichengenau mit dem id-Attribut des <channel>-Elements in der EPG-XML-Datei übereinstimmen.

So finden Sie die korrekten IDs: Laden Sie die EPG-XML-Datei Ihres Providers herunter (oder öffnen Sie die URL im Browser). Öffnen Sie die Datei in einem Texteditor und suchen Sie nach dem Sendernamen — z. B. „Das Erste". Die zugehörige Zeile sieht etwa so aus: <channel id="ard.de">. Der Wert ard.de ist die tvg-id, die Sie in Ihre M3U eintragen.

EPG-XML — KANAL-ID HERAUSSUCHEN (GREP / KOMMANDOZEILE) # Linux / macOS — Kanal-IDs aus EPG-XML extrahieren grep 'channel id' epg.xml | head -30

# Ausgabe-Beispiel: # <channel id="ard.de"> # <channel id="zdf.de"> # <channel id="arte.de">
# Windows (PowerShell) Select-String -Path epg.xml -Pattern 'channel id' | Select-Object -First 20
Zeitversatz in der M3U setzen

Falls EPG-Daten um 1–2 Stunden verschoben erscheinen, kann der Zeitversatz direkt pro Kanal gesetzt werden: tvg-shift="1" für CET (Winterzeit) oder tvg-shift="2" für CEST (Sommerzeit) — aber nur, wenn die EPG-Datei Zeiten in UTC enthält. Enthält die EPG-Datei bereits lokale Zeit (erkennbar an +0100 oder +0200 im Zeitstempel), kein Shift eintragen.

Playlist mit VLC und ffprobe testen

Bevor Sie die fertige Playlist in TiviMate oder eine andere App laden, validieren Sie jeden Stream mit VLC. Das trennt Playlist-Fehler von Stream-Fehlern und spart Fehlersuche in der App.

VLC-Schnelltest für die gesamte Playlist

VLC — PLAYLIST LADEN UND TESTEN # Gesamte Playlist in VLC öffnen Medien → Datei öffnen → meine-playlist.m3u8
oder per Drag & Drop in das VLC-Fenster

# Einzelnen Stream per URL testen Medien → Netzwerk öffnen (Strg+N) → Stream-URL einfügen

# Kommandozeile (Stapeltest mehrerer URLs) vlc --playlist-autostart --no-video-title-show meine-playlist.m3u8

ffprobe für detaillierte Stream-Analyse

VLC zeigt, ob ein Stream läuft. ffprobe (Teil des ffmpeg-Pakets) zeigt, was der Stream enthält: Codec, Auflösung, Bitrate und Audio-Format. Das ist nützlich, wenn ein Stream in VLC läuft, aber auf einem Endgerät ruckelt — oft liegt es am Codec.

FFPROBE — STREAM-EIGENSCHAFTEN ANALYSIEREN # Installation: ffmpeg.org oder apt install ffmpeg (Linux)
ffprobe -v quiet -print_format json -show_streams \
"https://stream.example.com/ard/hd/index.m3u8" 2>&1 | head -60

# Relevante Ausgabefelder: # "codec_name": "h264" oder "hevc" → H.264 oder H.265 # "width": 1920, "height": 1080 → Full HD bestätigt # "bit_rate": "4500000" → ca. 4,5 Mbit/s # "codec_name": "aac" oder "ac3" → Audio-Codec

Kanalreihenfolge und Gruppenstruktur optimieren

IPTV-Apps sortieren Kanäle standardmäßig nach der Reihenfolge in der M3U-Datei oder alphabetisch nach Kanalname — abhängig von der App. TiviMate ermöglicht manuelles Umsortieren nach dem Import; OTT Navigator sortiert primär nach group-title. Eine sauber strukturierte Playlist mit konsistenten Gruppen spart in jedem Fall nachträgliche Sortierarbeit.

  • Gruppen konsequent benennen: Verwenden Sie einheitliche group-title-Werte ohne Tippvarianten — „DE | Öffentlich-rechtlich" und „DE | Oeffentlich-rechtlich" erzeugen zwei separate Gruppen.
  • Wichtigste Sender zuerst: Viele Apps zeigen Kanäle in der Playlist-Reihenfolge innerhalb einer Gruppe. Ordnen Sie häufig genutzte Sender an den Anfang.
  • Tote Streams entfernen: Jeder Stream, der in VLC nicht läuft, sollte vor dem Import entfernt werden. Tote Einträge verlangsamen den Ladevorgang und verwirren bei der EPG-Zuordnung.
  • Logos auf erreichbare URLs prüfen: Ein nicht erreichbares Logo lädt dauerhaft nach und kann App-Performance beeinträchtigen. Testen Sie Logo-URLs im Browser.
  • Datei-Encoding abschließend prüfen: Öffnen Sie die fertige Datei in einem Hex-Editor oder prüfen Sie mit file meine-playlist.m3u8 (Linux/macOS) — erwartete Ausgabe: „UTF-8 Unicode text".
VideoLAN — Offiziell VLC Media Player — Kostenloser Download VLC ist das zuverlässigste kostenlose Werkzeug zum Testen von M3U-Playlists und IPTV-Streams auf Windows, macOS und Linux — ohne Installation von Codecs oder Plugins.

Häufige Fragen — M3U-Playlist erstellen

Jeder Editor, der UTF-8 ohne BOM speichern kann. Empfehlungen: Notepad++ (Windows, kostenlos — Format → UTF-8 ohne BOM), VS Code (alle Plattformen, kostenlos), BBEdit (macOS). Vermeiden Sie den Windows-Standard-Editor „Notepad" bei Windows-Versionen vor Windows 10, weil ältere Versionen BOM-freies UTF-8 nicht zuverlässig unterstützen. Vermeiden Sie Word oder andere Textverarbeitungsprogramme — diese speichern unsichtbare Formatierungszeichen in die Datei.
Laden Sie die EPG-XML-Datei Ihres Providers herunter und öffnen Sie sie in einem Texteditor. Suchen Sie nach dem Sendernamen (z. B. „Das Erste") und lesen Sie den Wert des id-Attributs im <channel id="…">-Element ab. Dieser Wert muss zeichengenau — Groß-/Kleinschreibung und Sonderzeichen eingeschlossen — in der tvg-id Ihrer M3U stehen. Alternativ: Suchen Sie in öffentlichen EPG-Projekten (z. B. auf GitHub) nach xmltv-Dateien für Deutschland, die dokumentierte Kanal-IDs enthalten.
Häufigste Ursachen: (1) BOM am Dateianfang — TiviMate erkennt den #EXTM3U-Header dann nicht. Datei in UTF-8 ohne BOM neu speichern. (2) Windows-Zeilenenden (CRLF) — manche TiviMate-Versionen auf Android TV parsen CRLF nicht korrekt. Auf LF-Zeilenenden umstellen. (3) Leerzeile zwischen #EXTINF und Stream-URL — TiviMate überspringt dann die URL. (4) Datei ist als .m3u gespeichert, TiviMate erwartet .m3u8 — Dateiendung anpassen.
Für den privaten Eigengebrauch ist das urheberrechtlich weniger problematisch als das Einbinden lizenzpflichtiger Inhalte, da ARD und ZDF ihre Livestreams technisch offen zugänglich machen und keine Schutzmaßnahmen umgangen werden. Eine explizite rechtliche Freigabe durch ARD oder ZDF für das Einbinden in Drittanbieter-Playlists existiert jedoch nicht. Kommerzielle Nutzung — also das Weiterverkaufen einer solchen Playlist oder das öffentliche Anbieten für Dritte — ist ausdrücklich nicht erlaubt. Für den Eigengebrauch auf dem eigenen Gerät ist das Risiko gering, aber keine rechtliche Sicherheit gegeben.