Alte Programme mit ungültiger Nid/Tid als "OBSOLETE" markieren

  • Wenn auf einem Transponder durch Programmverschiebung oder -abschaltung ein neuer Transportstream aufgeschalten wird, verbleiben die urspünglichen Kanaleinträge aber weiterhin in der channels.conf. Wenn es nur eine 1:1 Verschiebung auf einen anderen Transponder war, erkennt "MarkObsoleteChannels()" zwar irgendwann die ungültigen Programme, wenn aber Nid oder Tid nicht mehr aktiv sind klappt das so nicht mehr.

    Der Patch im Anhang überprüft nun, ob die in der NIT angegebene Netzwerk- und Transportstream-ID mit den Werten des Programms der auf diesen Transponder getuned hat noch übereinstimmen. Falls nicht, werden alle Programme mit ungültiger Nid oder Tid für diesen Transponder als "OBSOLETE" markiert.

    Damit der Eitscanner nichts übersieht, wird nun für jede Transponder/Nid/Tid Kombination ein eigener Channels Eintrag in die ScanList aufgenommen.


    Bei mir hat es doch einige "Karteileichen" zum Vorschein gebracht.

    Wer es testen will: zuvor die die channels.conf sichern, alle bereits von VDR als "OBSOLETE" markierten Programm entfernen und einen EPG Scan starten

    Helmut

  • Am Ende des Patches findet sich diese if-Abfrage:

    Code
    if (tsTransponder && ISTRANSPONDER(tsTransponder, Transponder()) && (Channel()->Nid() != ts.getOriginalNetworkId() || Channel()->Tid() != ts.getTransportStreamId()))

    Im Falle einer Satellitenempfangsanlage mit Multifeed fehlt meines Erachtens in der if-Abfrage ein Check auf Gleichheit der source.


    EDIT: Habe mich geirrt, weil die NIT ja schon source-spezifisch ist.

  • weil die NIT ja schon source-spezifisch ist

    ... oder zumindest sein sollte. Es wird aber in nit.c. (noch) nicht geprüft ob die NIT zum getunten Deliverysystem passt (falls nicht, wäre sie eigentlich ungültig).

    Ich habe einen halbfertigen Pach für nit.c. der u.a. auch das überprüft und werde ihn bei Gelegenheit posten.

    LG Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Inhaltlich muss ich den Patch noch verdauen/verstehen.

    Er ist vielleicht deshalb etwas unklar, weil nit.c nicht die richtige Stelle ist, um die Gültigkeit von Nid/Tid zu prüfen. Das geht einfacher und besser in sdt.c, da hier die Id's des tatsächlich empfangenen TransportStreams bekannt sind. Im Anhang der korrigierte und dadurch vereinfachte Patch v2.

    Zusätzlich auch ein Patch der überprüft, ob die Informationen der NIT für das aktuell getunte DeliverySystem gültig sind.

    Helmut

  • >> Zusätzlich auch ein Patch der überprüft, ob die Informationen der NIT für das aktuell getunte DeliverySystem gültig sind.


    Und dann? Viele Netzwerke übernehmen 1:1 streams aus anderen Netzwerken ohne Anpassung der NIT.

  • Und dann?

    Sie werden ignoriert, da sie für das aktuelle Delivery System ungültig sind. Außerdem würden damit u.U. Transponder hinzugefügt, die ohne entsprechendem Tuner nicht zu empfangen sind.

    Code
    ETSI EN 300 468 V1.16.1 (2019-08)
    4.1.1 Network Information Table (NIT) information
    The Network Information Table (NIT) provides ...
    ...
    The following rules apply to the NIT:
    a) transmission of the NIT is mandatory for the actual delivery system;
    b) the NIT describing the actual delivery system is valid if and only if it contains applicable delivery system descriptors for the actual delivery system. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    At some transitions of broadcast delivery system boundaries, the NIT carried in a TS is allowed to be invalid, and to describe an earlier network in the broadcast chain. In this case, a different mechanism has to be selected by the IRD to obtain the relevant tuning information for the actual delivery system. More information is provided in clause 5.3;


    Viele Netzwerke übernehmen 1:1 streams aus anderen Netzwerken ohne Anpassung der NIT.

    Du meist damit wahrscheinlich den Punkt 5.3 Transitions at broadcast delivery media boundaries. Ich bin nich ganz sicher ob ich es richtig verstehe, aber um da Tuning Informationen zu bekommen müsste man - falls vorhanden - eine andere NIT-Pid auswerten oder einen Frequency-Scan durchführen.

    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • ..na dann wird dein Patch wirklich Freude bereiten. Die Zuordnung von DelSys zu NIT ist reines Wunschdenken.

  • Naja, ich bin da weniger pessimistisch weil der Zusammenhang hier beschrieben ist:

    Code
    ETSI EN 300 468 V1.15.1 (2016-03)
    5.2.1 Network Information Table (NIT)
    ...
    network_id: This is a 16-bit field which serves as a label to identify the delivery system, about which the NIT informs, from any other delivery system. Allocations of the value of this field are found in ETSI TS 101 162 [i.1].

    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • inzwischen verstehe ich den "vdr-2.4.1-mark-obsolete-NidTid-2.patch" bzw. meine Gedanken dazu auch nicht mehr :).
    Die Sache ist nämlich viel einfacher: da es für einen Transponder nur eine gültige Nid/Tid Kombintion gibt, können alle Programmeinträge die sich auf einen getunten Transponder beziehen als "OBSOLETE" markiert werden, wenn Nid oder Tid nicht übereinstmmen.


    Da ich den S2-multistream Patch von hier verwende, gibt es eine daran angepasste Version und eine für den ungepatchten vdr-2.4.1.


    Etwas das nicht ganz zum Thema passt, aber auch mit ungültigen channels.conf Einträgen zu tun hat:


    Für den automatischen EPG-Scan werden in eitscan.c die Transponderparameter von einem cChannel Objekt in die ScanList eingefügt, aber nur einmal für jeden neuen Transponder. Vorrang haben Transponderparameter aus der NIT, dann die aus der channels.conf. Ohne NIT Transponder kann es vorkommen, dass die Transponderparameter eines üngültigen/veralteten channels.conf Eintrags verwendet werden. Damit kann aber auf diesen Transponder nicht getuned werden und es gibt keine Updates des EPG oder eine Auswertung von PAT/PMT/SDT.

    Dazu auch ein kleiner Patch für den original vdr-2.4.1 (im S2-multistream.patch ist dieser bereits enthalten) der auch als Ergänzung zum "OBSOLETE" patch eingespielt werden sollte.


    Helmut

  • Vielen lieben Dank, ich werde den Patch mal auf die 2.4.6 anwenden.

    Gruß MartinKG

    Fedora37 kernel-6.1.6-200.fc37.x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • oh, habe gerade festgestellt, dass es damit nicht kompiliert.

    Code
    g++ -O3 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC -Werror=overloaded-virtual -Wno-parentheses -std=gnu++14 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DVDR_USER=\"vdr\" -DSDNOTIFY -DLIRC_DEVICE=\"/var/run/lirc/lircd\" -DVIDEODIR=\"/var/lib/vdr/video\" -DCONFDIR=\"/etc/vdr\" -DARGSDIR=\"/etc/vdr/conf.d\" -DCACHEDIR=\"/var/cache/vdr\" -DRESDIR=\"/usr/share/vdr\" -DPLUGINDIR=\"/usr/lib64/vdr\" -DLOCDIR=\"/usr/share/locale\" -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libxml2    -o channels.o channels.c
    channels.c: In member function 'bool cChannels::MarkObsoleteChannels(int, int, int, int, int)':
    channels.c:1161:84: error: 'class cChannel' has no member named 'StreamId'
    1161 |          obsolete = ISTRANSPONDER(Channel->Transponder(), Transponder) && Channel->StreamId() == StreamId; // obsolete Nid/Tid
    |                                                                                    ^~~~~~~~
    make: *** [Makefile:144: channels.o] Error 1


    hier ist glaube auch noch ein Typo enthalten:

    Code
    - bool MarkObsoleteChannels(int Source, int Transponder, int Streamid, int Nid, int Tid);
    +  bool MarkObsoleteChannels(int Source, int Transponder, int StreamId, int Nid, int Tid);

    Gruß MartinKG

    Fedora37 kernel-6.1.6-200.fc37.x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

    Einmal editiert, zuletzt von MartinKG ()

  • Vielen Dank nochmals für deine Mühe, soweit funktioniert der Patch bei mir, musste nur noch folgenden Part entfernen, weis nicht vielleicht liegt es bei mir an

    einem anderen Patch, der das bereits setzt.


    Code
    @@ -11,6 +11,7 @@
     #include <ctype.h>
     #include "device.h"
     #include "libsi/si.h"
    +#include "dvbdevice.h"
    
     // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d'
     // format characters in order to allow any number of blanks after a numeric

    Gruß MartinKG

    Fedora37 kernel-6.1.6-200.fc37.x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • guten morgen,


    hab hier einen sender, der ein seltsames verhalten aufzeigt:
    Euronews English HD OBSOLETE;OBSOLETE GLOBECAST:11566:HC34M5O20P0S1:S13.0E:29900:811=27:821=eng@4:0:0:801:318:153:0


    obwohl der sender vorhanden ist, ist dieser dauerhaft mit OBSOLETE markiert.


    gruss

    beinhart

  • Da gibt es auf 19.2E auch ein paar obsolete Programme die aber trotzdem vorhanden sind. Der Grund ist, das in der SDT für dieses Service - zumindest temporär - keine Informationen kommen. Und bis diese wieder kommen, bleibt das "OBSOLETE" im Namen.


    Ich habe aber festgestellt, dass in solchen Fällen die Service-ID in der PAT angeführt ist und auch PMTs gesendet werden.

    Man könnte daher in pat.c eine Überprüfung einbauen, die eine eher unrichtige OBSOLETE Markierung wieder entfernt.

    LG Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Wäre es nicht besser SDT und PAT/PMT zu checken, bevor man Services als 'obsolete' markiert?

  • Mit dem Patch im Anhang wird in pat.c Channel->Seen() gesetzt wenn es PMTs für das Programm gibt und falls erforderlich das "OBSOLETE" vom Programmnamen entfernt falls sdt.c schneller war oder es schon in der channels.conf so vorhanden war.

    Damit werden doch einige Programme auf 19.2E wieder zurückgesetzt.

    (die Stringmanipulation im Patch geht vielleicht auch besser)

    LG Helmut

Jetzt mitmachen!

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