m3u-urls automatisch für TVHeadend anpassen

  • Vielleicht kennt ihr das Problem? Ihr kennt eine tolle (und natürlich legale) m3u-Quelle aus dem Internet, mit der ihr Fernsehsender sehen könntet, die nicht bei kodinerds-iptv berücksichtigt sind. Ein Beispiel wären z.B. Fernsehsender in einer Sprache, die nicht bei kodinerds-iptv berücksichtigt wird. Gerne würdet ihr sie in TVHeadend nutzen, nur leider fehlen in der m3u die nötigen Pipe-Angaben für ffmpeg. Nun könntet ihr die m3u herunterladen, formatieren und einbinden. Nur müsstet ihr diese lokale Datei dann auch regelmäßig selbst aktuell halten. Ärgerlich, schließlich gibt es ja schon eine Community, welche die m3u aktuell hält. Die Community wiederum will aber keine Variante mit Pipe pflegen und versteht vielleicht auch das Problem nicht.

    Ich möchte hier einmal eine Lösung beschreiben, die ich zusammen mit Bing Copilot vor einigen Monaten entwickelt habe und die für mich wirklich in der Langzeitbeobachtung gut funktioniert. Bei dieser Lösung wird die m3u-Datei regelmäßig automatisch heruntergeladen, mit Pipe-Angabe neu formatiert und lokal gespeichert. Die lokale Datei wird dann in TVHeadend eingebunden.

    Natürlich müssen nicht alle so eingebundenen Streams gut funktionieren. Vielleicht kommt beim "Pipen" kein brauchbarer Stream raus oder es gibt geo-blocking. Anders als bei kodinerds-iptv fehlt ein echter Mensch, der einen Stream vorab testet. Aber für diejenigen Streams, für die es klappt, ist dies eine tolle Möglichkeit.

    Hier die genauen Details. Zum Konvertieren nutze ich folgendes Python-Script:

    In der Datei muss man in Zeile 5 die URL anpassen und fast unten bei "# Datei speichern" den Pfad für die lokale Datei anpassen.

    Je nach Linux-Distribution hat man ggf. noch das Problem, dass Abhängigkeiten zu lösen sind. Unter Ubuntu 24.04 ist dies auf jeden Fall python3.12. Dies zu installieren kann etwas komplexer sein und es gibt mehr als einen Weg. Daher ist dies nicht Teil dieser Anleitung. Im Zweifel fragt die KI eures Vertrauens.

    Natürlich kann man auch mehrere derartiger Scripte anlegen und so mehrere m3u-Quellen parallel anpassen.

    Damit das Script / die Scripte regelmäßig aktuell gehalten werden, legt man Cronjobs an (mit dem Befehl cronjob -e). Je nachdem, wie eure Lösung wegen der benötigten Python_Version aussieht, können die Zeilen etwas anders aussehen. So sieht es z.B. bei mir aus:

    Code
    0 * * * * /bin/bash -c 'source /opt/python3.12/bin/activate && python /opt/beispiel/beispiel.py'
    @reboot /bin/bash -c 'source /opt/python3.12/bin/activate && python /opt/beispiel/beispiel.py'

    Die erste Zeile startet das Script (hier soll es beispiel.py heißen) zu jeder vollen Stunde. Die zweite Zeile startet das Script zusätzlich nach jedem Neustart.

    In TVHeadend legt ihr die lokal erstellte Datei dann als IPTV Automatic Network mit der Pfadangabe

    Code
    file:///opt/beispiel/beispiel.m3u

    (entsprechend anpassen) an.

    Falls der Code für das geschulte Auge schrottig sein sollte, bedenkt bitte, dass in erster Linie Bing Copilot der Autor ist. Die Lösung habe ich im Dialog mit der KI entwickelt. Immerhin funktioniert er für mich nun aber doch schon mehrere Monate verlässlich, sodass ich die Lösung nun teilen wollte.

  • Natürlich müssen nicht alle so eingebundenen Streams gut funktionieren. Vielleicht kommt beim "Pipen" kein brauchbarer Stream raus oder es gibt geo-blocking.

    Kannst ja checken, ob der Stream verfügbar ist oder nicht. Falls ja, dann verarbeiten, ansonsten nicht. Ganz simple. Mußte dir nur anpassen.

    Code
    import requests
    response = requests.get(stream_url)
    if not response:
        print("Stream offline")
    else:
        print("Stream online")

    Oder vielleicht besser mit Status Code.

    Code
    import requests
    response = requests.get(stream_url)
    if response.status_code == 200:
        print("Stream online")
    else:
        print("Stream online")
  • Kannst ja checken, ob der Stream verfügbar ist oder nicht. Falls ja, dann verarbeiten, ansonsten nicht. Ganz simple. Mußte dir nur anpassen.

    Code
    import requests
    response = requests.get(stream_url)
    if not response:
        print("Stream offline")
    else:
        print("Stream online")

    Oder vielleicht besser mit Status Code.

    Code
    import requests
    response = requests.get(stream_url)
    if response.status_code == 200:
        print("Stream online")
    else:
        print("Stream online")

    Du meinst, ich soll solch einen Check in mein Script einbauen? Bei mir läuft das Script ja stündlich durch. Angenommen so eine M3u hat 250 Kanäle, dann wären dies bereits 6000 Checks täglich, oder missverstehe ich die Lösung? Zudem sagt das Bestehen der Prüfung nicht aus, dass der Kanal dann auch in TVHeadend rund laufen wird. Er kann dennoch regelmäßig stocken, nach 10 Sekunden einfrieren o.ä.

    Oder verstehe ich deine Lösung vielleicht nur nicht, richtig?

  • Bei mir läuft das Script ja stündlich durch.

    Warum stündlich? Ändert sich da so oft etwas? Reicht nicht 1 oder 2 Mal am Tag?

    Zudem sagt das Bestehen der Prüfung nicht aus, dass der Kanal dann auch in TVHeadend rund laufen wird.

    Aber es filtert dir die Sender raus, die offline sind oder einen Geoblock haben.

    Du meinst, ich soll solch einen Check in mein Script einbauen?

    Sollen tust du gar nichts, war nur ein Vorschlag, Ich brauche das Script eh nicht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!