Posts by HelmutB

    kamel5 : vielleicht hat es auch gar nichts damit zu tun, aber mir ist in deinem Log aufgefallen, dass zuerst mit dem Device 4 und etwas später auch mit Device 3 für die Aufnahme auf 'Das erste HD' geschalten werden. Das ist das gleiche Verhalten wie hier: vdr-mit-iptv-blockiert-bei-aufnahme-2-iptv-tuner-und-gibt-nur-einen-wieder-frei. Kannst du einmal den vdr-2.4.1-GetDeviceForTransponder.patch aus diesem Post dazunehmen und prüfen ob sich irgendetwas ändert.

    (Warum im Sectionhandler noch der Kanal 81 eingetragen ist, es aber schon die Daten von Kanal 2 empfangen werden, ist mir auch nicht klar)

    LG Helmut

    Vielleicht geht es doch einfacher und es genügt diese Zeilen mit '+' in void cSdtFilter::SetStatus(bool On)einzufügen (nur frei hingeschrieben, nicht getestet):


    sectionSyncer.Reset();

    if (!On)

    source = cSource::stNone;

    + else {

    + if (Source() != lastSource | | !ISTRANSPONDER(Transponder(), lastTransponder)) { // transponder change

    + lastNid = 0;

    + lastTid = 0;

    + }

    +

    transponderState = tsUnknown;


    LG Helmut


    Edit: so kann es doch nicht gehen, da damit nicht mehr überprüft werden kann, ob der Transponder tasächlich gewechset wurde.

    Ich denke, das Problem liegt hier:

    Code
    1. void cSdtFilter::SetStatus(bool On)
    2. @@ -34,6 +39,7 @@ void cSdtFilter::SetStatus(bool On)
    3. sectionSyncer.Reset();
    4. if (!On)
    5. source = cSource::stNone;
    6. + transponderState = tsUnknown;
    7. }

    Hier wird transponderState immer auf tsUnknown gesetzt - auch wenn gar kein Transponderwechsel erfolgt, wie z.B. bei einem Retune.

    Jetzt stellt sich die Frage, wie man den sdtFilter dazu bringt, einen Transponderwechsel zu erkennen. Es könnte irgendwie über cSectionHandler::SetChannel(const cChannel *Channel) gehen, dazu fehlen aber noch ein paar Codezeilen.


    Oder es wird die Transponder und Nid/Tid Prüfung doch in void cDvbTuner::Action(void) durchgeführt, da ist es etwas einfacher

    LG Helmut

    Da gehts ja richtig rund. Der 'iptv-eit-sdt-sidscanner.patch' wertet PAT, NIT, SDT und EIT aus. Es sieht so aus, als ob da nicht nur Nid/Tid/Sid des aktuellen sondern auch anderer Programme gefunden werden. Mit Debug könnte man sehen woher diese Informationen kommen.


    Da aber - so wie auch fnu oben geschrieben hat - diese Werte statisch sind und sich nicht ändern, ist es einfacher bei "S=1" nur den 1.Patch zu verwenden, oder - aus den Notes von rofaor...

    Code
    1. Notes:
    2. ...
    3. - The following section filters are recommended to be disabled:
    4. "NIT (0x40)", "SDT (0x42)", "TDT (0x70)"
    5. ...
    6. - Section id and pid scanners should be disabled after the correct data is
    7. found. This can be made via VDR's channel editor.

    ... wäre es sogar noch besser, die Kanalliste von fnu zu nehmen und mit "S=0" jede Änderung von Nid/Tid/Sid ganz zu verhindern. Da wäre der 1. Patch auch nicht notwendig.

    LG Helmut

    dile : Danke, genügt so. Man sieht dass es keine NIT gibt, da Nid und Tid nicht geändert werden (die "3000" bei "switching to..." ist die Frequenz die VDR bei ChannelID als Ersatz hernimmt wenn Tid 0 ist)


    fnu Vielleicht sehe ich es wirklich zu einfach, aber ich denke VDR sieht einen Transportstream genauso wie bei DVB-S/C/T. Für das Holen und Extrahieren aus dem Netzwerkstream ist das iptv-Plugin zuständig, der Inhalt, also die die TS-Pakete werden dabei nicht verändert. Es sind vielleicht nicht alle Zusatzinformationen enthalten, aber genug um die Programme sehen zu können.

    Durch "P=0" werden die Audio- und Video-Pids von VDR aus den Informationen der PMT angepasst, nicht vom Plugin.

    Und die EPG Daten werden vom VDR wie sonst auch über die EIT-Pid 0x12 eingelesen. Jeder Event ist über Nid/Tid/Sid einer ChannelID zugeordnet. Wenn VDR diese ChannelId nicht findet wird der Event ignoriert - z.B. wenn der iptv SidScanner aufgrund einer alten PAT einem Programm die flasche Sid zugeordnet hat. Das kann man mit "S=0" verhindern.


    Wie findest du die richtige Nid/Tid/Sid - so wie hier beschrieben - also "zu Fuß" aus der EIT? Das könnte auch automatisch geschehen. Im Anhang ein Patch der versucht im iptv-SidScanner auch über SDT und EIT die passende Nid/Tid/Sid zu ermitteln.

    Helmut

    Ich empfange keine iptv Programme, kann also nicht sagen was so alles im Stream übertragen wird.


    Über über die PAT erfährt man aber die PMT-Pid für das Programm (Sid). Und über die PMT die Audio/Video Pids.

    dile empfängt sicher eine PAT und VDR kennt damit Sid<->PMT, hier gab es dann das Problem mit der falschen Pid-Zuweisung. Ob es eine NIT gibt, würde der Test zeigen.

    Die Nid und Tid kann man, falls vorhanden, auch aus der SDT erfahren (VDR erzeugt in sdt.c neue Programme oder ändert den Namen eines Programms).


    Helmut

    Der 4. Patch sieht gut aus. Keine Abstürze und geteilte Characters (im letzten "für") werden fehlerfrei dargestellt

    Code
    1. Bibel TV:
    2. E 61058 1589643840 2760 50 B
    3. T Avonlea - Das Mädchen aus der Stadt
    4. S Hummer am laufenden Band
    5. D In diesem Sommer läuft in Avonlea einiges anders als gewohnt: Hetty kommt das Gerücht zu Ohren, dass die alte Konservenfabrik in eine Destillerie umgewandelt werden soll. Das kann Hetty natürlich nicht zulassen. Kurzerhand kauft sie die Fabrik. Doch die ist in einem desolaten Zustand. Gut, dass Jasper einige Ideen zur Automatisierung und Olivia zum Warenverkauf hat. Aber leider geht auch dieses Unternehmen nicht ohne Schwierigkeiten ab. Wird es Olivia und Jasper gelingen, mit der Fabrik für ein regelmäßiges Einkommen zu sorgen?
    6. G 10

    Helmut

    Wenn ich es richtig verstehe, versucht der SidScanner die Nid/Tid/Sid des Streams aus PAT und NIT zu erkennen und richtigzustellen deshalb soll er ja mit "S=1" aktiviert werden.

    Zumindest eine PAT und damit die Sid gibt es, wie man oben sieht. Ob es auch eine NIT gibt, ist aus den Logs nicht zu erkennen. Aber wie beschrieben - auch mit PAT+NIT, aber ohne Patch, müsste man zwei mal auf den Kanal tunen um alle drei Werte zu erhalten.


    Mit diesem Test würde man zumindest sehen, ob PAT und NIT im Stream enthalten sind.

    Und EPG geht natürlich erst, wenn alle drei Werte vorhanden und richtig sind.

    Helmut

    ist es dann sinnvoll das dieser Patch im IPTV Plugin integriert wird?

    Ich denke schon, weil sonst - auch ohne dein PAT-Problem - ein Update entweder nur von SID oder nur von NID/TID gelingt, aber nie von allen drei Werten gleichzeitig, da nach einem SetId() das cChannel *IptvChannel = Channels->GetByChannelID(channelIdM); den Kanal nicht mehr finden kann. Die fehlenden Werte würden erst bei einem zweiten Tuning richtiggestellt.


    Es ist aber grundsätzlcih die Frage, warum bei dir eine alte PAT auftaucht (und, wie es aussieht auch nur genau einmal).

    Das iptv-plugin verwendet einen Ringbuffer für die Filterpakete, vielleicht wird der beim Umschalten nicht richtig geleert.

    LG Helmut


    @Edit: Du kannst ja NID/TID/SID bei einem Kanal auf 0,0,0 setzten und dann mit und ohne Patch das Updaten beobachten.

    Dein Patch ist noch nicht ganz perfekt :). Sieht nach Bufferüberlauf aus beim lesen und sammeln der EPG Info aus:

    Code
    1. May 13 00:11:01 gentoo64vdr kernel: device 2 sectio[16442]: segfault at 0 ip 00007f3d0cdc5816 sp 00007f3d09c20298 error 4 in libc-2.28.so[7f3d0cd25000+1c3000]
    2. May 13 00:11:01 gentoo64vdr kernel: Code: 0f 1f 40 00 66 0f ef c0 66 0f ef c9 66 0f ef d2 66 0f ef db 48 89 f8 48 89 f9 48 81 e1 ff 0f 00 00 48 81 f9 cf 0f 00 00 77 6a <f3> 0f 6f 20 66 0f 74 e0 66 0f d7 d4 85 d2 74 04 0f bc c2 c3 48 83
    3. May 13 00:11:01 gentoo64vdr lircd-0.10.1[2361]: Info: removed client
    4. May 13 00:11:01 gentoo64vdr vdrwatchdog[16524]: restarting VDR

    Helmut

    Nach dem Log zu schliessen, gibt es tatsächlich fast immer ein altes PAT-Paket das die Sid des aktuellen "Channel" andert. Die nachfolgenden richtigen PATs können das aber nicht korrigieren weil im SidScanner nur der "Channel", aber nicht 'ChannelIdM' an die modifizierte (aber falsche) ChannelID angepasst wird. Ausserdem wird nach dem Empfang einer PAT und einer NIT der SidScanner beendet.


    Dieser Patch sollte helfen:

    Damit sollte im "Channel" die Sid nach der Änderung durch die alte PAT später ein zweites mal, nun wieder mit der richtigen Sid, modifiziert werden.

    Das ganze ist ungetestet da ich kein iptv empfange, das Plugin lässt sich mit dem Patch aber fehlerfrei bauen.

    Helmut

    Noch mit meinem Patch hier einmal das EPG von "Bibel TV" auf 12552V mit "?".

    Bei "Bibel TV HD" auf 11243H wird es richtig dargestellt, ich habe aber jetzt kein Debug-Log davon:


    Kann die CharSet-Angabe auch mitten in einem ExtendedEventDescriptor kommen?

    Da war eher der Extremfall gemeint - durchschneiden eines multi-byte character und zusätzlich die Charset-Angabe am Beginn eines Text-Blocks. So nach dem Motto: wenn schon falsch, dann aber richtig.

    Deinen Patch muß ich erst einspielen.

    Helmut

    Ich werde es mir diesen EPG Eintrag am Abend ansehen - es wird ziemlich sicher so zu finden sein.


    Als Lösung könnte/müsste man alle Textblöcke ohne CharSet zu dem ersten Block mit CharSet in einem Buffer zusammenführen. Falls irgendwann wieder ein Block mit CharSet auftaucht, kann der bisherige Bufferinhalt konvertiert werden und das Zwischenbuffern würde von vorne beginnen.

    Falls das Durchtrennen auch bei einer CharSet Angabe geschieht muß man wahrscheinlich damit leben (der VDR ist ja keine Texterkennungssoftware)


    Lg Helmut

    Beides entspricht der Empfehlung

    Das wird grundsätzlich auch auch richtig sein. Nur kann in diesem Fall der Fehler nur beim SidScanner und/oder an der Information der PAT der liegen. VDR selbst ändert die Sid eines Programms nicht weil er es in cChannels gar nicht finden kann. Es würde dann In sdt.c ein neuer Kanaleintrag erzeugt werden.

    Denkbar ist auch, dass die Sid aus einem alten PAT-Paket ausgelesen wird das sich noch im TS-Buffer befunden hat.

    Warum das aber nur bei dile geschieht ist natürlich die Frage.

    Helmut

    Ich denke, der Fehler liegt in cSidScanner::Process() des iptv-Plugins.

    Du wirst im Setup Use section filtering = 1 eingestellt haben, und durch "S=1" wird ser Sidscanner aktiviert. Dieser liest aus der PAT die Sids aus. Wenn eine gefunden wird, die nicht mit der des aktuellen Programms übereinstimmt wird diese dann einfach übernommen. Vielleicht hat sich in der PAT etwas geändert und es war bisher immer nur die Sid des aktuellen Programms enthalten.

    Deaktiviere einmal den SidScanner - entweder im Setup-menu oder mit "S=0".

    Wenn VDR die Programme mit falscher Sid nicht neu anlegt, korrigiere diese händisch in deiner channels.conf.


    LG Helmut


    Edit: Eine Debugausgabe vom iptv-Plugin würde mehr zeigen.

    Sehr seltsam. In sdt.c wird hier bei channel 16 die SId von 11130 auf 11170 geändert, das ist eigentlich gar nicht mögich, da dieser channel zuvor über die Sid 11170 gesucht und gefunden wurde.

    Gehört die Sid 11130 nicht zu "ZDF_neo HD" ? Poste einmal deine channels.conf.

    Helmut

    kls : unbedingt notwendig ist das natürlich nicht.

    Es war nur kurz unklar, welche Schreibweise gültig ist. Und da 'convertCharacterTable'in si.c keine Fehlermeldung bei unbekannter Charactertable ausgibt, wäre vielleicht eine Überprüfung auf Sinnhaftigkeit des Override-Charsets - so wie es auch bei 'SetSystemCharacterTable' geschieht - als Feedback für den Benutzer hilfreich.

    (iconv kennt allerdings viel mehr Charsets als im DVB-Standard definiert sind, der Patch prüft aber nicht alles Machbare).

    LG Helmut

    Nach dem hier https://www.minidvblinux.de/fo…ic=9132.msg71153#msg71153 sollte es möglich sein. Es dürfte aber auch so sein, dass es mit diesem Tuner für DVB-T2 ein wirklich sehr gutes und starkes Signal braucht.


    Raspel : mit VDR kannst du die Suche nach einem guten Signal so versuchen:

    erzeuge im VDR Kanalmenü ein neues Programm für DVB-T, nimm eine Frequenz aus deinem Log mit "SC", z.B. "474000", setzte Nid,Tid,Sid auf 0, System DVB-T2, Bandbreite 8Mhz, Stream-Id 0, SISO/MIS0 0 und alle anderen Parameter auf "AUTO". Dann wähle diesen Kanal aus und versuche über die Antennenausrichtung einen Lock zu bekommen (wenn es nicht gleich klappt, versuche es auch mit anderen Frequenzen). Zur Überprüfung ist "femon" oder das Plugin "vdr-femon" hilfreich.


    Und wenn du VDR um diesen Patch ergänzt, werden die auf diesem Transponder gefundenen Programme von VDR auch in die Programmliste eingefügt.

    LG Helmut

    Hier die Logs mit der Github Version von 17:20 Uhr - also schon mit deiner allerletzten "transportstream" Änderung.

    Bei 722 Mhz gab es mit dem si2183 wieder "garbage" aber ohne Duplikate, der etwas besseren Tuner des Astrometa liefert hier fehlerfreie Daten.

    Sonst scheint alles OK zu sein, jeweils 135 Programme, der si2183 wieder ca. 2-3 min. schneller, das schwankt beim mn88473 etwas, je nach Signalqualität der zu schwachen Transponder.

    LG Helmut

    Vielleicht sollte ich hier nur die Network-ID vergleichen!? Ist aber auch eher ein "edge case".

    Richtig, das ist ein eher seltene Fall, sonst werden ja alle Programme gefunden. Mit dem si2168 geht es etwas schneller, das liegt aber an den unterschiedlichen Auffassungen von Treiber/Hardware wie Signal und Lock angezeigt werden.

    ist wie "char_coding 223: iconv failed."-Warnungen herkommen.

    Das wird den gleichen Grund wie hier haben: epg-umlaute-falsch-nur-bei-hgtv . Die Texte definieren keine Codetable, daher wird die (falsche) Default-Table genommen. Es gibt doch bei t2scan die Option "-I" für z.B ISO-8859-15. Damit sollten die Umlaute richtig dargestellt werden.

    Das ist aber kein ernstes Problem, da VDR die Namen bei einem EPG-Scan später selbst richtigstellt.

    LG Helmut


    @Edit: denn neuen Letzstand werde ich dann gleich Testen.