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

RELAY

 

243
Владислав @VladokZzz
Что-то мозг сломал, не работает relay и хоть кол чеши!
Вот кусок конфига где релай поднят
<relay>
<server>SERVER2</server>
<port>8000</port>
<mount>/alt</mount>
<local-mount>/alt</local-mount>
<on-demand>1</on-demand>
</relay>
Вот конфиг с SERVER2
<hostname>localhost</hostname>
<listen-socket>
<port>8000</port>
</listen-socket>
<fileserve>1</fileserve>
<mount>
<mount-name>/alt</mount-name>
<max-listeners>100</max-listeners>
<charset>cp1251</charset>
<fallback-mount>/electron</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
</mount>

Если зайти с SERVER1 на SERVER2:8000/alt.m3u - музыка качает
Если зайти с SERVER1 на SERVER1:8128/alt.m3u тобишь на relay то ничего.
Уже не понимаю где копать...

Добавлено спустя 5 минут 31 секунду:
Все разобрался!... sources стояло 1

243
Владислав @VladokZzz
Вопрос только в одном... Когда я с SERVER1 захожу на SERVER1:8128/alt.m3u
Статистика (что играет, сколько слушает) тут же подставляется с маунта alt, а обратно на live не возвращается. Как это исправить без перезапуска icecast?

833
metra52 @metra52
Ну скрипт то у вас как сделан?

6245
Тарас @tarasian666
VladokZzz
у вас так всегда хорошо получается непонятно задать вопрос ... ;)
статистика у каждого маунта своя и она не перебрасывается

243
Владислав @VladokZzz
tarasian666 пишет:

VladokZzz
у вас так всегда хорошо получается непонятно задать вопрос ... ;)
статистика у каждого маунта своя и она не перебрасывается

Бывает :)
В общем на 1 сервере есть два маунта live и alt
live - localhost поток
alt - поток с 2 сервера
fallback настроен как показано выше, что если ломается поток live, то слушатели переключаются на alt. Все отлично! Когда поток live поднимается обратно, то пользователи возвращаются, НО статистика, которую я собираю (кол-во слушателей, имя маунта, что играет и т.д.) продолжает собираться с ALT.
Теперь ясна проблема? Что бы статистика собиралась снова с live и высвечивалась корректно на странице приходится рестартить icecast на 1 сервере.

6245
Тарас @tarasian666
как показано выше - что если ломается поток alt перебрасывает на electron, потока live вобще не вижу
статистику скриптом "грабите" ? если так то надо ставить проверку на активность маунта, допустим если на status2.xsl?mount=/live нет текущей песни или слушателей и тп то грабить с маунта alt

243
Владислав @VladokZzz
tarasian666 пишет:

как показано выше - что если ломается поток alt перебрасывает на electron, потока live вобще не вижу
статистику скриптом "грабите" ? если так то надо ставить проверку на активность маунта, допустим если на status2.xsl?mount=/live нет текущей песни или слушателей и тп то грабить с маунта alt

Вот конечный конфиг
-----------------1 сервер-------------------
<hostname>localhost</hostname>
<listen-socket>
<port>8128</port>
</listen-socket>
<fileserve>1</fileserve>
<mount>
<mount-name>/live</mount-name>
<max-listeners>100</max-listeners>
<fallback-mount>/alt</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
<charset>cp1251</charset>
</mount>
<relay>
<server>SERVER2</server>
<port>8128</port>
<mount>/live</mount>
<local-mount>/alt</local-mount>
<on-demand>1</on-demand>
</relay>
---------------------------2 сервер------------------------------------
<hostname>localhost</hostname>
<listen-socket>
<port>8128</port>
</listen-socket>
<fileserve>1</fileserve>
<mount>
<mount-name>/live</mount-name>
<max-listeners>100</max-listeners>
<fallback-mount>/electron</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
<charset>cp1251</charset>
</mount>

6245
Тарас @tarasian666
то есть на странице статистики icecast-a (status.xsl) на маунте live отображается титлы и кол-во слушателей маунта alt ?

243
Владислав @VladokZzz
Нет, в status.xsl все маунты и кол-во слушателей в порядке... кол-во перебегает с маунтов на маунт, а статистика глючит. А именно вот с этого кода
<?php
$ip = "SERVER1";
$port = "8128";
$ice2_station = "Radio";
$fp = fsockopen("$ip", $port, &$errno, &$errstr, 30);
if(!$fp) {
$success=2;
echo'<table>
<tr>
<td width="100%" colspan="2">
<b>Радио '.$ice2_station.' в данный момент не работает</font></b></td>
</tr>
</table>';
}
if($success!=2){
fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
while(!feof($fp)) {
$page .= fgets($fp, 1000);
}
fclose($fp);
$page = ereg_replace(".*<pre>", "", $page);
$page = ereg_replace("</pre>.*", ",", $page);

$numbers = explode(",",$page);
$mount = $numbers[0];
$connections = $numbers[1];
$stream_n = $numbers[2];
$listeners = $numbers[3];
$desc = $numbers[4];
$cur_song = $numbers[5];
$str_url = $numbers[6];
$client_info = $numbers[7];
$test1 = $numbers[8];
$test2 = $numbers[9];
$test3 = $numbers[10];
$mount = $numbers[11];
$connections = $numbers[12];
$station =$numbers[13];
$listeners = $numbers[14];
$description = $numbers[15];
$cur_song = $numbers[16];
$www_url = $numbers[17];
$m=substr($numbers[11],2);
$listeners ( $m )";
echo'<br>'.$listen.'<br>'.$cur_song.'';
?>
Еще заметил такую штуку... светится маунт live все отлично, live.m3u открывается и играет поток. Если ткнуть проигрывание alt.m3u на этом же сервере, то в статистике сразу подменяются данные и светится alt и обратно, соответственно не переходит пока не перезагрузишь icecast.

Отредактировано VladokZzz - 03.09.2010
6245
Тарас @tarasian666
ну так проблема не в icecast-е а в скрипте, с этого и надо было начинать. Он грабит инфу только с первого маунта в списке.
решение проблемы в посте #6

243
Владислав @VladokZzz
tarasian666 пишет:

ну так проблема не в icecast-е а в скрипте, с этого и надо было начинать. Он грабит инфу только с первого маунта в списке.
решение проблемы в посте #6

Ага обычным IF на PHP я так понимаю? Но пока не могу разобраться как это корректно сделать.
Должно быть что-то вроде
if (live == TRUE) {$mount=/live}
и тогда он будет брать статистику с основного потока, но как в условии правильно задать проверку на существование потока?

Отредактировано VladokZzz - 06.09.2010
6245
Тарас @tarasian666
например если нет тегов значит поток не активен

243
Владислав @VladokZzz
tarasian666 пишет:

например если нет тегов значит поток не активен

А на практике в виде кода, если не сложно?

6245
Тарас @tarasian666
#парсится первый маунт
if ($current_track == '') {#парсим другой маунт}
echo $current_track;

243
Владислав @VladokZzz
Мозг порвал не не понял как? :)
Вот скрипт на сервере
<?php
$ip = "IP";
$port = "8128";
$ice2_station = "Radio";
$fp = fsockopen("$ip", $port, &$errno, &$errstr, 30);

if(!$fp) {
$success=2;
echo'<table>
<tr>
<td width="100%" colspan="2">
<b>Радио '.$ice2_station.' в данный момент не работает</font></b></td>
</tr>
</table>';
}
if($success!=2){
fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
while(!feof($fp)) {
$page .= fgets($fp, 1000);
}
fclose($fp);
$page = ereg_replace(".*<pre>", "", $page);
$page = ereg_replace("</pre>.*", ",", $page);
$numbers = explode(",",$page);
$mount = $numbers[0];
$connections = $numbers[1];
$stream_n = $numbers[2];
$listeners = $numbers[3];
$desc = $numbers[4];
$cur_song = $numbers[5];
$str_url = $numbers[6];
$client_info = $numbers[7];
$test1 = $numbers[8];
$test2 = $numbers[9];
$test3 = $numbers[10];
$mount = $numbers[11];
$connections = $numbers[12];
$station =$numbers[13];
$listeners = $numbers[14];
$description = $numbers[15];
$cur_song = $numbers[16];
$www_url = $numbers[17];

echo $listeners;
echo $cur_song;
}
Как в нем реализовать проверку, что если live поток существует, то брать с него инфу. Если он пропадает, то брать инфу с потока alt и наоборот, когда live снова поднимается то бралось не с alt а с live?
И ALT и LIVE потоки на одном сервере.

6245
Тарас @tarasian666
Показать текст


как то так, учи мат часть

243
Владислав @VladokZzz
tarasian666 пишет:

[spoiler]

как то так, учи мат часть

Все ясно, большое спасибо... Далее возникает такой вопрос. ALT у меня в конфиге icecast идет как relay со второго сервера и поэтому статистика не подхватывается. Как это можно исправить?

6245
Тарас @tarasian666
хотите чтоб на alt подхватывалась статистика второго сервера?

243
Владислав @VladokZzz
tarasian666 пишет:

хотите чтоб на alt подхватывалась статистика второго сервера?

Именно!

6245
Тарас @tarasian666
нет, так не получится, разве скрипт будет брать из 2х серверов статистику и плюсовать