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

    Shell-Script
    1. #!/bin/sh
    2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    3. . /usr/lib/vdr/config-loader.sh
    4. . /etc/default/vdr
    5. logger -t vdr-cutter "start cutting ..."
    6. 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' _ "{}" \;
    7. #sudo -u $USER -g $USER touch $VIDEO_DIR/.update
    8. 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
    1. Zum Schneiden markieren: /usr/lib/vdr/mark2cut --mark
    2. Markieren und Schnitt auf dem Server starten: /usr/lib/vdr/mark2cut --mark-cut
    3. Schnitt auf dem Server starten: /usr/lib/vdr/mark2cut --cut


    und sollten auf dem Server geschnitten werden.

    Have Fun

    Dieser Beitrag wurde bereits 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.)

    Dieser Beitrag wurde bereits 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 :)

  • 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.