markad findet Timer nicht

  • Auf der Suche nach der Ursache dieser Fehlermeldung

    Code
    1. Dec 10 14:38:01 server vdr: [5517] markad: cannot find timer for 'Pearl Harbor'


    bin ich auf Code gestossen, den ich nicht verstehe.
    In status.cpp finde ich die folgende Zeile in der Funktion cStatusMarkAd::LogoExists:

    Code
    1. if (Timer->Recording() && (!strcmp(Timer->ToDescr(),Name)))


    Die Methode cTimer::ToDescr() in timers.c im VDR sieht aber so aus:

    Code
    1. cString cTimer::ToDescr(void) const
    2. {
    3. return cString::sprintf("%d (%d %04d-%04d %s'%s')", Index() + 1, Channel()->Number(), start, stop, HasFlags(tfVps) ? "VPS " : "", file);
    4. }


    Das kann nie matchen. Auf die Schnelle finde ich keine Patches die da was an ToDescr ändern. Ich will nicht ausschießen, dass ich völlig auf dem Holzweg bin, aber was übersehe ich?


    Ach ja, es geht um den VDR 1.7.33 und markad 0.1.4.git20121101. Ist das zu alt?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Hallo GDA,


    ich habe das Problem auch. Joe_D hat damals was bzgl deines zitierten Codes geändert: GIT


    Mein Thread: markad: cannot find internal recording structure for


    Bei mir besteht das Problem nach wie vor...


    Grüße, Kokel

  • ich habe das Problem auch. Joe_D hat damals was bzgl deines zitierten Codes geändert: GIT


    Mein Thread: markad: cannot find internal recording structure for


    Bei mir besteht das Problem nach wie vor...


    Okay, also doch zu alt, dass das auch nicht funktioniert ist klar. Im Filenamen sind ja Underscores und im Namen nicht. Ich habe es nicht ausprobiert aber könnte nicht das hier gehen?

    Code
    1. if (Timer->Recording() && (!strcmp(Timer->Event()->Title(),Name)))


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • if (Timer->Recording() && (!strcmp(Timer->Event()->Title(),Name)))

    Das Problem das ich an dieser Stelle habe ist folgendes: Der VDR teilt mir über die Status-Schnittstelle per Funktion Recording mit das auf einem 'Device' eine Aufnahme 'Name' in die Datei 'FileName' geschrieben 'On' oder beendet wird. Leider schweigt sich der VDR aus welcher Timer dazugehört, das muss irgendwie selbst herausgefunden werden. Bei Timern besteht das Problem das nicht jeder Timer ein 'Event' besitzt aber auf jeden Fall einen 'Channel'. Obiges Konstrukt lässt den VDR ab und zu Segfaulten wenn man nicht prüft ob der Event gesetzt ist.


    Ich habe mir folgenes überlegt: Ich werde das 'Device' verwenden, die Timerliste durchgehen und schauen ob der entsprechende 'Channel' per 'ProvidesChannel' vom verwendeten Aufnahmegerät geliefert werden kann. Wenn ja, nehme ich an das es sich um diesen Timer handelt und prüfe dessen Kanal-Logo. Bei mehreren Aufnahmen gleichzeitig auf einem Device habe ich dann aber trotzdem noch ein Problem, bzw. benötige ich weitere Kriterien - z.B. Aufnahme läuft erst seit 5 Sekunden oder ähnliches...


    Gruß


    Joe_D

  • Obiges Konstrukt lässt den VDR ab und zu Segfaulten wenn man nicht prüft ob der Event gesetzt ist.


    Das geht natürlich nicht, war auch nur ein Schuss aus der Hüfte.

    Ich habe mir folgenes überlegt: Ich werde das 'Device' verwenden, die Timerliste durchgehen und schauen ob der entsprechende 'Channel' per 'ProvidesChannel' vom verwendeten Aufnahmegerät geliefert werden kann. Wenn ja, nehme ich an das es sich um diesen Timer handelt und prüfe dessen Kanal-Logo. Bei mehreren Aufnahmen gleichzeitig auf einem Device habe ich dann aber trotzdem noch ein Problem, bzw. benötige ich weitere Kriterien - z.B. Aufnahme läuft erst seit 5 Sekunden oder ähnliches...


    Schön ist was anderes. Kann es denn einen Timer geben, wenn es kein Event gibt? Vielleicht kann ja KLS da auch was zur Verfügung stellen. Hört sich doch nach einer sinnvollen Information an, wenn man den zugrunde liegenden Timer für ein laufendes Recording will.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Ich habe das nun folgendermassen gelöst (aber noch nicht geprüft):

    Code
    1. if (Timer->Recording() && Device->IsTunedToTransponder(Timer->Channel()) && (difftime(time(NULL),Timer->StartTime())<60))


    Jeder Timer wird nun geprüft ob er aufnimmt, ob dessen Kanal auf dem Device eingestellt ist und ob die Aufnahme in der letzten Minute gestartet wurde.
    Sollte eigentlich nur noch in ganz aussergewöhnlich seltenen Fällen nicht passen.


    Gruß


    Joe_D

  • Hallo,


    ich habe hier auch die "cannot find timer for" / "no logo found for" Meldungen von markad bei Timeraufnahmen.
    Bei Direktaufnahmen bzw. auf der Kommandozeile geht es. (Debian/Wheezy/e-tobi, d.h. vdr 2.0.1 und markad 0.1.4)


    Lt. diesem Thread sollte es mit der git-Version jetzt funktionieren, oder ?
    Ich habe den aktuellen Stand aus dem git geholt und mir eine 0.1.5pre gebaut - leider kommen die Meldungen
    weiterhin. Irgendwelche Hinweise ?


    Tschuess..
    Michael