Xtream Codes: aus einer Software wurde ein Protokoll
Xtream Codes war ursprünglich der Name einer kommerziellen Software zur Verwaltung von Video-Streaming-Servern: Ein Betreiber konnte damit Streams, Kundenkonten, Kategorien und Statistiken über ein Administrationspanel verwalten. Die Software wird seit 2019 nicht mehr vertrieben, doch die Programmierschnittstelle (API), die sie den Playern bot, ist geblieben. Zahlreiche Serversoftware hat sie identisch übernommen, um mit den vorhandenen Apps kompatibel zu bleiben.

Heute bezeichnet „Xtream Codes“ daher vor allem eine standardisierte Art der Verbindung: Ein Player, der diese API „spricht“, kann sich mit jedem Server verbinden, der sie umsetzt. Es ist weder ein Dienst noch ein Anbieter noch ein Inhalt. Wie bei einer M3U-Playlist hängt die Rechtmäßigkeit ganz von dem Dienst ab, mit dem Sie sich verbinden: Ein Betreiber, der die Übertragungsrechte besitzt, kann diese API selbstverständlich nutzen, während ein Dienst, der Sender ohne Erlaubnis weiterverbreitet, illegal bleibt, gleich welche Technik er einsetzt.
Die drei Verbindungsangaben
Ein kompatibler Dienst liefert seinem Kunden drei Elemente:
- die Serveradresse, oft mit einem Port, zum Beispiel
http://serveur.exemple.fr:8080; - einen Benutzernamen (username);
- ein Passwort (password).
Der Port ist die Nummer der „Tür“, an der der Server lauscht. Ohne Angabe nutzt http den Port 80 und https den Port 443; viele Server dieser Art verwenden andere Ports wie 8080 oder 25461. Ein häufiger Fehler ist, den Port zu vergessen oder nach der Adresse einen überflüssigen Pfad anzuhängen (/get.php, /c/ …): Die App baut die Pfade selbst und erwartet nur die Stammadresse.
| Was Sie eingeben | Ergebnis |
|---|---|
http://serveur.exemple.fr:8080 | Korrekt |
serveur.exemple.fr:8080 | Von den meisten Playern akzeptiert, die http:// ergänzen |
http://serveur.exemple.fr (Port vergessen) | Fehlschlag, wenn der Server nicht auf Port 80 lauscht |
http://serveur.exemple.fr:8080/player_api.php | Häufiger Fehlschlag: Pfad doppelt angehängt |
https:// statt http:// | Fehlschlag, wenn der Server an diesem Port keine Verschlüsselung anbietet |
Benutzername und Passwort sind in der Regel groß- und kleinschreibungsabhängig: „Martin“ und „martin“ sind zwei verschiedene Konten. Auch ein versehentlich kopiertes Leerzeichen am Ende eines Feldes genügt, damit die Verbindung scheitert.
Was bei der Verbindung passiert: player_api.php
Bestätigen Sie Ihre Angaben, sendet der Player eine erste HTTP-Anfrage an das Skript player_api.php des Servers, mit Ihren Zugangsdaten als Parametern:
http://serveur.exemple.fr:8080/player_api.php?username=IDENTIFIANT&password=MOTDEPASSE
Der Server antwortet mit einem JSON-Dokument (einem strukturierten Textdatenformat) aus zwei Blöcken. Hier eine vereinfachte Antwort:
{
"user_info": {
"auth": 1,
"status": "Active",
"exp_date": "1798761600",
"is_trial": "0",
"active_cons": "0",
"max_connections": "1",
"allowed_output_formats": ["m3u8", "ts"]
},
"server_info": {
"url": "serveur.exemple.fr",
"port": "8080",
"https_port": "8443",
"server_protocol": "http",
"timezone": "Europe/Paris"
}
}
Der Block user_info beschreibt Ihr Konto, der Block server_info den Server. Ist auth gleich 0, werden die Zugangsdaten abgelehnt, und der Player zeigt einen Verbindungsfehler an. Antwortet der Server gar nicht oder liefert er statt JSON eine HTML-Seite, liegt das Problem vor der Authentifizierung: falsche Adresse, geschlossener Port, Server offline oder ein Netz, das die Verbindung blockiert.
Die wichtigsten Aktionen der API
Nach der Authentifizierung lädt der Player den Katalog, indem er an dieselbe Adresse einen Parameter action anhängt. Jede Aktion liefert eine JSON-Liste. Die gebräuchlichsten sind die folgenden.
| Aktion | Was sie liefert |
|---|---|
get_live_categories | Die Kategorien der Live-Sender (Kennung und Name) |
get_live_streams | Die Sender, gegebenenfalls gefiltert mit &category_id=, mit Name, Logo, EPG-Kennung |
get_vod_categories | Die Kategorien der Videos auf Abruf |
get_vod_streams | Die verfügbaren Filme, mit Poster, Bewertung, Hinzufügedatum und Dateiendung |
get_vod_info | Das ausführliche Datenblatt eines Films (&vod_id=): Zusammenfassung, Dauer, Spuren |
get_series_categories | Die Kategorien der Serien |
get_series | Die Liste der Serien |
get_series_info | Die Staffeln und Episoden einer Serie (&series_id=) |
get_short_epg | Die nächsten Sendungen eines Senders (&stream_id=) |
Der vollständige Programmführer ist dagegen im XMLTV-Format über das Skript xmltv.php mit denselben Zugangsdaten verfügbar. Das ist einer der Vorteile der API: Der Player braucht keine separate Adresse für den Programmführer. Wie dieser Führer funktioniert, beschreibt unser Artikel zu EPG und XMLTV.
Wie die Videos anschließend abgespielt werden
Die JSON-Listen enthalten keine Videos, nur Kennungen. Um eine Wiedergabe zu starten, baut der Player eine Adresse nach einem festen Muster auf:
http://serveur:port/live/IDENTIFIANT/MOTDEPASSE/12345.ts
http://serveur:port/movie/IDENTIFIANT/MOTDEPASSE/67890.mkv
http://serveur:port/series/IDENTIFIANT/MOTDEPASSE/24680.mp4
Bei Live-Sendern muss die gewählte Endung (.ts für einen durchgehenden MPEG-TS-Stream, .m3u8 für HLS) in der Liste allowed_output_formats des Kontos stehen. Bei Filmen und Episoden entspricht die Endung der tatsächlich auf dem Server gespeicherten Datei. Diese Formate stellt HLS, MPEG-TS und DASH vor.
Status, Ablauf und gleichzeitige Verbindungen
Der Block user_info enthält mehrere Felder, die helfen, eine Ablehnung oder einen Abbruch zu verstehen.
Der Status
Das Feld status hat in der Regel den Wert Active. Andere Werte wie Expired, Banned oder Disabled zeigen an, dass das Konto keine Inhalte mehr abspielen kann, selbst wenn die Verbindung an sich zustande kommt. Das Feld is_trial kennzeichnet ein Testkonto.
Das Ablaufdatum
Das Feld exp_date ist kein lesbares Datum, sondern ein Unix-Zeitstempel: die Zahl der Sekunden seit dem 1. Januar 1970 um Mitternacht UTC. Im obigen Beispiel entspricht 1798761600 dem 1. Januar 2027 um 0 Uhr UTC. Die Player wandeln ihn zur Anzeige in ein Datum um. Ein leerer Wert oder null bedeutet in der Regel ein Konto ohne Enddatum.
Die gleichzeitigen Verbindungen
max_connections gibt an, wie viele Streams mit demselben Konto gleichzeitig abgespielt werden können, und active_cons, wie viele es gerade sind. Liegt die Grenze bei 1 und schaut ein anderes Gerät im Haushalt bereits einen Sender, scheitert die neue Wiedergabe oder unterbricht die vorherige. Vorsicht vor einer häufigen Falle: Wechseln Sie den Sender, braucht die alte Verbindung auf dem Server manchmal einige Sekunden, bis sie geschlossen wird. Sehr schnelles Umschalten kann daher kurz eine Ablehnung wegen „zu vieler Verbindungen“ auslösen, die von selbst verschwindet.
Xtream Codes oder M3U-Playlist: die Unterschiede
Die meisten kompatiblen Dienste bieten auch eine M3U-Playlist an, die aus demselben Konto erzeugt wird. Beide Methoden geben Zugang zum selben Katalog, aber nicht auf dieselbe Weise.
| Kriterium | Xtream-Codes-Verbindung | M3U-Playlist |
|---|---|---|
| Laden | Nach Kategorie, auf Abruf | Eine einzige Datei, mitunter sehr groß |
| Filme und Serien | Datenblätter, Poster, strukturierte Staffeln und Episoden | Flache Liste, oft ohne Staffeln |
| Programmführer | Wird automatisch geliefert | Adresse url-tvg muss angegeben werden |
| Kontoinformationen | Ablauf und Verbindungen sichtbar | Keine |
| Akzeptierte Server | Nur solche, die die API umsetzen | Jede Quelle, auch Ihre eigenen Dateien |
Kurz gesagt: Die API ist komfortabler, wenn der Dienst sie anbietet, besonders bei Film- und Serienkatalogen; die M3U-Playlist ist universeller. Die Syntax der Playlists erklärt das M3U-Format Zeile für Zeile, die Eingabe beider Kontotypen in AICKO IPTV die Seite Xtream Codes und M3U.
Sicherheit und Diagnose
Eine Besonderheit dieser API sollte man kennen: Benutzername und Passwort stehen in der Adresse jeder Anfrage und jedes Streams. Bei einem Server mit einfachem http laufen sie daher im Klartext durch das Netz. Einige praktische Folgen:
- Verwenden Sie für dieses Konto niemals ein Passwort, das Sie anderswo nutzen (E-Mail, Bank);
- veröffentlichen Sie keinen Screenshot und kein Fehlerprotokoll, das eine vollständige Stream-Adresse enthält: Sie verrät Ihre Zugangsdaten;
- bevorzugen Sie
https, wenn der Dienst es anbietet (das Feldhttps_portzeigt es an).
Zur Diagnose eines Fehlschlags ist es am wirksamsten, die Adresse player_api.php?username=…&password=… im selben Netz in einem Browser zu öffnen:
- Keine Antwort oder Zeitüberschreitung: falsche Adresse oder falscher Port, Server abgeschaltet oder ein Netz, das diesen Port blockiert.
- Antwort mit
"auth":0: Benutzername oder Passwort falsch. - Antwort mit einem anderen Status als
Active: Konto abgelaufen oder gesperrt, mit dem Dienst zu klären. - Korrekte Antwort: Die Verbindung funktioniert; scheitert die Wiedergabe trotzdem, prüfen Sie Streamformat, Netzwerk oder die Decodierung des Geräts.
Zusammenfassung
- Xtream Codes ist heute eine Verbindungs-API, die zahlreiche Server übernommen haben, kein Dienst.
- Die Verbindung beruht auf einer Adresse mit Port, einem Benutzernamen und einem Passwort, die zwischen Groß- und Kleinschreibung unterscheiden.
- Das Skript
player_api.phpliefert den Kontostatus und dann den Katalog über Aktionen wieget_live_streamsoderget_series. exp_dateist ein Unix-Zeitstempel, undmax_connectionsbegrenzt die gleichzeitigen Wiedergaben.- Die Zugangsdaten stehen in den Adressen: Verwenden Sie ein einmaliges Passwort.
Häufige Fragen
Ist Xtream Codes legal?
Die Technik ist neutral: Sie ist eine Verbindungsschnittstelle zwischen einem Player und einem Server. Entscheidend ist der Dienst, mit dem Sie sich verbinden. Sie müssen die Rechte an den Programmen besitzen, die Sie ansehen; ein Dienst, der Bezahlsender ohne Erlaubnis weiterverbreitet, bleibt illegal.
Warum funktioniert die Verbindung auf einem Gerät und auf einem anderen nicht?
Prüfen Sie zuerst auf Tippfehler, besonders bei Groß- und Kleinschreibung oder einem Leerzeichen am Ende. Sind die Eingaben identisch, kann die Grenze gleichzeitiger Verbindungen erreicht sein, oder das zweite Gerät befindet sich in einem Netz, das den vom Server verwendeten Port blockiert.
Wie erfahre ich das Ablaufdatum meines Kontos?
Die meisten Player zeigen es in den Profilinformationen an. Andernfalls enthält die Antwort von player_api.php das Feld exp_date, einen Unix-Zeitstempel, den jeder Online-Umrechner in ein lesbares Datum verwandelt.
Muss ich bei einer Xtream-Codes-Verbindung eine TV-Programmführer-Adresse eingeben?
In der Regel nicht: Der Player holt den Programmführer vom selben Server. Eine externe Programmführer-Adresse ist nur nützlich, wenn der des Dienstes leer oder unvollständig ist.
