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/
Конечно при большом количестве треков в директории скрипт будет тратить значительное время на получения трека, но для гибкости обновления все же стоит его использовать.




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
Всё перепробовал, нечего не помогает.