Тема: Связка ices и perl

Столкнулся с некой проблемой.

Когда в конфиге ices пишу

    
<Type>perl</Type>
<Module>hit90</Module>

Ставлю скрипт perl c именем hit90.pm

#!/usr/bin/perl -w
#Процедура инициализации, обычно тут вызываются все листинги директории с файлами, 
#подключения к базам и тд и тп
sub ices_init {
        print "Perl subsystem Initializing:\n";
        return 1;
}
#Процедура завершения работы ices, тут желательно закрыть все соединения из скрипта
#и тому подобное
sub ices_shutdown {
        print "Perl subsystem shutting down:\n";
}
#А вот это и есть процедура получения нового трека для проигрывания
#Мы каждый раз перечитываем всю директорию, на тот случай
#на тот случай если появились новые треки для проигрывания на радио
sub ices_get_next {
        print "Perl subsystem quering for new track:\n";
        #chomp $music[2];
        $num=`/bin/ls /home/hit90/*.mp3 | /usr/bin/wc -l`;
        @music=`/bin/ls -1 /hit90/test/*.mp3`;
        $play=int(rand($num));
        chomp $music[$play];
        return $music[$play];
}
 
# Процедура получения информации о треке, для вывода в плеере
sub ices_get_metadata {
        use MP3::Info;
        $tag = get_mp3tag($file) or die "No TAG info";
        return "$tag->{TITLE} ";
}
 
#
sub ices_get_lineno {
        return 1;
}

То при запуске этого конфига выбивает ошибку

root@185:~# ices -c /etc/icecast/music_90.conf
Logfile opened
Could not find a valid playlist file.
Ices Exiting...



Что делать?

2

Re: Связка ices и perl

Куда положилы скрипт?

Re: Связка ices и perl

папка конфигов ices/modules

4

Re: Связка ices и perl

тогда покажите что в логе пишет

Re: Связка ices и perl

Логи ices или icecast?

в var/log/ есть только icecast

ices папки там нет

6

Re: Связка ices и perl

Такое бывает:
1)Ошибка в скрипте, т.е. он не компилируется или работает неправильно (не выдает путь к файлу).
2)У скрипта не хватает прав (чтение, запуск). Файл скрипта, вроде бы, должен быть исполняемым (chmod +x)

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

Re: Связка ices и perl

пишет Falcon:

Такое бывает:
1)Ошибка в скрипте, т.е. он не компилируется или работает неправильно (не выдает путь к файлу).
2)У скрипта не хватает прав (чтение, запуск). Файл скрипта, вроде бы, должен быть исполняемым (chmod +x)

Поставил права на паку modules и все ее файлы 777, ices запустился

Into the land of the dreaded daemons we go... (pid: 24512)

Но маунт в icecast2 не появился

8

Re: Связка ices и perl

путь к логу ices указывается в его конфиге

Re: Связка ices и perl

Вот нужна строчка в ices

Logfile opened
Initialization of playlist handler failed. [This binary has no support for embedded perl]
Ices Exiting...


Perl не поддерживается?

Хотя я устанавливал его "apt-get install perl"

Отредактировано Artyom.Glazunov (24-07-2014 19:29:22)

10

Re: Связка ices и perl

perl сам по себе тут не при чем, ices должен быть собран с поддержкой perl

Re: Связка ices и perl

Ну я когда perl установил выполнил команды:

wget http://www.centova.com/clientdist/ices/ … 4.2.tar.gz
tar -zxvf ices-cc-0.4.2.tar.gz
cd ices-cc-0.4.2
./configure
make
make install


P.S. на сервере ОС ubuntu 12.04

12

Re: Связка ices и perl

Вот к чему приводит слепое выполнение команд.
После configure пишет какие модули  будут собраны.
Я уже не знаю в какой раз пишу одно и то же..

Re: Связка ices и perl

Features:
  XML     : yes
  Python  : no
  Perl    : no
  LAME    : yes
  Vorbis  : yes
  MP4     : no
  FLAC    : no

Что делать?

Отредактировано Artyom.Glazunov (24-07-2014 22:43:13)

14

Re: Связка ices и perl

установить perl-dev и пересобрать

Re: Связка ices и perl

пишет tarasian666:

установить perl-dev и пересобрать

Можете подсказать как?

Я гугл перерыл perl-dev не нашел

Ос ubuntu

16

Re: Связка ices и perl

Ну как минимум в стандартной репе:
aptitude search perl-dev
p   libperl-dev                                                                 - Perl library: development files
p   libperl-dev:i386                                                          - Perl library: development files

Отредактировано features (25-07-2014 14:03:21)

Re: Связка ices и perl

пишет features:

Ну как минимум в стандартной репе:
aptitude search perl-dev
p   libperl-dev                                                                 - Perl library: development files
p   libperl-dev:i386                                                          - Perl library: development files

Спасибо! Помогло, в модулях ices Perl поддерживается теперь.

Заработал поток

Re: Связка ices и perl

Сейчас назрел такой вопрос, я поставил скрипт perl с джинглами. При проверке оказалось, что: игарет трек, после него включается джинг, а после джингла снова тот же самый трек включается.

Я видел на форуме подобный вопрос, но так толком никто не ответил ничего.

Кто подскажет как убрать такую проблему?! Или может треки включать не рандомно, а по списку, как и стандартно в ices?!

19

Re: Связка ices и perl

Надо знать по какому алгоритму выбирает треки скрипт + определиться как ты хочешь чтобы они выбирались. Ну а потом просто сделать smile

У меня крутится скрпт, который формирует сетку вещания. А скрипт на вещателе просто берёт новую позицию из списка и играет.

Отредактировано features (25-07-2014 17:03:36)

Re: Связка ices и perl

Ну вот мой скрипт:

sub ices_shutdown {
        print "Perl subsystem shutting down:\n";
}

sub ices_get_next {
        print "Perl subsystem quering for new track:\n";
  if($jingle < 5){
        $jingle ++;
        @music=`/bin/ls -1 /mnt/music_90/*.mp3`;
    }else{
        $jingle = 0;
        @music=`/bin/ls -1 /mnt/jingles/*.mp3`;

    }
        $num = scalar (@music);
        $play=int(rand($num));
        chomp $music[$play];
        return $music[$play];
}

sub ices_get_metadata {
        $tag = get_mp3tag($file) or die "No TAG info";
        return "$tag->{TITLE} ";
}

return 1;

Можете помочь? У нас чаще всего nonstop, эфир через радиоБосс редко, нужны джинглы, а тут с ними такая беда

Re: Связка ices и perl

Нашел вот такой скрипт на PERL для ices:

# Здесь у нас и обрабатывается основная музыкальная программа
sub track {
$num=`/bin/ls /var/ices/muz/*.mp3 | /usr/bin/wc -l`;
@music=`/bin/ls -1 /var/ices/muz/*.mp3`;
$oldplay = $play;
# Выбираем случайным образом номер файла
$play=int(random_uniform(1, 0, $num));
# Если вдруг нам так повезло и повторно выпал номер играющего файла, то попытаемся снова выбрать случайный файл
if ($oldplay == $play) {
$play=int(random_uniform(1, 0, $num));
}
chomp $music[$play];
# Достаем TAG из mp3 файла
my $tag = get_mp3tag($music[$play]) or die «no»;
if ($tag != «no») {
$artist_name = $tag->{ARTIST};
$songtitle = $tag->{TITLE};
}
else {

# Если нет TAG в файле
$artist_name = «My Radio»;
$songtitle = «Welcome!»;
}
return $music[$play];
}

Как я понял здесь он ищет треки, которые еще не играли, причем рандомно.

Вот как его совместить с джинглами?!

22

Re: Связка ices и perl

sub ices_get_next {
        print "Perl subsystem quering for new track:\n";
# если время джингла ещё не пришло
  if($jingle < 5){
# инкрементим счётчик
        $jingle ++;
# выбираем все песни из директории музыки
        @music=`/bin/ls -1 /mnt/music_90/*.mp3`;
    }else{
# обнуляем счётчик
        $jingle = 0;
# выбираем все песни из директории джинглов
        @music=`/bin/ls -1 /mnt/jingles/*.mp3`;

    }
# считаем количество песен
        $num = scalar (@music);
# выбираем случайную
        $play=int(rand($num));
        chomp $music[$play];
# возвращаем выбранный трек
        return $music[$play];
}


пишет Artyom.Glazunov:

Нашел вот такой скрипт на PERL для ices:

# Здесь у нас и обрабатывается основная музыкальная программа
sub track {
$num=`/bin/ls /var/ices/muz/*.mp3 | /usr/bin/wc -l`;
@music=`/bin/ls -1 /var/ices/muz/*.mp3`;
$oldplay = $play;
# Выбираем случайным образом номер файла
$play=int(random_uniform(1, 0, $num));
# Если вдруг нам так повезло и повторно выпал номер играющего файла, то попытаемся снова выбрать случайный файл
if ($oldplay == $play) {
$play=int(random_uniform(1, 0, $num));
}
chomp $music[$play];
# Достаем TAG из mp3 файла
my $tag = get_mp3tag($music[$play]) or die «no»;
if ($tag != «no») {
$artist_name = $tag->{ARTIST};
$songtitle = $tag->{TITLE};
}
else {

# Если нет TAG в файле
$artist_name = «My Radio»;
$songtitle = «Welcome!»;
}
return $music[$play];
}

Как я понял здесь он ищет треки, которые еще не играли, причем рандомно.

Вот как его совместить с джинглами?!

Это полный скрипт или часть? Тут используется переменная $play которая должна хранить информацию о том что играло. Но где она определяется не показано.

Re: Связка ices и perl

пишет features:

sub ices_get_next {
        print "Perl subsystem quering for new track:\n";
# если время джингла ещё не пришло
  if($jingle < 5){
# инкрементим счётчик
        $jingle ++;
# выбираем все песни из директории музыки
        @music=`/bin/ls -1 /mnt/music_90/*.mp3`;
    }else{
# обнуляем счётчик
        $jingle = 0;
# выбираем все песни из директории джинглов
        @music=`/bin/ls -1 /mnt/jingles/*.mp3`;

    }
# считаем количество песен
        $num = scalar (@music);
# выбираем случайную
        $play=int(rand($num));
        chomp $music[$play];
# возвращаем выбранный трек
        return $music[$play];
}


пишет Artyom.Glazunov:

Нашел вот такой скрипт на PERL для ices:

# Здесь у нас и обрабатывается основная музыкальная программа
sub track {
$num=`/bin/ls /var/ices/muz/*.mp3 | /usr/bin/wc -l`;
@music=`/bin/ls -1 /var/ices/muz/*.mp3`;
$oldplay = $play;
# Выбираем случайным образом номер файла
$play=int(random_uniform(1, 0, $num));
# Если вдруг нам так повезло и повторно выпал номер играющего файла, то попытаемся снова выбрать случайный файл
if ($oldplay == $play) {
$play=int(random_uniform(1, 0, $num));
}
chomp $music[$play];
# Достаем TAG из mp3 файла
my $tag = get_mp3tag($music[$play]) or die «no»;
if ($tag != «no») {
$artist_name = $tag->{ARTIST};
$songtitle = $tag->{TITLE};
}
else {

# Если нет TAG в файле
$artist_name = «My Radio»;
$songtitle = «Welcome!»;
}
return $music[$play];
}

Как я понял здесь он ищет треки, которые еще не играли, причем рандомно.

Вот как его совместить с джинглами?!

Это полный скрипт или часть? Тут используется переменная $play которая должна хранить информацию о том что играло. Но где она определяется не показано.

Это код со статьи http://almightydrews.wordpress.com/2011 … к-сделать/

Можете мне в ICQ написать? 635398547
или в скайп artem.glazunov

Отредактировано Artyom.Glazunov (28-07-2014 13:10:26)