1

Тема: RELAY

Что-то мозг сломал, не работает 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

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

2

Re: RELAY

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

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

3

Re: RELAY

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

4

Re: RELAY

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

5

Re: RELAY

пишет tarasian666:

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

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

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

6

Re: RELAY

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

7

Re: RELAY

пишет 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>

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

8

Re: RELAY

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

9

Re: RELAY

Нет, в 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 23:33:42)

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

10

Re: RELAY

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

11

Re: RELAY

пишет tarasian666:

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

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

Отредактировано VladokZzz (06-09-2010 08:22:26)

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

12

Re: RELAY

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

13

Re: RELAY

пишет tarasian666:

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

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

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

14

Re: RELAY

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

15

Re: RELAY

Мозг порвал не не понял как? smile
Вот скрипт на сервере
<?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 потоки на одном сервере.

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

16

Re: RELAY

Показать / Cкрыть текст

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

17

Re: RELAY

пишет tarasian666:

[spoiler]

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

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

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

18

Re: RELAY

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

19

Re: RELAY

пишет tarasian666:

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

Именно!

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

20

Re: RELAY

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

21

Re: RELAY

пишет tarasian666:

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

А как же мне наладить статистику? Может как-то можно создать fputs2 и fp2 для условия когда cur_song пустое?

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

22

Re: RELAY

зачем? Чем мой скрипт не годится?
fputs2 не существует tongue

23

Re: RELAY

пишет tarasian666:

зачем? Чем мой скрипт не годится?
fputs2 не существует tongue

Тем, что когда есть поток live - статистика идет отлично как и раньше, когда live пропадает (проверка по cur_song), то парсинг идет по потоку ALT, а он является РЕЛАЕМ со второго сервера. И у меня все переменные пустые и ничего не отображается.
Relay перехватывает по идее что играет и сколько слушателей, но парсить его видимо по-другому надо не так как маунт.

------------------------
http://radio-electron.ru/img/logo_small.gif
http://radio-electron.ru/play

24

Re: RELAY

"о боже"... мая твая не панимать

25

Re: RELAY

Ну а что мешает после проверки по curr song парсить маунт на прямую, а не с релэя?

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге