Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10342[/thread]

Problem: System + VLC

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2007-09-07 11:41
#99183 #99183
Guten Morgen,
Habe da ein Problem mit Perl. Möchte eine Website machen, wenn man diese dann aufruft soll ein VLC Streaming Server geöffnet werden. In der Linux Shell kann dies mit folgendem Befehl getan werden:
vlc /root/Desktop/test.mpg --sout udp://192.168.0.1 -ttl 10 --loop
Das funktioniert soweit auch. Danach kann man auf den Stream connecten.
Nun mein Perl Script aus dem cgi-bin ordner:

#!/usr/bin/perl -w


use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";

system('/usr/bin/vlc /root/Desktop/test.mpg --sout udp://192.168.0.254 --ttl 10 --loop');

print "Stream wurde geöffnet";

Wenn ich dieses nun mit dem Browser aufrufe funktioniert es nicht. Mit der Konsole und dem Befehl perl jedoch schon.
Ich vermute das Problem darin, wenn man in der Konsole denn stream eröffnet, geht der normale VLC Player mit seinem GUI auf und fängt an zu streamen, in der Perl Konsole daselbe, im Browser geht das VLC Gui auf dem Server nicht auf.
Hat jemand vielleicht eine Idee?
Wäre froh um jeden Hinweis.
Vielen Dank und schönes wochenende.

Ives
Taulmarill
 2007-09-07 13:20
#99190 #99190
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Unter welchem User läuft denn der Webserver. Ich währe mir nicht sicher, dass einfach jeder User auf deinem Desktop Fenster aufmachen kann. Der VLS währe da wahrscheinlich eher angebracht, da der nur auf der komandozeile läuft. Auf jeden Fall sollte der Webserver keinen Zugriff auf /root haben.

Hast du mal in das logfile vom Webserver geschaut?
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Gast Gast
 2007-09-07 15:21
#99194 #99194
Vielen Dank für die schnelle Antwort. Das Projekt ist noch in der Entwicklung und deshalb auf einem Testsystem. Deshalb auch das mit dem root. Ich habe es mal verschoben und es hat auch nicht geklappt. Ich werde mir jedoch den Tipp mit dem VLS merken, das wird wohl das vernünftigste sein. Denn am Schluss läuft es auf einem anderen Server ohne GUI. Ich werde meine Erkentisse mit VLS noch posten. Vielen Dank erst einmal.
topeg
 2007-09-07 22:24
#99203 #99203
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Der Elternprzess bei System wartet bis sich das Programm beendet hat. Und der Serverprozess würgt das Script nach einer bestimmten Laufzeit ab. Dabei wird auch Der VLC beendet.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl -w

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

# Prozess aufspalten
my $id=fork();

# Wenn neuer Prozess, dann "exec"
# Wenn alter Prozess dann Ausgabe.
unless($id)
{ exec('/usr/bin/vlc /root/Desktop/test.mpg --sout udp://192.168.0.254 --ttl 10 --loop'); }
else
{
 print "Content-type: text/html\n\n";
 print "Stream wurde geöffnet ID:$id";
}
Gast Gast
 2007-09-13 11:16
#99398 #99398
Guten Morgen

Ich habe nun einiges geschafft in dieser Zeit. Vielen Dank für eure Antworten. Ich habe nun noch ein Problem.
Wenn ich nun in der Konsole folgendes eingebe:
open -- vlc --intf rc /var/www/html/test.mpg --sout udp://192.168.0.254 --ttl 10

gibt mir vlc den Stream aus und die Konsole kann weiter benützt werden. Ich brauche nun auch kein GUI mehr dank --intf rc . Auch im Perl Skript aus der Konsole mit eurem vorgeschlagenen Code klappt das wunderbar. Die Ausführung des Scriptes dauert eine halbe Sekunde, danach läuft der Stream und man kann die Konsole bereits wieder benützen.

Wenn ich im Log des Apache Servers nachschaue steht darin:
[Datum & Zeit] [error] [client,ip] open: Failed to open /dev/console
[Datum & Zeit] [error] [client,ip] : Permission dnied

Nun wie kann ich diese Permission geben?
Gast Gast
 2007-09-13 11:21
#99399 #99399
Ach ja und zum Thema VLS:
Dieser ist nicht ganz einfach zu installieren und auch die Konfiguration bringt einige Tücken mit sich. Letztendlich kann man auch nicht einfach einen Stream starten, sondern muss diesen zuerst als Channel eintragen. Dies ist eher für einen Provider gedacht, aber nicht für einen einzelnen Stream.
Gast Gast
 2007-09-13 18:28
#99446 #99446
So nun habe ich es komplett. Der Apache muss natürlich open aufrufen können. Dies kann er nicht wenn er unter dem User Apache läuft. Deshalb muss man den Apache unter dem root oder einem anderen Benutzer laufen lassen der open aufrufen kann. Das ist aber ein Risiko=> Sicherheit
Es gibt aber auch hier ne Lösung. Man kann suexec einsetzen. Dies ist ein Zusatz zum Apache der es erlaubt perl Scripte unter anderen Usern laufen zu lassen. Es ist aber nicht ganz einfach einzustellen.
<< >> 7 Einträge, 1 Seite



View all threads created 2007-09-07 11:41.