Есть два Icecast2 сервера между ними необходимо перекинуть поток,но так чтобы он не был перекодирован. В принципе есть фича relay в самом icecast2 серваке, но ее к сожалению использовать нельзя.
|Icecast2 server--------->shout.pl--------------->Icecast2 server| Поэтому был написан такой скрипт:
#!/usr/bin/perl -w
use strict;
use Shout;
use bytes;
use Net::HTTP;
# start the connection
my $conn = new Shout;
# setup all the params
$conn->host('localhost');
$conn->port(8000);
$conn->mount('/Stream2');
$conn->password('xxxxx');
$conn->public(0);
$conn->format(SHOUT_FORMAT_MP3);
$conn->protocol(SHOUT_PROTOCOL_HTTP);
$conn->set_audio_info(SHOUT_AI_BITRATE => 128, SHOUT_AI_SAMPLERATE => 4$
# try to connect
if ($conn->open) {
print "connected...\n";
$conn->set_metadata("song" => "Hello world");
# if we connect, grab data from stdin and shoot it to the servery
my $s = Net::HTTP->new(Host => "192.168.0.1:8000") || die $@;
$s->write_request(GET => "/Stream1", 'User-Agent' => "Mozilla/5.0");
my ($code, $mess, %h) = $s->read_response_headers();
print "ok\n";
my ($buff, $len);
$conn->sync;
while (($len = $s->read_entity_body($buff, 80)) > 0) {
unless ($conn->send($buff)) {
print "Error while sending: " . $conn->get_error . "\n";
last;
}
# must be careful not to send the data too fast :)
$conn->sync;
}
# all done
$conn->close;
} else {
print "couldn't connect...\n";
}
Он не работает, вернее работает но не верно, подключаеться к серверу 1 и забирает поток /Stream1, подключается к серверу 2 создает новый поток /Stream2, но в графе send_bytes всегда почему-то стоит 0 и через 15 секунд поток исчезает.
shout.pm - 2.1
libshout 2.2.2