Hi,
vielleicht löse ich auch ein schon bereits gelöstes Problem.
Ich habe mehrere vdr-Clients mit einem vdr-Server verbunden. An dem Server ist eine große Festplatte angeschlossen und die Aufnahmen (egal von wo programmiert) sollen durch den Server auf der Server-Festplatte gemacht werden. Funktioniert prima. Leider erkennt der vdr-Client aber nicht von alleine, dass es eine neue Aufnahme gibt und liest deshalb das Aufnahmeverzeichnis nicht neu ein. Hier setzt meine Idee an: sobald eine Aufnahme gestartet wird, wird an alle verbundenen Clients das SVDRP-Kommando UPDR gesendet. Hier mein Patch für den Server (client-seitig muss ja nichts gemacht werden):
diff -Naur vdr-2.6.7/recorder.c vdr/recorder.c
--- vdr-2.6.7/recorder.c 2024-07-23 18:51:28.700000000 +0200
+++ vdr/recorder.c 2024-07-23 20:08:54.588000000 +0200
@@ -9,6 +9,7 @@
#include "recorder.h"
#include "shutdown.h"
+#include "svdrp.h"
#define RECORDERBUFSIZE (MEGABYTE(20) / TS_SIZE * TS_SIZE) // multiple of TS_SIZE
@@ -338,6 +339,17 @@
}
InfoWritten = true;
cRecordingUserCommand::InvokeCommand(RUC_STARTRECORDING, recordingName);
+ // trigger UPDR on each client
+ cStringList cSvdrpClients;
+ cStringList cSvdrpResponse;
+ if (GetSVDRPServerNames(&cSvdrpClients)) {
+ for (int i = 0; i<cSvdrpClients.Size(); i++) {
+ if (char *s = cSvdrpClients[i]) {
+ dsyslog("New recording: Trigger Client %d: %s", i, s);
+ ExecSVDRPCommand(s, "UPDR", &cSvdrpResponse);
+ }
+ }
+ }
frameChecker->SetFrameDelta(PTSTICKS / frameDetector->FramesPerSecond());
}
if (firstIframeSeen || frameDetector->IndependentFrame()) {
Display More
Dazu zwei Fragen: gab es hierzu schon eine elegante(re) Lösung und/oder spricht etwas gegen den Patch? Wenn man die Funktionalität im Menü noch ein-/ausschaltbar macht, wäre es vielleicht auch etwas für den offiziellen vdr.