polnische und englische Streams von TVP: Lösung

Am Samstag (06.09.25) Vormittag werde ich ein Update der Forensoftware (inkl. aller Plugins) durchführen. Das Forum wird deshalb auf unbestimmte Zeit nicht verfügbar sein. Neuigkeiten wird es im Matrix Chat geben: https://www.kodinerds.net/thread/79927-freischaltung-matrix-chat/
  • Moin an alle,

    morgen sind Präsidentschaftswahlen in Polen. Dies nehme ich zum Anlass vorstellen, wie ich die englisch- bzw. polnischsprachigen Streams des öffentlich rechtlichen Fernsehens TVP aus Polen in TVHeadend einbinde. Vielleicht ist dies ja auch für andere von Interesse. Bevor ich zur Lösung komme, zunächst ein paar Infos, damit die Problemlage deutlich wird:

    • Die Lösung bezieht sich nur auf die freien Sende von TVP. TVP hat auch PayTV-Sender.
    • Ein Teil der TVP-Sender arbeitet mit Geo-Blocking. Drei Sender verzichten hierauf: TVP-World (englischsprachiger Nachrichtenkanal), TVP Polonia (der traditionelle polnischsprachige "Auslandskanal", gelegentlich mit englischsprachigen Untertiteln) und TVP Info (polnischsprachiger Nachrichtenkanal.Nur auf diese beziehe ich mich. Theoretisch ließe sich die Lösung auch auf die weiteren Sender ausweiten, wenn man in Polen lebt oder ein VPN benutzt.
    • Einen Teil der TVP-Sender könnte man auch über Streamlink einbinden. Das funktioniert aber zumindest nicht für TVP World. Dieser Kanal ist mein Hauptinteresse. Dieser Sender macht sich u.a. mit einer besonders detaillierten Ukraine-Berichterstattung verdient.
    • Die Streams wechseln mehrmals stündlich die Adresse. Man kann sie also nicht einfach direkt in TVHeadend (mit ffmpeg) einbinden. Es gibt aber eine API, von der man stets die aktuellen Streamadressen abfragen kann. Diese nutze ich in meiner Lösung unten.
    • Damit das Mapping der Sender in TVHeadend stabil funktioniert, darf sich nicht ständig die Streaming-Adresse ändern. Deswegen erstelle ich für meine Lösung eine lokale M3U, die die Streams über einen lokalen Flask-Server anbietet.
    • Die Programmierung hat der Bing Copilot für mich unternehmen. Die Lösung funktioniert bereits seit Wochen stabil. Ich hoffe, dies ändert sich nicht, wenn ich hier die Infos veröffentliche. Da es aber auch jede Menge unzulässige Möglichkeiten gibt, diese Sender zu schauen, ist dies hoffentlich TVP egal.

    Unten nun zunächst für die Sender TVP World, TVP Info und TVP Polonia jeweils ein Python-Script. Ganz unten dann eine lokale M3U-Datei zur Einbindung in TVHeadend.

    1. TVP World


    2. TVP Polonia


    3. TVP Info


    4. Lokale M3U:

    Code
    #EXTM3U
    #EXTINF:-1 tvg-id="TVP World" tvg-logo="https://seeklogo.com/images/T/tvp-world-logo-3E1CF343B4-seeklogo.com.png" group-title="Nachrichten",TVP World
    pipe://ffmpeg -loglevel fatal -i http://127.0.0.1:8000/stream -metadata service_name=TVP-World -vcodec copy -acodec copy -f mpegts pipe:1
    #EXTINF:-1 tvg-id="TVP INFO" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/TVP_Info_Logo.svg/512px-TVP_Info_Logo.svg.png" group-title="Nachrichten",TVP INFO
    pipe://ffmpeg -loglevel fatal -i http://127.0.0.1:8001/stream -metadata service_name=TVP-Info -vcodec copy -acodec copy -f mpegts pipe:1
    #EXTINF:-1 tvg-id="TVP Polonia" tvg-logo="https://seeklogo.com/images/T/tvp-polonia-logo-3E1CF343B4-seeklogo.com.png" group-title="Nachrichten",TVP Polonia
    pipe://ffmpeg -loglevel fatal -i http://127.0.0.1:8002/stream -metadata service_name=TVP-Polonia -vcodec copy -acodec copy -f mpegts pipe:1
  • Schön, dass du das so genau beschreibst, auch wenn ich persönlich keinen Bedarf habe. Kleine Anmerkung, wird der Funktionalität kaum schaden, aber mir scheint da ist mal ein Rekodierungsproblem von UTF-8 nach ISO-x und wieder zurück nach UTF-8 passiert. Sieht man z.B. bei return "Keine gültige Stream-URL verfügbar", 503. Gibt nur wenige Stellen, das kannst du leicht korrigieren. Mein Test, ob Copy+Paste aus Editor hier in Code korrekt funktioniert:

    Code
    Aus deinem Code:
    return "Keine gültige Stream-URL verfügbar", 503
    Aus Notepad in UTF-8, korrigiert
    return "Keine gültige Stream-URL verfügbar", 503

    Was mich allerdings wirklich interessiert:

    Die Programmierung hat der Bing Copilot für mich unternehmen.

    Kannst du Python programmieren? (Wie würdest du deine Kenntnisse klassifizieren?)
    Musstest du den Copilot-Code modifizieren?
    Wie war der Prompt, mit dem du den Code erzeugen ließt?

    Kodi 21.2, 17.6, 21.1, 16, 21.2 on Windows 11 Pro, Android 6, Android 12, FireTV Box 2nd Gen, FireTV 4k Max 2nd Gen
    Media on NAS, OpenMediaVault 7 (Debian Linux).

  • Was mich allerdings wirklich interessiert:

    Kannst du Python programmieren? (Wie würdest du deine Kenntnisse klassifizieren?)
    Musstest du den Copilot-Code modifizieren?
    Wie war der Prompt, mit dem du den Code erzeugen ließt?

    Ich kann kein Python programmieren. Ein spezieller Prompt ist nicht erforderlich. Es reicht die kostenlose und unveränderte Version von Bing Copilot. Auch eine Anmeldung ist nicht erforderlich. Ich kann Programmcode gut genug verstehen, um ggf. Probleme gegenüber Bing Copilot zu benennen. Zudem habe ich als Laie passable Linuxgrundkenntnisse.

    "Ich" habe schon eine ganze Menge rund um TVHeadend, Home Assistant & Co mit dem Bing Copilot programmiert. Meist funktioniert es nicht so, dass der Copilot direkt mit der ersten Anfrage ein funktionierendes Ergebnis ausspuckt. Es ist ein dialogischer Prozess, bei dem man dem Copiloten immer wieder Fehlermeldungen und Log-Einträge zeigen muss, damit er versteht, was er ändern muss. Die Lösung oben hat "uns" ca. 1 -2 Stunden gekostet.

  • Ich denke du hast "Prompt" missverstanden (oder ich habe das falsch benutzt ...). Ich wollte den (genauen) Wortlaut wissen, mit dem du den Code erzeugen lassen hast. Nach meinem Verständnis nennt man das "Prompting". Sehe aber an deiner Antwort, dass es eine interaktiver Prozess war. Vielleicht kannst du es dennoch skizzieren. Z.B. den Anfang (oder wie du den jetzt formulieren würdest).

    Kodi 21.2, 17.6, 21.1, 16, 21.2 on Windows 11 Pro, Android 6, Android 12, FireTV Box 2nd Gen, FireTV 4k Max 2nd Gen
    Media on NAS, OpenMediaVault 7 (Debian Linux).

  • Ich denke du hast "Prompt" missverstanden (oder ich habe das falsch benutzt ...). Ich wollte den (genauen) Wortlaut wissen, mit dem du den Code erzeugen lassen hast. Nach meinem Verständnis nennt man das "Prompting". Sehe aber an deiner Antwort, dass es eine interaktiver Prozess war. Vielleicht kannst du es dennoch skizzieren. Z.B. den Anfang (oder wie du den jetzt formulieren würdest).

    Ich schildere der KI einfach umgangssprachlich, was ich erreichen möchte. Dann nenne ich in meinen Augen relevante technische Details gut strukturiert. Dazu gehörte z.B. der bereits bekannte Token inkl. Api-Adresse für einen der TVP-Sender aus einem alten Forumsbeitrag. Außerdem frage ich, was noch benötigt wird, damit eine passende Lösung entwickelt werden kann.

    Der Copilot hat mich dann z.B. gebeten, auch noch für die anderen TVP-Sender die Tokens auszulesen. Das musste ich dann erst einmal selbst mit den Firefox-Entwicklerwerkzeugen machen.

    Den vorgeschlagenen Code musste ich dann immer wieder testen. Teilweise fehlten Abhängigkeiten. Dann kann man die KI aber fragen, welches Softwarepaket dies für meine Distribution liefert.

    Hin und wieder hilft es zu flunkern. Ich habe der KI z.B. gesagt, dass ich einen IQ von 90 habe und sie sich entsprechend klar ausdrücken muss. Das hat tatsächlich geholfen, die Informationen so zubekommen, dass ich sie verstand. Bei anderen Projekten hat es geholfen zu betonen, dass der Gegenstand um den es geht die Informationen unter einer freien Lizenz veröffentlicht und es deswegen rechtlich ok ist, wenn die KI mir hierzu etwas entwickelt.

    Das Ergebnis war dann noch nicht wirklich zielführend, weil es mehrmals stündlich veränderte Streamadressen für TVHeadend bedeutet hätte. Also habe ich dieses Problem angesprochen und der Copilot kam auf die Lösung mit dem Flask-Server.

    Im Grunde ist man in der Rolle des Projektmanagers und muss der KI helfen, den richtigen Weg einzuschlagen.

Jetzt mitmachen!

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