Moin!
ZitatHinweis: 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:
und wieder aushängen:
vor dem Aushängen schützen:
und wieder zum Aushängen freigeben:
dynamische Devices auflisten:
mehrere Devices in einem Rutsch einhängen (wichtig sind die Single Quotes, sonst löst die Shell die Wildcards auf!):
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...