VPS und EpgHandlers.HandledExternally(Channel);

  • Hallo kls ,



    wenn ein Plugin (es geht hier um vdr-plugin-epg2vdr)

    EpgHandlers.HandledExternally(Channel); implementiert und "true" zurückgibt:

    Was muss das Plugin dann machen, damit VPS funktioniert?

    • Ist es wichtig, die event-ids zu verwenden, die das Sender EPG schickt?
    • Muss RunningStatus geprüft / verarbeitet werden?
    • ...?


    ~ Markus

    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

  • MarkusE

    Sieht so aus, als ob du das VPS Problem von epg2vdr fixen möchtest, finde ich gut.

    Ich hätte dann auch noch einen Wunsch, der vermutlich damit zusammenhängt: epg2vdr gibt auch auf IgnoreChannel true zurück. Damit bekomme ich in markad nicht mal mehr die EIT raw Events mit. Wäre schön, wenn meine "VPS light" Funktion auch mit epg2vdr funktionieren würde, entweder durch den Event Handler, wenn der wieder für VPS funktionieren würde, oder durch die EIT raw Events. Ist mit egal, ich schreibe bei Bedarf um.

  • Solange kein VPS verwendet wird braucht es das nicht.

    Na ja, es geht ja darum, dass VPS funktionieren soll.

    Aus Deiner Antwort schließe ich, dass dazu RunningStatus geprüft / verarbeitet werden muss. Muss ich dann noch etwas beachten?

    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

  • Hi,


    In VDR, eit.c

    Code
    cEvent *pEvent = NULL;                                                                                                                                       
          if (Tid == 0x4E || (Tid & 0xF0) == 0x50)                                                                                                                     
             pEvent = const_cast<cEvent *>(pSchedule->GetEventById(SiEitEvent.getEventId()));                                                                          
          else                                                                                                                                                         
             pEvent = const_cast<cEvent *>(pSchedule->GetEventByTime(StartTime));                                                                                      
          if (!pEvent || handledExternally) {                                                                                                                          
             if (handledExternally && !EpgHandlers.IsUpdate(SiEitEvent.getEventId(), StartTime, Tid, getVersionNumber()))                                              
                continue;


    Also, ich versuche das zu verstehen: Bei vdr-plugin-epg2vdr ist handledExternally == true.

    Wenn dann noch EpgHandlers.IsUpdate false zurückgibt, weil das Event schon bekannt war, wird das Setzten das Running Status mit

    Code
    pSchedule->SetRunningStatus(pEvent, RunningStatus, Channel);


    übersprungen. Anders ausgedrückt, das plugin müsste das dann in EpgHandlers.IsUpdate implementieren.

    Korrekt?


    ~ Markus

    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

  • Ich habe mich mit der ganzen EPG-Handler Sache nie wirklich intensiv beschäftigt, sondern lediglich die gewünschten Interfaces eingebaut bzw. übernommen.

    Tatsache ist, dass VPS nur funktioniert, wenn der Running-Status richtig gesetzt ist. Wenn das wegen entsprechender Bedingungen VDR nicht macht, dann muss es das Plugin machen.

  • Ich vermute den Patch für den VDR braucht man zusätzlich auch noch, oder ?

    Falls ja, wäre es schön, wenn kls den auch gleich mit einbauen könnte

    Edited once, last by kfb77 ().

  • Ich habe die beiden Patches und den EIT Patch auf meinem Test VDR mal eingebaut.

    Grundsätzlich funktioniert jetzt die Aufnahme, aber das Syslog sieht nicht danach aus, als ob die Aufnahme VPS gesteuert wäre.

    Test: zwei gleichzeitige, identische Sendung von einem von epg2vdr veralteten Kanal (HD) und einen nicht von epg2vdr verwalteten Kanal (SD)

    Mit epg2vdr:

    Code
    Dec 22 21:03:02 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') entered VPS margin
    Dec 22 21:05:14 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') start
    Dec 22 21:50:00 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') finished with 0 errors
    Dec 22 21:50:00 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') stop
    Dec 22 21:51:12 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') set to no event
    Dec 22 21:51:12 VDR-2204-Dev vdr: [341590] deleting timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller')

    ohne epg2vdr:

    Code
    Dec 22 21:03:02 VDR-2204-Dev vdr: [341590] timer 4 (1092 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') entered VPS margin
    Dec 22 21:04:52 VDR-2204-Dev vdr: [341599] channel 1092 (SWR Fernsehen BW) event Do. 22.12.2022 21:05-21:50 (VPS: 22.12. 21:00) 'Ursula Cantieni - Die Frau hinter Johanna Faller' status 2
    Dec 22 21:04:53 VDR-2204-Dev vdr: [341590] timer 4 (1092 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') start
    Dec 22 21:05:14 VDR-2204-Dev vdr: [341596] channel 1092 (SWR Fernsehen BW) event Do. 22.12.2022 21:05-21:50 (VPS: 22.12. 21:00) 'Ursula Cantieni - Die Frau hinter Johanna Faller' status 4
    Dec 22 21:49:51 VDR-2204-Dev vdr: [341596] channel 1092 (SWR Fernsehen BW) event Do. 22.12.2022 21:50-22:05 (VPS: 22.12. 21:45) 'SWR Aktuell Baden-Württemberg' status 2
    Dec 22 21:50:11 VDR-2204-Dev vdr: [341596] channel 1092 (SWR Fernsehen BW) event Do. 22.12.2022 21:05-21:50 (VPS: 22.12. 21:00) 'Ursula Cantieni - Die Frau hinter Johanna Faller' status 1
    Dec 22 21:50:12 VDR-2204-Dev vdr: [341590] timer 4 (1092 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') finished with 1 error
    Dec 22 21:50:12 VDR-2204-Dev vdr: [341590] timer 4 (1092 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') stop
    Dec 22 21:51:12 VDR-2204-Dev vdr: [341590] timer 4 (1092 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') set to no event
    Dec 22 21:51:12 VDR-2204-Dev vdr: [341590] deleting timer 4 (1092 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller')

    Ich sehe keine VPS Status Events im Syslog bei dem Kanal mit epg2vdr. Auch die Start/Ende Zeiten sind verschieden. Ich würde ich erwarten, dass die HD und die SD Kanale (fast) gleichzeitig senden. Man sieht auch an der Aufnahme, dass die beiden Aufnahme nicht gleichzeitig gestartet wurden.

  • Hi,


    Mit epg2vdr:


    Quote

    Dec 22 21:05:14 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') start


    Dec 22 21:50:00 VDR-2204-Dev vdr: [341590] timer 3 (3 2100-2145 VPS 'Ursula Cantieni - Die Frau hinter Johanna Faller') stop


    Also, dann ist die Aufnahme VPS gesteuert. Weil sie sonst doch um 21:00 starten würde, und nicht um 21:05:14. Analog für die stop Uhrzeit.


    Bleibt die Frage, warum es bei der Verwendung von epg2vdr keine status Meldungen gibt.


    ~Markus

    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

  • Stimmt, da war ich wegen der fehlenden Syslog Einträgen auf der falschen Spur.

  • Anbei 2 Patches. Einer für VDR, und einer für das Plugin. Damit funktioniert VPS.

    kls , könntest Du DIr vorstellen, den Patch für VDR in VDR zu übernehmen?

    Ich verstehe nicht ganz, warum es ein EpgHandlers.GetEvent() geben soll. Der Event muss doch über pSchedule->GetEventById/Time() zu finden sein.

  • Hi Klaus,


    Code
    pEvent = const_cast<cEvent *>(pSchedule->GetEventById(SiEitEvent.getEventId()));


    findet den event nicht, weil das Plugin andere Event IDs verwendet, und nicht SiEitEvent.getEventId() .


    Alternativ zu dem von mir vorgeschlagenen EpgHandlers.GetEvent könnte man auch EpgHandlers.GetEventId(...) implementieren. Dann würde der exit aus SiEitEvent.getEventId() die event ID ermitteln, die das Plugin für dieses Event verwendet.


    Also etwa

    Code
    tEventID eventID = SiEitEvent.getEventId();
    EpgHandlers.GetEventId(&eventID, Channel, pSchedule, &SiEitEvent, Tid))
    pEvent = const_cast<cEvent *>(pSchedule->GetEventById(eventID));


    ~ Markus

    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

  • Das kann der Autor des Plugins beantworten :) .

    Ich spekuliere mal: Wenn kein EIT EPG vorhanden ist, oder nur für 5 Tage, das externe EPG aber für 7 Tage vohanden ist: Dann werden die Events schon mal angelegt, und dann gibt es noch keine EIT id.

    Es gibt wohl auch Sender, die die EIT ID eines Events öfter mal ändern :( :wand

    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

  • kls

    Ich hätte da mal noch eine grundsätzliche Frage:

    Wenn ein Plugin (epg2vdr) true auf IgnoreChannel und/oder HandleEitEvent und/oder HandledExternally zurück liefert, müsste dann nicht trotzdem, nach der Event Bearbeitung durch das Plugin, die Methode HandleEvent für alle andere Plugins durch den VDR aufgerufen werden, um denen das Ergebnis mitzuteilen ?


    Zum Hintergrund: Ich habe eine Funktion im markad Plugin, die die VPS Events speichert um sie später als zusätzliche Information für die Berechnung von Start/Ende zu verwenden. Das funktioniert auch, sofern kein epg2vdr Plugin verwendet wird. Mit epg2vdr bekomme ich keine Events mehr mit.


    Auch ich kämpfe mit dem Problem, dass das epg2vdr Plugin die EventID ändert, aber das könnte ich durch den Patch von MarkusE mit der Methode EpgHandlers.GetEvent() lösen.


    Leider bekomme ich aber für Channels, die von epg2vdr verwaltet werden, gar keine Events mehr mit. MarkusE : Vielleicht hast du mir da noch einen Tipp, wo man das fixen könnte. VDR oder epg2vdr ?


    So sieht mein Test Handler aus:

    Mit diesem Debug Code sehe ich keine Events von Kanälen, die von epg2vdr verwaltet werden (also in channel.map), alle anderen sehe ich.

  • Danke für den Hinweis, aber so tief zu meiner Frage geht der Thread auch nicht ein.

    Eigentlich ist die grundsätzliche Frage auch an horchi , warum er den EPG Handler so implementiert hat, dass kein anders Plugin mehr was von EPG Events mitbekommen kann, nicht mal mehr die EIT raw events. Vielleicht kann man auch hier was am epg2vdr Plugin ändern. Aber dazu verstehe ich das Plugin zu wenig.

    Das es bei einem Plugin, dass die EPG Daten extern verwaltet keinen Sinn macht, dass auch andere Plugins EPG Daten ändern ist klar, aber lesender Zugriff sollte trotzdem möglich ein und mehr brauche ich auch nicht.

  • Ich spekuliere mal: Wenn kein EIT EPG vorhanden ist, oder nur für 5 Tage, das externe EPG aber für 7 Tage vohanden ist: Dann werden die Events schon mal angelegt, und dann gibt es noch keine EIT id.

    Die EPG-Handler Schnittstelle wurde dafür angelegt, dass ein Plugin die Texte durch "bessere" ersetzen kann.

    Wenn man VPS verwenden will, dann müssen die Event-IDs so bleiben, wie sie vom Sender kommen.

  • warum er den EPG Handler so implementiert hat, dass kein anders Plugin mehr was von EPG Events mitbekommen kann

    Die Schnittstelle ist bei mehreren EPG-Handlern so gedacht, dass wenn einer den Event behandelt (d.h. "aufgehübscht") hat, die nachfolgenden Handler nicht mehr aufgerufen werden, um mehrfache Änderungen und Überschreiben zu verhindern.

    Dass da VPS-Zeiten herausgelesen werden wurde nicht vorgesehen.

Participate now!

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