From: Сергей Рубцов <madman@altair-tv.ru.>
Newsgroups: email
Date: Mon, 7 Feb 2006 14:31:37 +0000 (UTC)
Subject: Вещание в сеть радиостанций со спутника
Работаю я в достаточно крупной провайдерской организации в своем городе,
а так как компания молодая сервисы все еще добавляються и расширяться.
Насмотревшись на провайдеров столицы решил порадовать абонетов радио.
Пробовал ретранслировать станции из инета - дорого, вещал с винта
mp3ки - популярность не та, вот и решили пускать со спутника.
Начало:
Первоначально собираем новенькое ядро, на данный момент это 2.6.15, с
поддержкой SkyStar1 и I2C (обязательно модулями!!!), и не забудьте
скачать последний firmware с сайта www.linuxtv.org
(http://www.linuxtv.org/downloads/firmware/), кладем его в
/usr/lib/hotplug/firmware/ и переименовываем в dvb-ttpci-01.fw.
Собираем, но только в один поток!!! ЭТО ВАЖНО!!! Иначе не собирется.
Надеюсь, что все прошло гладко, и Вы уже загрузились с новым ядром.
Далее нам понадобится набор утилит для работы DVB картами
linuxtv-dvb-apps, и находим его на том же сайте www.linuxtv.org
(http://www.linuxtv.org/downloads/). Разворачиваем, собираем. От туда
нам необходимы 2 утилиты scan, szap и конфиг для предпочитаемого
спутника, который создадим позже.
Теперь нам необходимо загрузить модули катрочки и его frontend'ы. Вот
список загруженных модулей у меня для катрочки (вполне достаточно
загрузить модули dvb_ttpci и ves1x93, остальное само загрузится):
Теперь начнем именно настройку на спутник. По этому заходим на
http://www.lyngsat.com/europe.html и выбираем спутник, на транспондере
которого наибольшее количество радиостанций. Настраиваем тарелку на этот
транспондер. Теперь необходимо, воспользовавшись утилитой scan, считать
список каналов, с выбранного спутника. В папке
linuxtv-dvb-apps-xx.xx.xx/util/scan/dvb-s/ есть примеры конфигов для
разных спутников. Я остановил выбор на 36 градуснике, с него на частоте
12073 идет порядка 40 ведущих радиостанций России.
Пример моего конфига для него:
S 11923000 L 27500000 3/4
Теперь простым движением руки сканируем список каналов:
# ./scan file_config
На что на стандартных выход должен появиться список каналов, примерно
следующего содержания:
Retro:11923:h:0:27500:0:4097:1
Dinamit:11923:h:0:27500:0:4100:2
New Life:11923:h:0:27500:0:4110:3
Russkoe-2:11923:h:0:27500:0:4120:4
Monte Carlo:11923:h:0:27500:0:4130:5
..................................................
[0052]:11923:h:0:27500:0:0:82
[0053]:11923:h:0:27500:0:0:83
[0054]:11923:h:0:27500:0:0:84
Если спиcок есть, то все отлично, мы почти на полпути к победе! Загоняем
его в конфиг для szap, что бы проверить качество приема канала.
Надеюсь, канал был залочен, о чем будет свидетельствует надпись
FE_HAS_LOCK. В противном случае советую почитать документацию из
linuxtv-dvb-apps. Да и вообще ее почитать стоит!!!
А вот теперь начинается самое интересное - снятие потока с карточки,
кодирование и трансляция в сеть! Разберем каждый раздел по подробнее.
Снятие аудио потока с DVB карты:
Получить поток можно как минимум 4 способами:
1. mplayer (http://www.mplayerhq.hu/) - ужастно не удобно, практически
нет документации и, к тому же, отвратительное качество.
2. xine (http://xinehq.de/) - честно только читал, поставить как-то руки
не дошли
3. vls (http://www.videolan.org/) - проект специально создан для
вещания данных с любых устройств в сеть различными способами. Но проект
забросили года 3 назад и всю функциональность перенесли в vlc.
4. VLC (http://www.videolan.org/) - это своего рода комбайн всего что
возможно!!! И вещать, и смотреть, и снимать поток, и записывать, и еще
кучу всего! Подробно, что умеет и как это делает читайте на оф. сайте.
Естественно, берем VLC, внимательно читаем VLC Streaming-Howto по адресу
http://www.videolan.org/doc/streaming-howto/en/streaming-howto-en.html и
понимаем, что VLC умеет еще и кодировать поток, и отправлять в сеть.
Можно начинать радоваться и хлопать в ладоши, но как всегда появлюяться
некоторые НО!!! С первыми из них происходит столкновение на этапе
кодирования, но об этом позжде.
pРассмотрим пример снятие потоков 2 радиостанций, без кодирования, с
одного транспондера (с разных одной картой не возможно):
Думаю, пояснять параметры запуска нет надобности, они очень хорошо
расписаны на оф. сайте. Но единственной рекомендацией будет не снимать
уровень детализации вывода на экран (-vvv), при уменьшении, почему-то,
начинает сбиваться поток и увеличивается загрузка процессора. С чем это
связанно, я, честно говоря, даже не стал разбираться, по этому оставил
так.
Трансляция в сеть
В настоящий момент для радиотрансляций по сети преимущественно
используются протоколы TCP/HTTP с программными протоколами
Shoutcast/Icecast (официально не задокументированы), вот их использовать
и будем. Лично для меня icecast (http://www.icecast.org) как-то приглянулся
больше. Описывать настройку не буду, т.к. ее полно в интернете, да и
пример конфига очень хорошо документирован. По этому настраиваем и
запускаем icecast. Для проверки заходим на http://server:8000, и
любуемся WEB интерфейсом запущенного сервера.
Кодирование
Кодировать можно и VLC, но на кодировании 2 каналов в mp3 в битрейт 192
загрузка двух процового сервера P4 идет в районе 80% - нам оно не надо!
По этому идем другим путем, на официальном сайте icecast
(http://www.icecast.org) есть 2 проекта для броадкаст кодирования ices2 и
ices0. Первый для кодирования в ogg, второй в mp3, вроде еще бетта
релиз, но работает исключительно стабильно. Выбрать можно любой, я взял
ices0. Но тут возникает почти проблема, ices'ы не умеют работать с DVB
картами, зато прекрасно работают с плейлистами!
Нашлось, на мой взгляд, простое и элегантное решение - заливать поток в
fifo канал, а его играть из плейлиста, как mp3 файл.
Описывать процесс настройки ices0 не имеет особого смысла, конфиг
интуитивно понятен. Для каждого потока радио необходимо запускать
отдельный процесс ices с отдельным конфигом. Разница в конфигах должна
быть в pid файлах, проигрываемых плейлистах, точках монтирования и
описании потока станции.
Создаем fifo каналы для каждого потока:
# mkfifo /tmp/radio1.mp3
# mkfifo /tmp/radio2.mp3
Теперь добавляем в плейлисты наши "mp3 файлы";, пускаем в них потоки станций, прописываем плейлисты в разные конфиги ices, пускаем по процессу на поток:
Если в логах ошибок нет, можно протестить. На сайте http://server:8000
должны появиться Ваши радиостанции в виде точек монтирования (в
представлении Icecast).
Выбираем канал, добавляем в WinAmp/BMP/XMMS, слушаем. Все прекрасно!!!
421 Прочтений • [Вещание в сеть радиостанций со спутника (linux skystar1 radio sound icecast dvb)] [08.05.2012] [Комментариев: 0]