vdr-net-monitor + server side cutting

  • Hallo,


    angeregt durch diesen Beitrag habe ich mir den vdr-net-monitor von seahawk1986 erweitert.

    So reagiert das Skript jetzt auf eine weitere Nachricht: 'start-cutting'


    Die Aufnahmen des Servers sind über NFS auf dem Client eingebunden.

    Auf Server muss der vdr-update-monitor laufen.

    Auf Server und Client muss der vdr-net-monitor laufen, um die Updates des Aufnahmen auszulösen.

    Die Erweiterung darf in dieser Form nur auf dem Server vorgenommen werden!



    Wird die Nachricht 'start-cutting' empfangen, wird ein Shell Skript gestartet.

    (Das 'touch /srv/vdr/video/.update' braucht es nur, wenn mehrere Aufnahmen nacheinander abgearbeitet werden sollen, und man möchte das...)

    /usr/lib/vdr/vdr-cutter

    Bash
    #!/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    . /usr/lib/vdr/config-loader.sh
    . /etc/default/vdr
    logger -t vdr-cutter "start cutting ..."
    sudo -u $USER -g $USER find $VIDEO_DIR -name cutme -type f ! -fstype nfs -exec sh -c 'recpath=$(dirname "$1"); rm $1; vdr --filesize=25G --record=/usr/lib/vdr/vdr-recordingaction --edit="$recpath"; touch /srv/vdr/video/.update' _ "{}" \;
    #sudo -u $USER -g $USER  touch $VIDEO_DIR/.update
    logger -t vdr-cutter "... all done."

    Auf Server und Client braucht es noch was zum Senden der Nachricht:

    /usr/bin/trigger-cutting

    Noch ein Wrapper:

    /usr/lib/vdr/mark2cut

    Jetzt können die Aufnahmen vom Server und Client aus markiert werden

    /usr/lib/vdr/reccmds.custom.conf

    Code
    Zum Schneiden markieren: /usr/lib/vdr/mark2cut --mark
    Markieren und Schnitt auf dem Server starten: /usr/lib/vdr/mark2cut --mark-cut
    Schnitt auf dem Server starten: /usr/lib/vdr/mark2cut --cut


    und sollten auf dem Server geschnitten werden.

    Have Fun

    4 Mal editiert, zuletzt von Saman ()

  • Interessante Idee - man könnte GNU find mit https://www.gnu.org/software/f…esystems.html#Filesystems auf ein bestimmtest Dateisystem beschränken - damit sollte es Netzwerkfreigaben bei der Suche überspringen - damit könnte man Aufnahmen auf beliebigen Rechnern zum Schneiden markieren und auf das Signal hin alle beteiligten Rechner prüfen lassen, ob es lokale Aufnahmen zum Scheiden gibt.


    Wenn man den hide-first-recording-level Patch nutzt, kann man auch einfach nur das Verzeichnis VIDEODIR/local durchsuchen lassen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    2 Mal editiert, zuletzt von seahawk1986 () aus folgendem Grund: GNU find kennt den Parameter -fstype local nicht :(

  • Weil ich noch was anders vergessen habe, hatte ich es oben schon mit übernommen aber mit 'local' funktioniert es bei mir leider nicht.

    Mit find -printf %F kann ich auf dem Raspberry aber zwischen ext4 und nfs unterscheiden, von daher sollte es mit -fstype ext4 ja gehen.


    Da bei mir die Aufnahmen ausschliesslich auf dem Server liegen und ich den hide-first-recording-level Patch nur auf den Clienten nutze, brauche ich es aber auch nicht umbedingt.


    Was mir ja noch ein bisschen aufstösst, ist das subprocess.Popen(["/usr/lib/vdr/vdr-cutter"])

    Da gibt es einen Zombie, durch den man dann nicht (so schön einfach) im lifeguard nach vdr-cutter filtern kann.

    Mit Python kenne ich mich nicht so aus, aber kann man da nicht aus der Not eine Tugend machen und den Child-Process im Hintergrund überwachen und dadurch gleich das Update des Video Verzeichnisses auslösen und ihn dann sauber beenden?

  • Das habe ich auch vorhin gemerkt, dass GNU find -fstype local nicht kennt, daher hatte ich den Post oben angepasst.

    Was mir ja noch ein bisschen aufstösst, ist das subprocess.Popen(["/usr/lib/vdr/vdr-cutter"])

    Da gibt es einen Zombie, durch den man dann nicht (so schön einfach) im lifeguard nach vdr-cutter filtern kann.

    Probier es mal so, damit wird das vdr-cutter Skript asynchron im Hintergrund ausgeführt und es wird nicht mehr als eine Instanz gleichzeitig gestartet:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ach ja für Python < 3.5 musst du statt subprocess.run die alte Variante subprocess.call nutzen

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Super, kein Zombie mehr und das mit dem lifeguard funktioniert.

    /etc/vdr/lifeguard.conf

    cmd vdr-cutter Schnitt\ ist\ noch\ aktiv.


    Danke schön!

  • Habe noch mal gesucht und das ! -fstype nfs macht, was wir brauchen :)

  • Ich träume ja immer noch davon das die Funktion remote schneiden irgendwann mit in den vdr wandert :)

    Schaue mir das Script auf jeden Fall an.


    Danke

  • Hallo Lars,


    bestimmt gibt es da noch andere, aber was soll mit denen sein?

    Die Aufnahmen des Servers sind über NFS auf dem Client eingebunden.

    Für das hier angesprochene Szenario ist damit also alles abgedeckt.

    Zur Not akzeptiert find Argumente aber auch mehrfach ! -fstype smbfs ! -fstype cifs ! -fstype nfs.

  • Ich könnte mir vorstellen das generischer zu machen, so dass man eine freie Zuordnung von Befehlen und ausgeführten Skripten in einer Konfigurationsdatei vorgeben kann. Es hat ja nicht jeder so eine klare Trennung von Server und Clients, so dass ein bisschen mehr Flexibilität da nicht schaden kann.


    Für das Playbook könnte man dann eine optionale Rolle für Server und Clients machen, die die Skripte hinzufügt, die Saruman gepostet hat.


    Ich setze es mal auf die TODO-Liste.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

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