Neverending EPG scan?

  • Wobei es eigentlich viel cooler wäre das über einen "magischen" Trenner in der channels.conf, anstelle der Kanalnummer, zu regeln, fällt mir gerade ein.

    Wie schon gesagt beschäftige ich mich beruflich mit HMI-Schnittstellen und sowas ist natürlich "der Burner"... Ein Eintrag der nichtmal über das OSD gesetzt werden kann macht "irgendwelche" Sachen... Da bevorzuge ich (m)eine Simple "gib eine Kanalnummer ein"-Lösung. ;)

    Ein Traum wäre, wenn man die Kanalgruppen jetzt auch aus dem Menü heraus bearbeiten könnte..

    Ui, jetzt hatte ich 10 Jahre VDR-Abstinenz und manche Menüs im Vanilla VDR (Kanäle, Einstellungen EPG) sehen immer noch wie damals aus. Selbst der von mir 2010 gepimpte MainMenuHooks-patch ist nach 14 Jahren in keinster weise enthalten - also auch nicht "in besser". Einerseits toll, als "alter Sack" findet man sich gleich wieder zurecht, andererseits erschreckend: Keine Entwicklung in diesen Punkten in einer Zeitspanne die für Programme ja wie Jahrhunderte sind? :sleeping:

    Leider habe ich keine Zeit um auch noch Kanalgruppen aus dem Menü heraus bearbeitbar zu machen. :huh:

    aus welchen gruenden werden in der channels.conf eigentlich alle

    schrottsender gesammelt? macht das sinn?

    Aus purer Faulheit bzw. Bequemlichkeit. Letztens kamen die Sender "Crime Time" und "Just Cooking" hinzu. Was ist denn nun die "einfache Art" das in den VDR zu kriegen wenn "neue Transponder hinzufügen" aus ist?

    • Irgendwo im Internet nach irgendwelchen Listen und Parameter suchen und die manuell einklopfen? Darauf hoffen nirgends einen Fehler gemacht zu haben? Und darauf hoffen das auch alle Parameter angegeben waren und zwar so das man diese auch in die richtigen Felder eingeben hat?
    • Temporär "neue Transponder hinzufügen" oder "neue Kanäle hinzufügen" anschalten, warten bis der Kanal erscheint, Option wieder ausschalten, Kanalliste wieder "schön" machen?
    • Alles per Kommandozeile machen, wer braucht schon ein OSD?

    Bei mir läuft das so ab, wenn ich von einem neuen Sender erfahre:

    • Durchsuche per OSD den Bereich mit den Schrottsendern
    • Erstmal draufschalten und EPG sichten
    • Wenn für akzeptabel befunden in den Bereich mit den guten Sendern verschieben ansonsten belassen

    Kein ssh, kein vdr stoppen, kein Gepfrimel an der channels.conf... :thumbup:


    Favoriten-Kanalliste für den alltäglichen Gebrauch und eine "Sammel-Kanalliste" im Hintergrund mit der Möglichkeit der "Markierung" von Sendern.

    Selbst wenn ich nochmal 10 Jahre in Tiefschlaf "verfalle" wird es das bis dahin nicht geben, wetten? :sleeping:




    Der "litescan patch" ist meiner Meinung nach Super-Invasiv, ersetzt mit seinen #ifdefs komplett das Standard-Verhalten und hat (wieder mal) Optionen bei denen "kein Mensch" weiß wie die funktionieren, bzw. wo man wieder ein "Handbuch" braucht um zu wissen was da nun passiert. Zum Beispiel EPGScanMaxDevices vs. EPGScanMaxBusyDevices, verstehe ich nicht :/ Ist EPGScanMode = Disabled sinnvoll? :/

    Also ich stelle mir das so vor vorhandene Optionen zu ergänzen:

    • EPGScanMaxChannel 0 (default) - Angabe der höchsten Kanalnummer deren Transponder für den EPG-Scan verwendet werden oder bei 0 = alle Kanäle
    • EPGScanWithPause true/false (default) - Bei false das ganz normale Verhalten ständig EPG-Scans zu machen (wenn möglich) bei true mit einer Pausenzeit
    • EPGScanTimeout 5 (default) - Startet bei Einzeltuner-Systemen nach einer Inaktivitätszeit den EPG-Scan auf dem Ausgabedevice. Der gleiche Parameter könnte genutzt werden um bei Mehrtuner-Systemen die Pausenzeit des EPG-Scans anzugeben wenn EPGScanWithPause auf true steht. Also wenn ich das auf 1h stelle wird nach einem kompletten Scan eine Stunde gewartet bis der nächste gestartet wird.
      Bei Einzeltuner-Systemen funktioniert der Parameter ja schon wie eine Pausenzeit. Ich darf 5h nix machen erst dann wird der EPG-Scan gestartet..

    Fertig! Nicht mehr und nicht weniger. Bei meinem vtuner SAT>IP System würde ich den ersten Parameter auf 100 stellen, den zweiten auf true und den dritten z.B. auf 2. Dann wäre bei mir so ein EPG-Scan von 30 Transpondern mit 3 Tunern in 3-4 Minuten durch und würde dann die drei Tuner wieder freigeben (muss ich noch in vtuner reinprogrammieren). Nach einer Pause von 115 Minuten wäre dann der nächste komplette Scan dran.

    Absolut optional, weil ich das für schwierig halte bei gemischten Systemen DVBC/DVBS/DVBT umzusetzen wäre:

    • EPGScanMaxDevices 0 (default) - Angabe wie viele Devices für einen Scan verwendet werden 0 = alle nicht für Ausgabe und Aufnahme verwendeten. >0 ... tja... 1 für jedes System? Oder doch nur 1. Und dann welches? Oder eben doch auch 2 bei DVBS/DVBT.. Ähhh... :P
  • Joe_D

    Dein Patch und ein Separator bei 1000, damit der ganze Müll dahinter landet wäre aber ja schon einmal ein Anfang...


    "Wenn das Beste nicht möglich ist, ist das Mögliche das Beste!"

  • Na ja, wer denn dringend Bedarf hat, kann die passenden Schnittstellen in VDR verwenden.

    Code
    DeviceProvidesEIT


    Einfach das Plugin erstellen, was dem persönlichen Gusto entspricht und fertig.

  • Einfach das Plugin erstellen, was dem persönlichen Gusto entspricht und fertig.

    Oh, schon wieder so ein für mich geliebter "wirbel-Einzeiler-Vorschlag" - dein letzter "ist-doch-alles-easy-Vorschlag" blieb leider unbeantwortet...


    Ich hoffe Du kaperst mir auch diesen Thread nicht mit Einzeilern. Wenn es so einfach ist, warum hat's bis jetzt keiner gemacht? Keine ernst gemeinte Frage. Weil die Schnittstelle auf ein Device geht und nur indirekt in den EITScanner.


    Mein Patch verkleinert die scanList im EITScanner. Wie schafft das der DeviceHook? Keine ernst gemeinte Frage. Antwort: Gar nicht.

    Somit landet jeder Transponder in der scanList. Das bedeutet die scanList wird immer dutzende bis hunderte Einträge enthalten.


    Zudem: Warum sollte ich mir dermaßen Aufwand mit einer Schnittstelle machen die erschaffen wurde Devices vom EPG-Scan komplett auszuschließen.


    Wenn die Aufgabe lautet: Scan-Umfang begrenzen, Scan-Zeit begrenzen? (Keine ernst gemeinte Frage).

    Mit einem Hammer geht 'ne Schraube auch irgendwie rein, trotzdem ist das nicht die beste Methode.

  • Hmm, ich denke wir werden definitiv keine Freunde mehr. @ Joe_D

    Du sägst mir den letzten Nerv ab. Lass mich mich bitte in Ruhe..

    Mach du deins, ich mach meins. Ich geh dir aus dem Weg.


    Falls ich irgendwann mal den Fehler machen sollte, dir aus VERSEHEN zu antworten, bitte ignorier mich.






    Zum Thema zurück..........


    class cDeviceHook : public cListObject {

    public:

    cDeviceHook(void);

    ///< Creates a new device hook object.

    ///< Do not delete this object - it will be automatically deleted when the

    ///< program ends.

    virtual bool DeviceProvidesTransponder(const cDevice *Device, const cChannel *Channel) const;

    ///< Returns true if the given Device can provide the given Channel's transponder.

    virtual bool DeviceProvidesEIT(const cDevice *Device) const;

    ///< Returns true if the given Device can provide EIT data.

    };







    Du kannst jedem device erlauben, EPG zu empfangen oder eben auch nicht.




    Probier es oder halt bitte die Klappe.

  • Ich bin da raus. Macht nur Ärger.

  • Wenn ich diese Schnittstelle richtig verstehe, dann kann man damit aber doch nur einem Device verbieten EPG bereitzustellen? Also alles oder gar nichts und nicht wie geplant ab einer gewissen Kanalnummer.

  • Du sägst mir den letzten Nerv ab. Lass mich mich bitte in Ruhe..

    Äh, Du hast hier ungefragt eine "einfache Lösung" präsentiert bei der ich denke, das das nicht so einfach sein kann und schreibst als 6-Sterne General als ob Dir keiner das Wasser reichen könnte... :rolleyes:

    Zum Thema zurück..........
    Du kannst jedem device erlauben, EPG zu empfangen oder eben auch nicht.

    Wie sagte damals meine Deutsch-Lehrerin: Thema verfehlt! 8o Es geht nicht darum EPG eines Devices zu erlauben, sondern allen Devices nur eine bestimmte Anzahl von Transpondern empfangen zu lassen. Darüberhinaus sollte nach einem Scan eine gewisse Zeit gewartet werden bis zum nächsten Scan.


    Wie diese beiden Anforderungen "einfach" mit DeviceProvidesEIT gemacht werden soll erschließt sich mir aus deinem Copy-Paste des vdr Quellcodes leider nicht. Dafür bin ich zu doof :S


    Probier es oder halt bitte die Klappe.

    Weder noch. 8)

  • >>Wenn ich diese Schnittstelle richtig verstehe, dann kann man damit aber doch nur einem Device verbieten EPG bereitzustellen?


    yep, why not, danke für diese coole Idee. :)


    Mit 8+4+1 devices - da macht das wirklich Sinn. 1800 x epg -> 100 x epg

  • Es geht nicht darum EPG eines Devices zu erlauben, sondern allen Devices nur eine bestimmte Anzahl von Transpondern empfangen zu lassen. Darüberhinaus sollte nach einem Scan eine gewisse Zeit gewartet werden bis zum nächsten Scan.

  • mimi.....



    Jaaa, ich weiß.

    Die Welt ist immer hart und gemein - besonders zu dir. Also nur zu dir.

    Besonders heute.





    Sind wir gerade im Kindergarten????

  • So, fertig :)


    Die EPG-Einstellungen sehen nun so aus:


    Mit "Maximaler Kanal" kann man den EIT-Scan auf Kanäle unterhalb der eingestellten Zahl beschränken.

    Hat man z.B. wie ich über 1200 Kanäle in der channels.conf ergibt das eine interne scanList von 103 Transpondern. Im besten Fall ist so ein Scan auf einem Device ohne Unterbrechungen knapp 35 Minuten unterwegs.


    Bei dem im Screenshot eingestellten Wert reduziert sich bei mir die scanList auf 24 Transponder. Dann braucht der Scan im besten Fall auf einem Device ohne Unterbrechungen noch 8 Minuten.


    Mit "Pause nach Scan" auf "ja" wird nach einem vollständigen Scan die "Zeit bis zur EPG-Aktualisierung" abgewartet bis der nächste Scan erfolgt. Steht der Parameter auf "nein" wird sofort der nächste Scan gestartet (sofern möglich)


    Bei Tests hat das prima funktioniert:

    Code
    <-- testweise mal nur wenige Kanäle -->
    Feb  4 21:44:49 server vdr: [18285] EIT scan: 4 scanList entries
    Feb  4 21:44:49 server vdr: [18285] EIT scan: 4 device 2  source  S19.2E   tp 111361
    Feb  4 21:45:10 server vdr: [18285] EIT scan: 3 device 2  source  S19.2E   tp 111493
    Feb  4 21:45:31 server vdr: [18285] EIT scan: 2 device 2  source  S19.2E   tp 112188
    Feb  4 21:45:52 server vdr: [18285] EIT scan: 1 device 2  source  S19.2E   tp 112545
    <-- hier ist nun die Pause -->
    Feb  4 21:51:13 server vdr: [18285] EIT scan: 4 scanList entries
    Feb  4 21:51:13 server vdr: [18285] EIT scan: 4 device 2  source  S19.2E   tp 111361


    Der angefügte Patch ist für vdr Version 2.6.6


    EDIT: Habe für die v2 noch eine Variable in eitscan.h hinzufügen müssen damit die Erkennung eines gestarteten Scans besser funktioniert. Die oben zu sehenden Logeinträge werden auch mit dieser Version erstellt (zur Prüfung des Verhaltens)

  • Habe mal die Nacht über das Verhalten beobachtet, ist genauso wie gewünscht:


    Mit meiner Begrenzung der zu scannenden Kanäle kommt mein vdr noch auf 24 Transponder. Ich habe für diesen vdr 2 Tuner des SAT>IP-Servers reserviert und eine abgespielte Aufnahme angehalten. Dadurch werden beide Tuner frei und für den EPG Scan verwendet. Nach einem Scan gibt es erstmal die eingestellte, zweistündige Pause.


    In der Ausgabe der Tuner-Belegungen des SAT>IP-Servers sieht man das kein Tuner belegt ist:

    Code
    #1: 1 4 1 1 0 -1 0 0 1 0 0
    #2: 1 4 1 1 0 -1 0 0 0 0 0
    #3: 1 4 1 1 0 -1 0 0 1 0 0
    #4: 1 4 1 1 0 -1 0 0 1 0 0 


    Bis ich die Stop-Taste drücke und das Ausgabedevice wieder Live-Fernsehen anzeigt:

    Code
    #1: 1 4 1 1 0 -1 0 0 1 0 0
    #2: 1 4 1 1 0 -1 0 0 0 0 0
    #3: 1 4 1 1 0 -1 0 0 1 0 0
    #4: 1 4 1 1 1 687 1 1 1 0 27848 0.000Mbps #0 0 0 B82BBBF4 10.15.10.225 45078 26 3985 56610 
  • Ich habe den Patch und die letzte vtuner Version jetzt auf dem Server mit 6 devices am Laufen. Der Scan dauert bei 21 scanlist entries eine gute Minute. Alles sieht soweit gut aus. In meinen Augen ist das eine sinnvolle Ergänzung.


    Nur eine Frage hätte ich: Wenn der EPG-Scan nur mehr über einen bestimmten Bereich läuft, werden dann neue Transponder hinzugefügt und Pids von den Kanälen geändert, die nicht im Bereich liegen?

    Ich habe/hatte in meiner Kanalliste (wie wahrscheinlich viele) durch einen Separator getrennt am Ende den Bereich aller vom VDR automatisch hinzugefügten Kanäle. Beschäftigt sich der VDR dann jetzt überhaupt noch damit?


    EDIT: Ich glaube, ich kann die Frage selbst beantworten: Man muss dafür den EPG Scan manuell anstossen?!

  • So wie ich das sehe werden alle Transponder gescannt, die (mindestens) einen Kanal mit einer Nummer kleiner Setup.EPGScanMaxChannel haben. Liegen auf einem solchen Transponder auch Kanäle mit höheren Nummern, so werden auch für diese Kanäle EPG-Daten gespeichert. Falls das nicht gewollt ist, müsste auch eine entsprechende Änderung in eit.c erfolgen.


    Neue Transponder werden hinzugefügt, wenn sie auf einem Transponder angekündigt werden, der einen Kanal mit einer Nummer kleiner Setup.EPGScanMaxChannel hat (und UpdateChannels auf "add new transponders" steht). Für PIDs gilt entsprechendes.


    Ein manuell angestoßener EPG-Scan verhält sich nicht anders.

  • Liegen auf einem solchen Transponder auch Kanäle mit höheren Nummern, so werden auch für diese Kanäle EPG-Daten gespeichert. Falls das nicht gewollt ist, müsste auch eine entsprechende Änderung in eit.c erfolgen.

    Das ist ja auch ok. Was der EITScanner liest kann er ja auch verarbeiten. Ziel ist ja nicht das EPG ab einer bestimmten Kanalnummer leer zu lassen, sondern gezielt zyklisch nur die Transponder abklappern zu lassen die zu einem Kanal in einem bestimmten Bereich gehören. Wenn man dann auf einen der Kanäle außerhalb des Bereichs schaltet müsste ja das EPG dennoch aktualisiert und eingetragen werden.

    Neue Transponder werden hinzugefügt, wenn sie auf einem Transponder angekündigt werden, der einen Kanal mit einer Nummer kleiner Setup.EPGScanMaxChannel hat (und UpdateChannels auf "add new transponders" steht). Für PIDs gilt entsprechendes.

    Das habe ich dann zu restriktiv gemacht. Ich denke die Einträge aus der cTransponderList die vom NIT-Sectionfilter gesetzt werden muss ich mit einer Ausnahme zur cScanList hinzufügen lassen. Schaue ich mir heute Abend an.

  • Das habe ich dann zu restriktiv gemacht. Ich denke die Einträge aus der cTransponderList die vom NIT-Sectionfilter gesetzt werden muss ich mit einer Ausnahme zur cScanList hinzufügen lassen. Schaue ich mir heute Abend an.

    Ich habe mir das jetzt nochmal genauer angeschaut. Also ich befinde das es so wie ich es in eitscan_vdr266_v2.patch.zip gemacht habe als ausreichend.


    Zur Prüfung ob überhaupt noch Kanäle hinzugefügt werden habe ich noch ein paar Logausgaben hinzugefügt und die Kanalliste von sämtlichen "Schrottkanälen" befreit:


    Hier wird die Transponderliste zur Scanliste hinzugefügt

    Feb 8 11:16:28 server vdr: [11172] EIT scan: merge transponderList


    Die sind alle auf Kanal 0 und werden damit sowieso mitgescannt:

    Feb 8 11:16:28 server vdr: [11172] EIT scan: add channel 0 source S19.2E tp 212670

    [...]

    Feb 8 11:16:28 server vdr: [11172] EIT scan: add channel 0 source S19.2E tp 212611


    Im Anschluss werden nun die Transponder der Kanäle im Bereich < 100 hinzugefügt

    Feb 8 11:16:28 server vdr: [11172] EIT scan: add channel 1 source S19.2E tp 111493

    [...]

    Feb 8 11:16:28 server vdr: [11172] EIT scan: add channel 74 source S19.2E tp 111273


    Ergibt im ersten Scan 56 Einträge:

    Feb 8 11:16:28 server vdr: [11172] EIT scan: 56 scanList entries

    Feb 8 11:16:28 server vdr: [11172] EIT scan: 56 device 2 source S19.2E tp 110832

    [...]

    Feb 8 11:35:43 server vdr: [11172] EIT scan: 1 device 2 source S19.2E tp 212729


    Danach fand ich 446 neue Kanäle in der channels.conf vor.. würde sagen das passt!


    Edit: Im zweiten, manuell angestoßenen Scan wird dann auf 24 Einträge "begrenzt":

    Feb 8 12:17:42 server vdr: [12556] EIT scan: 24 scanList entries

    Feb 8 12:17:42 server vdr: [12556] EIT scan: 24 device 2 source S19.2E tp 110891

  • Hallo Joe_D,

    ich habe den Patch auf einer VDR*ELEC Maschine mit drin und hier bekomme ich schön im Rhythmus

    Code
    Feb 22 22:21:56 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:21:35 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:21:14 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:20:53 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:20:32 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:20:11 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:19:50 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:19:29 odroid vdr[22441]: [22441] EIT scan: 12 scanList entries                                                                Feb 22 22:19:08 odroid vdr[22441]: [22441] EIT scan: 12 scanList enentries

    Der Scan scheint nie anzulaufen. Allerdings habe ich auf dem device weder vtuner, satip oder einen lokalen Stick, sondern nur streamdev. Hat der Patch damit ein Problem?

  • nur streamdev. Hat der Patch damit ein Problem?

    Nö, der Patch hat kein Problem :) Der macht nur zwei Dinge ggü. der Standard-Version: Nimmt optional nicht alle Kanäle und/oder wartet optional nach einem erfolgtem Scan X Stunden. Nicht weniger aber auch nicht mehr...


    Hab' keine Ahnung und Verwendung für streamdev, aber wenn das hier die Sourcen vom streamdev-Device sind... ja dann finde ich das hier nicht:


    Code: device.h
      virtual bool ProvidesEIT(void) const;
             ///< Returns true if this device provides EIT data and thus wants to be tuned
             ///< to the channels it can receive regularly to update the data.
             ///< The default implementation returns false.


    Aber das wäre IMHO halt für den scan nötig:

    Code: eitscan.c
        if (Device && Device->ProvidesEIT()) {

Participate now!

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