Channels.ini aus DVB-Viewer in .m3u-Playlist umwandeln – Skript

In diesem Artikel habe ich euch bereit gezeigt, wie ihr euren eigenen TV-Server einrichten könnt. Zugegebenermaßen ist die Erstellung der .m3u-Liste SEHR aufwendig und frustrierend. Aus diesem Grund habe ich mir die Zeit genommen, mit meinen etwas eingerosteten Python-Kenntnissen ein kleines Skript zu schreiben. Dieses soll mir und euch eine Menge an Arbeit ersparen. In diesem Artikel erkläre ich euch den Sinn und Zweck des Skripts und wie ihr es einfach selbst anwenden könnt.

Ihr dürft das Skript teilen, bearbeiten, erweitern, etc. Getestet habe ich das Skript mit Python 2.7, dort funktioniert es soweit sehr gut. Unter Python 3.x läuft es leider (noch) nicht ganz rund.

Ein Python-Skript – Wozu?!

Der DVB-Viewer ist (sowohl in der Free- als auch in der Pro-Version) in der Lage, einen automatischen Sendersuchlauf durchzuführen, also alle Sender, die über das verbundene SAT>IP-Gerät empfangbar sind, automatisch zu finden und in die Senderliste einzuordnen. Die Senderliste kann man dann nach Belieben anordnen. Dazu verschiebt man die Sender einfach per Drag-and-Drop auf eine andere Position.

Die Senderliste lässt sich dann sogar exportieren – allerdings nicht als handelsübliche .m3u-Playlist-Datei, sondern lediglich als .ini-Datei. Diese lässt sich mit Programmen wie dem VLC-Player oder der SAT>IP SDK (unter Android) aber nicht abspielen. Die Konvertierung von .ini zu .m3u manuell vorzunehmen war mir einfach zu aufwendig – immerhin führen bereits kleinste Fehler in der .m3u-Datei dazu, dass ganze Sender nicht mehr ordnungsgemäß wiedergegeben werden können. Das Ändern der Datei-Endung ist natürlich auch keine Option, schließlich sind die internen Formate der Datei komplett unterschiedlich organisiert:

//Auszug aus der Channels.ini, die vom DVBViewer generiert wurde:

[Channel0]
TunerType=1
Root=Astra 19.2°E
Category=.
Name=Das Erste HD (AC3)
OrbitalPos=192
NetworkID=1
StreamID=1019
SID=10301
PMTPID=5100
VPID=5101
APID=5106
PCRPID=5101
AC3=17
Language=deu
Volume=0
EPGFlag=0
TelePID=5104
AudioChannel=0
Encrypted=24
Group=0
Frequency=11494
Polarity=h
Symbolrate=22000
SatModulation=134
SubStreamID=-1
FEC=1
LNB=9750
LNB-Selection=0
DiseqC=3
DiseqCValue=0

[Channel1]
...

Der gleiche Auszug würde in der .m3u-Datei folgenermaßen aussehen (der aufgerufene rtsp-Link kontaktiert direkt den SAT>IP-Server. Dieser verarbeitet die in den rtsp-Link eingefügten Daten und “weiß” somit, auf welche Frequenz, Symbolrate Video/Audio-PIDs er sich einstellen muss. Nähere Erläuterungen zum Inhalt der .m3u-Datei gibt es im bereits oben verlinkten Artikel.):

#EXTM3U
#EXTINF:0,1. Das Erste HD (AC3)
rtsp://<IP_Adresse_des_SAT>IP-Servers>/?src=1&freq=11494&pol=h&ro=0.35&msys=dvbs2&mtype=8psk&plts=on&sr=22000&fec=23&pids=0,17,18,5101,5106,5100,5104
#EXTINF:0,2. ...

Hierbei fällt auf, dass sich die in der .m3u-Datei vorkommenden Bezeichnungen mtype, msys, plts und ro in der Channels.ini gar nicht wieder zu finden sind. Das liegt daran, dass diese Werte binär in einem 8-Bit-Code codiert sind, was die Konvertierung von einmal erschwert / in die Länge zieht.

Die Codierung der Werte erfolgt dabei nach diesem Prinzip:

Bit 7      : Pilot Symbols (0 = off, 1 = on)
Bit 6 bis 5: Spectral Inversion (00 = not set, 01 = auto, 10 = normal,               11 = inverted) (habe ich in der .m3u nicht gebraucht)
Bit 4 bis 3: Roll-Off (00 = 0.35, 01 = 0.25, 10 = 0.20, 11 = None)
Bit 2      : Modulation system (0 = DVB-S, 1 = DVB-S2)
Bit 1 bis 0: Modulation (00 = Auto, 01 = QPSK, 10 = 8PSK, 11 = 16QAM)

Wie immer in der Binärdarstelung steht dabei das höchste Bit (auch: most significant bit) ganz links, das niederwertigste Bit (least significant bit) ganz rechts.

Ein kleines Rechenbeispiel:

Rechenbeispiel anhand von “Das Erste HD” über Astra auf 19.2° Ost
(Klicken zum Vergrößern)

Wie ihr also gesehen habt: Das alles manuell aufzuschreiben, auszurechnen, zu übernehmen würde extrem viel Aufwand erfordern, das alles manuell zu erledigen. Mit meinem Skript geht das in sekundenschnelle für ganze Senderlisten.

Verwendung des Skripts

1. Installiert euch Python. Unter Ubuntu geht das beispielsweise ganz einfach mit folgenden Befehlen im Terminal.

$ sudo apt update

$ sudo apt install python
  • auch andere Systeme unterstützen Python, die Installation ist nicht sehr schwierig. Achtet aber darauf, dass ihr euch nicht Python 3.x, sondern Python 2.x installiert, um das Skript ordnungsgemäß auszuführen. An der Veröffentlichung eines Skripts, das auch Python 3.x unterstützt, arbeite ich vielleicht noch (wenn ich es nicht vergesse :D).

2. Ladet euch das Skript herunter (siehe unten). Speichert es zusammen mit der von DVB-Viewer generierten Channels.ini (Ja, die Datei muss genau so heißen) in ein und denselben Ordner.

3. Öffnet das Terminal und navigiert mit dem cd-Befehl in den Ordner, in dem ihr die Channels.ini und das Python-Skript satupdate.py gespeichert habt. Beispiel: Ihr seid unter Ubuntu mit dem Nutzer username eingeloggt und habt das Skipt und die .ini-Datei in eurem home-Verzeichnis in einem Ordner namens SATIP gespeichert. Dann gebt ihr in euer Terminal $ cd /home/username/SATIP ein, um in das Verzeichnis zu gelangen. Tippt ihr nun ls ein, so sollten neben ggf. anderen Dateien auch die Channels.ini und die satupdate.py angezeigt werden. Unter Windows funktioniert der cd-Befehl ganz genauso mit cd Verzeichnis_in_das_navigiert_werden_soll. Der Befehl ls funktioniert unter Windows nicht!

4. Nun befindet ihr euch mit dem Terminal im richtigen Ordner und könnt das Python-Skript mit dem Befehl python satupdate.py ausführen. Das Skript gibt euch am Anfang noch einmal einige Hinweise. Habt ihr alle Schritte bis hierher schon befolgt, dann sollte es keine Probleme mehr geben.

5. Das Skript habt ihr nun gestartet. Es wird zunächst die Eingabe der IP-Adresse des SAT>IP-Servers verlangt. Falls euch diese Adresse nicht bekannt ist, durchsucht zunächst das Netzwerk mit einem Netzwerkscanner nach dem Server. Wie das geht, habe ich bereits unter dem Punkt “Wie wird mobil auf das laufende Programm zugegriffen?” im schon oben verlinkten Artikel erklärt. Gebt die IP-Adresse ein. Sie wird später als teil der .m3u-Datei benötigt. Alle weiteren wichtigen Angaben holt sich das Skript automatisch aus der Channels.ini.

6. Nun findet ihr eine neue Datei mit dem Namen satip.m3u im selben Ordner wie auch die Channels.ini und das Skript satupdate.py. Diese enthält alle Stationen aus der Channels.ini in der selben Reihenfolge wie in der Channels.ini. Nun solltet ihr eine funktionierende .m3u-Playliste haben 🙂

Downloads und Zusammenfassung

Das Skript hilft euch, aus einer vom DVBViewer generierten .ini-Datei eine .m3u-Playlist zu erstellen. Diese kann von vielen herkömmlichen Mediaplayern abgespielt werden (VLC-Player zum Beispiel).

Python-Skript:

Selbst generierte Channels.ini (Astra 19.2° Ost, wird vielleicht nicht aktuell gehalten):

Daraus mit dem Skript generierte .m3u-Datei (Astra 19.2° Ost, wird vielleicht nicht aktuell gehalten):

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.