Trigger von UPDR auf verbundenen VDRs bei Aufnahmestart auf Server

  • 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):

    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.

    Meine VDR

    VDR-Server: Xeon E-2278G, Debian 12 in QEMU VM, vdr 2.7.3, Digital Devices Max SX8, Plugins: dummydevice 2.0.0, live 3.3.5, iptv 2.4.0 (patched), streamdev 0.6.3, svdrposd 1.0.0, timeserver 1.0, ffmpeg 5.1.5, mplayer (UNKNOWN-12 :) aus Debian 12)

    VDR1/2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, vdr 2.7.3, softhdodroid, svdrpservice, remoteosd, satip, timeserver 1.0, iptv 2.4.0 (patched)
    VDR3: Odroid N2+ mit VDRSternELEC (Testphase)

  • Wie wäre es mit einem touch aus dem post recording hook auf die .update im root Aufnahmeverzeichnis ?

    VDR

    Server: Ubuntu 24.04 headless VDR im LXC Container, Plugins: satip (Octopus NET SL SX8), live, epgsearch, epg2vdr, markad

    Clients: LibreELEC auf RasPi3 und RasPi 3+

  • Wie wäre es mit einem touch aus dem post recording hook auf die .update im root Aufnahmeverzeichnis ?

    Stimmt, die .update Methode gibt es schon sehr lange und am Ende kommt es auf das gleiche raus. Einziger Nachteil mit dem Skript: es muss auf den betroffenen VDRs (normalerweise der Server) eingerichtet werden. Ich fände es elegant, wenn die schon vorhandene Peering-Funktionalität hier etwas erweitert und genutzt wird.

    Meine VDR

    VDR-Server: Xeon E-2278G, Debian 12 in QEMU VM, vdr 2.7.3, Digital Devices Max SX8, Plugins: dummydevice 2.0.0, live 3.3.5, iptv 2.4.0 (patched), streamdev 0.6.3, svdrposd 1.0.0, timeserver 1.0, ffmpeg 5.1.5, mplayer (UNKNOWN-12 :) aus Debian 12)

    VDR1/2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, vdr 2.7.3, softhdodroid, svdrpservice, remoteosd, satip, timeserver 1.0, iptv 2.4.0 (patched)
    VDR3: Odroid N2+ mit VDRSternELEC (Testphase)

  • Wie wäre es mit einem touch aus dem post recording hook auf die .update im root Aufnahmeverzeichnis ?

    So mache ich es auch. Läuft.

    Meine VDRs

    (SatIP Server) --- Kathrein Exip 418 ---

    (Server) --- HW: RPI5 --- SW: RPiOs, VDR 2.7.2 mit streamdev, satip/vtuner-ng, vdrmanager, live, epgsearch, markad ---

    (Client 1+2) --- HW: Radxa Rock 4 Plus - RK3399 --- SW: VDR*ELEC mit softhddevice-drm-gles ---

    (WIP) --- Tanix TX6, RPi5, RPi4, Odroid N2+, WetekPlay2 --- SW: VDR*ELEC mit softhddevice-drm-gles --

  • In meinen Skripts verwende ich auch .update als Trigger.

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte:
    MV_Backup (RSync) | MV_BorgBackup (Borg)

    Skin: Skin FlatPlus  VDR-Add_MSGT

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.3)

    VDR 2.7.3; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    >Systeminfo.txt< [VDR-User #1540]

  • Wäre es nicht sinnvoller das (auch) zu machen, wenn eine Aufnahme beendet wurde ? Eigentlich will man ja erst dann die fertige Aufnahme auf einem anderen Client anschauen.

    VDR

    Server: Ubuntu 24.04 headless VDR im LXC Container, Plugins: satip (Octopus NET SL SX8), live, epgsearch, epg2vdr, markad

    Clients: LibreELEC auf RasPi3 und RasPi 3+

  • Wenn eine Aufnahme startet wird .update getoucht, was bei allen Clients, die das gleiche Video-Directory benutzen, zum Update führt.

    Habe es nochmals ohne Patch getestet. Das "touchen" von .update macht vdr (bei mir 2.6.7) nur, wenn bereits eine .update existiert. --> ohne eine existierende .update triggert vdr selbst auch kein "touch". Ist das so gewollt?

    Verständnisfrage: wird durch das "touchen" durch den VDR Server beim Start der Aufnahme das Aufnahmeverzeichnis durch den Server ebenfalls komplett neu eingelesen?

    Meine VDR

    VDR-Server: Xeon E-2278G, Debian 12 in QEMU VM, vdr 2.7.3, Digital Devices Max SX8, Plugins: dummydevice 2.0.0, live 3.3.5, iptv 2.4.0 (patched), streamdev 0.6.3, svdrposd 1.0.0, timeserver 1.0, ffmpeg 5.1.5, mplayer (UNKNOWN-12 :) aus Debian 12)

    VDR1/2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, vdr 2.7.3, softhdodroid, svdrpservice, remoteosd, satip, timeserver 1.0, iptv 2.4.0 (patched)
    VDR3: Odroid N2+ mit VDRSternELEC (Testphase)

  • Verständnisfrage: wird durch das "touchen" durch den VDR Server beim Start der Aufnahme das Aufnahmeverzeichnis durch den Server ebenfalls komplett neu eingelesen?

    Nein:

    Code
    void cRecordings::TouchUpdate(void)
    {
      bool needsUpdate = NeedsUpdate();
      TouchFile(UpdateFileName());
      if (!needsUpdate)
         lastUpdate = time(NULL); // make sure we don't trigger ourselves
    }
  • Ok, dann ist die Funktion as intended - man sollte nur (was ich nicht gemacht habe) zuvor eine .update anlegen. Dann greift der Mechanismus, benötige kein recordings-script und ich kann auf den Patch verzichten. :thumbup:

    Meine VDR

    VDR-Server: Xeon E-2278G, Debian 12 in QEMU VM, vdr 2.7.3, Digital Devices Max SX8, Plugins: dummydevice 2.0.0, live 3.3.5, iptv 2.4.0 (patched), streamdev 0.6.3, svdrposd 1.0.0, timeserver 1.0, ffmpeg 5.1.5, mplayer (UNKNOWN-12 :) aus Debian 12)

    VDR1/2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, vdr 2.7.3, softhdodroid, svdrpservice, remoteosd, satip, timeserver 1.0, iptv 2.4.0 (patched)
    VDR3: Odroid N2+ mit VDRSternELEC (Testphase)

  • Aus dem Bauch heraus hätte ich jetzt glatt gesagt, dass die .update-Datei automatisch angelegt wird. Aber in vdr.1 steht tatsächlich:

    Code
           .update
                  If this file is present in the video directory, its last  modification
                  time  will  be  used to trigger an update of the list of recordings in
                  the "Recordings" menu.

    Nach zwanzig Jahren kann man sowas schon mal vergessen ;-).

    Ich würde sagen, sie sollte auf jeden Fall automatisch angelegt werden. Da dürfte kaum etwas dagegen sprechen.

  • Andererseits müssen die Verzeichnisse von Client / Server ja nicht identisch sein.

    Z.b. kann der Client ein Verzeichnis für lokale Aufnahmen haben, von dem dann ein Softlink zum Server-Verzeichnis ist.

    Von daher wäre die Lösung von mrjoe besser als das .update.

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Das gab es schon mal:

    wurde aber hier wieder entfernt.

    Die Funktion BroadcastSVDRPCommand() gibt es aber noch, die könnte mrjoe direkt verwenden. Wobei sein Ansatz nur beim Start einer Aufnahme greift. Wenn dies aber parallel zu .update wirken soll, wäre wohl die TouchUpdate() Funktion der zentralere Ort.

    Leider weiß ich nicht mehr, wie sich das mit dem "too fast" ausgewirkt hat. Das müsste mal jemand untersuchen, bevor wir das wieder einbauen.

  • Die Funktion BroadcastSVDRPCommand() gibt es aber noch, die könnte mrjoe direkt verwenden. Wobei sein Ansatz nur beim Start einer Aufnahme greift. Wenn dies aber parallel zu .update wirken soll, wäre wohl die TouchUpdate() Funktion der zentralere Ort.

    Leider weiß ich nicht mehr, wie sich das mit dem "too fast" ausgewirkt hat. Das müsste mal jemand untersuchen, bevor wir das wieder einbauen.

    Du meinst das

    Code
    BroadcastSVDRPCommand("UPDR");

    in die Funktion cRecordings::TouchUpdate(void) einzubauen? Kann ich gerne machen und testen.

    Meine VDR

    VDR-Server: Xeon E-2278G, Debian 12 in QEMU VM, vdr 2.7.3, Digital Devices Max SX8, Plugins: dummydevice 2.0.0, live 3.3.5, iptv 2.4.0 (patched), streamdev 0.6.3, svdrposd 1.0.0, timeserver 1.0, ffmpeg 5.1.5, mplayer (UNKNOWN-12 :) aus Debian 12)

    VDR1/2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, vdr 2.7.3, softhdodroid, svdrpservice, remoteosd, satip, timeserver 1.0, iptv 2.4.0 (patched)
    VDR3: Odroid N2+ mit VDRSternELEC (Testphase)

  • Sorry für die späte Rückmeldung, kam erst jetzt dazu. Testaufbau:

    • VDR Server Version 2.6.7 ungepatcht
    • VDR Client 1 Version 2.6.9 ungepatcht
    • VDR Client 2 Version 2.6.9 ungepatcht
    • .update aus dem Aufnahmeverzeichnis gelöscht

    Tests:

    1. Timer programmiert via Live auf dem VDR Server. VDR Server nimmt auf, Aufnahme ist sichtbar in der Live Aufnahmeübersicht, Clients sehen die neue Aufnahme nicht (erklärbar, da .update fehlt und diese nicht bei Bedarf angelegt wird; kein Triggern von UPDR)

    2. Änderungen aus dem diff von dir am VDR Server händisch übernommen (aufgrund des Versionssprungs passte der diff nicht mehr ganz). VDR am Server neu gestartet. Beide Clients haben direkt auf den discover-Broadcast reagiert und sich somit registriert. Eine Aufnahme programmiert. Aufnahme taucht bei beiden auf.

    3. 4 Aufnahmen mit gleichem Startzeitpunkt programmiert. Auf beiden Clients wurde 4 Mal der video directory scanner thread gestartet und beendet. Aufnahmen waren bei beiden Clients sichtbar.

    Ergebnis: grundsätzlich funktioniert der UPDR Broadcast. Zwei Fehlerfälle könnte ich mir aber vorstellen:

    • was passiert, wenn ein video directory scanner thread läuft und dann zusätzlich nochmals ein UPDR per SVDRP getriggert wird (mein Videoverzeichnis ist dazu zu klein, eventuell hat einer hier im Forum etwas mehr Aufnahmen um das mal zu testen)
    • was passiert, wenn SVDRP am Client gerade durch (etwas anderes) belegt ist --> vermutlich verpasst dieser Client dann das UPDR. War das der damals beobachtete Fehler?

    Auch ohne die Antwort auf die 2 Fehlerfälle spricht doch dennoch nichts gegen die Aufnahme des Broadcast-Befehls, oder? Eventuell müsste man den ersten Fehlerfall noch prüfen und u.U. ein Neueinlesen starten oder den Request schedulen. Neueinlesen starten ist vermutlich die einfachere Umsetzung.

    Ich lasse bei mir den Broadcast-Patch mal drin und werde weiter beobachten. Wobei mehr "Stress" als 4 Aufnahmen parallel kann ich mir nicht vorstellen...

    Meine VDR

    VDR-Server: Xeon E-2278G, Debian 12 in QEMU VM, vdr 2.7.3, Digital Devices Max SX8, Plugins: dummydevice 2.0.0, live 3.3.5, iptv 2.4.0 (patched), streamdev 0.6.3, svdrposd 1.0.0, timeserver 1.0, ffmpeg 5.1.5, mplayer (UNKNOWN-12 :) aus Debian 12)

    VDR1/2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, vdr 2.7.3, softhdodroid, svdrpservice, remoteosd, satip, timeserver 1.0, iptv 2.4.0 (patched)
    VDR3: Odroid N2+ mit VDRSternELEC (Testphase)

  • Das wäre kontraproduktiv :(

    Sehe ich auch so. Es sollte nur dann geschehen, wenn der Client das gleiche Video-Verzeichnis benutzt wie der Server, und da sind wir wieder bei der .update-Datei. Ich werde es so ändern, dass sie automatisch angelegt wird, dann sollte das künftig kein Problem mehr sein.

Participate now!

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