xmltv2vdr v0.1.0pre ALPHA mit EpgHandler-Unterstützung inkl. vdr-1.6.0-3 Backport

  • Hallo Zusammen,


    anbei xmltv2vdr in einer ALPHA-Version (0.1.0pre) zum Vorabtesten.


    Neu ist nun die Unterstützung von EpgHandler ab vdr-1.7.26 (auch bei vdr-1.6.0-3 mit beiliegendem Backport-Patch).
    Dies hat es nötig gemacht die Daten in eine sqlite3-Datenbank zwischenzuspeichern (um asynchrone Anfragen des
    EpgHandlers beantworten zu können). Der Ablageort der Datenbank kann mit dem Parameter -E angegeben werden.


    Nebenbei werden nun auch die XMLTV-Tags Audio/Video/StarRating unterstützt (falls von der Quelle geliefert).
    Die doppelte Einstellung der Anzahl zu verarbeitender Tage ist weggefallen, dies wird nun einzeln bei jeder EPGSource gemacht.
    Hier kann man nun wie bei Timern gewohnt einen Startzeitpunkt einstellen (z.B. nur jeden Montag, Donnerstag und Sonntag um 1:30 Uhr)


    Falls vorhanden werden Episodenlisten ausgewertet und auch ins Log geschrieben wenn etwas nicht gefunden wurde (z.B. bei
    neuen Serien, falschen Listen oder wenn ich Mist programmiert habe ;))


    Bei mir läuft es auf einem gepatchten 1.6er VDR und ich bin total begeistert. Ich lasse 15 Tage EPG holen und mische es einfach
    mit dem EIT-EPG, das bis zu 7 Tage abdeckt. Wenn ein Tag EIT-EPG hinzukommt werden die Daten einfach aus der schon bestehenden
    Datenbank gelesen und hinzugemischt. Ich müsste meine Quelle also nur ca. alle 4-7 Tage aktualisieren.


    Offen ist noch der Punkt "Staffel/Episoden an alle Timerkanäle anhängen", d.h. Events von Kanälen bearbeiten die nicht von xmltv2vdr
    befüllt werden die aber Timer sind. Da frage ich mich noch ob nur das einzelne Timerevent bearbeitet werden soll oder der ganze
    zugehörige Kanal.


    Desweiteren ist noch ein weiterer Punkt offen. Wenn es tatsächlich mehrere Quellen für einen Kanal gibt so würden nun beide Quellen
    in die Datenbank eingetragen. Welche Daten zuerst herausgeholt würden wäre dann rein zufällig. Die Handhabung stelle ich mir
    folgendermaßen vor: Allzu komplex möchte ich es nicht, evtl. reicht schon ein "Ranking" der Sourcen, d.h. Anfrage nach Event in bestimmter
    Zeit mit bestimmten Titel (sortiert nach Ranking) liefert zwei Ergebnisse -> einfach das erste holen. Wenn nun die erste Source
    nichts geholt hat wird automatisch das Ergebnis der zweiten geliefert und so weiter...


    Das interne Datenbankformat kann sich evtl. noch ändern bis zur offiziellen v0.1.0, das ist aber nur insoweit schlimm als man
    dann die epg.db einfach löschen muss.


    Über Rückmeldungen wäre ich dankbar.


    Gruß


    Joe_D

  • Ich habe noch die VDR-Version 1.7.23 drauf. Damit sollte es auch klappen? Ich kann erst nach Ostern testen, da ich zwei Wochen nicht vor Ort bin.

  • Ich habe noch die VDR-Version 1.7.23 drauf. Damit sollte es auch klappen?


    Ohne den von Joe_D für die 1.6 erwähnten Patch wohl kaum.


    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

  • Ohne den von Joe_D für die 1.6 erwähnten Patch wohl kaum.

    Der hilft aber nichts bei 1.7.23. Im Endeffekt ist es eigentlich sehr einfach die 1.7.23 auch dazu zu bewegen die EpgHandler-Unterstützung zu haben: Einfach

    Code
    eit.c
    eit.h
    epg.c
    epg.h

    von der 1.7.27 auf die 1.7.23 kopieren. In vdr.c muss noch zwischen cDevice::Shutdown und PluginManager.Shutdown folgendes eingefügt werden:

    Code
    cDevice::Shutdown();
    EpgHandlers.Clear();
    PluginManager.Shutdown(true);

    Damit xmltv2vdr dann unabhängig von der vdr-Version kompiliert braucht es in config.h noch irgendwo unterhalb der #include-Zeilen ein

    Code
    #define EPGHANDLER 1


    Gruß


    Joe_D


  • Der hilft aber nichts bei 1.7.23.


    Ich habe auch nicht angenommen, dass der direkt verwendbar ist.


    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

  • Klasse :) Ich hatte mich neulich auch schon mal an denselben Backport probiert, war aber zu doof dafür ;)


    Wie oft wird denn die Datenbank geschrieben? Die Frage ist, macht es Sinn die in ne Ramdisk zu legen und nach dem beenden des VDR wegzusichern (wie bei der VDR epg.data) oder kann man sich den Aufriss sparen?


    BTW: Evtl. wäre es sinniger für "#define EPGHANDLER 1" nen griffigeren Namen zu wählen? Weil dann könnte man evtl. mal anfragen ob die diversen Plugins den Backportpatch unterstützen möchten. Weil der bringt ja auch nebenbei gleich Support für die content descriptors mit.
    D.h. z.B. bei Skinenigma oder epgsearch
    ---
    #if VDRVERSNUM >= 10711 || EPGHANDLER = 1
    ---
    dann hätte man da auch gleich den Support zur Anzeige und Nutzung der content descriptors in den div. Plugins.


    cu

  • Ich habe vor auf eine aktuelle VDR Version upzudaten. Das ganze nach Ostern wegen fehlender Zeit. Netter (erhoffter) Nebeneffekt ist, dass alle Plugins bis dahin angepasst wurden...


    Problematisch ist eigentlich nur das dvbhddevice, das ich immer mit dem "der_dag"Patch versehen hatte. Aber mit 1.7.25+ nicht mehr klappt. Hab gelesen, dassde rPatch nun nicht mehr benötigt wird. Aber bei meinem letzten Test ging da noch was schief (kein Ton auf Tuner #0). Wie gesagt, werde ich das Thema erst nach Ostern wieder angehen, da jetzt alles schön läuft...

  • Moin!


    Einen Backport-Patch für vdr 1.6 verstehe ich ja noch, aber auf eine alte 1.7er? Das sind alles Entwicklerversionen, die immer von dem nächsten 1.7er ersetzt werden sollten.
    Man sollte lieber die Zeit in die Plugins stecken, damit die bei vdr 2.0 auch wieder alle laufen...


    Lars.

  • Ich vermute die Änderung der epg.db ist genauso häufig wie die Frequenz in der der grabber laufen gelassen wird.


    Joe_D: Handling für Bilder müsste dann auch dein Plugin machen und nicht der Grabber nehme ich an ? (Ich nehme an das die EPG ID des Senders in EPG verwendet wird)


    Mit Episodenlisten meinst du sicher die eplists vom VDRSeriesTimer.pl ?


    Klingt alles in allem super :)

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • Ich vermute die Änderung der epg.db ist genauso häufig wie die Frequenz in der der grabber laufen gelassen wird.

    Nein, häufiger. Bei jedem Umschalten fragt der VDR Events an die dann in der Datenbank gesucht werden. Passiert aber IMHO in einem eigenem Thread, also asynchron.

    Handling für Bilder müsste dann auch dein Plugin machen und nicht der Grabber nehme ich an ?

    Nur zum Teil und zwar im Modus "Mischen". Die Bilder muss schon der Grabber bereitstellen und zwar mit Dateiname=SourceEventID. xmltv2vdr könnte dann solche Dateien im Bildverzeichnis auf die EITEventID verlinken sobald die EITEventID bekannt wird.

    Mit Episodenlisten meinst du sicher die eplists vom VDRSeriesTimer.pl ?

    Genau.


    Gruß


    Joe_D

  • EPG-DB durch die Hintertür. So hatte ich mir das immer vorgestellt :D.


    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

  • Nur zum Teil und zwar im Modus "Mischen". Die Bilder muss schon der Grabber bereitstellen und zwar mit Dateiname=SourceEventID. xmltv2vdr könnte dann solche Dateien im Bildverzeichnis auf die EITEventID verlinken sobald die EITEventID bekannt wird.


    Das klingt sinnig - woher weisst du das Bilder da sind oder schaust du einfach nach ob welche da sind ? Werde ich die nächsten Wochen mal schauen - dann kann mein Addon demnächst in Rente.


    Nein, häufiger. Bei jedem Umschalten fragt der VDR Events an die dann in der Datenbank gesucht werden. Passiert aber IMHO in einem eigenem Thread, also asynchron.


    Ah du hältst die gemischten Daten auch in der DB vor lese ich daraus. (sonst würde ein EIT Event keine Änderung der DB bewirken)

    VDR User: 87 - LaScala LC14B - LG/Phillipps 6,4" VGA Display | Asrock H61/U3S3 | G630T | 1x 16GB Mobi Mtron 3035 1x WD 750GB 2,5" |1x L4m DVB-S2 Version 5.4

  • Aber irgendwie rödelt die sqlite DB da doch mächtig auf der HDD rum :) Jedenfalls auf meiner fast vollen fragmentierten Videopartition. Also doch besser auf die Ramdisk.


    BTW: Der erste Eindruck ist super, läuft absolut problemlos und mischt das EPG so wies sein sollte. Ich bin begeistert.


    cu

  • Also doch besser auf die Ramdisk

    Ja, das geht einfach mit dem -E Parameter

    woher weisst du das Bilder da sind oder schaust du einfach nach ob welche da sind ?

    Bislang werden BIlder noch gar nicht behandelt, es war nur eine generelle Überlegung was xmltv2vdr mit Bildern anstellen könnte/sollte. epgdata2xmltv hat (noch) kein Bilderhandling - ist mir aber gerade zu viel...

    du hältst die gemischten Daten auch in der DB vor lese ich daraus. (sonst würde ein EIT Event keine Änderung der DB bewirken)

    Jein. Ich halte nicht die gemischten Daten vor, sondern speichere die EITEventID und falls vorhanden die EITDescription zum zugehörigen externen Event. Beim nächsten Mal wird dann der Event über die EITEvent-ID gefunden. Die EITDescription wird nur geschrieben falls diese sich ändert. Vorteil ist nebenbei, das das Mischen immer vom Grundzustand ausgeht (also Description bzw. EITDescription). Im Modus "Hinzufügen" werden die EIT-EpgHandler-Events unterdrückt und die Datenbank wird nur beim Import bemüht. Hier gibt es aber auch noch ein Problem: Falls doch irgendwie EIT-Events im Kanal existieren wird intern auf Mischen umgestellt damit es zu keinen doppelten Einträgen kommt.


    Gruß


    Joe_D

  • Ja, das geht einfach mit dem -E Parameter


    Jup, damit gehts super. Die gehört definitiv auf ne Ramdisk.


    BTW: Wäre es möglich es so einzurichten das man das Directory für die Episodenlisten ("%s/.eplists/lists") auch per Kommandozeile setzen kann? So als Low Priority Wunsch für irgendwann mal wenn du mal Lust für son Kleinkram hast.


    cu

  • Geht bei jemanden das automatische aufwachen?


    Code
    #no pin
    7;0;127;800


    Code
    xmltv2vdr.options.epall = 0
    xmltv2vdr.options.wakeup = 1


    Ergibt beim Versuch den VDR zu beenden das im Log (keine Aufnahmetimer gesetzt):

    Code
    executing '/usr/bin/vdr-shutdown 0 0 0 "" 1'


    Logischerweise ist er heute Morgen auch nicht aufgewacht


    cu

  • Hallo,


    ich bekomme unter Archlinux das Plugin leider nicht kompiliert. Eventuell kann mir einer von Euch helfen.


    Code
    $g++ --version
    g++ (GCC) 4.6.3


    Zitat

    g++ -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -fPIC -fPIC -c -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__KERNEL_STRICT_NAMES -DUSE_GRAPHTFT -D_GNU_SOURCE -D_XOPEN_SOURCE -DPLUGIN_NAME_I18N='"xmltv2vdr"' -I/usr/include/vdr/include -I/usr/include/libxml2 parse.cpp
    parse.cpp: In Elementfunktion »bool cParse::FetchSeasonEpisode(const char*, const char*, const char*, int&, int&)«:
    parse.cpp:128:15: Fehler: Typumwandlung von »iconv_t {aka void*}« nach »int« verliert Genauigkeit [-fpermissive]


    MfG
    wino

    MSI H55M-E33 |Intel Core i3 530| 4 GB RAM | TT DVB-S2 6400 | Ubuntu 12.04 | Kernel-3.5.0-28 | VDR-2.2.0 | v4l-dvb| eigene Distri.
    ProLaint: Ubuntu Server 12.04.5 auf HP ProLiant ML330 G6, Xeon E5506 2.13-GHz, 16GB ECC DDR3, Digital Devices MaxS8, Samsung 840 EVO 120GB, 4x WD Red WD30EFRX 3TB in HP P410 Raid6, Zotac GT730 1GB

  • parse.cpp: In Elementfunktion »bool cParse::FetchSeasonEpisode(const char*, const char*, const char*, int&, int&)«:
    parse.cpp:128:15: Fehler: Typumwandlung von »iconv_t {aka void*}« nach »int« verliert Genauigkeit [-fpermissive]

    Probier mal in parse.cpp Zeile 128 folgendes:

    Code
    if (conv==(iconv_t) -1) return false;


    Gruß


    Joe_D

  • Zitat

    Probier mal in parse.cpp Zeile 128 folgendes:

    Code
    if (conv==(iconv_t) -1) return false;

    Danke! Mit dieser Änderung kompiliert das Plugin.


    MfG
    wino


    Edit:
    Wird #include <curl/types.h> benötigt? Types.h gibt es bei Archlinux (curl) nicht.

    MSI H55M-E33 |Intel Core i3 530| 4 GB RAM | TT DVB-S2 6400 | Ubuntu 12.04 | Kernel-3.5.0-28 | VDR-2.2.0 | v4l-dvb| eigene Distri.
    ProLaint: Ubuntu Server 12.04.5 auf HP ProLiant ML330 G6, Xeon E5506 2.13-GHz, 16GB ECC DDR3, Digital Devices MaxS8, Samsung 840 EVO 120GB, 4x WD Red WD30EFRX 3TB in HP P410 Raid6, Zotac GT730 1GB

    Einmal editiert, zuletzt von wino ()

  • Wollte gerade auch Updaten und bekomme mit dem aktuellem GIT-Stand:

    Code
    hdvdr01 xmltv2vdr # make
    make: *** Keine Regel vorhanden, um das Target »debug.h«,
      benötigt von »xmltv2vdr.o«, zu erstellen.  Schluss.

    Ich steh da komplett auf dem Schlauch!

Jetzt mitmachen!

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