nataraj: (Бритый небритый)
[personal profile] nataraj
Не знаю, знаете ли вы или нет, но сильно популярный когда-то формат mp3 обложен лицензионными отчислениям. Каждый производитель софта создающего mp3 файлы обязан заплатить некоторую денежку владельцу алгоритма, как минимум по американским законам, а не то будет подвергнут низвергнут и т.п. В качестве альтернативы был создан формат ogg (точнее ogg-vorbis там внутри на самом деле два формата), призванный сделать создание и проигрывание музыкальных файлов реально свободным и бесплатным. Какое-то время шла вялая конкуренция, не в пользу последнего, так-как mp3 уже успел захватить мир (и только после этого владелец объявил о необходимости отчислений, а до этого было все как-бы бесплатно), но со временем конкуренция угасла, потому что диски и интернет подешевели, и появились алгоритмы сжатия музыки без потерь, и хранить музыку в mp3 а равно как и в ogg стало бессмысленно.

Но осталось одна область где использование сжатия с потерями оправдано: это сетевое вещание. Поток несжатого звука через современные каналы в режиме реального времени не везде достаточно хорошо пролазит (особенно на выходе с сервера, нормального мультикаста в IPv4 без нетривиальных усилий с обоих сторон таки не дают), а требования к качеству -- ниже.

Когда возникла задача вещания, я сразу сказал что вещаться будет в ogg, во-первых потому что пользователи должны таки научиться пользоваться правильными форматами (если конечно не заплатят мне кучу денег, чего тут не было), а во-вторых софта для кодирования mp3 в опенсорсных дистрибутивах по умолчанию нету (потому что в Америке такой софт может быть только за деньги из-за патентных отчислений) а вот для кодирования ogg -- подалуйста, ставиться одной командой, только настрой.

Так вот, собственно я собираюсь рассказать о том как это надо настраивать.

Собственно что, сетевое вещание оно суть двухголовое. Есть сервер, который из доверенных источников принимает аудио поток и as is передает его всем изъявившим желание послушать. В нашем случае это icecast2. И есть источник, который занимается кодированием аудио потока в месте его происхождения и через посредством авторизации передающего его на сервер. В нашем случае это ices2, который умеет как live вещание прямо с line in'а, так вещание play list'а. Нас в данном случае интересует первое.

Настраиваем icecast2

Ставим соответствующий пакет, редактируем /etc/icecast2/icecast.xml задав три разных пароля
    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>hackme</source-password>
        
        <relay-password>hackme</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>hackme</admin-password>
    </authentication>


А так же меняем hostname, указав там тот хост, с которого будет видна вещалка (будет использован при создании url'ев)
<hostname>yourhostname.com</hostname>


Далее в файле /etc/default/icecast2 ставим ENABLE=true, перезапускаем icecast: sudo /etc/init.d/icecast2 restart и если все было сделанно правильно, и вы пробросили все нужные порты наружу, то по адресу yourhostname.com:8000 вам покажут страничку, и при заходе в админку спросят пароль.

Далее, для того чтобы оный поток успешно игрался во флешевом проигрывателе (об это позже), нужно положить файл /usr/share/icecast2/web/crossdomain.xml с контентом
<cross-domain-policy>

<allow-access-from domain="*" />

</cross-domain-policy>


И убедиться что в системе есть файл /etc/mime.types ; если его нет, то доставить пакет
mime-support (Это нужно чтобы xml'ка отдавалась с правильным контент-тайпом) http://yourdomain.com:8000/crossdomain.xml теперь должен (в нормальных браузерах, не IE) не предлагать сохранить файл, а показать его контент.

Настраиваем ices2

Ставим пакет ices2, создаем директорию /var/log/ices и /etc/ices2, копируем файл /usr/share/doc/ices2/examples/ices-alsa.xml в /etc/ices2;

В оном файле меняем <param name="device">hw:0,0</param> на то алса устройство из которого пойдет входящий звук, в разделе
            <hostname>localhost</hostname>
            <port>8000</port>
            <password>hackme</password>
            <mount>/example1.ogg</mount>

в качестве хост-нейма ставим то доменное имя по которому виден настроенный уже icecast2, в качестве пароля указываем пароль из айс-кастового конфига (не скажу какой, я нерадивый админ поставил все три одинаковых и теперь меня взломают... Если успеют)

Отдельное внимание следует уделить параметру mount. Это то имя, которое будет присвоено потоку, оно будет частью его url. С одной стороны совершенно не требуется чтобы оно заканчивалось на ogg, но с другой стороны говно-виндовые браузеры, если оно заканчивается на ogg по умолчанию открывают его в WinAmp который вот уже более десяти лет ogg умеет, а если не присвоено, то можно попасть в Windows Media Player со всеми вытекающими. Поэтому .ogg добавляем.

Далее, коленым железом выжигаем блок
    <resample>
                <in-rate>44100</in-rate>
                <out-rate>22050</out-rate>
            </resample>

потому что с ним не работает...

И так же в соответсвующем месте добавляем <param name="metadatafilename">/etc/ices2/ices-alsa.meta</param> и создаем файл /etc/ices2/ices-alsa.meta с содержимым

title=Кто
artist=Что

Далее организуем запускатор. Копируем /usr/share/doc/ices2/ices.init.example в /etc/init.d/ices2 ставим ему +x, создаем файл /etc/ices2.conf с единственной строкой
XMLFILE=/etc/ices2/ices-alsa.xml
, проверяем что он запускается /etc/init.d/ices2 start
и останавливается /etc/init.d/ices2 stop

И волшебной конмандой update-rc.d ices2 defaults заставляем его запускатиься при старте.

Так, или примерно так мне удалось его запустить играть... По результатам этого в веб админке icecast'а должен появиться поток вещяние который можно проигрывать.

Чем можно проигрывать
1. Любым линуксовым сетевым проигрывателем
2. WinAmp последние десять лет умеет .ogg. Чтобы по ссылке с сайта случайно не окрылся Window Media Player, не следует давать ссылку на m3u которая указана в админке айс-каста, а давать адрес самого потока с расширением .ogg, чтобы он точно попал в WinAmp
3. В теории Windows Media Player может играть ogg, если поставить вот это http://xiph.org/dshow/, не проверял
4. Существуют флеш плееры играющие ogg потоки. Например http://www.musesradioplayer.com/setup При его использовании главное не забыть правильно положить файлик crossdomain.xml как это сказано в настройках icecast2, иначе ничего играться не будет.


Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 02:11 pm
Powered by Dreamwidth Studios