Mplayer per Script starten vom Webbrowser

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin Raspi-Freunde, endlich habe ich auch einen und mich gleich mal hier angemeldet :)
    Ich möchte meinen Raspberry gerne (unter anderem) als Radio und MP3-Player einsetzen. Ich habe schon ein wenig gegoogelt, und es gelang mir eine MP3 mit dem mplayer anzuhören. Auch habe ich es geschafft einen Stream anzuhören.


    Code
    mplayer testdatei.mp3
    mplayer -playlist http://www.ndr.de/resources/metadaten/audio/m3u/ndrinfo.m3u

    Klappt einwandfrei. Nun will ich das ganze aber über Scripts starten, und da wirds schon komplizierter. Ich habe zwar eine FAQ-Seite gefunden wo als Lösung z.B.


    Code
    mplayer options filename < /dev/null &

    empfohlen wird, das funktioniert aber zumindest bei mir in der Bash irgendwie nicht. Ich kann den Prozess dann lustigerweise nicht mehr mit Control-C beenden, das Lied läuft durch wird aber auch in der Konsole angezeigt und den Prompt bekomme ich auch nicht zurück bis das Lied durchgelaufen ist.

    Mein Ziel wäre letztlich dass ich mir eine Website baue, über die ich dann die Stationen oder Lieder wählen kann, und die dann abgespielt werden. Ein Monitor soll nicht laufen.

    Ich habe bereits nginx laufen (Webserver), PHP läuft ebenfalls. Ausserdem habe ich den User www-data den Gruppen video und audio hinzugefügt. Ein anderer von mir erstellter Testuser mit den Gruppen audio und video kann übrigens problemlos Musik abspielen lassen.

    Mein Testscript:

    Code
    <form action="">
    <input type=submit name=login value="Lied abspielen">
    <form>
    <?
     if ($_GET['login']=="Lied abspielen")
     echo "A ".shell_exec("mplayer /var/www/klingelton.mp3 < /dev/null &")." B"; else
     echo "Hat nicht geklappt";
    ?>

    funktioniert leider nicht, Meldung: (klingelton.mp3 war meine Test-MP3)

    Zitat


    A MPlayer svn r34540 (Debian), built with gcc-4.6 (C) 2000-2012 MPlayer Team Terminal type `unknown' is not defined. Playing /var/www/klingelton.mp3. libavformat version 53.21.1 (external) Mismatching header version 53.19.0 Audio only file format detected. Load subtitles in /var/www/ ========================================================================== Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders libavcodec version 53.35.0 (external) Mismatching header version 53.32.2 AUDIO: 44100 Hz, 2 ch, floatle, 128.0 kbit/4.54% (ratio: 16000->352800) Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio) ========================================================================== [AO SDL] Samplerate: 44100Hz Channels: Stereo Format floatle [AO SDL] using aalib audio driver. Audio: no sound Video: no video Exiting... (End of file) B


    Hat jemand eine Idee wie ich nginx/php dazu bringe über MPlayer was zu spielen? :)
    Langfristig wäre dann auch noch wichtig zu wissen wie ich laufende Musik stoppen kann.

    Oder gibt es ein besseres Programm für meine Zwecke als mplayer?

    Bin für jeden Tipp und jede Anregung dankbar :)

  • Hallo Tilman,

    Code
    mplayer options filename < /dev/null &

    Bist du sicher was die Richtung des Pfeils angeht? Ich würde eher sagen der zeigt in die falsche Richtung. Du willst ja die Ausgaben von mplayer nach /dev/null umlenken.
    Ob damit dein Problem gelöst ist kann ich nicht sagen. Was passieren wird ist auf jeden Fall, dass die Ausgaben von mplayer nicht mehr angezeigt werden

    Gruß Georg

  • Hi, danke für die Antwort. Ja hatte mich zunächst auch gewundert, tatsächlich muss aber auch die Eingabe umgeleitet werden, weil der mplayer sonst stoppt und auf Eingaben wartet. Ich bin jetzt schon eine ganze Ecke weiter, aber ganz zur vollen Zufriedenheit funzt es noch nicht.

    Ich starte jetzt den mplayer manuell einmal auf der Konsole:

    Code
    nohup mplayer -input file=radiofifo -really-quiet -ao alsa -idle 2>&1 /dev/null &

    Die Fifo-Datei radiofifo wurde mit entsprechenden Rechten für meinen Benutzer pi und www-data angelegt mit mkfifo. nohup sorgt dafür dass der Prozess vom Terminal entkoppelt ist, damit ich das Terminal beenden kann und den Terminal-Rechner herunterfahren, und der Raspberry spielt trotzdem weiter Radio. Ausgabe weitergeleitet nach /dev/null, Eingabe wie gesagt nach radiofifo, mplayer wird im slave modus gestartet mit -idle, damit er nach abspielen einer MP3-Datei nicht beendet wird.

    Funktioniert ganz gut, aber trotz der Umleitungen erwartet die Zeile trotzdem noch eine Tasteneingabe (Enter), daher kann ich es nur manuell auf Konsole starten und nicht z.B. per php exec oder shell_exec:(

    Mit wie oben gestartetem mplayer, der (lokal zum php-Script) angelegten radiofifo und einer lokal vorhandenen klingelton.mp3 funktioniert folgendes Script dann aber ganz hervorragend (Stop beendet das aktuelle Playback, beendet nicht den Player. Das ginge zwar mit quit, aber wie gesagt kann ich den Player ja nicht per Script starten, daher wäre dies derzeit unsinnig). Volume stellt die Lautstärke ein.


    Die Befehle (mplayer-Slave befehle) werden per echo "befehl" > radiofifo in die Fifo-Datei geschrieben, und dadurch an den mplayer weiter geleitet.

    Wie gesagt, für meine persönliche Zwecke ist das shcon ganz gut. Aber der echte volle Königsweg ist es auch noch nicht, daher bin ich weiterhin für Ideen dankbar :)

  • Der Thread ist damit beendet, denn ich habe alle Probleme gelöst. Jetzt muss ich nur noch ein hübsches PHP-Frontend basteln. Ich werde da auch noch ein Tutorial draus basteln die Tage. Aber hier schon mal die Lösungen:

    Das Script um den mplayer zu starten lautet jetzt:

    Bash
    #!/bin/bash
    # radio
    #check if mplayer is just running
    ps -A | grep "mplayer" > /dev/null
    if [ $? -eq 1 ]
    then
    nohup mplayer -input file=/var/www/radio/radiofifo -really-quiet -ao alsa -idle &> /dev/null < /dev/null &
    else
    echo "radio service is just running"
    fi

    Es achtet auch darauf dass der mplayer nur einmal gestartet wird.

    beendet wird der mplayer damit:

    Bash
    #!/bin/bash
    #off-radio
    echo "quit \n" > /var/www/radio/radiofifo


    , damit wird der "quit"-Befehl (mplayer im Slave-Mode) an den mplayer gesendet.

    Das PHP Script welches nur den mplayer startet und stoppt (um dann Radio-Stationen zu spielen verwendet man nach wie vor das oben stehende Script im letzten Post):

    Einmal editiert, zuletzt von Tilman (7. Juni 2013 um 00:00)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!