Полноценная интернет-радиостанция в GNU/Linux
Лирическое… вступление
Труды Максвелла, Попова, Герца, а также, многих других знаменитых и не очень ученых, привели нас к возможности передачи информации посредством радио. С появлением соответствующего СМИ имя «радио» закрепилось в нашем языке, также, за видом звукового броадкастинга. Огромное количество радиостанций на волнах разных длин и частот вещают круглосуточно в массы гигантские объемы информации. Но что делать, если слушатель вдруг решает прекратить столь пассивное существование в этом броадкастерском мире и начать собственную карьеру радиоведущего? Конечно, можно увлечься КВ, заняться радиолюбительством, получить свою частоту, и начать играть в «шпионские игры», скрываясь за последовательностью сигналов Морзе, можно найти спонсоров и стать шишкой посерьезнее — открыть свою публичную радиостанцию, хотя это не вполне реально, особенно в условиях нынешнего кризиса. Что остается жаждущему реализации своих дикторских способностей, а может даже навыков DJ? Подкастинг и интернет-радио. Первый удобен, прост, не требует особенных затрат, бережет время и силы, хотя избавлен от двух важных факторов, которые присутствуют во «взрослом радио»: подкасты не позволяют вещать в реальном времени, также, они не столь интерактивны, как нам хотелось бы. Все, решили уже открыть свою интернет-радиостанцию? Но с чего начать?
Подготовительные работы
Интернет просто кишит информацией об организации своей сетевой радиостанции, на фоне откровенной белиберды, программ, распространяющихся за определенную мзду, позволяющих, на проверку, не так много из того, что хотелось бы видеть, существуют и открытые (icecast), и просто бесплатные (shoutcast), вот о последнем мы и поговорим. Для многих shoutcast server фактически стал стандартным продуктом для огранизации интернет-радиовещания. Еще бы, чудо-программа разрабатывается nullsoft, разработчиками известного плеера WinAMP для мелкомягкой операционной системы, но shoutcast избавлен от подобного недостатка, существуют сборки и для иных операционных систем, поддерживающих POSIX, а оно нам и требуется, так как мы хотим, чтобы наше радио работало стабильно без перерывов на обед.
Помимо сервера, нам также потребуется программа для броадкастинга, тот самый элемент цепи, что будет передавать медиа-контент через shoutcast сервер в массы. Выбор на этот раз пал на родную утилиту от nullsoft, которая также существует для всех популярных *nix платформ в бинарном виде.
Какое интернет-радио может обойтись без своего сайта? Да такого, чтобы можно было и информацию о треке посмотреть, и прослушать эфир прямо со страницы? А пообщаться с ведущим? Этим тоже займемся, но обо всем по порядку.
Итак, в качестве операционной системы под нашу радио-лабораторию выбираем GNU/Linux, любой современный дистрибутив, я, например, остановился на Linux Mint 6 (Felicia), как на удобном дистрибутиве, построенном на Ubuntu, готовом к труду и обороне. Будем считать, что звук уже настроен, ALSA работает на ура, микрофон дает приемлемый уровень сигнала, в общем, красота и покой. Начинаем.
Сервер
Да, мы уже согласились со всеми лицензионными выкладками и готовы скачать сервер (ну а как же иначе). Переходим по адресу www.shoutcast.com/download-files , скачиваем версию для linux, создаем новую папочку в домашней директории, разархивируем в нее содержимое архива.
Сервер необходимо настроить, а параметров у него куча, причем, некоторые менять строго не рекомендуется; я решил позаботиться о бесценном времени читателя и представляю «простой генератор конфигов для shoutcast» . В формочку необходимо ввести лишь некоторые из параметров, основные, которые меняются от сервера к серверу, другие же, менять нет особой нужды, но всегда можно поправить ручками позже, разобравшись в формате конфигурационных файлов. Полученный конфиг сохраняется в директорию с исполняемым файлом сервера.
Вещалка
Shoutcast сервер построен таким образом, что к нему можно подключать удаленно несколько программ вещания. Нам хватит и одной, к тому же, мы будем использовать ее не удаленно, а локально, то есть, сервер и программа вещания будут работать на одной машине. Одна из таких программ, также разработанная nullsoft, доступна для скачивания по прямой ссылке . Под нее необходимо создать директорию, распаковать туда архив (содержащий исполняемые файлы для разных *nix систем), и настроить программу вещания, что можно сделать в автоматизированном режиме. Для этого, выкладываю специальный скриптик «простой генератор конфигов для sc trans» . Конфиг также сохраняем в каталог с программой.
Проверяем
Необходимый минимум выполнен! Ура, теперь можно проверить, как радиостанция работает. Для этого необходимо подготовить плейлист, и запустить сервер и программу вещания. Плейлист представляет собой простой текстовый файл, каждая строчка которого — путь к файлу mp3. Создать его из директории с музыкой очень просто командой:
find /путь к директории/ -type f -name *.mp3 > playlist.txt
После чего все найденные в указанной директории mp3 файлы будут добавлены в файл playlist.txt в виде полных путей к ним. Кладем плейлист в директорию с sc trans или в любую другую, если вы указали ее в настройках все того же sc trans. Теперь можно запускать сервер.
Переходим в его каталог и набираем команду:
./sc_serv config.conf
Где config.conf — имя конфигурационного файла сервера. Сервер запущен, теперь запустим программу вещания sc_trans; перейдя в соответствующий каталог выполним команду:
./sc_trans_linux config.conf
Передаваемый параметр, естественно, зависит от того, как вы назвали конфигурационный файл.
Теперь все готово, и если не произошло ничего критичного, то радио можно послушать. Сделать это можно несколькими способами, самый простой из них — просто скачать плейлист для плеера по ссылке http://ваш_ip:8000/listen.pls ; причем, вместо 8000 может стоять и другой номер порта, если вы указывали его при конфигурировании сервера.
Помним, что если мы хотим широкой аудитории, не ограниченной одной машиной — необходимо в настройках вашего файрволла открыть соответствующий порт (по умолчанию 8000).
Не останавливаемся на достигнутом
Останавливаем сервер и sc trans командами:
kill -9 `pidof sc_trans_linux` kill -9 `pidof sc_serv`
Упростим себе жизнь и приделаем доменное имя к нашей радиостанции, дабы не вспоминать каждый раз IP и не прописывать его в конфигурационные файлы, в случае, если он изменится. Можно постараться зарегистрировать доменное имя, покопаться в настройках ns-серверов, но есть способ и проще, тем более этим доменом не будет пользоваться никто кроме вас, а необходимость в нем продиктована лишь простотой настройки.
Воспользуемся замечательным сервисом Dynamic DNS , который позволяет быстро регистрировать домены третьего уровня в зонах homeunix.org, homelinux.com, homeip.org и многих других, всех не упомнишь. Процесс регистрации и добавления домена прост и не требует комментариев, из настроек потребуется только одно поле для IP адреса, хотя оно там и так одно. Также, присутствует кнопочка, позволяющая вставить в это поле ваш текущий IP. Теперь, после простой переконфигурации sc trans мы получаем доступ к плейлисту и web-админке по доменному имени.
Радиосайт
Отлично, почему бы теперь не сделать сайт для нашей радиостанции? Тут разброс технологий, доступных для реализации задуманного, довольно велик. В простейшем случае подойдет простой хостинг, позволяющий создавать внешние соединения через сокеты, домен на ваше усмотрение, прямые руки, немного усилий с кодированием на php и плеер на flash, позволяющий проигрывать нашу радиостанцию прямо со страницы сайта.
Считаем, что хостинг у нас уже есть. Помимо информации о самой радиостанции, о авторах, ведущем, музыке, которую обычно крутят не этой волне, на сайте важным элементом является динамическая информация следующего рода: информация о текущем треке, количество слушателей, история проигранных треков, битрейт вещания, всю эту информацию, а также, многую другую, shoutcast сервер предоставляет по умолчанию. Вот только оформление этой информации заставляет желать лучшего. Существует огромное число классов на разных скриптовых языках, которые вытягивают из страницы shoutcast-сервера нужную информацию, разбирая страницу по кусочкам, но они выполняют ненужную работу. Почему? Потому что администратору станции shoutcast сервер предоставляет всю эту информацию в удобном виде — в форме XML отчета. Естественно, если некий скрипт захочет получить информацию, скрытую в этом XML отчете, ему придется пройти basic аутентификацию на shoutcast сервере, что программно не так сложно сделать. В любом случае, всегда можно скачать готовые классы, легко интегрируемые в проект, которые несложно найти через Google, например. Но мне хотелось написать что-то простое и свое. В итоге, я получил две простые функции на php, которые при малом объеме дают отличные результаты (проверял на своем сервере: Apache2, PHP5, SimpleXML):
Посмотреть исходный код с подсветкой синтаксиса и комментариями
Первая получает XML отчет в виде строки. А вторая, используя Simple XML, выуживает нужные данные, отслеживая, также, доступность радиостанции. В том случае, если радиостанция не доступна, информация о ней не выводится, а посетитель видит сообщение, что радиосервер в данный момент отключен. Это важно, если вы не собираетесь вещать круглые сутки, и пользователи смогут видеть, когда сервер доступен, а когда нет.
Плеер
Следующий закономерный шаг — установка плеера на сайт, дабы посетители могли послушать радиостанцию прямо со страницы, не нуждаясь ни в чем кроме браузера и flash-плагина к нему. Решение уже существует, и на этот раз нет никакой необходимости делать что-то самостоятельно. Проект Uppod студии U позволяет организовать у себя на сайте настоящий праздник звуков и образов. Простая регистрация, настройка и возможность закачать файл плеера себе на сайт совершенно бесплатно делают его незаменимым в подобном случае. В настройках плеера необходимо прописать адрес радиостанции в разделе «файлы», и плеер будет полностью настроен и готов к интеграции. Сервис позволяет создавать темы оформления для вашего плеера, что является очень полезным функционалом. Так, желательно отключить перемотку (она нам не понадобится), убрать кнопку «стоп», ну и оформить плеер по своему вкусу.
Путем незначительной модификации функции echoShoutcastInfo из shoutlib.php, приведенной ранее, можно добиться того, чтобы плеер показывался на странице лишь тогда, когда наш радио-сервер работоспособен.
Существует также более старая и более простая в настройке версия этого плеера, она доступна по адресу flv-mp3.com .
Последние штрихи
Вещание музыки из заготовленного заранее плейлиста есть хоть и полезная возможность, но скучная, куда интереснее вести передачи голосом, ставить треки по просьбам слушателей, вести диалоги в прямом эфире. И файловая система Linux поможет нам в этом. Каждое устройство представлено в Linux в виде соответствующего файла, с которым можно работать программно. Звуковой карточке соответствует файлик /dev/dsp, через который можно осуществлять запись и воспроизведение звука. Чтобы иметь возможность вещать с микрофона в сеть, достаточно добавить в плейлист две строчки:
DSP:/dev/dsp DSP:/dev/dsp
Теперь, правильно настроив системный микшер, мы можем вести не только голосовые передачи, но и перенаправлять различные звуковые источники в сеть.
Для организации общения со слушателями можно посмотреть в сторону проекта hab.la , который позволяет транслировать сообщения из удобной формочки на вашем сайте прямиком в jabber.
Ну и последнее: всегда можно более подробно познакомиться с конфигурационными файлами сервера и броадкаст программы, дабы более гибко настроить их. Очень полезный документ по этому делу.
Удачных эфиров и моря слушателей.
***
Возможно, Вы заинтересованы в продвижении сайта, или просто мечтаете пообщаться на одесса форуме? Как насчет открытки?



Ох спасибо! уже всех друзей на свое радио подсадил
Рад, что статья помогла. Успехов и процветания.
TNX!
Попробуем запустить. :)