[gelöst] Externalplayer+Mplayer -> Prozessproblem beim Beenden (Zombies, Kindprozess läuft weiter)

  • Hallo,


    ich würde gern einen Radiostream auf dem VDR anhören. Dies klappt mit dem IPTV-Plugin leider nur recht schlecht und dort gibt es ebenfalls Probleme mit dem Beenden der Prozesse im Zusammenhang mit dem EPG-Hintergrundscan.


    Derzeit teste ich folgende Lösung, die rein vom Abspielen einwandfrei funktioniert:
    Externalplayer-Plugin mit dem Mplayer in folgender Konfiguration:


    externalplayer.conf

    radio-rsa.sh:

    Bash
    #!/bin/bash
    
    
    OPT="-prefer-ipv4 -ao alsa:device=hdmi -vo xv -autosync 2 "
    cache="190"
    token=`wget -q -O - http://edge.download.newmedia.nacamar.net/sltokens/stream-radio-player.php?stream=rsa-sachsen/livestream.wma | grep 'var token'|cut -d'"' -f2|head -1`
    
    
    stream="mms://62.26.161.89/rsa-sachsen\$livestream.wma?token=$token"
    mplayer $OPT -cache $cache $stream


    Nun zum Problem:


    Wird der Mplayer per FB über den Slavemodus beendet, klappt alles einwandfrei. Gerne hätte ich jedoch die obige Option: BlockMenu in externalplayer.conf deaktiviert, so dass man das VDR-Menü aufrufen kann und auf "Wiedergabe beenden" gehen kann.


    Sofern ich jedoch die Wiedergabe per VDR-Menü beende, passiert folgendes:
    radio-rsa.sh wird beendet, der mplayer läuft jedoch mit 2 Prozessen (1 Vater, 1 Kind) weiter und in diesem Moment läuft durch das Beenden der VDR parallel mit.


    Wieso wird der mplayer als Kindprozess von radio-rsa.sh nicht mit beendet? Jegliche Versuche mit traps in radio-rsa.sh funktionieren einfach nicht :( (werden erst gar nicht ausgeführt).


    Wenn ich den mplayer in radio-rsa.sh mit exec aufrufe, wird beim Start das Skript radio-rsa.sh beendet und der mplayer bekommt die PID des beendeten Skriptes. Beende ich hierbei nun die Wiedergabe über das VDR-Menü, beendet sich der mplayer - zurück bleiben jedoch Zombieprozesse des mplayer - dies wäre eine mögliche vorläufige Lösung, jedoch sind die Zombieprozesse irgendwie unschön.


    Igrendwelche Tipps von Skriptprofis?


    Danke & Gruss
    Marcus

    My VDRs:

    Einmal editiert, zuletzt von dad401 ()

  • Ich hätte ähnliche problemen mit iptvstream.sh und exterremux.sh.


    Weil vom iptv einem "sh <command>" gestartet wird, gab es bei mir ein extra: /bin/sh im process list.


    Hilft es wann du /bin/sh als ein symlink nach /bin/bash macht, und du die #!/bin/bash ändert in #!/bin/sh ?


    Bei mir hat das, für das beenden vom vlc-player als kind von iptvstream.sh, geholfen...


    Carel

  • Dies wäre mal eine Idee... der Aufruf im Externalplayer-Plugin (hier: Zeile 14) nutzt auch die sh:

    Ggf. kann man das ja gleich im Source ändern.


    Marcus

    My VDRs:

  • Zitat

    Original von carel
    Hilft es wann du /bin/sh als ein symlink nach /bin/bash macht, und du die #!/bin/bash ändert in #!/bin/sh ?


    Der Symlink von /bin/sh > bash war vorhanden. Eine Änderung des Shebang von #!/bin/bash nach #!/bin/sh brachte leider auch nichts - selbiges verhalten. Allerdings habe ich den Eindruck, dass traps nun funktionieren - ich werde das mal weiterverfolgen...


    Marcus

    My VDRs:

  • Folgende Lösung funktioniert nun:


    radio-rsa.sh

    Bash
    #!/bin/bash
    
    
    OPT="-prefer-ipv4 -ao alsa:device=hdmi -vo xv -autosync 2 "
    cache="190"
    token=`wget -q -O - http://edge.download.newmedia.nacamar.net/sltokens/stream-radio-player.php?stream=rsa-sachsen/livestream.wma | grep 'var token'|cut -d'"' -f2|head -1`
    
    
    stream="mms://62.26.161.89/rsa-sachsen\$livestream.wma?token=$token"
    exec mplayer $OPT -cache $cache $stream


    --> der aufrufende Skriptprozess wird mit exec "ersetzt" durch den mplayer-Prozess (mplayer erhält die Prozess-ID des Skriptes radio-rsa.sh).


    Da beim Beenden über das VDR-Menü immer ein Zombie des mplayer-Prozesses übrig blieb, habe externalplayer-player.c nun wie folgt geändert (hier wartet der Elternprozess nicht lange genug auf den terminierenden Kindprozess):


    Alle Zombies "getötet" :)


    Marcus

    My VDRs:

Jetzt mitmachen!

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