Pull to refresh

Comments 28

Вот наговнокодил немного:

<?
$ctx 
stream_context_create(array('http' => array('timeout' => 10)));
$kiss_site=file_get_contents('http://kissfm.ua/',,$ctx);
$kiss_div1=split("<div class="onAirString">",$kiss_site);
$kiss_div2=split("</div>",$kiss_div1[1]);
$kiss_div2=preg_replace(array(=>"/- - -/",1=>"/сейчас в эфире/"),"",$kiss_div2);
$update=file_get_contents('http://random:7777@random.net.ua:8000/admin/metadata.xsl?song='.trim(urlencode($kiss_div2[])).'&mount=%2Fkissfm&mode=updinfo',,$ctx);

$procs=shell_exec('ps aux | grep kisswget');
$procs=explode("n",$procs);
foreach ( 
$procs as $procs_) if (strstr($procs_,'/home/random2/ices/kiss')) $procs_kiss[]=$procs_;

if (
count($procs_kiss) > 1)
{
    
$ans=shell_exec('/usr/bin/pkill kisswget');
    die(
'more then one kisswget');
}
if (!
strstr($procs_kiss[],"91.202.72.22:8000")) die('nothing todo');

$links=array(
'http://195.138.217.65:8000/kissfm',
'http://media.wnet.ua:8000/kissfm',
'http://217.20.164.164:8000/kissfm'
);

foreach (
$links as $links_)
{
    @
$f=file_get_contents($links_,,$ctx,-1,1);
    if (
strpos($http_response_header[],'200'))
    {
        
$ans=shell_exec('/usr/bin/pkill kisswget');
        die();
    } 
}
?>
парсер — лох.
в некоторых местах посъедал цифру «0»
А не судьба для ретрансляции использовать icecast?
хочется постоянной точки монтирования.
Насколько я помню Icecast такое позволяет ;)
UFO just landed and posted this here
Достаточно одного icecast и fallback mount-point'ов в конфиге. Icecast автоматически переключается на fallback маунты, если вышестоящие не работают.
Получается я велосипед изобрел.
Но в случае с fallback-mount получается 4 разных mount points. Да и люди пишут что для relay оно не очень.
Что не очень-то? Fallback как fallback. Вообще, отваливается интернет-канал у вас, я так понимаю? В этом случае самое оптимальное — большой пребуффер.
fallback-mount
This optional value specifies a mountpoint that clients are automatically moved to if the source shuts down or is not streaming at the time a listener connects. Only one can be listed in each mount and should refer to another mountpoint on the same server that is streaming in the same streaming format.
If clients cannot fallback to another mountpoint, due to a missing fallback-mount or it states a mountpoint that is just not available, then those clients will be disconnected. If clients are falling back to a mountpoint and the fallback-mount is not actively streaming but defines a fallback-mount itself then those clients may be moved there instead. This multi-level fallback allows clients to cascade several mountpoints.

A fallback mount can also state a file that is located in webroot. This is useful for playing a pre-recorded file in the case of a stream going down. It will repeat until either the listener disconnects or a stream comes back available and takes the listeners back. As per usual, the file format should match the stream format, failing to do so may cause problems with playback.

Note that the fallback file is not timed so be careful if you intend to relay this. They are fine on slave streams but don't use them on master streams, if you do then the relay will consume stream data at a faster rate and the listeners on the relay would eventually get kicked off.
отваливается не канал, периодически отваливаются источники — не очень у kissfm с трансляцией.
собственно ради этого я и задался вопросом, как сделать себе максимально прозрачную стабильную ретрансляцию.
Ретранслируй прямо с радио!
Если бы оно вещало в моём городе :(
А сервер вообще в Киеве стоит в датацентре. Оно не на столько критично чтоб туда fm-тюнер тулить.
В настройках маунтпоинта добавь

<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>


и твой релей будет показывать «current song»
некоторые источники отдают не правильную current song, поэтому я её с сайта решил парсить.
У нас в сети сделан сервер для ретрансляции радио (около 200 штук на on-demand), часто ставлю по 2-3 источника. Проблем не замечал, так что фаллбеки можно смело использовать :)
Ну а почему нет :)

Сначала делаем первый релей:

     <relay>
       <server>radio.sibrave.ru</server>
       <port>8000</port>
       <mount>/record.mp3</mount>
       <local-mount>/radio_record</local-mount>
       <on-demand>1</on-demand>
       <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
     </relay>

И точку монтирования:

    <mount>
       <mount-name>/radio_record</mount-name>
       <fallback-mount>/radio_record_1</fallback-mount>
       <fallback-override>1</fallback-override>
    </mount>


А это второй релей, на который пойдет переключение, если первый умер.
fallback-mount (выше) = local-mount для него:

    <relay>
       <server>radio.global.by</server>
       <port>8888</port>
       <mount>/radio_record</mount>
       <local-mount>/radio_record_1</local-mount>
       <on-demand>1</on-demand>
       <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
     </relay>


Если потребуется еще один источник, опять добавляем конструкцию mount для перехода и еще один релей.
если отвалится /record.mp3 юзверей кинет на /radio_record тоесть mount сменится, а мне надо постоянный (
Сейчас проверил (винампом), в свойствах потока адрес не менялся.
таки да, всё работает.
но:
1. на странице статистики icecast висят всё fallback-маунты. ну хрен бы с ними
2. когда поднимается первый поток из списка, icecast всё равно продолжает вещать как ни в чем не бывало с текущего.
3. начинается что-то ненормально если лежат три потока и работает только четвертый. и пытаешся подключиться к icecast по адресу первого потока.
1. Как вариант, делать свою страничку статистики.
2. Это да. Хотя если трансляция on-demand, при отключении и подключении клиента по идее должен вернуться на первый.
3. С четырьмя не пробовал, а что там происходит такое?
3. не играет. в логах пишет что пытается пройти по списку маунтов.
винамп «переспрашивает» раньше чем появляется поток (я так думаю)
За трюк с симлинком и pkill-ом спасибо! Для некоторых одноразовых задач лень было создавать файлы.pid и приходилось идти на риск грохнуть что-нибудь не то. А тут так просто ;)
Может немножко не в тему, но все же…

Достаточно стабильный поток KissFM из г. Николаева с битрейтом 256, авось пригодится (:

http://live.amron.com.ua:8000/KISS_FM_Nikolaev

Sign up to leave a comment.

Articles