[ANNOUNCE] das dynamite-Plugin

  • Moin!


    Zitat

    Hinweis: dynamite hat ein Zuhause gefunden, vielen Dank an projects.vdr-developer.org!
    Dort kann nun die aktuelle Entwicklung beobachtet werden, bei gravierenden Neuerungen wird's hier dann aber trotzdem noch einen entsprechenden Hinweis geben.


    Aktuelle Version: dynamite 0.0.8c


    Nachdem mich die Hamburger Abteilung der yaVDRler beim letzten HaVUT belatschert haben, mal was in Richtung Hotpluging zu entwickeln, gibt's jetzt mal erste Ergebnisse:


    Ein neues Plugin! (ach was...)


    Finden könnt ihr es im unstable-vdr PPA von yaVDR oder auch hier am Post.


    HINWEIS: es ist ein UNSTABLE-Repository, also nur auf eigene Verantwortung! Seht selbst nach, ob's da schon fertig ist oder nicht!


    Im Readme steht ein bisschen ausführlicher, wie es funktioniert, aber hier mal eine Kurzanleitung.


    Zuerst muss der vdr gepatcht werden. Ich hab nur einen Patch für vdr 1.7.16 beigepackt, hab aber versucht, ihn so klein wie möglich zu halten, damit er auch auf andere Versionen portierbar ist. Im "patches"-Verzeichnis in den Quellen findet ihr das Passende.


    HINWEIS: Der vdr schließt beim Löschen eines cDvbDevice keine Handles, weil das in seltenen Fällen zu Segfaults führt. Mein Patch macht aber genau dies für alle von dynamite verwalteten cDvbDevices - falls es da also zu Problemen kommt, müssen wir denen auf die Schliche kommen - anders geht's einfach nicht.


    Da liegt auch noch ein Patch für ein anderes Plugin, der demonstriert, wie man ein "Device"-Plugin für dynamite fit macht, damit seine Empfangsgeräte "hotplugable" werden. Da gehört nicht viel dazu und wer schon mal cDvbDeviceProbe gesehen hat, wird da Parallelen erkennen.


    Was beachtet werden muss: (hier hat sich mit 0.0.4i was geändert!)

    • dynamite sollte am besten als letztes Plugin geladen werden.
    • Plugins, die eigene Devices erstellen und nach dynamite geladen werden, werden NICHT funktionieren. Das hängt mit der Funktionsweise von dynamite zusammen - das erklär ich unten.


    Wie es funktioniert
    Das Plugin erstellt so viele Devices, wie noch in den vdr passen (deshalb funktionieren die nachher geladenen Plugins nicht mehr). Diese Devices können erst mal gar nichts - sozusagen ein dummydevice aber für die Empfangsseite. Wird dynamite über SVDRP angewiesen, ein Gerät einzuhängen, wird es innerhalb eines dieser dummydevices eingeklinkt und plötzlich kann dieses dann alles, was sein Subdevice kann.
    Und wird es wieder ausgehängt, wird es einfach gelöscht und schon kann es wieder gar nichts.


    SVDRP-Kommandos (Beispiele)
    Ein Device einhängen:

    Code
    ATTD /dev/dvb/adapter1/frontend0


    und wieder aushängen:

    Code
    DETD /dev/dvb/adapter1/frontend0


    vor dem Aushängen schützen:

    Code
    LCKD /dev/dvb/adapter1/frontend0


    und wieder zum Aushängen freigeben:

    Code
    UNLD /dev/dvb/adapter1/frontend0


    dynamische Devices auflisten:

    Code
    LSTD


    mehrere Devices in einem Rutsch einhängen (wichtig sind die Single Quotes, sonst löst die Shell die Wildcards auf!):

    Code
    SCND '/dev/dvb/adapter*/frontend*'


    alles natürlich mit "plug dynamite" davor...


    ACHTUNG: Devices mit Receivern mit Priorität > 0 können nicht ausgehängt werden! Das sollte Abbrüchen von Aufnahmen usw. verhindern, aber eine Garantie gebe ich nicht...


    Der Plan ist, dass das Plugin von alleine auf angesteckte USB-DVB-Sticks reagiert (und auch auf plötzlich abgezogene). Aber bis das soweit ist, kann's noch ein wenig dauern, da weiß ich nämlich noch nicht viel drüber...


    Es gibt auch noch keine Steuerungsmöglichkeit über das OSD - das steht auch noch auf der TODO-Liste. Bisher gibt es nur die SVDRP-Kommandos, weil das erste Ziel ist, den Start von vdr beim Booten zu beschleunigen und nachträglich die DVB-Sticks, die zu langsam sind, dem vdr noch bekannt zu machen - und das kann auch ein externes upstart-Script oder so, das bleibt erst mal jedem selbst überlassen.


    So, mehr fällt mir jetzt nicht ein, lest selbst in den Quellen, so umfangreich sind die gar nicht... ;)


    Viel Spaß!
    wünscht Lars


    P.S.: Ach ja, ich übernehme keine Garantie für verpasste Aufnahmen, schiefen Haussegen und andere Dinge, die mit dem Plugin in Verbindung stehen oder auch nicht... ;)


    EDIT: Neue Version 0.0.4b - "receiving"-devices mit einer Priorität > 0 werden nicht ausgehängt.
    EDIT2: Neue Version 0.0.4c - Devices können vor versehentlichem Aushängen geschützt werden.
    EDIT3: Neue Version 0.0.4d - Anpassungen an benutzte Patches von yaVDR - neue virtuelle Methoden in device.h des vdr müssen in dynamite nachgepflegt werden.
    EDIT4: Neue Version 0.0.4i - die scheint jetzt auch mit verschlüsselten Kanälen zurecht zu kommen. Da gab's vorher noch Kraut und Rüben, weil ich so gar nichts über die interne CAM/CamSlot-Verarbeitung im vdr wusste. Da musste noch ein wenig rumgepanscht werden...
    EDIT5: Neue Version 0.0.4j - nach dem Detach hält der vdr nun endgültig keine Handles mehr auf dem DVB-Device offen (hoffentlich). Es müsste sich jetzt also z.B. der Treiber neu laden lassen, falls man eine zickige Karte hat.
    EDIT6: Neue Version 0.0.5 - es ist ein bisschen udev drin. Taucht ein neues Frontend im System auf, wird es automatisch in den vdr eingebunden. Um zu gucken, was da so udev-mäßig abgeht, gibt's den Parameter "dynamite --log-udev" auf der vdr-Kommandozeile.
    EDIT7: Neue Version 0.0.5b - In der setup.conf lässt sich nun ein Defaultwert für das Timeout des automatischen Aushängens hinterlegen (z.B. dynamite.DefaultGetTSTimeout = 10). Das udev-Zeugs sieht jetzt auch etwas schöner aus.
    EDIT8: Neue Version 0.0.5c: Da war ein kleiner Fehler im Makefile...

  • Endlich! Plug and Play für den VDR! Wer hätte das zu glauben gewagt.
    Vielen Dank vom yaVDR-Team. Tolle Arbeit.


    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

  • Und jetzt... kersten go4it!


    DANKE!

    VDR1: POV ION 330 mit Media-Pointer MP-S2 auf yaVDR 0.3.1 - enermay 370 Watt - 80GB SSD + 500GB HD - CoolerMaster ATX-620 - VGA2Scart + HDMI
    VDR2: Zotak ZBOX ID40 auf yaVDR unstable - Sundtek DVB-S2 + remote Sundtek - 60GB SSD - HDMI
    VDR3
    : Zotak ZBOX ID40 auf yaVDR unstable - remote Sundtek - 500GB HD - DVI
    Atom 2700 mit 13W, Ubuntu PP, 60GB SDD + 240GB SSD, 2x Sundtek DVB-S2

  • Sehr schön, ein Lichblick das ganze in Zukunft flexibler handhaben zu können. Vielen Dank ! Ich bin immernoch ganz baff wie schnell das jetzt kam :)


    Ich sag nur:
    :strike1 :strike1 :strike1 :strike1 :strike1 :strike1 :strike1 :strike1 :strike1 :strike1 :strike1
    :D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D

    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

  • endlich wird der vdr zeitgemäßer. mini ich hab da noch paar sachen den du dich annehmen könntest ^^ aber mach erstmal das ding. als autoerkennung würde ich udev und dbus gut finden.

    mfg traxanos
    ____________________
    Ist das neu?, Nein Linux!


    VDR1: Zotac NM10-ITX Wifi - 2GB Ram - S2-6400 HD mit IR - yavdr 0.4 (development) - LianLi PC-Q11


    Tags: VDR-HD - AT5IONT-I - 4GB Ram - 512MB ION - TT 3600 DVB-S2 - TT6400-FF - Sundtek DVB-S2 Sundtek DVB-C - Tevii S480 (dank an L4M für kostenlose Bereitstellung) - yaVDR 0.5 (development) - SKY - HD+ - Atric - X10 FB - Zotac ID41 PLUS - SilverStone LC19B-R - Yamaha RX-V671 - Samsung 8Series 55"

  • Moin!


    Vielen Dank für die Lorbeeren, aber ohne eure Unterstützung und Hartnäckigkeit wär's wohl nicht passiert... :)
    Und außerdem sind da noch ganz viele Bugs drin versteckt, wie immer... Es gibt z.B. noch gar kein vernünftiges Locking usw., da mach ich mich als nächstes dran.
    Und über das OSD sollte man zumindest Karten rausschmeißen können.
    Und und und...


    Mal sehen, was passiert.


    Lars.

  • Was passiert mit Plugins die einen Receiver auf einem device haben und diesen


    a) nicht verlieren wollen/dürfen
    b) gibt einen Mechanismus, der verhindert, dass ein device was in Benutzung ist nicht deaktiviert wird?

  • Moin!


    Zitat

    Original von wirbel
    Was passiert mit Plugins die einen Receiver auf einem device haben und diesen


    a) nicht verlieren wollen/dürfen
    b) gibt einen Mechanismus, der verhindert, dass ein device was in Benutzung ist nicht deaktiviert wird?


    Nein, ein "LockDevice" oder so gibt's noch nicht - da sitze ich gerade dran...
    Denkbar wäre auch, dass dynamite versucht, die Receiver loszuwerden und wenn's nicht klappt, dann eben das Device nicht auszuhängen.


    Bin da nämlich gerade am probieren: vlc per streamdev und dann den DVB-Stick detachen - ist keine gute Idee. ;) Mal sehen, was ich da für Möglichkeiten habe, das mitzukriegen und darauf zu reagieren.
    Das Plugin ist ja erst wenige Tage alt, ich sammel gerne Wünsche und Vorschläge.


    Lars.

  • wirbelscan und den Receiver aushängen wär auch keine gute Idee.


    Oder osdteletext, ..., ...



    Oder Plugins, die einmal nach einem Device Handle fragen und später nicht wieder, in der Annahme dieses existiert noch.

  • Moin!


    Zitat

    Original von wirbel
    wirbelscan und den Receiver aushängen wär auch keine gute Idee.


    Oder osdteletext, ..., ...


    Hat ein Device einen Receiver mit einer Priorität > 0, wird's jetzt erst mal nicht mehr ausgehängt, das ist schon mal ein erster Kompromiss.
    Neue Version 0.0.4b ist im ersten Beitrag verlinkt.


    Zitat


    Oder Plugins, die einmal nach einem Device Handle fragen und später nicht wieder, in der Annahme dieses existiert noch.


    Hast du da ein Beispiel?
    Wenn ein Plugin sich einen Pointer aus dem vdr-device-Array holt, ist das kein Problem - die bleiben bestehen. Es kann nur sein, dass das Device plötzlich nichts mehr empfangen kann. Darauf sollte ein Plugin vorbereitet sein.


    Lars.

  • wirbelscan z.B.


    Ich kann nicht ~500 mal jedesmal nach nem neuen geeigneten device fragen, da ich das device nach bestimmten Gesichtspunkten auswähle.


    Jedesmal, wenn wirbelscan auf einen neuen Transponder getuned wird, muss der Receiver auch abgeworfen werden, d.h. es gibt für einen kurzen Augenblick zwischendurch keinen Receiver. Dein ANsatz mit der Priorität ist richtig, aber keine 100% Lösung.

  • wirbel: Du hast natürlich völlig recht, aber wenn einer einen Scan macht und gleichzeitig den USB-Tuner aus stöpselt, ist der dann nicht ein bisschen selber schuld? Ich meine ohne das Plugin würde das doch auch nicht gehen, also von einer Verschlechterung reden wir doch nicht, oder?


    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 habs noch nicht probiert. Aber das Plugin greift tief in VDRs Logik ein.

  • Zitat

    Original von wirbel
    Ich habs noch nicht probiert. Aber das Plugin greift tief in VDRs Logik ein.


    Das muss es ja auch, anders geht es nun mal nicht.


    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

  • Moin Moin,


    auch von meiner Seite erstmal Glückwünsche und vielen Dank für Deinen Einsatz. Ich bin noch nicht zum Testen gekommen, da ich derzeit zu viele andere Baustellen habe.


    Ich denke der wichtigste Einsatzzweck, über den wir auf dem letzten HaVUT sprachen, ist so schon realisierbar: Devices, deren Initialisierung sehr lange dauern, können nach dem vdr-Start (per Script oder Befehleintrag im Menü) hinzugefügt werden. Im Normalfall bleiben diese dann auch verfügbar, solange vdr läuft.


    Es gibt allerdings auch einen denkbaren Anwendungsfall, wo dynamite in der Tat ständig das device detachen und attachen müsste. Und zwar wenn ich ein Hybrid device habe, das nur wahlweise DVB oder analog erlaubt. Oder nur wahlweise DVB-C oder DVB-T. Dann müsste im Prinzip bei jedem Kanalwechsel von DVB zu analog erstmal das DVB device detached werden und das analoge pvrinput-device attached werden. Und das sollte vorzugsweise automatisch erfolgen, ohne dass der User manuell SVDRP-Kommandos vor dem Kanalwechsel absetzen muss. Das ist sicherlich deutlich aufwändiger, sollte aber als mögliche Anforderung für das "Pflichtenheft" im Hinterkopf bleiben.


    Gruß
    Dr. Seltsam

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Besser wäre, dass vdr in dem Falle unterschiedliche devices sieht.

  • Zitat

    Original von wirbel
    Besser wäre, dass vdr in dem Falle unterschiedliche devices sieht.


    ändert aber nichts daran, dass immer nur entweder das dvb-device oder das video device geöffnet sein darf. Und da vdr bei "seinen" devices den filedecriptor offenhält, geht es nur über dynamite. Wobei ich jetzt nicht nachgesehen habe, ob dynamite bei einem detach auch den filescriptor schließt.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

Jetzt mitmachen!

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