Shout
view release on metacpan or search on metacpan
ex/example2.pl view on Meta::CPAN
#!/usr/bin/perl -w
use strict;
use bytes;
use Shout;
###############################################################################
### C O N F I G U R A T I O N
###############################################################################
use vars qw{$Debug $Lame};
chomp( $Lame = `which lame` );
my $Bitrate=64;
my $Samplerate = 22050;
### Create a new streaming object
my $streamer = new Shout
host => "localhost",
port => 8000,
mount => "/example2",
password => "hackme",
format => SHOUT_FORMAT_MP3,
protocol => SHOUT_PROTOCOL_HTTP;
$streamer->set_audio_info(SHOUT_AI_BITRATE => $Bitrate,
SHOUT_AI_SAMPLERATE => 22050);
###############################################################################
### M A I N P R O G R A M
###############################################################################
### Try to connect, aborting on failure
if ( $streamer->open ) {
printf "Connected to %s port %d...\n", $streamer->host, $streamer->port;
printf "Will stream to mountpoint '%s'.\n", $streamer->mount;
} else {
printf "couldn't connect: %s\n", $streamer->get_error;
exit $streamer->get_errno;
}
### Stream each file specified on the command line
for my $file ( @ARGV ) {
print STDERR "Can't read '$file': $!" unless -r $file;
print "Sending $file...\n";
$streamer->set_metadata(song => "Now Playing: $file");
### Run lame in downsampling mode on the file we're going to send
open( LAME, "-|" ) || exec $Lame, qw{--mp3input -b}, $Bitrate, qw{-m j -f -S}, $file, "-";
my $buff;
READ: while ((my $len = sysread(LAME, $buff, 4096)) > 0) {
print STDERR "Read $len bytes...\n" if $Debug;
$streamer->send( $buff ) && next;
warn( "send failed: ", $streamer->get_error, "\n" );
last READ;
} continue {
$streamer->sync;
}
close LAME;
}
### Disconnect from the server
$streamer->close;
( run in 0.842 second using v1.01-cache-2.11-cpan-d8267643d1d )