Почему просто не дать доступ клиентам на сервис с онлайн радио? так как 1.нельзя закрыта внешка, 2. если все ломанутся слушать даже одну и туже радиостанцию нагрузка ляжет вся на внешний канал связи на инет.
Скачать мои примеры конфигураций и плееров По этому ставим icecast свободное ПО для организации потокового цифрового аудио и видеовещания.
Оф сайт Icecast
"Icecast - это сервер потокового мультимедиа, который в настоящее время поддерживает аудиопотоки Ogg Vorbis и MP3.
Его можно использовать для создания интернет-радиостанции или частного музыкального автомата, а также для многих других вещей.
Он очень универсален, поскольку относительно легко добавляются новые форматы и поддерживает открытые стандарты для связи и взаимодействия.
Icecast распространяется под лицензией GNU GPL, версия 2. Копия этой лицензии прилагается к этому программному обеспечению в файле COPYING."
Что оно нам дает?
Принимаем радио потоки с внешки и уже сами ретранслируем на своем порту во внутреннюю локальную сеть, если даже 20 пользователей будет слушать 1 и тоже радио внешний поток будет 1! т.е. нагрузка никак не увеличится.
Так же внешку инет можно совсем не использовать, подключить тюнер для фм приема и раздавать текущий эфир в сеть (можно сказать дак они и сами могут на приемнике слушать FM. не у всех есть приемник и не везде ловит сигнал и тем более если мы из одного региона в другой по своим внутренним каналам связи передаем эфир. Есть нюансы по Тюнерам быстрее всего 1 тюнер даст только одновременно одну частоту вещания т.е. если мы хотим одновременно 4 радио с fm то нужно 4 тюнера, либо устройство подороже!
На подобии принцип работы можно посмотреть тут DVB-T/T2/C USB TV-тюнеры через keenetic в IPTV
Схема Когда то я делал что то подобное при помощи VLC на windows принимал на свой пк и раздавал этот же эфир к себе в сеть клиенты подключались через тот же VLC.
Что я еще рассматривал какое ПО (для Linux)
Серверы для потокового аудио/видео вещания
An MP3 LEnder - Небольшой сервер для организации потокового MP-вещания по сети, которое можно бу
GNUMP3d - Cервер потокового аудио с гибко настраиваемым с помощью шаблонов web-интерфейсом
MPEG4IP - Набор утилит для кодирования и потокового воспроизведения аудио и видео (использ
ShoutCast - Потоковый сервер для музыкального вещания в сети.
icecast - Потоковый мультимедийный сервер, поддерживающий аудиоформаты Ogg Vorbis и MP3
и другие.
на связке из одного компа с LibreTime и второго — принимающего. Плюс он настроил запуск рекламы по времени.
Если кратко, то его решение состоит из готовой сборки LibreTime, которая включает в себя web-админку с LiquidSoap, и с вещанием через IceCast.
Остановился я на 3х ПО ShoutCast, icecast, LibreTime.
Хотел поставить LibreTime - используется для эфира радиостанций, озвучивания торговых центров и тд.
Но сервера на Debian были уже и так нагружены более свободный был AltLinux на его LibreTime установки не было(
Выбираю между двумя бесплатными ShoutCast, icecast
Как оказалось ShoutCast имеет ограничения по бесплатной основе что мне не подходит и выбор пал на icecast.
Забегая в перед потоки радиостанций я брал прямо на сайтах просматривая код html либо с плей листа RadioSN (SlyNet) периодически меняется ссылка расположения на момент написания ссылка RadioSN (Радио более 1000 станций) Некоторые DNS имена сайтов у меля лочил PowerDNS в место имен DNS определил и прописал IP серверов радиостанций!
Обнаружил что в списке радиостанций с 8000 портом используется тот же icecast.
Например prmstrm Авто радио и многие другие радио станции!
http://air.radiorecord.ru
Стало основной поток
https://radiorecord.hostingradio.ru/rr_main96.aacp
https://23.111.104.132/rr_main96.aacp
http://radio-srv1.11one.ru/record192k.mp3
http://radiorecord.hostingradio.ru/brks320.m3u
а в плейлисте
http://icecast02.hostingradio.ru:80/brks320 - нерабочий
http://radiorecord.hostingradio.ru/liquidfunk96.aacp - ликвидфанк
http://radiorecord.hostingradio.ru/tm96.aacp - TRANCE
http://radiorecord.hostingradio.ru/club96.aacp - клуб
Потоки на http
Потоки на https
#EXTM3U
#EXTINF:-1 ,ВОЛОГДА АВТОРАДИО
http://online2.gkvr.ru:8000/avtoradio11_vld_64.aac
#EXTINF:-1 ,ВОЛОГДА АВТОРАДИО
http://online2.gkvr.ru:8000/avtoradio_vld_64.aac
#EXTINF:-1 ,РАДИО ШАНСОН ВОЛОГДА
http://online2.gkvr.ru:8000/chanson11_vld_64.aac
#EXTINF:-1 ,РАДИО ШАНСОН ВОЛОГДА
http://online2.gkvr.ru:8000/chanson_vld_64.aac
#EXTINF:-1 ,РАДИО DFM ВОЛОГДА
http://online2.gkvr.ru:8000/dfm11_vld_64.aac
#EXTINF:-1 ,РАДИО DFM ВОЛОГДА
http://online2.gkvr.ru:8000/dfm_vld_64.aac
#EXTINF:-1 ,РУССКОЕ РАДИО ВОЛОГДА
http://online2.gkvr.ru:8000/rusradio11_vld_64.aac
#EXTINF:-1 ,РУССКОЕ РАДИО ВОЛОГДА
http://online2.gkvr.ru:8000/rusradio_vld_64.aac
#EXTINF:-1 ,РАДИО ЮМОР FM ВОЛОГДА
http://online2.gkvr.ru:8000/yumorfm11_vld_64.aac
#EXTINF:-1 ,РАДИО ЮМОР FM ВОЛОГДА
http://online2.gkvr.ru:8000/yumorfm_vld_64.aac
#EXTINF:-1 ,Европа плюс ВОЛОГДА
https://hls-01-regions.emgsound.ru/11_v ... ylist.m3u8
#EXTINF:-1 ,Дорожное ВОЛОГДА
https://hls-01-regions.emgsound.ru/15_v ... ylist.m3u8
#EXTINF:-1 ,real-potok IP Наше радио Вологда
http://51.15.170.58/nashe-256
#EXTINF:-1 ,real-potok IP Авторадио Вологда
http://77.222.60.92:8000/avtoradio_vld_64.aac
#EXTINF:-1 ,real-potok IP Русское радио Вологда
http://185.189.12.58:8000/rusradio_vld_64.aac
#EXTINF:-1 ,real-potok IP ДФМ Вологда
http://185.189.12.58:8000/dfm_vld_64.aac
#EXTINF:-1 ,real-potok Наше радио Вологда
http://nashe1.hostingradio.ru/nashe-256
Европа плюс
выбор качества
https://hls-01-regions.emgsound.ru/11_v ... ylist.m3u8
88.212.236.148:443
Качество 96
https://hls-01-regions.emgsound.ru/11_v ... ylist.m3u8
Дорожное вологда
https://hls-01-regions.emgsound.ru/15_v ... ylist.m3u8
Подготовка
apt-get install apache2
apt-get install php7 apache2-mod_php7 php7-curl php7-gd php7-json php7-zip php7-xml php7-devel php7-openssl php7-xmlreader php7-intl php7-fileinfo php7-mbstring php7-xmlrpc php7-gd2
Далее включаем модуль
a2enmod mod_php7
меняем строки так
nano /etc/httpd2/conf/sites-available/default.conf
#DocumentRoot "/usr/share/doc/indexhtml/ "
DocumentRoot "/var/www/html/"
#<Directory "/usr/share/doc/indexhtml/">
<Directory "/var/www/html/">
Дописать внизу
Alias /doc "/usr/share/doc/indexhtml/"
<Directory "/usr/share/doc/indexhtml/">
Include conf/include/Directory_html_default.conf
</Directory>
дописываем в строку
nano /etc/httpd2/conf/include/Directory_html_default.conf
#Options Includes FollowSymLinks MultiViews
Options Indexes Includes FollowSymLinks MultiViews
chkconfig httpd2 on
chmod 777 /etc/init.d/httpd2
/etc/init.d/httpd2 start
service httpd2 start
Для проверки php создадим
cat >> /var/www/html/phpinfo.php
<?php phpinfo(); ?>
ctrl+d
Перейдем по ссылке
http://IPсервера/phpinfo.php - проверяем все ли установилось что нам нужно
Icecast требует следующих пакетов:
apt-get update
apt-get install libxml2 libxml2-devel
apt install libxslt ( > = требуется версия 1.1)
apt-get install curl curl-devel (> = требуется версия 7.10)
apt-get install vorbis-tools ogg / vorbis (> = требуется версия 1.0)
apt-get install libcurl-devel libogg-devel libspeex-devel libtheora-devel libvorbis-devel libxslt-devel
apt-get install clementine-codecs-ogg
https://ftp.osuosl.org/pub/xiph/releases/vorbis/
rpm -i clementine-codecs-ogg-1.2.3-alt2.noarch.rpm
apt-get install openssl (необязательно, включить, если требуется поддержка SSL)
apt-get install make taglib taglib-devel libshout libshout-devel lame lame-devel libogg libvorbis libtheora libspeex libcurl mailcap
chmod 777 /etc/mime.types
grep mp3 /etc/mime.types - проверка
Чтобы построить icecast на платформе Unix, выполните следующие действия:
Скачиваем
wget http://downloads.xiph.org/releases/icec ... 4.4.tar.gz
Извлекаем
tar xvzf icecast-2.4.4.tar.gz
Переходим в извлеченную папку
cd icecast-2.4.4
Запускаем установку
./configure
make
make install
собрать и установить этот выпуск.
Скачать
wget http://ftp.altlinux.org/pub/distributio ... x86_64.rpm
Установить
rpm -i icecast-2.4.4-alt1.x86_64.rpm
Настройка конфигурации
nano /etc/icecast.xml
<limits>
<clients>800</clients>
<sources>900</sources>
<threadpool>25</threadpool>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<!-- Если эта функция включена, то она будет предоставлять пакет данных, когда клиент
сначала подключается, тем самым значительно сокращая время запуска
время для слушателей, которые делают существенную буферизацию. Однако,
это также значительно увеличивает задержку между источниками
клиент и слушающий клиент. Для установок с низкой задержкой вы можете
возможно, вы захотите отключить это. -->
<burst-on-connect>1</burst-on-connect>
<!-- то же самое, что burst-on-connect, но это позволяет быть более
конкретно о том, сколько лопнуть. Большинству людей это не понадобится
изменение по умолчанию 64К. Применяется для всех точек монтирования -->
<burst-size>65535</burst-size>
</limits>
<http-headers>
<header name="Access-Control-Allow-Origin" value="*" />
<header name="X-Robots-Tag" value="index, noarchive" />
<header name="foo" value="bar" status="200" />
<header name="Nelson" value="Ha-Ha!" status="404" />
</http-headers>
<authentication>
<!-- Источники войдите в систему с именем пользователя 'source' -->
<source-password></source-password>
<!-- Реле войдите под именем пользователя'relay' -->
<!--<relay-user>relay</relay-user>-->
<relay-password></relay-password>
<!-- Администратор входит в систему с именем пользователя, указанным ниже -->
<admin-user>admin</admin-user>
<admin-password>Radio</admin-password>
</authentication>
<!-- Раскомментируйте это, если вам нужны списки каталогов -->
<!--
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://www.oddsock.org/cgi-bin/yp-cgi</yp-url>
</directory>
-->
<!-- Это имя хоста или IP-адрес, которое другие люди будут использовать для подключения к вашему серверу.
Это влияет в основном на URL-адреса, генерируемые Icecast для плейлистов и yp
листинги. -->
<hostname>-VO-Radio</hostname>
<location>-VO-</location>
<admin>admin@localhost</admin>
<fileserve>1</fileserve>
<server-id>icecast 2.4.4</server-id>
<!-- Вы можете использовать эти два, если вам нужен только один слушатель -->
<!--<port>8000</port> -->
<!--<bind-address>127.0.0.1</bind-address>-->
<!-- У вас может быть несколько элементов -->
<listen-socket>
<port>4300</port>
<!--<shoutcast-mount>/live.mp3</shoutcast-mount>-->
<bind-address>192.168.175.8</bind-address>
</listen-socket>
<!--
<listen-socket>
<port>8001</port>
</listen-socket>
-->
<!--(Https порт)
<listen-socket>
<port>8443</port>
<ssl>1</ssl>
</listen-socket
-->
<!-- Попытка связи между серверами Icecast на Record -->
<!-- <master-server>92.255.66.132</master-server> -->
<!-- <master-server-port>8101</master-server-port> -->
<!-- <master-update-interval>120</master-update-interval> -->
<!-- <master-username>relay</master-username> -->
<!-- <master-password></master-password> -->
<!-- <relays-on-demand>1</relays-on-demand> -->
<!--Ретранслятор главного сервера поддерживается только между серверами Icecast-->
<!--<master-server>127.0.0.1</master-server>-->
<!--<master-server-port>8001</master-server-port>-->
<!--<master-update-interval>120</master-update-interval>-->
<!--<master-username>relay</master-username>-->
<!--<master-password>hackme</master-password>-->
<!--<relays-on-demand>0</relays-on-demand>-->
<!-- установка этого параметра делает все relay по требованию, если они не переопределены, это
полезно для главных relay, которые не имеют здесь определений <relay>.
перенаправлений может быть несколько. В данном примере
* server — имя сервера, с которого берется поток; port — сетевой порт, на котором удаленный сервер отдает поток;
mount — точка мониторования на стороне удаленного сервера, с которого берем поток;
local-mount — точка монтирования, которая будет использоваться нашим сервером для обращения к настраиваемому потоку;
on-demand — если стоит 0, сервер всегда берет поток и проигрывает его, если 1 — только при наличие активных обращений.
Значение по умолчанию равно 0 -->
<!--<relays-on-demand>1</relays-on-demand>-->
<!--
<relay>
<server>nashe1.hostingradio.ru</server> Это IP-адрес DNS сервера, который содержит точку монтирования для ретрансляции.
<port>8000</port> Это TCP-порт для сервера, который содержит точку монтирования для ретрансляции
<mount>/nashe-128.mp3</mount> Точка монтирования, расположенная на удаленном сервере. Если вы ретранслируете поток shoutcast, это должен быть /или /name.
<local-mount>/Наше Радио</local-mount> Имя, используемое для локальной точки монтирования. Так будет называться монтировка на сервере ретрансляции.
По умолчанию используется имя удаленной точки монтирования.
<username>joe</username> Источник ретранслятора может потребовать аутентификации сам, если это так, укажите здесь имя пользователя.
<password>soap</password> Источник ретранслятора может потребовать аутентификации сам, если это необходимо, укажите здесь пароль.
<relay-shoutcast-metadata>0</relay-shoutcast-metadata> Если вы ретранслируете поток Shoutcast,
вы можете указать этот индикатор, чтобы также ретранслировать метаданные (названия песен), которые являются частью потока данных Shoutcast.
По умолчанию это включено, но удаленный сервер решает, будет ли он отправлять какие-либо. 1: включено 0,: отключено
<on-demand>0</on-demand> Ретранслятор по запросу будет извлекать поток только в том случае, если есть слушатели, запрашивающие поток. 1: включено ,:0 выключенно
(по умолчанию <relays-on-demand>). Это полезно в случаях, когда вы хотите ограничить расходы на полосу пропускания, когда никто не слушает.
</relay>
-->
<relay>
<server>51.15.175.27</server>
<port>80</port>
<mount>/nashe-128.mp3</mount>
<local-mount>/nashe-radio</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>91.219.74.220</server>
<port>8000</port>
<mount>/Vanya-high.ogg</mount>
<local-mount>/radiovanya-ivanovo</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>23.105.253.228</server>
<port>80</port>
<mount>/dfm128.mp3</mount>
<local-mount>/dfm-radio</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>46.21.248.168</server>
<port>8052</port>
<mount>/europaplus256.mp3</mount>
<local-mount>/europaplus-radio</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>92.255.66.132</server>
<port>8101</port>
<mount>/rr_spb</mount>
<local-mount>/radiorecordspb</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>91.207.59.30</server>
<port>80</port>
<mount>/stream/air/aac/64/100</mount>
<local-mount>/autoradio</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>51.15.188.149</server>
<port>8064</port>
<mount>/moscow.dorognoe.mp3</mount>
<local-mount>/dorognoeradio</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>23.105.253.212</server>
<port>80</port>
<mount>/rusradio128.mp3</mount>
<local-mount>/rusradio</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>78.140.208.20</server>
<port>8800</port>
<mount>/pfm_320</mount>
<local-mount>/piterfm</local-mount>
<on-demand>1</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Определите раздел <mount> только в том случае, если вы хотите использовать расширенные параметры,
например альтернативные имена пользователей или пароли
<mount>
<mount-name>/example-complex.ogg</mount-name>
<username>othersource</username>
<password>hackmemore</password>
<max-listeners>1</max-listeners>
<max-listener-duration>3600</max-listener-duration>
<dump-file>/tmp/dump-example1.ogg</dump-file>
<intro>/example_intro.ogg</intro>
<fallback-mount>/example2.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
<charset>ISO8859-1</charset>
<public>1</public>
<stream-name>My audio stream</stream-name>
<stream-description>My audio description</stream-description>
<stream-url>http://some.place.com</stream-url>
<genre>classical</genre>
<bitrate>64</bitrate>
<type>application/ogg</type>
<subtype>vorbis</subtype>
<hidden>1</hidden>
<burst-size>65536</burst-size>
<mp3-metadata-interval>4096</mp3-metadata-interval>
<no-yp>1</no-yp>
<authentication type="htpasswd">
<option name="filename" value="myauth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication>
<http-headers>
<header name="Access-Control-Allow-Origin" value="*" />
<header name="X-Robots-Tag" value="index, noarchive" />
<header name="foo" value="bar" status="200" />
<header name="Nelson" value="Ha-Ha!" status="404" />
</http-headers>
<on-connect>/home/icecast/bin/stream-start</on-connect>
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
</mount>
<mount>
<mount-name>/auth_example.ogg</mount-name>
<authentication type="url">
<option name="mount_add" value="http://myauthserver.net/notify_mount.php"/>
<option name="mount_remove" value="http://myauthserver.net/notify_mount.php"/>
<option name="listener_add" value="http://myauthserver.net/notify_listener.php"/>
<option name="listener_remove" value="http://myauthserver.net/notify_listener.php"/>
</authentication>
</mount>
-->
<!--
<mount type="normal"> Тип точки монтирования (по умолчанию: «нормальная»).
Монтирование типа «по умолчанию» может использоваться для указания общих значений для нескольких точек монтирования.
Обратите внимание, что точки монтирования по умолчанию не объединяются с другими блоками монтирования.
Вы получаете эти значения только в том случае, если не type="normal"существует блока монтирования, соответствующего вашей точке монтирования.
<mount-name>/example-complex.ogg</mount-name> Имя точки монтирования, для которой применяются эти настройки.
НЕ ДОЛЖЕН использоваться в случае типа монтирования «по умолчанию».
<username>othersource</username> Необязательное значение, которое задаст имя пользователя,
которое источник должен использовать для подключения с помощью этой точки монтирования.
Не устанавливайте это значение, если вы не уверены, что исходные клиенты, подключающиеся к точке монтирования,
можно настроить для отправки имени пользователя, отличного от source.
Если это значение отсутствует, используется имя пользователя по умолчанию source.
<password>hackmemore</password> Необязательное значение, которое задает пароль, который должен использовать источник для подключения
с помощью этой точки монтирования. Существует также метод аутентификации на основе URL-адреса для источников, который можно использовать вместо этого.
<max-listeners>1</max-listeners> Необязательное значение, которое задает максимальное количество слушателей, которые могут быть присоединены к этой точке монтирования.
<max-listener-duration>3600</max-listener-duration> Необязательное значение, которое устанавливает продолжительность времени,
в течение которого слушатель будет оставаться подключенным к потоку. Компонент аутентификации может переопределить это.
<dump-file>/tmp/dump-example1.ogg</dump-file> Необязательное значение, которое установит имя файла, которое будет дампом потока, проходящего через эту точку монтирования.
Это имя файла обрабатывается с помощью strftime (3). Это позволяет использовать такие переменные, как %F.
<intro>/example_intro.ogg</intro> Необязательное значение, указывающее файл, это содержимое будет отправлено новым слушателям при их подключении, но до отправки обычного потока.
Убедитесь, что формат указанного файла соответствует формату потоковой передачи. Указанный файл добавляется в корневой каталог перед открытием.
<fallback-mount>/example2.ogg</fallback-mount> запасной вариант Это необязательное значение указывает точку монтирования, в которую клиенты автоматически перемещаются,
если источник выключается или не выполняет потоковую передачу во время подключения слушателя. Только одна может быть указана в каждом монтировании и
должна ссылаться на другую точку монтирования на том же сервере, который выполняет потоковую передачу в том же потоковом формате.
Если клиенты не могут вернуться к другой точке монтирования из-за отсутствия резервного монтирования или указывает, что точка монтирования просто недоступна,
то эти клиенты будут отключены. Если клиенты возвращаются к точке монтирования, а резервное монтирование не осуществляет активную потоковую передачу,
а само определяет резервное монтирование, то вместо этого эти клиенты могут быть перемещены туда.
Этот многоуровневый откат позволяет клиентам каскадировать несколько точек монтирования.
Резервное монтирование также может указывать на файл, расположенный в корневом веб-каталоге.
Это полезно для воспроизведения предварительно записанного файла в случае прекращения потока. Он будет повторяться до тех пор, пока либо слушатель не отключится,
либо поток не станет доступным и не вернет слушателей обратно. Как правило, формат файла должен соответствовать формату потока, в противном случае могут возникнуть проблемы
с воспроизведением.
Обратите внимание, что резервный файл не рассчитан по времени, поэтому будьте осторожны, если вы собираетесь передать это. Они хороши для подчиненных потоков, но не используют
их в основных потоках, если вы это сделаете, тогда ретранслятор будет потреблять потоковые данные с большей скоростью, а слушатели на ретрансляторе в конечном итоге будут отключены.
<fallback-override>1</fallback-override> резервное переопределение
Когда этот параметр включен, это позволяет подключающемуся исходному клиенту или реле на этой точке монтирования переместить слушающих клиентов обратно из резервного монтирования.
<fallback-when-full>1</fallback-when-full> резервный при заполнении
Если установлено значение 1, это приведет к тому, что новые слушатели, когда будет достигнуто максимальное количество слушателей для точки монтирования,
будут переходить к резервному монтированию, если оно указано.
<charset>ISO8859-1</charset> Для потоков, отличных от Ogg, таких как MP3, метаданные, которые вставляются в поток, часто не имеют определенного набора символов.
Мы традиционно использовали UTF8, поскольку он позволяет использовать несколько языковых наборов на веб-страницах и в каталоге потоков, однако многие исходные клиенты для потоков
типа MP3 использовали Latin1 (ISO 8859-1) или оставляли его для любого набора символов, который используется в источнике. клиентская система.
Это несоответствие символов, как известно, вызывает проблему, поскольку движок статистики и серверы каталогов потоков хотят UTF8, поэтому теперь мы предполагаем Latin1 для потоков,
отличных от Ogg (для обработки общего случая), но вы можете указать альтернативный набор символов с помощью этой опции.
Исходные клиенты также могут указать charset=параметр для URL-адреса обновления метаданных, если они того пожелают.
<public>1</public> Параметр по умолчанию для этого -1указывает, что именно исходный клиент или ретранслятор должен определять, следует ли объявлять эту точку монтирования.
Установка 0запретит любую рекламу, а установка 1заставит ее рекламировать. Если вы используете принудительную рекламу, вам может потребоваться установить другие параметры,
перечисленные ниже, поскольку сервер YP может отказаться от рекламы, если предоставленной информации недостаточно.
<stream-name>My audio stream</stream-name> Установка этого параметра добавит указанное имя в статистику (и, следовательно, YP)
для этой точки монтирования, даже если исходный клиент / реле предоставит ее.
<stream-description>My audio description</stream-description> Установка этого параметра добавит указанное описание в статистику (и, следовательно, YP)
для этой точки монтирования, даже если исходный клиент / реле предоставит ее.
<stream-url>http://some.place.com</stream-url> Установка этого параметра добавит указанный URL в статистику (и, следовательно, YP)
для этой точки монтирования, даже если исходный клиент / реле предоставит ее. URL-адрес обычно предназначен для направления людей на веб-сайт.
<genre>classical</genre> Установка этого параметра добавит указанный жанр в статистику (и, следовательно, YP) для этой точки монтирования,
даже если исходный клиент / реле предоставляет ее. Это может быть что угодно, использование определенных ключевых слов может помочь при поиске в каталогах YP.
<bitrate>64</bitrate> Установка этого параметра добавит указанный битрейт в статистику (и, следовательно, YP) для этой точки монтирования,
даже если исходный клиент / реле предоставит ее. Это указано в кбит / с.
<type>application/ogg</type> Установка этого параметра добавит указанный тип mime в статистику (и, следовательно, YP) для этой точки монтирования,
даже если исходный клиент / реле предоставляет ее. Маловероятно, что это понадобится.
<subtype>vorbis</subtype> Установка этого параметра добавит указанный подтип в статистику (и, следовательно, YP) для этой точки монтирования.
Подтип действительно помогает серверу YP идентифицировать компоненты типа. Пример настройки: vorbis / theora действительно указывают кодеки в потоке Ogg.
<burst-size>65536</burst-size> Этот необязательный параметр позволяет указать размер пакета, который переопределяет размер пакета по умолчанию, определенный в пределах. Значение в байтах.
<mp3-metadata-interval>4096</mp3-metadata-interval> Этот необязательный параметр указывает, какой интервал в байтах существует между обновлениями метаданных в потоках, совместимых с shoutcast.
Это применимо только к новым слушателям, подключающимся к этой точке монтирования, а не к существующим слушателям, возвращающимся к этой точке монтирования.
По умолчанию используется либо жестко заданный сервер по умолчанию, либо значение, переданное от реле
<hidden>1</hidden> Включите это, чтобы предотвратить отображение этого монтирования на страницах xsl. Это в основном для случаев, когда настроено локальное реле,
и вы не хотите, чтобы источник локального реле отображался.
<no-yp>1</no-yp>
<authentication type="htpasswd">
<option name="filename" value="myauth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication> Это указывает на то, что для указанной точки монтирования потребуется аутентификация слушателя (или источника).
В настоящее время мы поддерживаем схему аутентификации на основе файлов ( type=htpasswd) и пересылку запросов аутентификации на основе URL.
Точка монтирования, настроенная с помощью аутентификатора, будет отображать красный ключ рядом с именем точки монтирования на экранах администратора.
Вы можете узнать больше об аутентификации слушателя и аутентификации источника на основе URL-адресов здесь .
<http-headers> Этот элемент помещается в любом месте раздела монтирования конфигурации icecast.
Он будет содержать <header>дочерние элементы, которые один за другим определяют фактические заголовки HTTP.
header Этот тег определяет фактический заголовок, который будет отправлен HTTP-клиенту в ответ на каждый запрос для этой точки монтирования,
но в настоящее время только в том случае, если код состояния HTTP равен «200». Этот тег может содержать следующие атрибуты
name является обязательным, и его значение определяет имя поля заголовка HTTP.
value является обязательным, и его значение определяет значение поля заголовка HTTP.
<header name="Access-Control-Allow-Origin" value="*" />
<header name="X-Robots-Tag" value="index, noarchive" />
<header name="foo" value="bar" status="200" />
<header name="Nelson" value="Ha-Ha!" status="404" />
</http-headers>
<on-connect>/home/icecast/bin/stream-start</on-connect> Укажите программу, которая запускается при запуске исходного кода. Ему передается параметр,
который представляет собой имя запускаемой точки монтирования. Обработка потока не дожидается завершения скрипта.
Следует проявлять осторожность, поскольку существует небольшая вероятность того, что дескрипторы потоковых файлов будут перепутаны с дескрипторами файлов сценариев,
если номера FD превышают 1024. Этот вопрос будет рассмотрен в следующем выпуске Icecast. Эта опция недоступна в Win32.
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect> Укажите программу, которая запускается при завершении исходного кода.
Ему передается параметр, который является именем завершившейся точки монтирования. Обработка потока не дожидается завершения скрипта.
Следует проявлять осторожность, поскольку существует небольшая вероятность того, что дескрипторы потоковых файлов будут перепутаны с дескрипторами файлов сценариев,
если номера FD превышают 1024. Этот вопрос будет рассмотрен в следующем выпуске Icecast. Эта опция недоступна в Win32.
</mount>
-->
<fileserve>1</fileserve>
<!-- установите точку монтирования для источника shoutcast для использования, если нет, то по умолчанию
указан параметр /stream, но вы можете изменить его здесь, Если есть альтернатива
разыскивается или требуется продлени
<shoutcast-mount>/live.nsv</shoutcast-mount>
-->
<paths>
<!-- базовый каталог используется только в том случае, если включен chroot -->
<basedir>/var/lib/icecast</basedir>
<!-- Обратите внимание, что если <chroot> включен ниже, то эти пути должны быть оба
относитесь к новому root, а не к исходному корню root -->
<logdir>/var/lib/icecast/logs</logdir>
<webroot>/var/lib/icecast/web</webroot>
<adminroot>/var/lib/icecast/admin</adminroot>
<pidfile>/var/run/icecast/icecast.pid</pidfile>
<!--
<allow-ip>/path/to/ip_allowlist</allow-ip>
<deny-ip>/path_to_ip_denylist</deny-ip>
<ssl-certificate>/path/to/certificate.pem</ssl-certificate>
<ssl-allowed-ciphers>ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS</ssl-allowed-ciphers>
-->
<!-- Псевдонимы: обрабатывайте запросы на путь "Источник source" как на путь "dest"
Может быть сделан специфичным для порта или связанного адреса с помощью "порта port"
и атрибуты "привязка-адрес bind-address".
-->
<!--
<alias source="/foo" dest="/bar"/>
-->
<!-- Псевдонимы: также могут быть использованы для простых перенаправлений,
этот пример перенаправит все запросы на http://server:port/ to
страница состояния
-->
<alias source="/" dest="/status.xsl"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<playlistlog>playlist.log</playlistlog>
<loglevel>1</loglevel> <!-- 4 Отладки, 3 Информации, 2 Предупреждения, 1 Ошибка -->
<logsize>10000</logsize> <!-- Максимальный размер файла журнала -->
<!-- Если logarchive включен (1), то при достижении logsize
файл журнала будет перемещен в [error|access|playlist].бревно.Метка даты,
в противном случае он будет перемещен в [error|access|playlist].бревно.старый.
По умолчанию используется неархивный режим (т. е. перезапись)
-->
<!-- <logarchive>1</logarchive> -->
</logging>
<security>
<chroot>0</chroot>
<changeowner>
<user>icecast</user>
<group>icecast</group>
</changeowner>
</security>
</icecast>
icecast -c /path/to/icecast.xml
или
icecast -b -c /etc/icecast.xml
Если ошибка более подробно xmllint icecast.xml
Разрешить порты 8000 и 8001
Если все ок можно попробовать зайти веб интерфейс http://IP-сервера : и порт который указали в конфигурации обычно 8000
Добавить в автозагрузку
chkconfig --add icecast
chkconfig icecast on или chkconfig icecast2 on
3 команды старта
service icecast start
systemctl start icecast
/etc/rc.d/init.d/icecast start
Просмотр ошибок в журнале
journalctl -xn
После изменения конфига перечитываем сервисы
systemctl --system daemon-reload
Проверка пользователя
su - icecast -s /bin/bash
export PATH=/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin
Служба запускается от пользователя icecast у меня тут были некоторые проблемы
Запускаю вручную от root все ок запускается работает от пользователя icecast
Запускаю как службу или останавливаю все вроде работает но никак не реагирует пишет запущенно веб интерфейс не досупен запускаю командой пытаюсь остановить службой пишет остановлено веб интерфейс работает надо убивать процесс.
У меня была ошибка
[icecast@RAJONPROXY ~]$ icecast -b -c /etc/icecast.xml
Starting icecast2
Detaching from the console
[icecast@RAJONPROXY ~]$ [2020-10-05 11:33:54] WARN CONFIG/_parse_root Warning, server version string override detected. This may lead to unexpected client software behavior.
WARNING: Cannot change server root unless running as root.
FATAL: could not open error logging (/logs/error.log): No such file or directory
FATAL: could not open access logging (/logs/access.log): No such file or directory
FATAL: could not open playlist logging (/logs/playlist.log): No such file or directory
FATAL: Could not start logging
в файле /etc/icecast.xml
Отключил
<chroot>0</chroot>
И прописал полный путь
<logdir>/var/lib/icecast/logs</logdir>
<webroot>/var/lib/icecast/web</webroot>
<adminroot>/var/lib/icecast/admin</adminroot>
<pidfile>/var/run/icecast/icecast.pid</pidfile>
./var/lib/icecast - вебка
./etc/rc.d/init.d/icecast - конфиг службы
chmod 777 -R icecast
chmod 777 /etc/rc.d/init.d/icecast
chmod 777 /etc/icecast.xml
mkdir /var/run/icecast
chmod 777 /var/run/icecast
chmod 777 -R /var/lib/icecast
Что то корректно не отрабатывал chroot>1</chroot по идее он должен был задать корневую папку /var/lib/icecast
<!-- базовый каталог используется только в том случае, если включен chroot -->
<basedir>/var/lib/icecast</basedir>
И все остальные пути он бы увидел и ошибки бы не было так как папка icecast была бы для него корнем и при попытке что либо взломать через icecast максимально можно было попасть в папку icecast что более безопастно.
О работе chroot можно почитать отдельно.
Возможно кому то поможет Не есть хорошо но служба работает не корректно в некоторых случаях без прав добавляем пользователя в группу root
usermod -a -G root icecast
Имя пользователя может быть icecast2
Просмотреть пользователей
cat /etc/passwd
icecast2104:106::/usr/share/icecast2:/usr/sbin/nologin
Группы
cat /etc/group
icecast106:
Вид веб интерфейса переведен на русский У меня используется как ретранслятор потока, можно сделать свой поток из локальных файлов аудио или своего эфира поставив дополнительное ПО, так же делать врезку в текущие потоки или перенос пользователей из потока в поток.
То что не поддерживает MP3 версия это просто нужно поправить строку в файле status.xsl
xsl:if test="server_type and ((server_type = 'application/ogg') or (server_type = 'audio/ogg') or (server_type = 'audio/mp3') or (server_type = 'audio/mpeg'))">
Сделано так что некоторые браузеры из за лицензии не поддерживаю не воспроизводят mp3 и у пор сделан на ogg поток!
Использование https ssl
Сертификат должен быть выдан та тоже доменное имя на каком работает icecast
например http://radiotest.ru то и сертификат должен быть выпущен на radiotest.ru , а не какое ни будь другое например radioyo.ru так ssl работать не будет.
Далее сертификат должен быть в расширении .pem быстрее всего он сразу в таком и сгенерируется, но если будет .cer, .crt, и .key
нужно конвертировать в .pem Как очень много информации в интернете Пример
После того как получен .pem сертификат прописываем его в конфигурацию в файл icecast.xml так же прописываем контрольную сумму сертификата ssl-allowed-ciphers (не обязательно жестко задает какой сертификат использовать по совпадению контрольной суммы в файле сертификата)
<paths>
<ssl-certificate>C:\Program Files (x86)\Icecast\icecast.pem</ssl-certificate> (путь к сертификату в папке icecast)
<ssl-allowed-ciphers>ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS</ssl-allowed-ciphers>
<alias source="/foo" dest="/bar"/>
</paths>
Перезапускаем icecast
Заходим уже по https://
и видим вебка открылась https:// а потоков нет, потоки остались на http://
Для того чтобы перевести потоки на https:// нужно добавить порт к потокам для ssl будет использоваться 2 порта: 1 обычный http 8000 и 2 будет https 8443 (при желании обычный можно будет отключить)
listen-socket> (http порт оставил, т.к. радио крутится в каталогах типа PCradio)
<port>8000</port>
</listen-socket>
<listen-socket> (Https порт)
<port>8443</port>
<ssl>1</ssl>
</listen-socket
Порты указываете какие нравятся главное чтоб они были разные не пересекались между собой
Перезапускаем icecast и пробуем по https://
Пример https://radiotest.ru:8443 должны появится потоки на радио пример https://radiotest.ru:8443/наш поток
Если не выводятся логи можно попробовать прописать полный путь до лог файла
<basedir>C:/Program Files (x86)/Icecast/</basedir>
<logdir>C:/Program Files (x86)/Icecast/logs</logdir>
<pidfile>C:/Program Files (x86)/Icecast/icecast.pid</pidfile>
<webroot>C:/Program Files (x86)/Icecast/web</webroot>
<adminroot>C:/Program Files (x86)/Icecast/admin</adminroot>
<allow-ip>/path/to/ip_allowlist</allow-ip>
<deny-ip>/path_to_ip_denylist</deny-ip>
Еще пример
Обратите внимание, что это сделает ваш поток доступным на порту 443 вместо 8000. Некоторые клиенты (например, facebookexternalhit / 1.1) могут попытаться завязать поток, поскольку думали, что это https-URL, ожидающий подключения. Это может быть не то поведение, которого вы ожидаете или желаете.
У кого то не получилось
Icecast, работающий по адресу http://vgsound.online:8085/stream.ogg и это нормально, но мы хотим, чтобы это выполнялось через https. Как описано ранее, здесь не задействован веб-сервер, и мы запускаем все наши службы, размещенные нами сами. Icecast прямо из коробки.
Теперь нам удалось получить файлы для SSL от SSL for Free / Letsencrypt, в результате чего мы получили три разных файла: ca_bundle.crt, certificate.crt и private.key. Сертификат сделан для домена vgsound.online.
Теперь нужно запустить поток для https://vgsound.online:8085/stream.ogg . В файле config.xlm мы безуспешно перепробовали всевозможные комбинации.
Подскажите, пожалуйста, что делать. У нас есть все ингредиенты, но мы не знаем, как это запустить.
Я вижу проблему в том, что Icecast для Windows не поддерживает SSL.
Возможно, вам придется вставить прокси, который может передавать ogg и делать это безопасно.
Или используйте другой операционной системой.
сертификата icecast.pem.
(Для создания последнего нужно скопировать содержимое файлов fullchain.pem и privkey.pem, открыв их текстовым редактором, в один файл и сохранить его под именем icecast.pem.) Необходимо убедиться, что в файле icecast.xml прописаны два порта: один для http-соединения (8000), другой для защищенного https-соединения (8443). Строки с указанием пути к SSL-сертификату и указанием https-порта необходимо раскомментировать. В файле вместо ssl может быть прописано tls — разницы я не увидел.
Совместимость с Icecast и Icecast-KH
Icecast 2.4, 2.5 и Icecast-KH используют немного другой синтаксис для настройки своих SSL-сертификатов. RSAS совместим со всеми тремя форматами, что упрощает обновление с любого из них.
<!--<ssl-certificate>/path/to/certificate.pem</ssl-certificate> <!--Путь к вашему файлу сертификата SSL / TLS (в формате PEM) с привязанной к нему цепочкой сертификатов.-->
<ssl-allowed-ciphers>ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS</ssl-allowed-ciphers> --> <!--(Необязательно) Список разрешенны
<!--<ssl-certificate>.pem</ssl-certificate>--> <!--PEM-файл, содержащий сертификат сервера. Сюда может входить пакет, но это не обязательно.-->
<!--<ssl-private-key>.pem</ssl-private-key> --> <!--Ключевой файл, предоставленный подписывающим органом-->
<!--<ssl-cafile></ssl-cafile>--> <!--Часто это предоставляется как часть библиотеки SSL, но при необходимости вы можете указать другую-->
<!--<ssl-dhparams></ssl-dhparams>--> <!--((Необязательно) Файл параметров Диффи-Хеллмана для определенных наборов шифров.-->
Начиная с 2.4.0-kh5 речь о сборке KH
автоматическое определение SSL-соединений во входящих сокетах.
Теперь нет необходимости в <ssl> в listen-socket, но он все еще существует для обеспечения совместимости.
добавьте <ssl-private-key> в разделе <paths>, чтобы разрешить использование комбинированного PEM или отдельных файлов SSL-ключей/сертификатов.
выберите URL-адрес https/http в автоматически сгенерированном m3u на основе входящего запроса.
По раздельности не заработало
<ssl-certificate>/etc/letsencrypt/live/домен/fullchain.pem</ssl-certificate>
<ssl-private-key>/etc/letsencrypt/live/домен/privkey.pem</ssl-private-key>
`privkey.pem`: закрытый ключ для вашего сертификата.
`fullchain.pem`: файл сертификата, используемый в большинстве серверных программ. (крнневой + серт)
`chain.pem` : используется для сшивания OCSP в Nginx >=1.3.7.
`cert.pem` : нарушает работу многих конфигураций сервера и не должен использоваться без ознакомления с дополнительной документацией.
[2024-04-06 16:27:59] WARN connection/get_ssl_certificate Invalid cert file /etc/letsencrypt/live/домен/icecast.pem (system lib)
[2024-04-06 16:27:59] INFO connection/get_ssl_certificate No SSL capability on any configured ports
Недействительный файл сертификата /etc/letsencrypt/live/домен/fullchain.pem (системная библиотека)
Нет поддержки SSL на любых настроенных порта
Объединяем в 1 файл сертификаты и ключ (на примере бесплатного 90 дневного сертификата) и даем права
cat /etc/letsencrypt/live/домен/fullchain.pem > /etc/icecast/icecast.pem
cat /etc/letsencrypt/live/домен/privkey.pem >> /etc/icecast/icecast.pem
chown icecast2:icecast /etc/icecast/icecast.pem
В конфигурации
<ssl-certificate>/etc/icecast/icecast.pem</ssl-certificate>
<ssl-allowed-ciphers>ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS</ssl-allowed-ciphers>
kill-icecast.sh
Код: Выделить всё
#!/bin/bash
# Получаем основной PID процесс icecast, без дочерних.
icecastpid=$(pgrep -fo "icecast")
if [ -n "$icecastpid" ]; then
echo "Завершаем процесс icecast" "$icecastpid"
kill -15 $icecastpid &
sleep 5
echo "Запускаем обратно icecast"
icecast -b -c /etc/icecast.xml &
else
echo "Запускаем icecast"
icecast -b -c /etc/icecast.xml &
fi
#pgrep -fo "icecast"|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null & |sleep 5|icecast -b -c /etc/icecast.xml &; else icecast -b -c /etc/icecast.xml &; fi'
# Проверим еще раз что процесс завершился несколько раз)
#ps -e|grep -Ei "icecast"| awk '{print $1}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else start; fi'
#ps -e|grep -Ei "icecast"| awk '{print $1}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else start; fi'
#ps -e|grep -Ei "icecast"| awk '{print $1}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else start; fi'
#linkspid=`ps -e|grep -Ei "icecast"| awk '{print $1}'`
# Завершим процесс
#kill "${linkspid}"
#kill -15 "${linkspid}"
#kill -9 "${linkspid}"
#kill -TERM "${linkspid}"
#kill -KILL "${linkspid}"