[iptv] m3u, stream, radio Erweiterung

  • Nein, es war kein iptv-Kanal aktiv. Dass ich das Plugin nicht explizit genannt bekomme, hat mich auch gewundert. Kann es an fehlenden Debug-Symbolen liegen? So eine Meldung kam nämlich. Sind vdr und libs gestrippt?

    Ich denke, der Build-Prozess strippt da eine Menge, alleine um Platz zu sparen. Ich wüsste aber auch nicht, wie man das unterbinden kann.


    Meine Versuche auf dem odroid n2+ waren nicht erfolgreich oder wenn man das positiv sehen will: Ich habe keinen Crash sehen können. Mit den Plugins habe ich rumgespielt (ein-/ausgeschaltet) aber nichts entdecken können. Was mir aber aufgefallen ist ist der Timeout für den VDR service:

    /storage/.config/system.d/vdropt.service
    TimeoutStopSec=30

    Je nach Anzahl der Plugins und wie beschäftigt die beim Stop waren, kann es schon sein, daß es länger als 30 Sekunden brauchen, bis alles runtergefahren ist. Nur kommt dann systemd und beendet das hart. Allerdings sollte zu dem Zeitpunkt VDR auf jeden Falls schon das setup gespeichert haben, oder liege ich da jetzt falsch?


    /usr/local/bin/ und /usr/local/lib habe ich eigentlich bewusst nicht in den Pfad aufgenommen, weil alleine die Installation von Addons die Pfade schon ändern und das Risiko, daß etwas nicht funktioniert dadurch höher wird, wenn die Libs wild gemischt werden. Ich musste z.B. an die Installation des Kodi VDR-Addons denken. Das Chaos dürfte nicht unerheblich sein, wenn Addon und /usr/local/lib sich in die Quere kommen. Und ich wollte das Risiko nicht eingehen, daß auch andere Addons da querschiessen und mit dem Mischbetrieb nicht zurecht kommen.

    Ich habe es allerdings auch schon sehr lange nicht mehr versucht.

  • Ja diese Crashes haben die Eigenart, nicht immer reproduzierbar zu sein. Vor 10 Jahren war ich dazu mir rofafor in Kontakt, weil es bei mir immer crashte. Er konnte es auf seinem System auch nicht nachstellen. Aber mit den Änderungen waren die dann auch bei mir und vielen anderen weg.

    Ich denke nicht, dass die 30s schon um waren.

    Hast Du noch eine langsamere Box? Mein Test war auf S905X3.

    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

  • Ohh. Man sogar sagen, welche Pakete mit DEBUG gebaut werden sollen? Warum weiß ich davon nix? Das brauchte ich schön öfter. Danke für den Tip :)

    Ich habe zusätzlich bei mir noch für ein paar libs und bins an denen ich arbeite nur einen link in /usr/local/lib|bin auf storage. Von da dann in mein eingebundenes server-nfs. Das erspart mir das image-update und die neue lib steht sofort zur Verfügung. Dann kann man VDR*ELEC auch zum Programmieren bzw. Testen nutzen... so am Rande, falls es jemand nützlich findet.

  • Es gibt ein neues Protocol "M3US", daß sehr ähnlich zu M3U ist. Aber anstatt einen config File und dem Index in dem Config File, kann hiermit direkt die URL der m3u angegeben werden.


    Z.B.

    Code
    Welt:5010:S=1|P=1|F=M3US|U=https%3A//welt.personalstream.tv/v1/master.m3u8|A=1|H=F:I:0:256=27:257=@4,258=@4,259=@4:0:0:1:1:230:0

    M3U ist in der channels.conf einfacher zu konfigurieren (bezüglich der PIDs).


    M3US brauchte ich eigentlich für ein anderes (neues) Plugin/Projekt, aber Youtube grätscht mir komplett dazwischen, weil ich nicht mehr einfach an die URL der m3u komme und bei höheren Auflösungen yt-dlp auch noch getrennte URL für Audio und Video liefert.

  • Lieber Zabrismus,


    vielen Dank erstmal für Deine Arbeit an diesem Plugin. Es macht echt Freude zu sehen, dass er hier vorangeht.

    Ich habe gestern beim Testen festgestellt, dass eine Sache nicht geht, und zwar das Aufnehmen.

    Ganz konkret habe ich versucht, Radio aufzunehmen. Sowohl 1live als auch Dlf Nova Aufnahmen bleiben 0 Bytes groß, bis VDR dann irgendwann abbricht.

    Könntest Du Dir das mal anschauen?

  • Zusammen mit dem webbridge Plugin und einem Firefox Addon wollte ich Youtube (oder auch alle von yt-dlp unterstützten Seiten) in iptv abspielen.

    Als Nebenprodukt des Versuches gibt es ein neues Protocol YT, daß direkt eine Youtube oder sonstige Seite aufruft und mittels yt-dlp die URLs extrahiert und im VDR darstellt.


    In der channels.conf habe ich z.B. den Eintrag

    Code
    :@2000 
    Youtube:5000:S=1|P=1|F=YT|U=https%3A//www.youtube.com/watch?v=XXXXXXXX|A=1|Y=1|H=F:I:0:256=27:257=@4:0:0:1:1:220:0

    Auf Kanal 2000 befindet sich also Youtube. Mittels SVDRP kann man nun die URL austauschen

    Code
    svdrpsend plug iptv chpa 2000 U "https://www.youtube.com/watch?v=YYYYY"

    und dann manuell oder per SVDRP auf den Kanal wechseln.

    Code
    svdrpsend chan 2000


    Es wird mittels yt-dlp versucht, Videos/Audio Streams zu finden, die ohne reencode abgespielt werden können (sollen).


    Jetzt wird es Zeit für das Radio-Problem...

  • Das Radio-Problem...


    Es war wohl nur ein One-Liner und sollte gefixed sein. Mir ist beim Umschalten, Live Pause und Timer bisher nichts aufgefallen. Und nach der Aufrufreihenfolge sollte auch alles funktionieren. Zumindest besteht die Hoffnung.

  • Hi Zabrimus,


    I like the possibility to add the m3u stream directly in channels.conf :)


    I've tried with one URL that runs properly when I use external streaming through iptvstream.sh with VLC.

    It offers hls streaming:

    Code
    MBC 1;IPTV:523838768:S=1|P=1|F=M3US|U=https%3A//shls-live-ak.akamaized.net/out/v1/0965e4d7deae49179172426cbfb3bc5e/index.m3u8|A=1|H=V:I:0:100=27:200=???@15:0:0:1:65281:7993:0


    However when I tune to it in M3US mode, I'm getting audio/video freezes:



    After around 20 sec. the stream continuous to run stable, but freezes completely after some minutes, as VLC stopped running and I see:


    Code
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] Backtrace size: 8
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /home/carel/src/vdr//vdr-client-p18/PLUGINS/lib/libvdr-iptv.so.2.6.9 printBacktrace() at common.cpp:110
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /home/carel/src/vdr//vdr-client-p18/PLUGINS/lib/libvdr-iptv.so.2.6.9 StreamBaseHandler::stop() at streambasehandler.cpp:328
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /home/carel/src/vdr//vdr-client-p18/PLUGINS/lib/libvdr-iptv.so.2.6.9 cIptvProtocolM3U::Close() at protocolm3u.cpp:85
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /home/carel/src/vdr//vdr-client-p18/PLUGINS/lib/libvdr-iptv.so.2.6.9 cIptvStreamer::Close() at streamer.cpp:137
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /home/carel/src/vdr//vdr-client-p18/PLUGINS/lib/libvdr-iptv.so.2.6.9 cIptvDevice::CloseDvr() at device.cpp:438
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> ./vdr cThread::StartThread(cThread*) calling ?? at ??:0
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /lib/x86_64-linux-gnu/libc.so.6 at pthread_create.c:447
    sep 09 13:33:02 woonkamer vdr[1081118]: [1085093] [iptv] ==> /lib/x86_64-linux-gnu/libc.so.6 at clone3.S:80
    sep 09 13:33:03 woonkamer vdr[1081118]: [1085093] [iptv] ==> Caller: /home/carel/src/vdr//vdr-client-p18/PLUGINS/lib/libvdr-iptv.so.2.6.9 printBacktrace() at common.cpp:116 (discriminator 1)



    Any idea?


    Danke im voraus

  • I've tried with one URL that runs properly when I use external streaming through iptvstream.sh with VLC.

    I don't know what vlc is exactly doing, but i see a lot of

    Code
    retuning due to modification of channel 2001 (MBC 1)

    for this channel and I see a lot of errors, if i call vlc on the command line

    Code
    vlc -I dummy -v --network-caching=4000 --live-caching 2000 --http-reconnect --http-user-agent=Mozilla/5.0 --adaptive-logic highest "https://shls-live-ak.akamaized.net/out/v1/0965e4d7deae49179172426cbfb3bc5e/index_7.m3u8" --sout "#standard{access=file,mux=ts{use-key-frames,pid-video=100,pid-audio=200,pid-spu=4096,tsid=7993},dst=out.ts}"

    But the out.ts is created and playable. Perhaps someone with much more knowledge about vlc can provide a more robust parameter(transcode command) list.


    If i change the value in your channels.conf from H=V to H=F, everything is playing smooth. ffmpeg seems to be able the handle this stream - at least on my system.

  • Thanks,


    I do have your 'avoid retuning' patch active, that may explain why these retuning lines don't pop up.

    I think the glitches happen on each hls segment change, a t least it's the same interval period each time.


    I'll try some vlc tuning here

  • Hello Zabrimus,


    Sometimes there's no audio with the MBC streams, solved by adding:

    Code
    -analyzeduration 2000000 -probesize 2000000

    I realise this may not be needed in all cases. Maybe it's an idea to add a parameter to IPTV that allows adding 'customer parameters' for ffmpeg (and probably vlc) ?

  • This one, no sound

    Code
    https://shls-iraq-prod-dub.shahid.net/out/v1/c9bf1e87ea66478bb20bc5c93c9d41ea/index.m3u8


    Code
    hls @ 0x55a1cb4a00] Could not find codec parameters f
    or stream 1 (Audio: aac ([15][0][0][0] / 0x000F), 0 ch
    annels, fltp): unspecified sample rate
    Consider increasing the value for the 'analyzeduration' (2000000) and 'probesize' (2000000) options


    When I change the to "5000000" it works

  • This one, no sound

    It looks like a problem with libdvbtsi. There exists many errors (probably for each segment):

    Code
    [00007f70cc009a70] ts demux error: libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15) for PID 0
    [00007f70cc009a70] ts demux error: libdvbpsi error (PSI decoder): TS discontinuity (received 0, expected 15) for PID 480

    And this seems to disturb the encoding, especially audio.


    There exists so many possible command line options and perhaps some channels works better with other options than the default. In the plugin webbridge i call a script to get the whole command line for transcoding depending on the channel itself. This could be also a solution here: Call a script and get the command line and if the channel depends on special configuration, then return another command line. Another idea is a configuration file which could contains command lines for a configured channel. I'm not sure, which idea is better.

    The main problem is the parameter list. Currently many pids from channels.conf and the channel name is used in the command line and this should be recognized.

  • Die Aufrufe von FFmpeg und vlc nehme ich immer wieder unter die Lupe und überlege, welche Möglichkeiten es gibt, diese von außen beeinflussen zu können. Bisher ist mir aber aufgrund der vielen Parameter keine vernünftige Lösung eingefallen, die ein mögliches Script nicht zu unübersichtlich oder nur sehr schlecht wartbar machen.


    Zum Beispiel kann der FFmpeg Aufruf für den Kika Stream zu aussehen:

    Die Parameter wären 1 Video-URL (samt VPID), 3 Audio-URL (samt 3 APID), die TSID, SID, Name des Kanals. Es kann aber auch nur eine URL sein, oder eine Video- und 1 oder 2 Audio-URL.

    Das alles als Parameter in einem Script, das die verschiedenen Möglichkeiten berücksichtigen muss, halte ich für nur schwer lesbar.


    Der vlc Aufruf ist zwar kleiner, aber gerade für Videostreams ist FFmpeg stabiler und schneller. Für Radio-Kanäle ist vlc unschlagbar schnell.

    Code
    vlc -I dummy -v \
      --network-caching=4000 \
      --live-caching 2000 \
      --http-reconnect \
      --http-user-agent=Mozilla/5.0 \
      --adaptive-logic highest https://kikageohls.akamaized.net/hls/live/2022693/livetvkika_de/master.m3u8 \
      --sout "#standard{access=file,mux=ts{use-key-frames,pid-video=100,pid-audio=200,pid-spu=4096,tsid=2850},dst=-}"


    Dann hatte ich überlegt für jede Kombination Video/Audio ein eigenes Script, das dann jeweils übersichtlicher ist, aber die Wartung wäre dann viel anstrengender.


    In einem Script gibt es dann auch das Problem, daß mit Sonderzeichen umgegangen werden muss. Aktuell nutze ich ein Array von Parametern und umgehe das Problem damit, aber falls nur ein String ermittelt wird, müsste das Script mit den Zeichen selbst umgehen können bzw. diese maskieren.


    Mir fällt da keine geschickte und pragmatische Lösung ein. Die Kombination flexibel/User-freundlich macht mir hier Probleme. Gibt es Ideen oder Anregungen?

  • Man bräuchte also im schlechtesten Fall für jeden einzelnen Sender/Eintrag einen eigenen individuellen Aufruf?

    Es gibt keine Parameter-Kombi, die für ca. 90% aller Sender/Einträge ein gutes/optimales Ergebnis liefert?

    Auch nicht, wenn Audio immer über vlc und Video immer über ffmpeg abgefackelt wird?

    Korrekt?


    Wenn ja: was spricht dann dagegen, dass man in der channels.conf pro Zeile/Kanal ALLE verfügbaren/benötigten Infos einträgt und das (ja etwas komplexe) Skript, dann je nach der Anzahl der gepflegten Parameter (und Radio oder Video) einen anderen Aufruf/Befehl absetzt?

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Eine eigene Datei, in der in jeder Zeile


    Kürzel: Befehl

    Kürze2l: Befehl2

    ...


    steht. In channels.conf steht dann nur noch das Kürzel

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

Participate now!

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