Das Plugin habe ich für mich geschrieben, weil ich (nicht nur aus dem VDR) Events senden will und andere Systeme auf diese Events reagieren sollen.
Ich habe mir verschiedene Konfigurationen angesehen, u.a. Kafka, ActiveMQ, blazingmq und nein... alles viel zu schwergewichtig und zu kompliziert und im Falle blazingmq ist der Build gewöhnungsbedürftig. Dann bin ich über NATS gestolpert und habe mich spontanverliebt. Extrem leichtgewichtig, kaum Abhängigkeiten und erfüllt alle meine Erwartungen.
Die Homepage des Plugins und die Dokumentation befindet sich auf Github: https://github.com/Zabrimus/vdr-plugin-eventpub.
Zum Plugin:
Aus dem VDR heraus werden messages gesendet (aktuell bisher nur über cStatus generiert), die dann von irgendwelchen Consumern im Netz gelesen und verarbeitet werden können. Dazu muss ein NATS Server (oder in meinem Fall sogar ein Cluster) installiert werden. Die einfache Installation habe ich auf der Homepage des Plugins beschrieben.
Die möglichen Messages haben ein Subject, die von den Consumern gefiltert werden können. Entweder global vdr.> oder nur bestimmte vdr.recording.end.*. Im Setup des Plugins kann eingestellt werden, welche Messages mit welcher TTL (time to live) erzeugt werden sollen. Dazu wird Jetstream zur Persistenz im NATS Server verwendet. So kann ich speichern lassen, wann z.B welcher Timer angelegt/gelöscht wird, welche Aufnahmen wann gestartet und beendet werden - ohne die VDR immer im Auge haben zu müssen. Mein TTL liegt bei 720 Stunden, also kann ich die Aktivitäten über einen Monat lang verfolgen (natürlich nur Timer und Recording, die anderen lasse ich nicht senden).
Es gibt bestimmt eine Begrenzung für die Anzahl der Consumer, wo auch immer diese liegen mag.
vdr.timer.add.VDRNAME
vdr.timer.del.VDRNAME
vdr.channelswitch.VDRNAME
vdr.recording.start.VDRNAME
vdr.recording.stop.VDRNAME
vdr.replay.start.VDRNAME
vdr.replay.stop.VDRNAME
vdr.volume.absolute.VDRNAME
vdr.volume.relative.VDRNAME
vdr.audiotrack.VDRNAME
vdr.audiochennel.VDRNAME
vdr.subtitletrack.VDRNAME
vdr.osdstatusmessage.VDRNAME
vdr.osdchannel.VDRNAME
Display More
Im Verzeichnis nats-receiver befindet sich ein NATS Client, der genutzt werden kann um für bestimmte Subjects ein Script aufzurufen mit allen notwendigen Parametern.
Ich habe 2 völlig getrennte VDR Aufnahmeserver (sowohl Video als auch Timer) und markad in jeweils eigenen Containern. Im Verzeichnis nats-receiver/markad befinden sich ein Beispielscript und eine systemd Unit. Der nats-receiver wurde auf das Subject vdr.recording.stop.* konfiguriert. Und damit wird jetzt markad aufgerufen, sobald eine Aufnahme beendet wurde (unabhängig vom Aufnahmeserver) und die Aufnahmen werden sequentiell der Reihe nach geschnitten.
Für das Gegenstück eventsub überlege ich noch, was sinnvoll ist. Ziel ist eine bessere Vernetzung der VDR und die Möglichkeit auf bestimmte Ereignisse flexibel reagieren zu können oder auch die Konfiguration aller VDR zu vereinfachen. Ich denke da z.B. an den Abgleich der channels.conf in allen VDR.