Июн 16 2009

Perl скрипт для Ices

Ices очень простая, но в то же время очень эффективная программа для проигрывания музыки на Icecast, пример настройки я приводил в статье IceCast2 и Ices0 — строим интернет радио, но в той статье я описывал проигрывание файлов из директории случайным образом, все хорошо, но подобная схема не даст гибко обновлять мелодии в директории для проигрывания, в данной схеме прийдется прервать вещание для того, что бы обновить список мелодий, но можно задействовать возможность Ices использовать вызовы скриптов для получения списка мелодий в директории для проигрывания.
Теперь файл настроек Ices будет выглядеть так:

<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
  <Playlist>
    <!-- Эта опция теперь не нужна -->
    <File>playlist.txt</File>
    <Randomize>1</Randomize>
    <!-- Для перлового скрипта указываем perl -->
    <Type>perl</Type>
    <!-- Имя файла который будет обрабатываться перловым интерпретатором
    файл обязательно должен иметь расширение pm -->
    <Module>ices</Module>
  </Playlist>
  <Execution>
    <Background>1</Background>
    <Verbose>0</Verbose>
    <BaseDirectory>/tmp</BaseDirectory>
  </Execution>
<Stream>
  <Server>
      <!-- Сервер на который мы будем отправлять поток -->
      <Hostname>89.252.34.107</Hostname>
      <Port>8000</Port>
      <Password>source-pass</Password>
      <Protocol>http</Protocol>
    </Server>
    <!-- Точка монтирования на сервере и описание нашего потока -->
    <Mountpoint>/ices</Mountpoint>
    <Name>Default stream</Name>
    <Genre>Default genre</Genre>
    <Description>Default description</Description>
    <URL>http://89.252.34.107:8000/</URL>
    <Public>0</Public>
    <!-- Настройка передаваемого потока -->
    <Bitrate>128</Bitrate>
    <Reencode>0</Reencode>
    <Channels>2</Channels>
  </Stream>
</ices:Configuration>

А перловый скрипт будет такой:

#!/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/test/*.mp3 | /usr/bin/wc -l`;
        @music=`/bin/ls -1 /home/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;
}

Скрипт необходимо разместить в /usr/local/etc/modules/
Конечно при большом количестве треков в директории скрипт будет тратить значительное время на получения трека, но для гибкости обновления все же стоит его использовать.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By zyat, 27.06.2010 @ 23:48

    А как потом обновлять плейлист?

  • By hilik, 28.06.2010 @ 09:43

    Залить новые звуковые файлы в директорию и скрипт их, после того, как текущая песня доиграет, подхватит.

  • By zyat, 13.08.2010 @ 21:18

    Так как это понимать?

    «Скрипт необходимо разместить в /usr/local/etc/modules/» и
    «Залить новые звуковые файлы в директорию и скрипт их»

    Можно ответ по яснее написать?

  • By hilik, 14.08.2010 @ 23:41

    В скрипте описана директория для mp3 файлов, в нее и загружаются файлы. В общем все.

  • By zyat, 16.08.2010 @ 02:34

    /usr/local/etc/rc.d/ices0: WARNING: failed to start ices0

    Всё перепробовал, нечего не помогает.

Other Links to this Post


Украинская Баннерная Сеть