HiHo
Ich habe ein Problem mit einem Perlscript, das MP3-Dateien auf einen Server streamt.
Auf dem Server wartet ein Netcat, das den Stream an mplayer weiter leitet:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">nc -l -p 2666 |mplayer -
</font><hr></pre></blockquote>
Auf dem Client ist ein Perlscript, das aus einer Playlist die Datein liest und auf den Server sendet:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">nc -l -p 2666 |mplayer -
</font><hr></pre></blockquote>
Soweit funktioniert das ganze auch mehr oder Weniger.
<li>Nun das Problem ist, dass das erste Lied der Playlist erst so aber der Zehnten bis Zwanzigsten Sekunde abgespielt wird.
<li>Und einige lieder gehen gar nicht, respektive sie werden komischerweise gesendet (t<1s) aber nicht gespielt.
<li>Einige Lieder werden mit der Meldung "Broken Pipe!" abgebrochen.
Ich habe mit dem Buffer etwas gespielt und immer wieder etwas andere Resultate bekommen und "print $sock <SOUND>" bringt auch nichts.
Weiss jemand eine Lösung auf das Problem, oder eine Erklärung für dieses Verhalten?
Merci und Gruss user1
perl stream und netcat
Re: perl stream und netcat
Hmm da funktioniert etwas nicht mit dem Board.
Der zweite Code-Teil sollte das Perl-Skript sein:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/usr/bin/perl
use strict;
use IO::Socket;
my $bsize = 2048;
my ($tmp,$buffer,$dir);
my $sock = new IO::Socket::INET(
PeerAddr => 'homer',
PeerPort => '2666',
Proto => 'tcp',
);
$| = 1;
$sock || die "Could not create socket: $!
";
binmode($sock);
open(PLS,"<@ARGV[0]")||die "No valid playlist.
";
while($tmp = <PLS>){
if($tmp =~ /(\/.*
)/){
$dir = $1;
print $dir."
";
open(SOUND,"<".$dir)||die $!;
binmode(SOUND);
#print $sock <SOUND>;
while(read(SOUND,$buffer,$bsize)){
print $sock $buffer;
}
}
}
close $sock;
</font><hr></pre></blockquote>
Der zweite Code-Teil sollte das Perl-Skript sein:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/usr/bin/perl
use strict;
use IO::Socket;
my $bsize = 2048;
my ($tmp,$buffer,$dir);
my $sock = new IO::Socket::INET(
PeerAddr => 'homer',
PeerPort => '2666',
Proto => 'tcp',
);
$| = 1;
$sock || die "Could not create socket: $!
";
binmode($sock);
open(PLS,"<@ARGV[0]")||die "No valid playlist.
";
while($tmp = <PLS>){
if($tmp =~ /(\/.*
)/){
$dir = $1;
print $dir."
";
open(SOUND,"<".$dir)||die $!;
binmode(SOUND);
#print $sock <SOUND>;
while(read(SOUND,$buffer,$bsize)){
print $sock $buffer;
}
}
}
close $sock;
</font><hr></pre></blockquote>