ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
6   •   Посмотреть все темы

Скрипты для Icecast

 

6245
Тарас @tarasian666

<?php

$data = file_get_contents('http://localhost:88/status.xsl?mount=/live');

function antara($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}

if(antara($data, "Mount started:</td>\n<td class=\"streamdata\">","</td>") ==''){$data = file_get_contents('http://localhost:88/status.xsl?mount=/nonstop');}
$data = iconv("utf-8", "cp1251", $data);
$title = antara($data, "Stream Title:</td>\n<td class=\"streamdata\">","</td>");
$description = antara($data, "Stream Description:</td>\n<td class=\"streamdata\">","</td>");
$content_type = antara($data, "Content Type:</td>\n<td class=\"streamdata\">","</td>");
$Mount_started = antara($data, "Mount started:</td>\n<td class=\"streamdata\">","</td>");
$Bitrate = antara($data, "Bitrate:</td>\n<td class=\"streamdata\">","</td>");
$Current_listeners = antara($data, "Current Listeners:</td>\n<td class=\"streamdata\">","</td>");
$Peak_listeners = antara($data, "Peak Listeners:</td>\n<td class=\"streamdata\">","</td>");
$Stream_genre = antara($data, "Peak Listeners:</td>\n<td class=\"streamdata\">","</td>");
$Stream_url = antara($data, "Stream URL:</td>\n<td class=\"streamdata\">","</td>");
$Current_song = antara($data, "Current Song:</td>\n<td class=\"streamdata\">","</td>");
$hellp_curr_listeners = antara($hellp, "Сейчас слушают:</td>\n<td class=\"streamdata\">","</td>");
$hellp_peak_listeners = antara($hellp, "Максимум было</td>\n<td class=\"streamdata\">","</td>");
$Curr_listens=$Current_listeners2+$Current_listeners+$hellp_curr_listeners;
$Peak_listens=$Peak_listeners2+$Peak_listeners+$hellp_peak_listeners;

$staylst=$Curr_listens+1;
echo '<span style="font-size: 0.72em; font-family:Trebuchet MS, Tahoma, Arial, sans-serif; color:#3090c3"><b>Название радио:</b> '.$title.' <br>
<b>За пультом:</b> '.$description.' <br>
<b>Битрейт:</b> '.$Bitrate.' <br>
<b>Сейчас слушают:</b> '.$Curr_listens.' <br>
<b>Максимум слушало:</b> '.$Peak_listens.' <br>
<b>Сейчас в эфире:</b> '.$Current_song.' <br>
<br>
<center><input type="button" value="Слушать радио" onclick="location.href=\'http://xoiniki.com:88/live.m3u\'" /></center>';
?>

6245
Тарас @tarasian666
tarasian666 пишет:

насчет подсчета слушателей - а вдруг на сервере не все маунты ваши или не все считать надо
<?php
//данные для парсинга слушателей всех маунтов
//можно написать их здесь сколько угодно
$mount[0] = '[url]http://188.40.124.23:8206/status2.xsl?mount=/radio[/url]';
$mount[1] = '[url]http://188.40.124.23:8206/status2.xsl?mount=/playlist[/url]';
$mount[2] = '[url]http://188.40.124.23:8206/status2.xsl?mount=/nonstop[/url]';

//считаем сколько у нас маунтов с которых считаем слушателей
$mounts = count($mount);

//данные для парсинга плейлистов для получения текущего исполнителя и песни и описания потока
//записываем их в таком порядке: сперва прямой эфир, потом фоллбэки
//можно написать их здесь сколько угодно
$xml[0] = "[url]http://188.40.124.23:8206/radio.xspf[/url]";
$xml[1] = "[url]http://188.40.124.23:8206/playlist.xspf[/url]";
$xml[2] = "[url]http://188.40.124.23:8206/nonstop.xspf[/url]";

//считаем сколько у нас маунтов с которых берем теги
$xmls = count($xml);

//считаем всех слушателей
$i = 0;
while($i<$mounts)
{
$text= file_get_contents($mount[$i]);
$mass=explode(",", $text);
$listens += $mass [14];
$i ++;
}

//парсим по очереди все маунты пока не добьемся положительного результата
$i = 0;
while($stream['descr'] =='')
{
$xml1 = simplexml_load_file($xml[$i]);
//обращение к xspf файлу текущего потока
$stream['creator'] = $xml1->trackList->track->creator;
//выбираем значение из <trackList><track><creator>
$stream['title'] = $xml1->trackList->track->title;
$ano = $xml1->trackList->track->annotation;
//выбираем значение из <trackList><track><annotation>
$mss=explode("\n", $ano);
//разбиваем знаечение на масив (т.к. там много чего а нам надо тока строку "Stream Description")
$stream['descr']=substr($mss[1],20);
//строка "Stream Description" вторая, (не забываем, что счет с нуля, т.е. это будет 1)
//берем значение начиная с 20 символа чтобы не захватывать "Stream Description:"
$i ++;
//если все перепарсили а данных нет останавливаеся с ошибкой
if($i>$xmls){
$stream['descr'] = "offline";
}
}

include "max.php"; //для отображения пикового значения слушателей
if ($listens>$max)
{
$txtout="<?php\r\n".'$max='.$listens. ";\r\n?>";
$fp = fopen ("max.php", "w");
fwrite($fp,$txtout);
fclose($fp);
$max=$listens;
}

echo $stream['creator'] . " - "; // вывод имени исполнителя
echo $stream['title'] . "<br>"; //вывод названия песни
echo "Слушателей: ".$listens . "<br>"; //вывод кол-ва слушателей
//echo "Max listens: ".$max . "<br>"; //вывод пикового к-ва слушателей, раскомментировать, если нужен
echo $stream['descr'] . "<br>"; //вывод описания текущего потока
?>

49
aleksanders @aleksanders
Подскажите пожалуйста скрипт, который показывал бы ТОЛЬКО название трека.
Имеется 2 потока. live и nonstop. Когда live отключается, чтобы автоматом показывала трек из потока nonstop.

Отредактировано aleksanders - 02.02.2012
6245
Тарас @tarasian666
<?php
$file_name='http://www.domain.com:8000/status2.xsl?mount=/listen';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current=$mass [16];
echo $current;
?>


все что ненужно отображать просто удаляем

Отредактировано tarasian666 - 02.02.2012
49
aleksanders @aleksanders
Не переходит с одного маунта на второй, если первый отключён. Как можно подправить?

И впереди названия трека есть знак "-". Как убрать?

Отредактировано aleksanders - 02.02.2012
6245
Тарас @tarasian666
Как можно подправить?

Не подправить, а дописать скрипт. Но смысл? Если уже выложены такие скрипты, все что ненужно выводить просто стираем
Как убрать?

**********

49
aleksanders @aleksanders
Ну вот, вроде сам нахимичил, только почему-то не переходит с потока /radio на поток /nonstop! В чём я сделал ошибку?

<?php

$data = file_get_contents('http://xoiniki.com:88/status.xsl?mount=/radio');

function antara($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}

if(antara($data, "Mount started:</td>\n<td class=\"streamdata\">","</td>") ==''){$data = file_get_contents('http://localhost:88/status.xsl?mount=/nonstop');}

$Current_song = antara($data, "Current Song:</td>\n<td class=\"streamdata\">","</td>");
$Curr_listens=$Current_listeners2+$Current_listeners+$hellp_curr_listeners;
$Peak_listens=$Peak_listeners2+$Peak_listeners+$hellp_peak_listeners;
$staylst=$Curr_listens+1;
echo ''.$Current_song.'';
?>

6245
Тарас @tarasian666
xoiniki.com:88
localhost:88

49
aleksanders @aleksanders
А ну это одно и тоже. Этот сервер и есть xoiniki.com

Пробовал ставить и там и там localhost. И пробовал xoiniki.com и там и там ставить. Радио играет в проигрывателе, но информация показывает нонстопа

Отредактировано aleksanders - 02.02.2012
6245
Тарас @tarasian666
ну может там не настроен loop

49
aleksanders @aleksanders
А что за loop? Как его настроить?

6245
Тарас @tarasian666
в файле hosts
127.0.0.1 localhost

49
aleksanders @aleksanders
ну я прописал там
127.0.0.1 localhost
127.0.0.1 xoiniki.com

И что интересно, что если ставлю другую радиостанцию вместо потока /radio ( с другова сайта), а нонстоп свой, то всё нормально работает. Может у меня какие ошибки есть в конфиге icecast? Или от этого не зависит?

6245
Тарас @tarasian666
конфиг тут ни причем

xoiniki.com например у меня вообще не открывается

49
aleksanders @aleksanders
Он у вас не откроется, т.к. в Беларуси сервера закрыты от внешнего порта. По сайтам и серверам лазить могут только пользователи Беларуси.

Хоть убейте, в информере показывает постоянно нонстоп только и всё.

Отредактировано aleksanders - 02.02.2012
6245
Тарас @tarasian666

должно же быть **********

может быть у вас еще много таких ошибок, гадать почему не работает не вижу смысла, тут никто не экстрасенс

49
aleksanders @aleksanders
Так вот допустим этот ставлю, что вы дали и работает. А ставлю свой не работает.

Убираю строку
if(antara($data, "Mount started:</td>\n<td class=\"streamdata\">","</td>") ==''){$data = file_get_contents('http://localhost:88/status.xsl?mount=/nonstop');}

показывает нормально. Как только строку эту добавляю, начинает показывать только этот нонстоп.

95
Артур @NoExist
Возможно ту тему никто не видит, так что я решил задать вопрос и тут, простите, если причинил неудобства.

Проблема с фаллбеком

<mount>
<mount-name>/Frost.fm</mount-name>
<password>7539514682</password>
<fallback-mount>/NoExist</fallback-mount>
<fallback-override>1</fallback-override>
</mount>

<mount>
<mount-name>/NoExist</mount-name>
<password>7539514682</password>
<charset>cp1251</charset>
</mount>

Не работает.
Стандартно ицес вещает на /Frost.fm
Запускаю Сем, начинаю вещать /NoExist
А на /Frost.fm играет все та жа музыка... Айкаст я перезапускал.

112
Юрий @FortNoxBY
должно и так работать
но попробуй еще добавить <fallback-when-full>1</fallback-when-full>

888
Falcon @Falcon
NoExist пишет:

Возможно ту тему никто не видит, так что я решил задать вопрос и тут, простите, если причинил неудобства.

Проблема с фаллбеком

<mount>
<mount-name>/Frost.fm</mount-name>
<password>7539514682</password>
<fallback-mount>/NoExist</fallback-mount>
<fallback-override>1</fallback-override>
</mount>

<mount>
<mount-name>/NoExist</mount-name>
<password>7539514682</password>
<charset>cp1251</charset>
</mount>

Не работает.
Стандартно ицес вещает на /Frost.fm
Запускаю Сем, начинаю вещать /NoExist
А на /Frost.fm играет все та жа музыка... Айкаст я перезапускал.


Ices должен вещать на /NoExist, а ведущий коннектится к /Frost.fm
Слушатели также всегда должны слушать /Frost.fm