icecast

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

icecast

Сообщение Артём Мамзиков »

Что мы решили сделать? Что то вроде ретранслятора потока радио.
Почему просто не дать доступ клиентам на сервис с онлайн радио? так как 1.нельзя закрыта внешка, 2. если все ломанутся слушать даже одну и туже радиостанцию нагрузка ляжет вся на внешний канал связи на инет.

Скачать мои примеры конфигураций и плееров
icecast.zip
icecast.zip
(179.24 КБ) 8 скачиваний
По этому ставим 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

Схема
схема icecast
схема icecast
Когда то я делал что то подобное при помощи 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
Потоки на https
Плейлисты
Показать
Radio-Vologda-online2.gkvr.m3u
#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
Переходим к Установке icecast на AltLinux!

Подготовка
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
Пример настройки icecast.xml
Показать
<icecast>
<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

Вид веб интерфейса переведен на русский
ICECAST Статус
ICECAST Статус
ICECAST Инфо
ICECAST Инфо
ICECAST Администратор
ICECAST Администратор
ICECAST Список точек монтирования
ICECAST Список точек монтирования
У меня используется как ретранслятор потока, можно сделать свой поток из локальных файлов аудио или своего эфира поставив дополнительное ПО, так же делать врезку в текущие потоки или перенос пользователей из потока в поток.
То что не поддерживает 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 поток!
icecastplyer.jpg
icecastplyer.jpg

Использование https ssl
Пример использование на Windows 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 и делать это безопасно.
Или используйте другой операционной системой.
количество слов: 2546
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

icecast

Сообщение Артём Мамзиков »

Перевод различные настройки проверки
Показать
Каждый сервер Icecast может содержать несколько трансляций (или точек монтирования), каждая из которых содержит отдельный поток контента. «Точка монтирования» - это уникальное имя на вашем сервере, идентифицирующее конкретный поток - оно выглядит как имя файла, например «/stream.ogg». Слушатель может одновременно прослушивать только одну точку монтирования. Это означает, что у вас может быть один сервер Icecast, содержащий либо несколько трансляций с разным контентом, либо, возможно, одну и ту же трансляцию, но с потоками с разным битрейтом или качеством. В этом случае каждая трансляция или поток представляет собой отдельную точку монтирования.
На этом этапе описанные здесь шаги относятся к версии Icecast для Unix или Win32 для консоли. Icecast также доступен в версии с графическим интерфейсом пользователя Win32, и шаги настройки аналогичны, но не совсем одинаковы.
Первым шагом в этом процессе является поиск и установка самого сервера Icecast2. Как это сделать, в этой документации не говорится. После установки у вас должен быть бинарный файл Icecast и 3 каталога.
conf
Содержит файл конфигурации Icecast ( icecast.xml), который определяет все параметры конфигурации для сервера.
admin
Содержит файлы xslt, которые используются сервером Icecast для предоставления веб-интерфейса к возможностям администрирования сервера.
logs
Это пустой каталог, который (если он указан в файле конфигурации) будет содержать все журналы (их 2) для Icecast.
Следующим шагом является редактирование icecast.xmlфайла и установка соответствующих значений. Большинство указанных значений в примерах подходят, для базовой настройки следует указать следующие записи и, при необходимости, изменить их в соответствии с вашей ситуацией:

<hostname>- DNS-имя или IP-адрес, используемые для списков потокового каталога.
<source-password>- Будет использоваться для аутентификации исходного клиента.
<admin-password>- Будет использоваться для аутентификации административных функций Icecast.
<listen-socket>(порт и адрес привязки)

После изменения файла конфигурации вы сможете запустить сервер с помощью следующей команды

icecast -c /path/to/icecast.xml
Если сообщения об ошибках не появляются, проверьте error.logфайл на наличие сообщения «сервер запущен», оно будет выглядеть примерно так:

[2003-10-31 13:04:49] INFO main/main.c Icecast 2.3.0 server started
Вы можете заметить небольшие изменения в строке выше, время, несомненно, будет другим, а на некоторых платформах оно main.cбудет просто основным, но ключевым моментом здесь является то, что сервер запущен, ведение журнала работает и отображается версия.

Кроме того, можно проверить , что он начал, посетив следующий URL: http://yourip:port/admin/stats.xml. Вам будет предложено ввести имя пользователя и пароль. Введите имя пользователя adminи пароль, для которого вы ввели <admin-password>. Если все в порядке, вы должны увидеть небольшое XML-дерево, которое представляет статистику Icecast (подробнее об этом позже).

Теперь, когда сервер Icecast запущен, вы должны настроить исходный клиент. Информация, которая вам понадобится для исходного клиента, следующая:

IP-адрес и порт сервера icecast - оба взяты из <listen-socket>
исходного пароля - из<source-password>

Кроме того, вам нужно будет выбрать точку монтирования и указать ее в исходном клиенте. Icecast не нужно знать о каждой точке монтирования (хотя вы можете настроить параметры для конкретной точки монтирования - это описано в разделе «Расширенная конфигурация»), однако есть некоторые моменты, которые следует упомянуть относительно точек монтирования. Все потоки Ogg Vorbis должны иметь точки монтирования, заканчивающиеся на .ogg(i, e. /mystream.ogg). Это происходит из-за того, что большинство медиаплееров лениво определяют тип потока. Потоки MP3 обычно не содержат расширения (/ mystream). Точки монтирования также не должны содержать никаких пробелов или нечетных символов (опять же из-за ленивого кодирования многих медиаплееров).

После настройки исходного клиента вы сможете подключить его к серверу Icecast. Убедитесь, что он подключен, нажав URL-адрес stats.xml, упомянутый выше.

Теперь, когда у вас есть источник подключаемого, слушая поток включает в себя просто открыв соответствующий следующий URL в браузере: http://yourip:port/mounpoint-you-specified. Так, например, если вы подключили исходный клиент к серверу icecast, расположенному в 192.0.2.23:8000с точкой монтирования /mystream.ogg, то вы откроете: http://192.0.2.23:8000/mystream.oggили http://192.0.2.23:8000/mystream.ogg.m3u. Обратите внимание, что URL-адрес с .m3uрасширением будет служить ссылкой, которая открывает большинство медиаплееров. Также важно отметить, что m3u не обязательно должен содержать только поток MP3, он может содержать потоки произвольного типа контента и используется Icecast для обслуживания списка воспроизведения, который представляет вашу трансляцию для слушающих клиентов. В качестве альтернативы вы можете открыть URL-адрес потока прямо в вашем медиаплеере ( http://192.0.2.23:8000/mystream.oggв этом случае)

"настройка" Настройка веб-серверов Apache 2.4.4 адаптироваться ко многим видам систем.




Использование: ./configure [OPTION]... [ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ]...
Для назначения переменных окружения (например, CC, CFLAGS...), укажите их как
VAR=ЗНАЧЕНИЕ. Ниже приведены описания некоторых полезных переменных.
Значения по умолчанию для параметров указаны в скобках.
Конфигурация:
-h, --help отобразите эту справку и выйдите
--справка=короткие параметры отображения, характерные для данного пакета
--help=рекурсивное отображение краткой справки по всем включенным пакетам
-V, --version отображение информации о версии и выход
-q, --quiet, --silent do not print `проверка ...' сообщения
--кэш-файл=файл результаты теста кэша в файл [гостей с ограниченными физическими]
-C, --config-cache псевдоним для `--cache-file=config.кэш'
-n, --no-create не создавать выходные файлы
--srcdir=DIR найдите источники в DIR [configure dir or `..']

Каталог установки:
--префикс=префикс архитектурно-независимые файлы установки в приставку
[/usr/local]
--exec-prefix=EPREFIX установка архитектурно-зависимых файлов в EPREFIX
[ПРЕФИКС]

По умолчанию, сделать установить установите все файлы в
`/usr/local/bin', `/usr/local/lib' и т. д. Вы можете указать
установочный префикс, отличный от `/usr/local', использующий `--prefix',
например, `--prefix=$HOME'.

Для лучшего контроля используйте следующие параметры.
Тонкая настройка установочных каталогов:
--bindir=DIR пользовательские исполняемые файлы [EPREFIX/bin]
--sbindir=DIR исполняемые файлы системного администратора [EPREFIX/sbin]
--libexecdir=исполняемые файлы программы DIR [EPREFIX/libexec]
--sysconfdir=DIR только для чтения данных одной машины [префикс/etc]
--sharedstatedir=DIR модифицируемая архитектура-независимые данные [префикс/com]
--localstatedir=DIR модифицируемые одномашинные данные [префикс/var]
--runstatedir=DIR модифицируемые данные для каждого процесса [LOCALSTATEDIR/run]
--libdir=библиотеки объектного кода DIR [EPREFIX/lib]
--includedir=DIR C заголовочные файлы [префикс/включить]
--oldincludedir=DIR C заголовочные файлы для не-gcc [/usr/include]
--datarootdir=DIR Arch только для чтения.-независимый корень данных [префикс/доля]
--datadir=DIR архитектура только для чтения-независимые данные [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-зависимые данные [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/icecast]
--htmldir=DIR html документация [DOCDIR]
--dvidir=DIR dvi документация [DOCDIR]
--pdfdir=DIR pdf документация [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]

Название программы:
--программы-префикс=префикс, добавляемый префикс установлены имена программ
--program-suffix=суффикс добавление суффикса к именам установленных программ
--программы-преобразование-имя=программа запустить программу СЭД на установленные имена программ

Тип системы:
--сборка=сборка настройка Для дом на сборке догадались]
--host=HOST cross-compile для сборки программ для запуска на хосте [BUILD]

дополнительная функция:
--отключить-вариант-проверка игнорировать нераспознанные опции --Enable/--с нужным
--disable-FEATURE do not include FEATURE (то же самое, что --enable-FEATURE=no)
--включение-функция[=АРГ] включить функцию [АРГ=да]
--включить-молчит-правила менее подробного вывода сборки (отменить: "принять в=1")
--отключить-молчание-правила построения подробного вывода (отменить: "сделать V=0")
--включить-сопровождающий-режим
включить сделать правила и зависимости не полезными (и
иногда сбивает с толку) для случайного установщика
--включить-отслеживание зависимостей
не отвергайте медленные экстракторы зависимостей
--отключить-отслеживание зависимостей
ускоряет одноразовую сборку
--включить-общий[=ПКГС] построить разделяемые библиотеки [по умолчанию=да]
--включить статический[=ПКГС] построить статические библиотеки [по умолчанию=да]
--позволяют быстро установить[=ПКГС]
оптимизация для быстрой установки [по умолчанию=да]
--disable-libtool-lock избегайте блокировки (может нарушить параллельную сборку)
--disable-largefile опустить поддержку больших файлов
--отключить-отключить поддержку каталога гг гг

дополнительный пакет:
--с-пакет[=АРГ] использовать [АРГ=да]
--без-пакета не используйте пакет (то же самое, что --with-PACKAGE=no)
--с-пос[=ПКГС] старайтесь использовать только пик/не пик объектов [по умолчанию=использовать
оба]
--with-aix-soname=aix|svr4|both
вариант управления версиями общей библиотеки (он же "SONAME") для
предоставьте на AIX, [default=aix].
--with-gnu-ld предположим, что компилятор C использует GNU ld [default=no]
--with-sysroot[=DIR] Поиск зависимых библиотек внутри DIR (или
sysroot компилятора, если он не указан).
--with-xslt-config=PATH используйте xslt-config в PATH, чтобы найти libxslt
--with-ogg=PREFIX префикс, в котором установлен libogg (необязательно)
--with-vorbis=PREFIX префикс, в котором установлен libvorbis (необязательно)
--with-theora=PREFIX префикс, в котором установлена libtheora (необязательно)
--with-speex=PREFIX префикс, в котором установлен libspeex (необязательно)
--с-скручиваемость=pfx-файлы с префиксом, где установлен libcurl использует это (опционально)
--с-скручиваемость-конфиг=завиток-конфиг
Используйте curl-config, чтобы найти libcurl
--с префиксом-openssl=PFX, где установлен openssl (необязательно)

Некоторые влиятельные переменные окружения:
Команда компилятора CC C
Уровне, с флагами компилятора
Флаги компоновщика LDFLAGS, например-L<lib dir>, если у вас есть библиотеки в a
нестандартный каталог <lib dir>
Библиотеки библиотеки пройти, чтобы компоновщик, например,- л<библиотеки>
CPPFLAGS (Objective) флаги препроцессора C/C++, например -I<include dir> if
у вас есть заголовки в нестандартном каталоге <include dir>
LT_SYS_LIBRARY_PATH
Определяемый пользователем путь поиска библиотеки во время выполнения.
Препроцессор CPP C
XSLTCONFIG программа настройки XSLT
OGG_PREFIX путь к установке ogg
VORBIS_PREFIX
путь к установке vorbis
И многие пути и многие другие установки
Путь к установке кодек Speex кодек Speex

Используйте эти переменные, чтобы переопределить выбор, сделанный "configure", или помочь
это для поиска библиотек и программ с нестандартными именами/местоположениями.

Сообщайте об ошибках в <icecast@xiph.org>.

<relay>
<server>nashe1.hostingradio.ru</server> Это IP-адрес сервера, который содержит точку монтирования для ретрансляции.

<port>80</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>


<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>

<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>





Точка Mонтирования

+Название Потока:
+Описание Потока:
Тип Содержимого:
Трансляция началась:
Скорость передачи данных Битрейс:
Качество:
Качество Видео:
Размер кадров:
Частота кадров:
+Текущие Слушатели:
+Максимальное кол-во слушателей:
+Жанр:
+URL-адрес потока:
+В данный момент играет:


+Stream Name: Stream Title:
+Stream Description:
Content Type:
Stream started: Mount Start:
+Bitrate:
Quality:
Video Quality:
Framesize:
Framerate:
+Listeners (current): Current Listeners:
+Listeners (peak): Peak Listeners:
+Genre: Stream Genre:
+Stream URL:
+Currently playing: Current Song:

Not Connected
Support icecast development at




<relay>
<server>nashe1.hostingradio.ru</server>
<port>80</port>
<mount>/nashe-128.mp3</mount>
<local-mount>/Наше Радио</local-mount>
<on-demand>1</on-demand>
<server_name>Название Потока</server_name>
<server_description>Описание Потока</server_description>
<server_type>Тип Содержимого</server_type>
<server_url>URL-адрес потока</server_url>
<genre>Жанр</genre>
<bitrate>Скорость передачи данных Битрейс 64</bitrate>
</relay>


<relay>
<server>nashe1.hostingradio.ru</server>
<port>80</port>
<mount>/nashe-128.mp3</mount>
<local-mount>/Наше Радио</local-mount>
<on-demand>1</on-demand>
<stream-name>Название Потока</stream-name>
<stream-description>Описание Потока</stream-description>
<content-type>Тип Содержимого</content-type>
<stream-url>URL-адрес потока</stream-url>
<genre>Жанр</genre>
<bitrate>Скорость передачи данных Битрейс 64</bitrate>
</relay>


потоки авторадио
http://101.ru/api/channel/getListServer ... rmat=html5
http://193.232.148.43/v3_1


Проверки потоков
http://51.15.175.27/nashe-128.mp3 наше радио
http://91.219.74.220:8000/Vanya-high.ogg радио ваня
http://23.105.253.228/dfm128.mp3 ДФМ
http://46.21.248.168:8052/europaplus256.mp3 Европа плюс
http://92.255.66.132:8101/rr_spb РадиоРекорд
http://91.207.59.30/stream/air/aac/64/100 Авторадио
http://51.15.188.149:8064/moscow.dorognoe.mp3 Дорожное
http://23.105.253.212/rusradio128.mp3 Русское радио
http://78.140.208.20:8800/pfm_320 Питер ФМ
Веб интерфейс на русском
Директория \web
Файл status.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0">
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1 id="header">Icecast2 Статус</h1>
	<!--меню заголовка индекса-->
	<div id="menu">
		<ul>
			<li><a href="admin/">Администрирование</a></li>
			<li><a href="status.xsl">Статус Сервера</a></li>
			<li><a href="server_version.xsl">Версия</a></li>
		</ul>
	</div>
	<!--меню заголовка конечного индекса -->
	<xsl:text disable-output-escaping="yes">
	&lt;!-- Внимание:
	НЕ ПЫТАЙТЕСЬ АНАЛИЗИРОВАТЬ ВЫВОД ICECAST HTML!
	Веб-интерфейс может полностью изменяться между выпусками.
	Если у вас есть необходимость в автоматической обработке данных сервера,
	пожалуйста, ознакомьтесь с соответствующей документацией. Последние документы:
	 https://icecast.org/docs/icecast-latest/icecast2_stats.html
	-->
	</xsl:text>
	<!--состояние точки монтирования-->
	<xsl:for-each select="source">
		<xsl:choose>
			<xsl:when test="listeners">
			<div class="roundbox">
				<div class="mounthead">
					<h3 class="mount">Точка Mонтирования<xsl:value-of select="@mount" /></h3>
					<div class="right">
						<xsl:choose>
							<xsl:when test="authenticator">
								<a class="auth" href="/auth.xsl">Логин</a>
							</xsl:when>
							<xsl:otherwise>
								<ul class="mountlist">
									<li><a class="play" href="{@mount}.m3u">M3U</a></li>
									<li><a class="play" href="{@mount}.xspf">XSPF</a></li>
									<li><a class="play" href="{@mount}.vclt">VCLT</a></li>
								</ul>
							</xsl:otherwise>
						</xsl:choose>
					</div>
				</div>
				<div class="mountcont">
					<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'))">
						<div class="audioplayer">
							<audio controls="controls" preload="none">
								<source src="{@mount}" type="{server_type}" />
							</audio>
						</div>
					</xsl:if>
					<table class="yellowkeys">
						<tbody>
							<xsl:if test="server_name">
								<tr>
									<td>Название Потока:</td>
									<td><xsl:value-of select="server_name" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="server_description">
								<tr>
									<td>Описание Потока:</td>
									<td><xsl:value-of select="server_description" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="server_type">
								<tr>
									<td>Тип Содержимого:</td>
									<td><xsl:value-of select="server_type" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="stream_start">
								<tr>
									<td>Трансляция началась:</td>
									<td class="streamstats"><xsl:value-of select="stream_start" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="bitrate">
								<tr>
									<td>Скорость передачи данных Битрейс:</td>
									<td class="streamstats"><xsl:value-of select="bitrate" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="quality">
								<tr>
									<td>Качество:</td>
									<td class="streamstats"><xsl:value-of select="quality" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="video_quality">
								<tr>
									<td>Качество Видео:</td>
									<td class="streamstats"><xsl:value-of select="video_quality" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="frame_size">
								<tr>
									<td>Размер кадров:</td>
									<td class="streamstats"><xsl:value-of select="frame_size" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="frame_rate">
								<tr>
									<td>Частота кадров:</td>
									<td class="streamstats"><xsl:value-of select="frame_rate" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="listeners">
								<tr>
									<td>Текущие Слушатели:</td>
									<td class="streamstats"><xsl:value-of select="listeners" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="listener_peak">
								<tr>
									<td>Максимальное кол-во слушателей:</td>
									<td class="streamstats"><xsl:value-of select="listener_peak" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="genre">
								<tr>
									<td>Жанр:</td>
									<td class="streamstats"><xsl:value-of select="genre" /></td>
								</tr>
							</xsl:if>
							<xsl:if test="server_url">
								<tr>
									<td>URL-адрес потока:</td>
									<td class="streamstats">
										<a href="{server_url}"><xsl:value-of select="server_url" /></a>
									</td>
								</tr>
							</xsl:if>
							<tr>
								<td>В данный момент играет:</td>
								<td class="streamstats">
								<xsl:if test="artist">
									<xsl:value-of select="artist" /> - 
								</xsl:if>
									<xsl:value-of select="title" />
								</td>
							</tr>
						</tbody>
					</table>
				</div>
			</div>
			</xsl:when>
			<xsl:otherwise>
				<h3><xsl:value-of select="@mount" /> - Нет соединения</h3>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл status-json.xsl

Код: Выделить всё

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="xml2json.xslt"/>
<xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="application/json"/>
<xsl:strip-space elements="*"/>

<!-- переопределение импортированной переменной преобразования для включения вывода -->
<xsl:variable name="output">true</xsl:variable>

<!-- скрыть определенные узлы из всех источников -->
<xsl:template match="icestats/source/max_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/public"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/source_ip"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/slow_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/*[contains(name(), 'total_bytes')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/user_agent" ><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>

<!-- скрыть определенные глобальные узлы -->
<xsl:template match="icestats/sources"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/clients"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/stats"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="node()[contains(name(), 'connections')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>

</xsl:stylesheet>
Файл server_version.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0">
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1 id="header">Информация о сервере</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="admin/">Администрирование</a></li>
			<li><a href="status.xsl">Статус Сервера</a></li>
			<li><a href="server_version.xsl">Версия</a></li>
		</ul>
	</div>
	<!--меню заголовка конечного индекса -->

	<div class="roundbox">
		<h3>Информация о сервере</h3>
		<table class="yellowkeys">
			<tbody>
				<xsl:for-each select="/icestats">
				<tr>
					<td>Местоположение</td>
					<td><xsl:value-of select="location" /></td>
				</tr>
				<tr>
					<td>Администратор</td>
					<td><xsl:value-of select="admin" /></td>
				</tr>
				<tr>
					<td>Хост</td>
					<td><xsl:value-of select="host" /></td>
				</tr>
				<tr>
					<td>Версия</td>
					<td><xsl:value-of select="server_id" /></td>
				</tr>
				</xsl:for-each>
				<tr>
					<td>Загрузить</td>
					<td><a href="https://icecast.org/download/">icecast.org</a></td>
				</tr>
				<tr>
					<td>Исходный код</td>
					<td><a href="https://icecast.org/download/#git">icecast.org/download/#git</a></td>
				</tr>
				<tr>
					<td>Документация</td>
					<td><a href="https://icecast.org/docs/">icecast.org/docs</a></td>
				</tr>
				<tr>
					<td>Потоковый Каталог</td>
					<td><a href="http://dir.xiph.org/index.php">dir.xiph.org</a></td>
				</tr>
				<tr>
					<td>Сообщество</td>
					<td><a href="https://icecast.org/contact/">icecast.org/contact</a></td>
				</tr>
			</tbody>
		</table>
	</div>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл auth.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1 id="header">Icecast2 Статус</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="admin/">Администрирование</a></li>
			<li><a href="status.xsl">Статус Сервера</a></li>
			<li><a href="server_version.xsl">Версия</a></li>
		</ul>
	</div>
	<!--меню заголовка конечного индекса -->
	<h2>Страница Авторизации</h2>
	<xsl:for-each select="source">
		<xsl:choose>
		<xsl:when test="listeners">
			<xsl:if test="authenticator">
				<div class="roundbox">
					<h3 class="mount">
						Точка Mонтирования <xsl:value-of select="@mount" />
						<xsl:if test="server_name">
							<small><xsl:value-of select="server_name" /></small>
						</xsl:if>
					</h3>
					<form class="alignedform" method="get" action="/admin/buildm3u">
						<p>
							<label for="name">Имя пользователя: </label>
							<input id="name" name="username" type="text" />
						</p>
						<p>
							<label for="password">Пароль: </label>
							<input id="password" name="password" type="password" />
						</p>
						<input type="hidden" name="mount" value="{@mount}" />
						<input type="submit" value="Login" />
					</form>
				</div>
			</xsl:if>
		</xsl:when>
		<xsl:otherwise>
			<h3><xsl:value-of select="@mount" /> - Нет соединения</h3>
		</xsl:otherwise>
		</xsl:choose>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
количество слов: 2401
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

icecast

Сообщение Артём Мамзиков »

Директория \admin
Файл listclients.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<h2>Статистика слушателя</h2>
	<xsl:for-each select="source">
		<div class="roundbox">
			<div class="mounthead">
				<h3>Точка Mонтирования<xsl:value-of select="@mount" /></h3>
				<div class="right">
					<xsl:choose>
						<xsl:when test="authenticator">
							<a class="auth" href="/auth.xsl">Логин</a>
						</xsl:when>
						<xsl:otherwise>
							<ul class="mountlist">
								<li><a class="play" href="{@mount}.m3u">M3U</a></li>
								<li><a class="play" href="{@mount}.xspf">XSPF</a></li>
								<li><a class="play" href="{@mount}.vclt">VCLT</a></li>
							</ul>
						</xsl:otherwise>
					</xsl:choose>
				</div>
			</div>
			<div class="mountcont">
				<ul class="nav">
					<li class="active"><a href="listclients.xsl?mount={@mount}">Список клиентов</a></li>
					<li><a href="moveclients.xsl?mount={@mount}">Переместить слушателей</a></li>
					<li><a href="updatemetadata.xsl?mount={@mount}">Обновить метаданные</a></li>
					<xsl:if test="authenticator">
						<li><a href="manageauth.xsl?mount={@mount}">Управление аутентификацией</a></li>
					</xsl:if>
					<li><a href="killsource.xsl?mount={@mount}">Убить источник</a></li>
				</ul>
				<xsl:choose>
					<xsl:when test="listener">
						<div class="scrolltable">
							<table class="colortable">
								<thead>
									<tr>
										<td>IP</td>
										<td>Сек. подключен</td>
										<td>Пользовательский агент</td>
										<td>Действие</td>
									</tr>
								</thead>
								<tbody>
									<xsl:variable name = "themount"><xsl:value-of select="@mount" /></xsl:variable>
									<xsl:for-each select="listener">
										<tr>
											<td>
												<xsl:value-of select="IP" />
												<xsl:if test="username">
													(<xsl:value-of select="username" />)
												</xsl:if>
											</td>
											<td><xsl:value-of select="Connected" /></td>
											<td><xsl:value-of select="UserAgent" /></td>
											<td><a href="killclient.xsl?mount={$themount}&amp;id={ID}">Kick</a></td>
										</tr>
									</xsl:for-each>
								</tbody>
							</table>
						</div>
					</xsl:when>
					<xsl:otherwise>
						<p>Нет подключенных слушателей</p>
					</xsl:otherwise>
				</xsl:choose>
			</div>
		</div>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл listmounts.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<h2>Активные точки монтирования</h2>
	<xsl:for-each select="source">
		<div class="roundbox">
			<div class="mounthead">
				<h3 class="mount">Точка Mонтирования <xsl:value-of select="@mount" /></h3>
				<div class="right">
					<xsl:choose>
						<xsl:when test="authenticator">
							<a class="auth" href="/auth.xsl">Логин</a>
						</xsl:when>
						<xsl:otherwise>
							<ul class="mountlist">
								<li><a class="play" href="{@mount}.m3u">M3U</a></li>
								<li><a class="play" href="{@mount}.xspf">XSPF</a></li>
								<li><a class="play" href="{@mount}.vclt">VCLT</a></li>
							</ul>
						</xsl:otherwise>
					</xsl:choose>
				</div>
			</div>
			<div class="mountcont">
				<ul class="nav">
					<li><a href="listclients.xsl?mount={@mount}">Список Клиентов</a></li>
					<li><a href="moveclients.xsl?mount={@mount}">Перемещение Слушателей</a></li>
					<li><a href="updatemetadata.xsl?mount={@mount}">Обновление Метаданных</a></li>
					<xsl:if test="authenticator">
						<li><a href="manageauth.xsl?mount={@mount}">Управление Аутентификацией</a></li>
					</xsl:if>
					<li><a href="killsource.xsl?mount={@mount}">Убить Источник</a></li>
				</ul>
				<p><xsl:value-of select="listeners" /> Слушатель(и)</p>
			</div>
		</div>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл manageauth.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<h2>Управление Аутентификацией</h2>
	<xsl:if test="iceresponse">
		<div class="roundbox">
			<h3>Сообщения</h3>
			<xsl:for-each select="iceresponse">
				<xsl:value-of select="message" /><br />
			</xsl:for-each>
		</div>
	</xsl:if>
	<xsl:for-each select="source">
		<div class="roundbox">
			<h3>Точка Mонтирования <xsl:value-of select="@mount" />
				<xsl:if test="server_name">
					<small><xsl:value-of select="server_name" /></small>
				</xsl:if>
			</h3>
			<ul class="nav">
				<li><a href="listclients.xsl?mount={@mount}">Список клиентов</a></li>
				<li><a href="moveclients.xsl?mount={@mount}">Переместить слушателей</a></li>
				<li><a href="updatemetadata.xsl?mount={@mount}">Обновить метаданные</a></li>
				<li><a href="manageauth.xsl?mount={@mount}">Управление аутентификацией</a></li>
				<li><a href="killsource.xsl?mount={@mount}">Убить источник</a></li>
			</ul>
			<xsl:if test="User">
				<table class="colortable">
					<thead>
						<tr>
							<td>Пользователь</td>
							<td>Действие</td>
						</tr>
					</thead>
					<tbody>
						<xsl:variable name="themount"><xsl:value-of select="@mount" /></xsl:variable>
						<xsl:for-each select="User">
							<tr>
								<td>
									<xsl:value-of select="username" />
								</td>
								<td>
									<a href="manageauth.xsl?mount={$themount}&amp;username={username}&amp;action=delete">Удалить</a>
								</td>
							</tr>
						</xsl:for-each>
					</tbody>
				</table>
			</xsl:if>
			<form class="alignedform" method="get" action="/admin/manageauth.xsl">
				<fieldset>
					<legend>Добавление нового пользователя</legend>
					<p>
						<label for="username">Имя пользователя:</label>
						<input type="text" id="username" name="username"/>
					</p>
					<p>
						<label for="password">Пароль:</label>
						<input type="password" id="password" name="password"/>
					</p>
					<input type="hidden" name="mount" value="{@mount}"/>
					<input type="hidden" name="action" value="add"/>
					<input type="Submit" value="Add"/>
				</fieldset>
			</form>
		</div>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл moveclients.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<xsl:variable name = "currentmount" ><xsl:value-of select="current_source" /></xsl:variable>
	<h2>Перемещение слушателей из <xsl:value-of select="current_source" /></h2>
	<div class="roundbox">
		<h3>Переместиться в какую точку монтирования?</h3>
		<xsl:for-each select="source">
			<p>
				Перейти от <code><xsl:copy-of select="$currentmount" /></code> к <code><xsl:value-of select="@mount" /></code><br />
				<xsl:value-of select="listeners" /> слушатели<br />
				<a href="moveclients.xsl?mount={$currentmount}&amp;destination={@mount}">Перемещение клиентов</a>
			</p>
		</xsl:for-each>
	</div>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл response.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/iceresponse" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<h2>Ответ сервера Icecast</h2>
	<xsl:for-each select="/iceresponse">
		<div class="roundbox">
			<h3>Отклик</h3>
			<p>Сообщение: <xsl:value-of select="message" /></p>
			<p>Код возврата: <xsl:value-of select="return" /></p>
		</div>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл stats.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<!--глобальная статистика сервера -->
	<div class="roundbox">
		<h3>Глобальная Статистика Сервера</h3>
		<table class="yellowkeys">
			<tbody>
				<xsl:for-each select="/icestats">
					<xsl:for-each select="*">
						<xsl:if test = "name()!='source'"> 
							<tr>
							   <td><xsl:value-of select="name()" /></td>
							   <td><xsl:value-of select="." /></td>
							</tr>
						</xsl:if>
					</xsl:for-each>
				</xsl:for-each>
			</tbody>
		</table>
	</div>
	<!--конец глобальной статистики сервера-->

	<!--статистика точки монтирования-->
	<xsl:for-each select="source">
		<xsl:if test = "listeners!=''"> 
			<div class="roundbox">
				<div class="mounthead">
					<h3 class="mount">Точка Mонтирования <xsl:value-of select="@mount" /></h3>
					<div class="right">
						<xsl:choose>
							<xsl:when test="authenticator">
								<a class="auth" href="/auth.xsl">Логин</a>
							</xsl:when>
							<xsl:otherwise>
								<ul class="mountlist">
									<li><a class="play" href="{@mount}.m3u">M3U</a></li>
									<li><a class="play" href="{@mount}.xspf">XSPF</a></li>
									<li><a class="play" href="{@mount}.vclt">VCLT</a></li>
								</ul>
							</xsl:otherwise>
						</xsl:choose>
					</div>
				</div>
				<div class="mountcont">
					<ul class="nav">
						<li><a href="listclients.xsl?mount={@mount}">Список клиентов</a></li>
						<li><a href="moveclients.xsl?mount={@mount}">Переместить слушателей</a></li>
						<li><a href="updatemetadata.xsl?mount={@mount}">Обновить метаданные</a></li>
						<xsl:if test="authenticator">
							<li><a href="manageauth.xsl?mount={@mount}">Управление аутентификацией</a></li>
						</xsl:if>
						<li><a href="killsource.xsl?mount={@mount}">Убить источник</a></li>
					</ul>
					<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'))">
						<div class="audioplayer">
							<audio controls="controls" preload="none">
								<source src="{@mount}" type="{server_type}" />
							</audio>
						</div>
					</xsl:if>
					<table class="yellowkeys">
						<tbody>
							<xsl:for-each select="*">
								<tr>
									<td><xsl:value-of select="name()" /></td>
									<td><xsl:value-of select="." /></td>
								</tr>
							</xsl:for-each>
						</tbody>
					</table>
				</div>
			</div>
		</xsl:if>
	</xsl:for-each>
	<!--статистика конечной точки монтирования-->
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл updatemetadata.xsl

Код: Выделить всё

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0">
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Icecast Стриминг Медиа Сервер</title>
	<link rel="stylesheet" type="text/css" href="/style.css" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
</head>
<body>
	<h1>Icecast2 Администратор</h1>
	<!--меню заголовка индекса -->
	<div id="menu">
		<ul>
			<li><a href="stats.xsl">Домашняя Администратор</a></li>
			<li><a href="listmounts.xsl">Список Точек Монтирования</a></li>
			<li><a href="/status.xsl">Public Home</a></li>
		</ul>
	</div>
	<!--меню заголовка конца индекса -->
	<h2>Обновить метаданные</h2>
	<xsl:for-each select="source">
		<div class="roundbox">
			<h3>Точка Mонтирования <xsl:value-of select="@mount" /> 
				<xsl:if test="server_name">
					<small><xsl:value-of select="server_name" /></small>
				</xsl:if>
			</h3>
			<form class="alignedform" method="get" action="/admin/metadata.xsl">
				<p>
					<label for="song">Метаданные:</label>
					<input type="text" id="song" name="song"/>
				</p>
				<p>
					<input type="submit" value="Update"/>
					<input type="hidden" name="mount" value="{@mount}"/>
					<input type="hidden" name="mode" value="updinfo"/>
					<input type="hidden" name="charset" value="UTF-8"/>
				</p>
			</form>
		</div>
	</xsl:for-each>
	<div id="footer">
		Поддержка разработки icecast в <a href="https://www.icecast.org/">www.icecast.org</a>
	</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Файл vclt.xsl

Код: Выделить всё

<!--
Таблица стилей VCLT xslt для Icecast 2.3.2 и выше
     на основе таблицы стилей XSPF xslt.
     Авторское право (C) 2007 Томас Б. Рюккер, <thomas@ruecker.fi>
     Авторское право (C) 2011 Филипп Шаффт, <lion@lion.leolix.org>

     Это бесплатное программное обеспечение; вы можете распространять его и / или
     изменить его в соответствии с условиями Стандартной общественной лицензии GNU
     опубликовано Free Software Foundation; либо версия 2
     Лицензии или (по вашему выбору) любой более поздней версии.

     Эта программа распространяется в надежде, что она будет полезна,
     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
     КОММЕРЧЕСКАЯ ЦЕННОСТЬ или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Увидеть
     Стандартная общественная лицензия GNU для более подробной информации.

     Вы должны были получить копию Стандартной общественной лицензии GNU
     вместе с этой программой; если нет, напишите в
     Фонд свободного программного обеспечения, Inc.,
     51 Franklin Street, Fifth Floor, Бостон, Массачусетс 02110-1301, США
-->

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="yes" media-type="audio/x-vclt"
        method="text" indent="no" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<xsl:for-each select="source">STREAMURL=<xsl:value-of select="listenurl" />
<xsl:if test="artist"><xsl:text>
</xsl:text>ARTIST=<xsl:value-of select="artist" /></xsl:if>
<xsl:if test="title"><xsl:text>
</xsl:text>TITLE=<xsl:value-of select="title" /></xsl:if>

<xsl:if test="server_name"><xsl:text>
</xsl:text>SERVER_NAME=<xsl:value-of select="server_name" /></xsl:if>
<xsl:if test="server_description"><xsl:text>
</xsl:text>DESCRIPTION=<xsl:value-of select="server_description" /></xsl:if>
SIGNALINFO=<xsl:choose>
 <xsl:when test="server_type = 'application/ogg'">
  <xsl:choose>
   <xsl:when test="subtype = 'Vorbis'">codec:ogg_vorbis</xsl:when>
   <!-- More codecs should be added here, however I don't know how to find out about the codec.
        At the moment we just guess that application/ogg is a Ogg bitstream with some undefined
        codec. Everything else is undefined.
   -->
   <xsl:otherwise>codec:ogg_general</xsl:otherwise>
  </xsl:choose>
 </xsl:when>
</xsl:choose><xsl:text>
</xsl:text>
<xsl:if test="genre">GENRE=<xsl:value-of select="genre" /></xsl:if>
==
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Файл xspf.xsl

Код: Выделить всё

<!--
	Таблица стилей XSPF xslt для Icecast 2.3.2 и выше
     Авторские права (C) 2007 Томас Б. Рюккер, tbr@ruecker-itk.de

     Это бесплатное программное обеспечение; вы можете распространять его и / или
     изменить его в соответствии с условиями Стандартной общественной лицензии GNU
     опубликовано Free Software Foundation; либо версия 2
     Лицензии или (по вашему выбору) любой более поздней версии.

     Эта программа распространяется в надежде, что она будет полезна,
     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
     КОММЕРЧЕСКАЯ ЦЕННОСТЬ или ПРИГОДНОСТЬ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Увидеть
     Стандартная общественная лицензия GNU для более подробной информации.

     Вы должны были получить копию Стандартной общественной лицензии GNU
     вместе с этой программой; если нет, напишите в
     Фонд свободного программного обеспечения, Inc.,
     51 Franklin Street, Fifth Floor, Бостон, Массачусетс 02110-1301, США
-->

<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" media-type="application/xspf+xml"
        method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<playlist version="1" xmlns="http://xspf.org/ns/0/">
	<title><xsl:value-of select="server" /></title>
	<creator><xsl:value-of select="server" /></creator>
	<trackList >
<!-- конец «заголовка» -->

<xsl:for-each select="source">

<track>
    <location><xsl:value-of select="listenurl" /></location>


<xsl:if test="artist"><creator><xsl:value-of select="artist" /></creator></xsl:if>
<title><xsl:value-of select="title" /></title>
<!-- Используются элементы <xsl: text> \ n </ xsl: text> в следующей части
для принудительного переноса строк этот формат, похоже, ожидается клиентами -->
<annotation>
<xsl:if test="server_name">Название потока: <xsl:value-of select="server_name" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="server_description">Описание потока: <xsl:value-of select="server_description" /></xsl:if>
Тип содержимого: <xsl:value-of select="server_type" /><xsl:text>
</xsl:text>
<xsl:if test="bitrate">Битрейт: <xsl:value-of select="bitrate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="quality">Качество: <xsl:value-of select="quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="video_quality">Качество видео: <xsl:value-of select="video_quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_size">Размер кадра: <xsl:value-of select="frame_size" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_rate">Частота кадров: <xsl:value-of select="frame_rate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listeners">Текущие слушатели: <xsl:value-of select="listeners" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listener_peak">Пик слушателей: <xsl:value-of select="listener_peak" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="genre">Жанр трансляции: <xsl:value-of select="genre" /></xsl:if>
</annotation>

<xsl:if test="server_url"><info><xsl:value-of select="server_url" /></info></xsl:if>

</track>

</xsl:for-each>
</trackList>
</playlist>

</xsl:template>
</xsl:stylesheet>
количество слов: 2671
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

icecast

Сообщение Артём Мамзиков »

После того как мф настроили icecast2 нам нужно в чем то принимать потоки.
VLC нам не подходит так как доступ есть только через браузер там авторизация через прокси и доступ только конкретному браузеру через проверку user-agenta по этому нужно что то делать на html или php!

Без использования Adobe Flash Player, на html5 audio
Первые версии были сделаны в виде дороже плееров , при включении Другова потока, предыдущее выключалось.
radio2.html
radio2.html
Файл radio2.html

Код: Выделить всё

<!DOCTYPE html>
<html>
<head>
    <title>RADIO</title>
    <meta charset="utf-8">
    <script>
        function playAudio(elem) {
            document.querySelectorAll('audio').forEach(function(el){
                el.pause();
            })
            document.querySelectorAll('button').forEach(function(el){
                el.innerHTML = 'Play';
            })


            window.document.getElementById('btn' + elem).innerHTML = 'Pause';
            window.document.getElementById('audio' + elem).play();
        }
    </script>
</head>
<body>
    <p>AvtoRadio Online</p>
    <div class="controls">
        <button id="btn1" onclick="playAudio(1);">Play</button>
    </div>
    <audio id="audio1">
		<source src="http://192.168.175.5:8000/autoradio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/autoradio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/autoradio" type="audio/ogg">
        Ваш браузер не поддерживает тег audio Обновите браузер!
    </audio>


    <p>Nashe-radio</p>
    <div class="controls">
        <button id="btn2" onclick="playAudio(2);">Play</button>
    </div>
    <audio id="audio2">
		<source src="http://192.168.175.5:8000/nashe-radio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/nashe-radio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/nashe-radio" type="audio/ogg">
        Ваш браузер не поддерживает тег audio Обновите браузер!
    </audio>


    <p>RadioVanya</p>
    <div class="controls">
        <button id="btn3" onclick="playAudio(3);">Play</button>
    </div>
    <audio id="audio3">
		<source src="http://192.168.175.5:8000/radiovanya-ivanovo" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/radiovanya-ivanovo" type="audio/mp3">
		<source src="http://192.168.175.5:8000/radiovanya-ivanovo" type="audio/ogg">
        Ваш браузер не поддерживает тег audio Обновите браузер!
    </audio>
	
	<p>Russkoe Radio</p>
    <div class="controls">
        <button id="btn4" onclick="playAudio(4);">Play</button>
    </div>
    <audio id="audio4">
		<source src="http://192.168.175.5:8000/rusradio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/rusradio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/rusradio" type="audio/ogg">
        Ваш браузер не поддерживает тег audio Обновите браузер!
    </audio>
	
	<p>RecordSPB</p>
    <div class="controls">
        <button id="btn5" onclick="playAudio(5);">Play</button>
    </div>
	<audio id="audio5">
		<source src="http://192.168.175.5:8000/radiorecordspb" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/radiorecordspb" type="audio/mp3">
		<source src="http://192.168.175.5:8000/radiorecordspb" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
	
	<p>EuropaPlus</p>
    <div class="controls">
        <button id="btn6" onclick="playAudio(6);">Play</button>
    </div>
	<audio id="audio6">
		<source src="http://192.168.175.5:8000/europaplus-radio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/europaplus-radio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/europaplus-radio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
	
	<p>DFM</p>
    <div class="controls">
        <button id="btn7" onclick="playAudio(7);">Play</button>
    </div>
	<audio id="audio7">
		<source src="http://192.168.175.5:8000/dfm-radio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/dfm-radio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/dfm-radio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
	
	<p>DorognoeRadio</p>
    <div class="controls">
        <button id="btn8" onclick="playAudio(8);">Play</button>
    </div>
	<audio id="audio8">
		<source src="http://192.168.175.5:8000/dorognoeradio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/dorognoeradio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/dorognoeradio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
	
</body>
</html>
radio3.html
radio3.html
Файл radio3.html

Код: Выделить всё

<!DOCTYPE html>
<html>

<head>
	<title>RADIO</title>
	<meta charset="utf-8">
</head>
<body>
<div class="audio">
    <p>AvtoRadio Online</p>
	<audio controls  preload="none">
		<source src="http://192.168.175.5:8000/autoradio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/autoradio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/autoradio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>


<div class="audio">
    <p>Nashe-radio</p>
	<audio controls preload="none">
		<source src="http://192.168.175.5:8000/nashe-radio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/nashe-radio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/nashe-radio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>


<div class="audio">
    <p>RadioVanya</p>
	<audio controls  preload="none">
		<source src="http://192.168.175.5:8000/radiovanya-ivanovo" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/radiovanya-ivanovo" type="audio/mp3">
		<source src="http://192.168.175.5:8000/radiovanya-ivanovo" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>


<div class="audio">
    <p>Russkoe Radio</p>
	<audio controls preload="none">
		<source src="http://192.168.175.5:8000/rusradio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/rusradio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/rusradio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>


<div class="audio">
    <p>RecordSPB</p>
	<audio controls  preload="none">
		<source src="http://192.168.175.5:8000/radiorecordspb" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/radiorecordspb" type="audio/mp3">
		<source src="http://192.168.175.5:8000/radiorecordspb" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>

<div class="audio">
    <p>EuropaPlus</p>
	<audio controls  preload="none">
		<source src="http://192.168.175.5:8000/europaplus-radio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/europaplus-radio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/europaplus-radio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>

<div class="audio">
    <p>DFM</p>
	<audio controls  preload="none">
		<source src="http://192.168.175.5:8000/dfm-radio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/dfm-radio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/dfm-radio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>

<div class="audio">
    <p>DorognoeRadio</p>
	<audio controls  preload="none">
		<source src="http://192.168.175.5:8000/dorognoeradio" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/dorognoeradio" type="audio/mp3">
		<source src="http://192.168.175.5:8000/dorognoeradio" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
	</audio>
</div>

<div class="audio">
    <p>piterfm</p>
        <audio controls  preload="none">
		<source src="http://192.168.175.5:8000/piterfm" type="audio/mpeg">
		<source src="http://192.168.175.5:8000/piterfm" type="audio/mp3">
		<source src="http://192.168.175.5:8000/piterfm" type="audio/ogg">
		Ваш браузер не поддерживает тег audio Обновите браузер!
    </audio>
</div>

<script type="text/javascript">//<![CDATA[
let last = {};
document.querySelectorAll('audio').forEach(function(el){
  el.addEventListener('playing', function(){
    if (last.pause && last !== this)
      last.pause()
    last = this
  }); 
})
  //]]></script>
</body>
</html>
количество слов: 1030
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

icecast

Сообщение Артём Мамзиков »

Бесплатный плеер на html 5
Оф.сайт HTML5 Audio player with playlist

Переделал на потоки радио
Сохранение звука не только визуально но и по факту смены радио
При перелистывании и щелчке на радио включается а не встает в паузу после чего нужно жать на кнопку плей
Проблемы с кэшем на 2 круге либо после паузы (двойной Эфир старый + новый или просто старый откуда то берет или зацикливается)
Открытие в отдельном окне определенных размеров (нужно прямо из закладок пока сделана через доп страницу clik плюс она не закрывается так как открыта вручную сделал сброс на пустую страницу mozila)
Плеер радио
Плеер радио
clik.html

Код: Выделить всё

<!DOCTYPE html>
<html>

<!-- Открытие нового окна по клику -->

<a href="http://192.168.***.***:8000/Radio.html#size-window" onclick="window.open(this.href, '', 'scrollbars=1,height='+Math.min(450, screen.availHeight)+',width='+Math.min(362, screen.availWidth)); return false;">Radio</a>

<!-- Открытие нового окна автоматом -->
<script type='text/javascript'>
var newWin = window.open("http://192.168.***.***:8000/Radio.html","JSSite","width=362,height=450,resizable=yes,scrollbars=yes,status=yes")
    newWin.focus()
</script>

<!-- Перенаправление страницы -->

<script>
 setTimeout(function(){window.location.href = 'about:blank';}, 9 * 1000);
 <!--    window.location.replace("about:blank");-->
</script>

<!-- Попытка закрытия страницы -->
<!--
<a href="javascript:close_window();">close</a>
<a href="#" onclick="close_window();return false;">close</a>
<a href="javascript:window.open('','_self').close();">close</a>
-->

</html>
Radio.html

Код: Выделить всё

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
    <meta http-equiv="pragma" content="no-cache"/>
    <meta http-equiv="Expires" content="0">
    <meta charset="utf-8" />
    <meta name="author" content="Script Tutorials" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <title>Radio player</title>

    <!-- добавление стилей и скриптов -->
    <link href="css/styles.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="js/jquery-ui-1.8.21.custom.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
</head>
<body>
    <div class="example">

        <div class="player">
            <div class="pl"></div>
            <div class="title"></div>
            <div class="artist"></div>
            <div class="cover"></div>
            <div class="controls">
                <div class="play"></div>
                <div class="pause"></div>
                <div class="rew"></div>
                <div class="fwd"></div>
            </div>
            <div class="volume"></div>
            <div class="tracker"></div>
        </div>
        <ul class="playlist">
            <li audiourl="http://192.168.175.5:8000/nashe-radio" cover="nashe-radio.jpg" artist="">NasheRadio</li>
            <li audiourl="http://192.168.175.5:8000/autoradio" cover="autoradio.jpg" artist="">AutoRadio</li>
            <li audiourl="http://192.168.175.5:8000/radiovanya-ivanovo" cover="radiovanya-ivanovo.jpg" artist="">RadioVanya</li>
            <li audiourl="http://192.168.175.5:8000/rusradio" cover="rusradio.jpg" artist="">RuskoeRadio</li>
            <li audiourl="http://192.168.175.5:8000/radiorecordspb" cover="radiorecordspb.jpg" artist="">RadioRecordSPB</li>
            <li audiourl="http://192.168.175.5:8000/europaplus-radio" cover="europaplus-radio.jpg" artist="">EuropaPlus</li>
            <li audiourl="http://192.168.175.5:8000/dfm-radio" cover="dfm-radio.jpg" artist="">DFM</li>
	    <li audiourl="http://192.168.175.5:8000/dorognoeradio" cover="dorognoeradio.jpg" artist="">DorognoeRadio</li>
	    <li audiourl="http://192.168.175.5:8000/piterfm" cover="piterfm.jpg" artist="">PiterFM</li>
        </ul>
<p>При возникновении проблем</p>
<p>Одновременно нажать клавиши Ctrl F5</p>
    </div>
</body>
</html>
Директория js
main.js

Код: Выделить всё

/**
*
* Аудиоплеер HTML5 с плейлистом
*
* Лицензируется по лицензии MIT.
* http://www.opensource.org/licenses/mit-license.php
*
* Copyright 2012, Script Tutorials
* http://www.script-tutorials.com/
 */

jQuery(document).ready(function() {

    // внутренние переменные
    var song;
    var tracker = $('.tracker');
    var volume = $('.volume');
    var dVol = 1; // от 0 до 1 пример 0.9

    function initAudio(elem) {
        var url = elem.attr('audiourl');
        var title = elem.text();
        var cover = elem.attr('cover');
        var artist = elem.attr('artist');

        $('.player .title').text(title);
        $('.player .artist').text(artist);
        $('.player .cover').css('background-image','url(data/' + cover+')');;

        song = new Audio(url);
        song.preload = "none";
        song.volume = dVol;

        // прослушиватель событий обновления времени
        song.addEventListener('timeupdate',function (){
            var curtime = parseInt(song.currentTime, 10);
            tracker.slider('value', curtime);
        });

        $('.playlist li').removeClass('active');
        elem.addClass('active');
    }
    function playAudio() {
        song.play();
    	//song.addEventListener ('loadedmetadata', function ()
	//{
	//tracker.slider («option», «max», song.duration);
	//});
	//tracker.slider("option", "max", song.duration);
    	song.addEventListener('finished', function(){
	    stopAudio();

	var next = $('.playlist li.active').next();
	if (next.length == 0) {
	    next = $('.playlist li:first-child');
	}
	initAudio(next);

	playAudio();

	song.addEventListener('loadedmetadata', function() {
	    tracker.slider('option', 'max', song.duration);
	    });
	});
        //tracker.slider("option", "max", song.duration);
	tracker.slider("option", "value", tracker.slider("value"));

        $('.play').addClass('hidden');
        $('.pause').addClass('visible');
    }
    function stopAudio() {
	song.currentTime = 0;
        song.pause();
        song.currentTime = 0;
        song.url = '';
        
        $('.play').removeClass('hidden');
        $('.pause').removeClass('visible');
    }

    // играть
    $('.play').click(function (e) {
        e.preventDefault();

        playAudio();
    });

    // Пауза
    $('.pause').click(function (e) {
        e.preventDefault();

        stopAudio();
    });

    // Вперед
    $('.fwd').click(function (e) {
        e.preventDefault();

	song.currentTime = 0;
        stopAudio();

        var next = $('.playlist li.active').next();
        if (next.length == 0) {
            next = $('.playlist li:first-child');
        }
        initAudio(next);
        playAudio();
    });

    // Назад
    $('.rew').click(function (e) {
        e.preventDefault();

        stopAudio();

        var prev = $('.playlist li.active').prev();
        if (prev.length == 0) {
            prev = $('.playlist li:last-child');
        }
        initAudio(prev);
        playAudio();
    });

    // Показать список воспроизведения
    $('.pl').click(function (e) {
        e.preventDefault();

        $('.playlist').fadeIn(300);
    });

    // элементы списка воспроизведения
    $('.playlist li').click(function () {
        stopAudio();
        initAudio($(this));
        playAudio();
    });

    // инициализация - первый элемент в плейлисте
    initAudio($('.playlist li:first-child'));

    // установите громкость
    song.volume = dVol;
    // когда мы инициализируем новый звук, он начинает использовать громкость по умолчанию. Чтобы сохранить значение громкости, вы можете добавить еще одну глобальную переменную и обновлять ее каждый раз, когда мы меняем ползунок громкости. Затем в функции 'initAudio' после 'new Audio' вы можете добавить следующий код: song.volume = ваша новая переменная;

    // инициализация регулятор громкости
    volume.slider({
        range: 'min',
        min: 1,
        max: 100,
        value: 100,
        start: function(event,ui) {},
        slide: function(event, ui) {
            song.volume = ui.value / 100;
            dVol = ui.value / 100;
        },
        stop: function(event,ui) {},
    });

    // пустой ползунок трекера
    tracker.slider({
        range: 'min',
        min: 0, max: 10,
        start: function(event,ui) {},
        slide: function(event, ui) {
            song.currentTime = ui.value;
        },
        stop: function(event,ui) {}
    });
});
Без изменений
jquery-ui-1.8.21.custom.min.js
jquery-1.7.2.min.js

Директория css
styles.css

Код: Выделить всё

/* ============================================================================================== 
Это уведомление об авторских правах должно всегда оставаться нетронутым в таблице стилей.
Оригинальная версия этой таблицы стилей и связанный с ней html-код (x)
доступны по адресу http://www.script-tutorials.com/html5-audio-player-with-playlist/
Авторское право (c) учебные пособия по сценариям. Все права защищены.
Эта таблица стилей и связанный с ней html-код (x)могут быть изменены любым способом в соответствии с вашими требованиями.
================================================================================================= */
* {
    margin: 0;
    padding: 0;
}
body {
    background-color: #fff;
}
header {
    background-color:rgba(33, 33, 33, 0.9);
    color:#fff;
    display:block;
    font: 14px/1.3 Arial,sans-serif;
    margin-bottom: 10px;
    position:relative;
}
header h2{
    font-size: 22px;
    margin: 0px auto;
    padding: 10px 0;
    width: 100%;
    text-align: center;
}
header a, a:visited {
    text-decoration:none;
    color:#fcfcfc;
}

/* Аудиоплеер HTML5 со стилями плейлиста */
.example {
    margin: 10px;
    width: 345px;
}
.player {
    background: transparent url("../images/spr.png") no-repeat scroll center top;
    height: 162px;
    position: relative;
    width: 326px;
    z-index: 2;
}
.title, .artist {
    font-family: verdana;
    left: 167px;
    position: absolute;

    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
}
.title {
    color: #FFFFFF;
    font-size: 14px;
    font-weight: bold;
    top: 23px;
}
.artist {
    color: #EEEEEE;
    font-size: 12px;
    top: 40px;
}
.pl {
    background: transparent url("../images/spr.png") no-repeat scroll -274px -175px;
    cursor: pointer;
    height: 34px;
    left: 270px;
    position: absolute;
    top: 20px;
    width: 32px;
}
.pl:hover {
    top: 21px;
}
.cover {
    background: transparent url(../data/cover1.jpg) no-repeat scroll center top;
    border-radius: 5px 5px 5px 5px;
    height: 94px;
    left: 20px;
    position: absolute;
    top: 20px;
    width: 94px;
}
.controls {
    cursor: pointer;
    height: 23px;
    left: 167px;
    position: absolute;
    top: 65px;
    width: 138px;
}
.controls .play, .controls .pause, .controls .rew, .controls .fwd {
    background: transparent url("../images/spr.png") no-repeat scroll 0 0;
    float: left;
    height: 100%;
    width: 33%;
}
.controls .play {
    background-position: -8px -171px;
}
.controls .pause {
    background-position: -8px -198px;
    display: none;
}
.controls .rew {
    background-position: -54px -171px;
}
.controls .fwd {
    background-position: -100px -171px;
}
.controls .play:hover {
    background-position: -8px -170px;
}
.controls .pause:hover {
    background-position: -8px -197px;
}
.controls .rew:hover {
    background-position: -54px -170px;
}
.controls .fwd:hover {
    background-position: -100px -170px;
}
.hidden {
    display: none;
}
.controls .visible {
    display: block;
}
.volume {
    height: 11px;
    left: 186px;
    position: absolute;
    top: 96px;
    width: 112px;
}
.tracker {
    height: 15px;
    left: 20px;
    position: absolute;
    top: 126px;
    width: 285px;
}
.ui-slider-range {
    background: transparent url("../images/spr.png") no-repeat scroll 5px -222px;
    height: 100%;
    position: absolute;
    top: 0;
}
.ui-slider-handle {
    cursor: pointer;
    height: 10px;
    margin-left: -5px;
    position: absolute;
    top: 2px;
    width: 10px;
    z-index: 2;
}
.volume .ui-slider-handle {
    background: url("../images/spr.png") no-repeat scroll -201px -188px rgba(0, 0, 0, 0);
    height: 13px;
    width: 13px;
}
.playlist {
    background-color: #333333;
    border-radius: 5px 5px 5px 5px;
    list-style-type: none;
    margin: -10px 0 0 2px;
    padding-bottom: 10px;
    padding-top: 15px;
    position: relative;
    width: 322px;
    z-index: 1;
}
.playlist li {
    color: #EEEEEE;
    cursor: pointer;
    margin: 0 0 5px 15px;
}
.playlist li.active {
    font-weight: bold;
}
Так же изменены картинки под радио потоки
количество слов: 1236
Ответить Вложения 10 Пред. темаСлед. тема

Вернуться в «Потоковое цифровое аудио и видеовещание»