Streamtranscoder verweigert Dienst, wenn über Webtrans gestartet

Status
Für weitere Antworten geschlossen.
Guten Morgen, liebe Community,

ich wende mich mit einem Problem an euch, das ich nicht so recht begreifen kann und bei dem ich Denkanstöße gebrauchen könnte. Konkret geht es um ein Problem mit einem Streamtranscoder, der seine Arbeit nicht verrichten will. Zuerst jedoch einmal ein paar technische Details:

Verwendetes Betriebssystem des Servers: Ubuntu 12.04.1 LTS (auf aktuellem Stand)
Zum Einsatz kommt ferner die PHP-basierte Steuersoftware Web-Trans, die von http://sourceforge.net/projects/web-trans/ herunter geladen wurde. Diese Version beinhaltet einen vorgefertigten Streamtranscoder mit vorgefertigter Config für den Transcoder.

Die Configurationsdatei für den Transcoder sieht folgendermaßen aus (Passwort durch Sternchen ersetzt):

Code:
PlaylistFile=/home/shoutcastdj/sc_trans_040/test1.lst
ServerIP=85.214.247.94
ServerPort=8010
Password=******
StreamTitle=FamousFM Autostream
StreamURL=http://www.famousfm.de
Genre=Mixed
LogFile=sc_trans.log
Shuffle=0
Bitrate=128000
InputSamplerate=44100
InputChannels=2
Quality=1
CrossfadeMode=0
CrossfadeLength=4000
UseID3=1
Public=0
AIM=Autostream
ICQ=
IRC=

Die in Zeile 1 vermerkte Datei sieht folgendermaßen aus (zum Testen vier Einträge):


Code:
/home/shoutcastdj/mp3/Interpret - Titel.mp3
/home/shoutcastdj/mp3/Interpret - Titel.mp3
/home/shoutcastdj/mp3/Interpret - Titel.mp3

Die MP3-Dateien, die in der LST-Datei vermerkt sind, sind vorhanden und es wurde bei der Benennung der Dateien darauf geachtet, ausschließlich Buchstaben zu verwenden, die im allgemeinen Zeichensatz vorhanden sind (keine Sonderzeichen, Umlaute. etc.)

Die Steuerdatei von Webtrans sieht folgendermaßen aus (HTML und CSS wurde angepasst):

Code:
<?php
include('loginauth.php');
include_once("functions.php");
include_once("config.php");

$action = getRequestVar('action');

if ($action == "")
{
    unset($action);
}

if (isset($action))
{
    $hostname = $_SERVER['HTTP_HOST'];
    $path = dirname($_SERVER['PHP_SELF']);
   
    if ($action == "stop")
    {   
         //if($sc_proc_id != 0){
            shell_exec($soundbase."/sc_trans stop");
        //}
        //else {
            //echo "SC_TRANS_LINUX killed";
        header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
        //}
    }
    elseif($action == "restart")
    {
        shell_exec($soundbase."/sc_trans stop");
        sleep(2);
        shell_exec($soundbase."/sc_trans start");
        header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
       }
    elseif($action == "reload")
    {
        $sc_proc_id = shell_exec("ps -A | grep sc_trans_linux | cut -c 1-6;");
        shell_exec("kill -s USR1 ".$sc_proc_id);
       
        //header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
       }
   
   elseif($action == "start")
    {
        $file = $soundbase."/sc_trans.conf";
        $filehandle = fopen ($file, "r+");
        $contents = fread($filehandle, filesize($file));
        fclose($filehandle);
        $pos = strpos($contents, "LogFile=") ;
        $contents = substr($contents, $pos+8);
        $Logfile = strtok($contents, "\n");
       
        if($sc_proc_id == 0){
            shell_exec("rm ".$soundbase."/".$Logfile);
            shell_exec("touch ".$soundbase."/".$Logfile);
            shell_exec($soundbase."/sc_trans start sc_trans.conf");
            }
        header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
    }
   
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Steuerung des Autostreams</title>
<link href="webtrans.css" rel="stylesheet" type="text/css" />
</head>
<body>


<div style="width:1000px; margin:0 auto;">
<div style="background:url(../images/head.png); width:960px; height:148px; background-repeat:no-repeat;">&nbsp;</div>
<div style="background:url(../images/body.png); width:960px; min-height:220px; background-repeat:repeat-y; padding-left:15px; position:relative; margin-top:-15px;">
<h1>Steuerung des Autostreams</h1>
<div style="width:600px;">
Hier kannst du den Autostream starten und stoppen.<br /><br />
<table width="350" border="0">

            <tr>
                <td class="tablea1"><a class="tablea1" style="display:block;" href="index.php?action=start"></a></td>
                    <td class="tablea2"><a class="tablea2" style="display:block;" href="index.php?action=stop"></a></td>       
                <td class="tablea9"><a class="tablea9" style="display:block;" href="logout.php"></a></td>
            </tr>
</table>
</div>
<div style="width:930px; padding-right:15px;">
<br />
<div style="width:auto; max-width:260px; font-weight:bold; background-color:#a90606; color:#ffffff; margin-bottom:15px; border:1px dashed #000000; padding:2px; margin-left:3px; text-align:center; text-shadow:2px 2px 2px #000000;"><?php

$sc_proc_id = "";
$sc_proc_id = shell_exec("ps -A | grep sc_trans_linux | cut -c 1-6;");
//var_dump($sc_proc_id);
if($sc_proc_id == "") { echo "Autostream ausgeschaltet";}
else echo "Autostream eingeschaltet";
?></div>
</div>
</div>
<div style="height:5px; width:960px; border-top:3px solid #999999;">&nbsp;</div>
</div>
</body>
</html>

Es handelt sich quasi um den Originalcode der Datei. Nach Recherche wurden an zwei Stellen Ändeurngen vorgenommen. Und zwar wurde aus shell_exec("ps -A | grep sc_trans_linux | cut -c 0-6;"); nun shell_exec("ps -A | grep sc_trans_linux | cut -c 1-6;"); gemacht.

Die in Zeile 4 eingebundene Config-Datei sieht folgendermaßen aus:
Code:
<?php

//Path to sc_trans_linux (included in the package)
$soundbase = "/home/shoutcastdj/sc_trans_040/";

//Path to the soundfiles
$soundfiles = "/home/shoutcastdj/mp3";

$loginuser = "****";
$loginpass = "****";
$loginpass1 = "****";

?>

Der Rest ist unverändert geblieben.

Nun zu meinem Problem:
Die Steuerdatei besitzt zwei Buttons zum Starten und Stoppen des Transcoders, die mit den Befehlen shell_exec($soundbase."/sc_trans stop"); bzw. shell_exec($soundbase."/sc_trans start"); belegt sind. Hinzu kommt eine Abfrage, die schaut, ob der Streamtranscoder aktiv oder inaktiv ist und eine entsprechende Ausgabe am Bildschirm vornimmt.

Der Klick auf Autostream starten führt die Anweisung korrekt aus. Der Serverdienst wird gestartet und taucht auch in der Auflistung aller aktiven Serverdienste auf. Es wird jedoch kein Titel abgespielt und in der Anzeige des gerade aktuellen Songs taucht eine mehr oder weniger zufällige Buchstaben-Zahlen-Kombination auf. Der Shoutcastserver meldet nach etwa 30 Sekunden ein Timeout, weil kein Input vorhanden ist. Währenddessen läuft der Transcoderdienst munter weiter.

Kurios ist jetzt allerdings folgende Sache: Starte ich den Streamtranscoder über Putty mit dem Befehl /sc_trans start sc_trans.conf (der gleiche Befehl wie in der Steuerdatei von Webtrans), verrichtet das Programm seine Aufgabe genau so, wie es das soll. Der Autostream wird gestartet und es sind Titel zu hören. Es kann dann über die Weboberfläche jedoch nicht mehr gestoppt werden. Ein Klick auf die entsprechende Anweisung wird ignoriert. Ich nehme an, dass Letzteres mit Benutzerrechten zu tun hat.

Lustig ist auch Folgendes: Bis vorgestern hat die oben beschriebene Konfiguration tadellos fast ein Jahr lang funktioniert. Dann muss irgendetwas passiert sein, was ich nicht nachvollziehen kann. Ich hab auch bereits Shoutcaststream und Transcoder neu aufgesetzt, um sicher gehen zu können, dass nicht doch irgendwer irgendwo Code verändert hat aber geholfen hat das nicht.

Nach nun mehr 11 Stunden Arbeit und Rumprobiererei sehe ich einfach den Wald vor lauter Bäumen nicht mehr und brauche vielleicht den einen oder anderen Hinweis auf die Lösung des Problems.

Vielen lieben Dank im Voraus
René
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben