Robert Bienert: IO-Streams

Beitrag lesen

Moin!

Ich versuche den MPlayer auf meinem Webserver fernzusteuern, doch leider komme ich nicht sehr weit: Ich kann zwar den MPlayer über den Webserver auf meinem Mac starten und erhalte dann auch ein Fenster, in dem der Film abgespielt wird, jedoch weiss ich nicht wie ich die Ein- und Ausgabe-Streams handhaben soll.

Nochmal langsam: Der MPlayer auf deinem Webserver liefert dem Mac das Bild?

Ich habe gelesen, dass stdin, stdout und stderr eine Art Dateien seien.

Unter Unix ist alles eine Datei. In der Programmierung stellen stdin, stdout und stderr spezielle Filehandles dar, aber es gibt auch genau so benannte Dateien unter /dev/.

Nun wollte ich, damit ich den MPlayer über's Web bedienen kann,  stdin auf eine richtige Datei umleiten

Das wäre dann also eine Batch-Verarbeitung.

print exec('mplayer -vo macosx /Daten/Movies/Magnolia.avi 0<clients/web01.in 1>clients/web01.out');

und mit einem Perl-Skript die Kommandos in diese Datei schreiben.

Wenn das von Perl ausgeht, warum nimmst du dann keine Pipe? Das erspart dir das Anlegen der Datei, aus der der MPlayer dann liest.

Hier das Perl-Skript (eines meiner ersten):

#!/usr/bin/perl -w

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

require 'cgi-lib.pl';

  
Ist das eine Bibliothek von dir oder die alte Variante von `use CGI;`{:.language-perl}?  
  

> ~~~perl

print PrintHeader();  

> print "<pre>Try to start mplayer...\n";  
>   
> # Hier öffnet sich das Fenster mit dem MPlayer, und das Skript  
> # wird abgebrochen  
>   
> print exec('mplayer -vo macosx /Daten/Movies/Magnolia.avi 0<clients/web01.in 1>clients/web01.out');

Was steht denn _zu diesem Zeitpunkt_ in der Eingabedatei clients/web01.in?

Die folgenden Zeilen werden bereits nicht mehr bearbeitet.

In etwa so stelle ich mir das IO-Handling vor... (?:-)

print "Eingabe-Datei zur Übergabe von Kommandos öffnen...\n";
open(OUT, ">clients/web01.in");
print OUT ' '; # Ein Leerschlag um den Film anzuhalten
close(OUT);

  
Da haben wir doch das Problem: Die Eingabedatei muss existieren, \_bevor\_ du sie dem MPlayer zum Öffnen gibst. In deinem Fall wäre eine Pipe wahrscheinlich wirklich besser:  
  
~~~perl
print "Eingabe-Datei zur Übergabe von Kommandos öffnen...\n";  
open(OUT, "|mplayer -vo macosx /Daten/Movies/Magnolia.avi >clients/web01.out");  
print OUT ' '; # Ein Leerschlag um den Film anzuhalten  
close(OUT);

Viele Grüße,
Robert