[iptv] m3u, stream, radio Erweiterung

  • Moin Zabrimus,

    ich hätte da noch eine Anregung, vielleicht kannst Du die mit auf die Wunschliste setzen (falls es eine gibt :) ) :

    Es gibt Sender, die nur über youtube ausstahlen. Der lokale Privatsender Hamburg 1 macht das z.B. so. Die noch in diversen Listen, so auch bei Kodi, aufgeführte Adresse https://stream.hamburg1.de/live_abr/hamburg1_abr/live/hamburg1_720p/chunks.m3u8 gibt es nicht mehr. Der Sender musste nach einem Insolvenzantrag wohl Geld sparen und verlinkt unter https://www.hamburg1.de/livestream/ jetzt nur noch auf seinen Youtube-Kanal. Es gibt zwar Tools, mit denen man die m3u-Adresse aus einem Youtube-Link ermitteln kann. Das sind dann ellenlange Adressen, die mit https://manifest.googlevideo.com/api/manifest/hls_variant/expire/ anfangen. Und das Wort expire zeigt auch schon, wo der Hase im Pfeffer liegt: Die Streamadressen sind anscheinend nur tagesgültig. Vielleicht ist es möglich, die Ermittlung der m3u zu einer Youtube-Adresse im Plugin zu integrieren, so dass man eine youtube-Adresse hinterlegen kann, für die bei jedem Aufruf dann die jeweils gültige m3u intern ermittelt wird?

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Dr. Seltsam

    Youtube-Videos waren schon auf meiner persönlichen Wunschliste, weil ich manchmal ein Video vom Desktop auf den Fernseher (VDR) schieben will um es da zu sehen. Aber bei meinem Wunsch weiß ich noch nicht, wie das am Besten zu realisieren ist, weil die Kanalliste eher etwas statisch ist. Das Problem besteht hier bei Hamburg1 nicht.


    Ich habe mit yt-dlp rumgespielt und das Programm ist in der Lage die echte Video-URL (m3u8) zu extrahieren, die ich in dem Plugin nutzen könnte. Ein schnelles zappen funktioniert allerdings nicht. Die Art der Video-URL Bestimmung dauert etwas.


    Wie es aussieht, wenn ich yt-dlp den Download erledigen lasse um dann nur "nur" noch den Stream einzulesen behalte ich mir für die nächste Version vor. Ich versuche mich erstmal an der URL-Extraktion und dem Nutzen der bereits vorhandenen Funktionalität.

  • Ich hatte gestern mit dem python-Script https://github.com/Nuttypro69/YouTube_to_m3u die m3u-Adresse zum HH 1-Stream ermittelt. Dazu musste ich noch einen Python-Fehler wie hier beschrieben umgehen. Wenn man nur eine einzige Adresse ermitteln lässt, klappt das auch recht fix (< 2s)

    Die ermittelte m3u funktionierte gestern auch ohne erkennbare Probleme im iptv-Plugin. Nur heute ist der m3u-Link leider schon expired.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Ich bekomme übrigens beim make-Aufruf diese Meldungen:


    Trotz der gegenteiligen Aussage ("compilation terminated") beginnt das Kompilieren dann dennoch.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Ich hatte gestern mit dem python-Script https://github.com/Nuttypro69/YouTube_to_m3u die m3u-Adresse zum HH 1-Stream ermittelt.

    Vielleicht kann man den noch als Alternative verwenden. Muss mal gucken.

    Aber die neue Version nutzt aktuell yt-dlp um an die aktuell URL zu kommen.


    Channels.conf (Beispiel):

    Code
    Hamburg1:3020:S=1|P=1|F=M3U|U=other.cfg|A=2|Y=1:I:0:256=27:257=@4:0:0:53:1:2:0

    Man beachte hier den neuen Paramter "Y=1", der den Zwischenschritt mit yt-dlp aktiviert.


    other.cfg (die 2: ist Hamburg 1, das geht etwas schneller als über https://www.hamburg1.de/livestream/

    Code
    1:http://ntv1.akamaized.net/hls/live/2014075/NASA-NTV1-HLS/master_2000.m3u8
    2:https://youtu.be/_bvFj37lkuQ

    Ich bekomme übrigens beim make-Aufruf diese Meldungen:

    Es gab noch Regeln für "*.c" Files. Die habe ich jetzt rausgenommen.



    In VDR*ELEC ist das aber noch nicht drin. Dazu muss ich mir überlegen wie den yt-dlp da rein bekomme. Wahrscheinlich nutze ich die precompiled binaries - falls gewünscht. Dazu komme ich heute aber nicht mehr.


    edit:

    Ich habe den Plugin Parameter vergessen zu erwähnen:

    Code
    [iptv]
    -y /usr/local/bin/yt-dlp_linux
  • Falls ihr yt-dlp verwenden wollt, dann bitte integriert das auto update von ytdlp.

  • Ich hatte gestern mit dem python-Script https://github.com/Nuttypro69/YouTube_to_m3u die m3u-Adresse zum HH 1-Stream ermittelt.

    Ich habe mir das Projekt angeschaut und mich gefragt, warum die URL Extraktion so simpel aussieht. Das Ergebnis ist jetzt im Plugin zu finden. Der Parameter Y für M3U bestimmt die Art der Suche:

    Y=1 nutzt yt-dlp um die URL zu bestimmen.

    Y=2 nutzt die internen Möglichkeiten und ist eigentlich nur eine String-Suche und kommt ohne yt-dlp aus. Die URL muss dann allerdings direkt auf YT verweisen. Also z.b. eine URL der Form https://youtu.be sein.


    Dafür ist Y=2 erheblich schneller als Y=1.

  • Moin Zabrimus,


    erstmal vielen Dank für die rasante Umsetzung meiner Idee. Ich kriege aber noch kein Bild. Vielleicht hast Du eine Idee.

    Dem iptv-Plugin habe ich den Parameter -y=-y=yt-dlp_linux_aarch64 übergeben. Das binary ist vorhanden und funktioniert auf der Konsole.

    Der channels.conf-Eintrag lautet

    Code
    Hamburg 1:3020:S=1|P=1|F=M3U|U=other.cfg|A=4|Y=1:I:0:256=27:257=@4:0:0:53:1:4:0

    /usr/local/share/vdr/plugins/iptv/other.cfg:

    Code
    4:https://youtu.be/_bvFj37lkuQ

    Beim Umschalten auf den Kanal sehe ich keinen Fehler im Log, aber es kommt weder Ton noch Bild:

    Code
    Jul 29 12:44:00 CoreELEC vdr[8288]: [8288] switching to channel 133 I-1-4-53 (Hamburg 1)
    Jul 29 12:44:00 CoreELEC vdr[8288]: [8363] IPTV streamer thread ended (pid=8288, tid=8363)
    Jul 29 12:44:00 CoreELEC vdr[8288]: [8360] device 4 receiver thread ended (pid=8288, tid=8360)
    Jul 29 12:44:00 CoreELEC vdr[8288]: [softhddev]GetVideoSize: 0x0 1.33333
    Jul 29 12:44:00 CoreELEC vdr[8288]: [8288] [softhddev]SetPlayMode: 1
    Jul 29 12:44:00 CoreELEC vdr[8288]: [8288] [softhddev]SetVolumeDevice: 255
    Jul 29 12:44:00 CoreELEC vdr[8288]: Set Playmode 1
    Jul 29 12:44:00 CoreELEC vdr[8288]: set trickspeed to 0
    Jul 29 12:44:00 CoreELEC vdr[8288]: [8379] device 4 receiver thread started (pid=8288, tid=8379, prio=high)

    Nun habe ich es auch nochmal mit Y=2 versucht, aber gleiches Resultat. Wenn ich die m3u selbst extrahiere und mittels M3U-Protocol benutze, funktioniert der Sender - allerdings nur mit einer framerate von 30, was keinen Spaß macht anzusehen. Meinethalben brauchst Du da deshalb nicht mehr zuviel Zeit investieren.


    Ein Hinweis noch zum README:

    Code
    U=list1.cfg The configuration file (located in plugin directory) contains
                  a list of URL in the format "5:https://URL". Where 5 is the
                  programm number within the file (must be unique) and the URL points
                  to an m3u8 URL.

    Meines Erachtens gehören die Konfigurationsdateien in das ConfigDirectory (Standard laut vdr Makefile: /var/lib/vdr) und nicht in das ResourceDirectory (Standard laut vdr Makefile /usr/local/share/vdr). Tatsächlich sucht das iptv-Plugin die cfg-Dateien aber in /usr/local/share/vdr/plugins/iptv. Dort erwartet das iptv-Plugin ansonsten aber nur Scripte wie vlc2iptv. Das wiederum sucht seine channel settings in /etc/vdr/plugins/iptv/vlcinput/ - es ist also ein ziemlicher Wildwuchs. Ich kann mit allem leben, aber vielleicht könntest Du in Deinem README noch konkretisieren, welches "plugin directory" gemeint ist.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Dem iptv-Plugin habe ich den Parameter -y=-y=yt-dlp_linux_aarch64 übergeben. Das binary ist vorhanden und funktioniert auf der Konsole.

    Ist der Parameter ein Copy/Paste Fehler? Es muss der komplette Pfad angegeben werden, also sowas wie

    -y /richtiger/pfad/yt-dlp_linux_aarch64

    Ansonsten kannst du dem Plugin noch den Parameter --trace=511 mitgeben. Allerdings wirst du da gespammt, aber zumindest die Ausgaben der Videoanalyse und der Parameter sollten zu finden sein. Also schnell genug alles wieder stoppen ;)

    Allerdings sollte Y=2 funktionieren, wenn die URL stimmt.

    Wildwuchs trifft es gut. Schwierig wird es, wenn verschiedene System die Dateien irgendwo anders erwarten. Vielleicht sollte man das im Makefile konfigurieren können.


    With the same example of Dr. Seltsam here is okay

    but I use a Vdr configuration different on Ubu

    The channel is working on your device? Is it also an arm machine or an x86?

  • Da hatte sich beim -y-Paramter tatsächlich ein Fehler eingeschlichen, nachdem ich zwischenzeitlich das veraltete binary von Ubuntu ersetzt hatte. Und inzwischen hatte ich beim Probieren auch die Adresse in der cfg-Datei in

    Code
    https://www.youtube.com/watch?v=_bvFj37lkuQ

    geändert.

    Das log mit --trace=511 sagt:

    Code
    Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: Found URL https://www.youtube.com/watch?v=_bvFj37lkuQ
    Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: virtual bool cIptvProtocolM3U::Open()
    Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: yt-dlp throws an error, abort
    Jul 29 14:26:16 CoreELEC vdr[9410]: [9410] IPTV1: Unable to read URL 'https://www.youtube.com/watch?v=_bvFj37lkuQ'

    Auf der Konsole funktioniert

    Code
    yt-dlp_linux_aarch64 https://www.youtube.com/watch?v=_bvFj37lkuQ

    aber. Es gibt da in der Ausgabe keinen Unterschied zu

    Code
    yt-dlp_linux_aarch64 https://youtu.be/_bvFj37lkuQ

    Nun nochmal mit Y=2:

    Code
    Jul 29 14:43:35 CoreELEC vdr[10222]: [10222] IPTV1: Found URL https://www.youtube.com/watch?v=_bvFj37lkuQ
    Jul 29 14:43:35 CoreELEC vdr[10222]: [10222] IPTV1: virtual bool cIptvProtocolM3U::Open()
    Jul 29 14:43:36 CoreELEC vdr[10222]: [10222] IPTV1: Unable to read URL 'https://www.youtube.com/watch?v=_bvFj37lkuQ'

    Aber: wenn ich in der cfg jetzt wieder den ursprünglichen Link https://youtu.be/_bvFj37lkuQ hinterlege, klappt es! (Ich war mir eigentlich sicher, dass ich den wie gepostet auch vorher schon mit Y=2 getestet hatte, aber irgendwie müssen sich mehrere Fehler wohl addiert haben)

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Aber: wenn ich in der cfg jetzt wieder den ursprünglichen Link https ://youtu.be/_bvFj37lkuQ hinterlege, klappt es!

    Die letzte Log-Ausgabe sieht auch so aus, wie ich sie immer wieder sehe, wenn alles klappt.

    Funktioniert 'Name: Hamburg 1 (30 fps)' mit den Ausgabedevices? 30fps? Ich kann auf dem Desktop kein Problem sehen, aber ich erinnere mich mit Schrecken an 60fps und Video-stottern.


    Den Hinweis mit der URL 'https ://www.youtube.com' statt 'https ://youtu.be/' muss ich noch genauer untersuchen.


    X86

    Thanks. I first thought it could be a problem with the architecture, but it wasn't the problem.

  • Zabrimus

    Changed the title of the thread from “[iptv] m3u Erweiterung” to “[iptv] m3u, stream, radio Erweiterung”.
  • Funktioniert 'Name: Hamburg 1 (30 fps)' mit den Ausgabedevices? 30fps?

    Getestet mit softhdodroid auf der amlogic-Box N2+. Es läuft lippensynchron, aber man sieht schon, dass die Bewegungen nicht flüssig sind. Dazu müsste man wahrscheinlich die Bildausgabe der Box auf 30 Hz umstellen, wobei ich mir nicht sicher bin, ob die das überhaupt kann. Standardmäßig läuft sie auf 50Hz, und das Konzept eines Digitalreceivers sieht eigentlich nicht vor, dass das je nach Sender geändert wird.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • 30fps leads to problem with the output device here with nvidia + softhd, e.g. with this one:


    Code
    https://live-ln24.digiteka.com/1911668011/index.m3u8


    For these streams I use ffmpeg with '-r 25'

    For other m3u I prefer vlc in the meanwhile: faster switching and audio/video sync is better

  • Den Hinweis mit der URL 'https ://www.youtube.com' statt 'https ://youtu.be/' muss ich noch genauer untersuchen.

    Ich muss mich mal selbst zitieren. Es gab einen Bug in der URL Bestimmung. Die Query-Parameter sind verloren gegangen und jetzt sollten beide Varianten funktionieren.

    Es läuft lippensynchron, aber man sieht schon, dass die Bewegungen nicht flüssig sind.

    Ja so etwas hatte ich befürchtet.

    For these streams I use ffmpeg with '-r 25'

    For other m3u I prefer vlc in the meanwhile: faster switching and audio/video sync is better

    Unfortunately the frame_rate is not always visible in m3u or http stream. I think this could be determined used ffprobe, but this takes some time. There exists a stream which contains

    Code
    RESOLUTION=1920x1080,FRAME-RATE=25.000
    RESOLUTION=1280x720,FRAME-RATE=50.000

    Therefore a fix value '-r 25' could also be a problem.

    I have tried to read some vlc documentation to try to offer a ffmpeg replacement. But i haven't understand the command line options. For example doing only something similar to ffmpeg: -codec copy. Or stream selection: Best video and all audio. And how are the pids managed?


    Okay. Ich sehe mehrere Möglichkeiten:

    1. Doch ffprobe aufrufen um die Framerate zu bestimmen. Doch das geht auf Kosten der Schwuppdizität beim umschalten.

    2. Fix ein Wert -r 25/-r 50

    3. Eine weitere Konfiguration, so daß man pro Kanal individuell zusätzliche Parameter an ffmpeg übergeben kann, so daß jeder selbst entscheiden/probieren kann, was passt.


    Im web-Plugin/remotetranscoder rufe ich ffprobe auf, weil ich da die Daten vom Stream brauche. Es dauert etwas länger, aber jetzt nicht so lange, daß es massiv (also mich persönlich) stören würde.

  • Here's an example of a vlc streaming out to host 'brix'

    Code
    /usr/bin/vlc -I dummy -v --network-caching=4000 --live-caching 2000 --http-reconnect --http-user-agent=Mozilla/5.0 --adaptive-logic highest https://dpp-live-events.medialaancdn.be/events/hls/aes/webstream1.m3u8 --sout "#standard{access=udp,mux=ts{use-key-frames,pid-video=100,pid-audio=200,pid-spu=4096,tsid=2850},dst=brix:4320}"
    Code
    --adaptive-logic highest

    Always select the variant with the highest bitrate

    I have fixed audio and video pids and unique 'tsid'

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!