1

Тема: Как показать на странице точку монтирования IceCast2?

Использую модуль отображения слушателей для joomla. Когда переключаешься на live вещание, точка монтирование меняется слушателей становиться 0 и название песни отображается с потока  автодиджея. Нужно как нибудь подменять точку монтирования при смене автодж и live вещания. Помогите.

Как узнать точку монтирования icecast и вывести ее средсвами php?
Сделать так чтобы модуль читал эту переменную и соответственно менял значения точки монтирования и правильно  отображал название и слушателей.

Отредактировано Realwhite (12-05-2011 14:41:16)

2

Re: Как показать на странице точку монтирования IceCast2?

Если честно, я не понял запроса вашего)

В здоровом теле - здоровый дух!

3

Re: Как показать на странице точку монтирования IceCast2?

пишет KyPIIaToB:

Если честно, я не понял запроса вашего)

Переписал вопрос

4

Re: Как показать на странице точку монтирования IceCast2?

Поправь скрипт который снимает статистику с айса, пусть он берет общее количество слушателей со страницы status2.xsl

В здоровом теле - здоровый дух!

5

Re: Как показать на странице точку монтирования IceCast2?

как я понимаю он и берет со status.xsl

$serverpoint = $params->get('point');
            fputs($fp,"GET /status2.xsl?mount=/$serverpoint HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl

Но точка монтирования берется из параметра point, мнеб этот поинт и получать, чтоб брать не с модуля, а сервера icecast

6

Re: Как показать на странице точку монтирования IceCast2?

он у вас берет именно с нужного маунта, я же говорю поправьте скрипт и пусть он берет общее значение всех маунтов.
Ну или как вариант добавить еще один маунт и через масс выводить общее значение

Отредактировано KyPIIaToB (12-05-2011 15:01:36)

В здоровом теле - здоровый дух!

7

Re: Как показать на странице точку монтирования IceCast2?

Если не сложно подскажите как, буду признателен.

а с названием песен как быть они тоже обобщаться?

8

Re: Как показать на странице точку монтирования IceCast2?

Блин как же это сделать? Вообще кто нить реализовывал у себя на сайте??

Может у кого есть скрипт? А то вручную сложно постоянно менять точку монтирования.

Может быть есть способ сделать чтобы и точка play и live транслировалось в  один поток stream к примеру?

9

Re: Как показать на странице точку монтирования IceCast2?

Как узнать какой маунт играет в данный момент? Флеш плеер подхватывает если включается вещание, и включает обратно автодиджея, когда вещание прекращается. Как узнать ту переменную в которой хранится значения маунта, которую подтягивает плеер?

10

Re: Как показать на странице точку монтирования IceCast2?

Топикастер, если вопрос еще актуален, выложите здесь содержимое xls файла статуса и я помогу написать скрипт.
Такую вещь с подменой точки монтирования я уже сделал (правда на севхосте).

11

Re: Как показать на странице точку монтирования IceCast2?

уже делал такое для джумлы, где-то валяеться модуль. Еще у Сергея должен быть (ник Sergei)

12

Re: Как показать на странице точку монтирования IceCast2?

Да все еще актуально

<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" >
<pre>
MountPoint,Connections,Stream Name,Current Listeners,Description,Currently Playing,Stream URL
Global,Client:<xsl:value-of select="connections" /> Source: <xsl:value-of select="source_connections" />,,<xsl:value-of select="listeners" />,,
<xsl:for-each select="source">
<xsl:value-of select="@mount" />,,<xsl:value-of select="name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="description" />,<xsl:value-of select="artist" /> - <xsl:value-of select="title" />,<xsl:value-of select="url" />
</xsl:for-each>
</pre>
</xsl:template>
</xsl:stylesheet>

модуль для jooml'ы использую с обновлением ajax'ом от Gronpipmaster

13

Re: Как показать на странице точку монтирования IceCast2?

Не то... это файл разметки массива. Хотя тоже пригодится.
Нужен файл непосредственно где выводится инфа.
Например должен быть файл типа xspf. Из него удобнее грабить инфу.

14

Re: Как показать на странице точку монтирования IceCast2?

Выводиться  модулем для joomla.

<?php 
/**
 * ICECAST - A Joomla internet radio statistic module
 * @version 1.0.9
 * @package mod_icecast.zip
 * @copyright (C) 2009 - 2010 by Gronpipmaster and sli
 */
defined('_JEXEC') or die('Restricted access'); // no direct access
$link = $ip.':'.$port.'/'.$serverpoint.'.'.$serverpointtip;
JHTML::script('update.js', 'media/mod_icecast/');
?>
<div class="icecast<?php echo $params->get('moduleclass_sfx'); ?>">
<script type="text/javascript">var siteroot = "<?php echo $baseurl ?>";</script>
<span class='icecast_title' style='display:none'><?php echo $module->id ?></span>
<b><?php echo $ice2_station ?></b>
<div class="icacast-song"><?php    echo JText::_( 'GAME' );?><br /><b class="icecast-song"><?php echo $item->cur_song?></b></div>
<div class="icacast-play">
<a href="http://<?php echo $link?>">
<img src="<?php echo $baseurl?>/media/mod_icecast/play.png" title="<?php echo JText::_( 'ALT_IMG' );?>" alt="<?php echo JText::_( 'ALT_IMG' );?>"></a>
</div>
<div class="icacast-list"><?php echo JText::_( 'PEOPLE' );?> <b class="icecast-listeners"><?php echo $item->listfake ?></b></div>
<div class="icacast-bitrate"><?php echo JText::_( 'BITRATE' );?> <b><?php echo $bitrate?></b></div>
</div>

извините если я  не правильно понял немного далек от icecast, парень отвественный за это говорит на сервере всего 2-файла status.xsl и status2.xsl

xspf - где он обычно лежит по умолчанию??

15

Re: Как показать на странице точку монтирования IceCast2?

XSPF (англ. XML Shareable Playlist Format), читается «спифф» (англ. spiff) — открытый формат данных для плейлистов, основанный на XML и разрабатываемый под эгидой Xiph.Org Foundation.
У айскаста по умолчанию генерятся два файла плейлистов: M3U с ссылкой и XSPF (аля XML)
Лежит там же где и M3U - http://сайт:порт
Просто грабить xml-плейлист на маунте проще, чем рыться в исходниках.
Смысл тут просто - читаем файл, выбираем любой (индивидуальный для каждого маунта) ID (например, заголовок стрима), и сравниваем. Если отсутствует значение - берем другой и сравниваем. Таким перебором вычислится текущий (доступный) маунт.

16

Re: Как показать на странице точку монтирования IceCast2?

пишет Could not parse XSLT file

http://radio-pirs.ru:8000/play.xspf
http://radio-pirs.ru:8000/live.xspf

17

Re: Как показать на странице точку монтирования IceCast2?

пишет Realwhite:

пишет Could not parse XSLT file

Выкинь эту сборку айса

В здоровом теле - здоровый дух!

18

Re: Как показать на странице точку монтирования IceCast2?

какую посоветуете ?

19

Re: Как показать на странице точку монтирования IceCast2?

пишет Realwhite:

какую посоветуете ?

http://www.xiphicecast.webspace.virginmedia.com/

В здоровом теле - здоровый дух!

20

Re: Как показать на странице точку монтирования IceCast2?

пишет KyPIIaToB:

пишет Realwhite:

какую посоветуете ?

http://www.xiphicecast.webspace.virginmedia.com/

Так эта сборка и стоит

Добавлено спустя     1 минуту   2 секунды:
Я ранее обращался вот с этой проблемой http://radiotalk.ru/viewtopic.php?id=3194 ее и поставил

21

Re: Как показать на странице точку монтирования IceCast2?

Мда...
Можно попробовать ограбить stats.xml
Находится тут http://пользователь:пароль@сервер:порт/admin/stats.xml
Имхо удобно все, что имеет xml стандарт.

Отредактировано Freak (01-06-2011 20:02:32)

22

Re: Как показать на странице точку монтирования IceCast2?

вот:

<?xml version="1.0"?>
<icestats><admin>icemaster@localhost</admin>
<client_connections>120525</client_connections><clients>5</clients>
<connections>120562</connections>
<file_connections>352</file_connections>
<host>localhost</host>
<listener_connections>477</listener_connections>
<listeners>4</listeners><location>Earth</location>
<server_id>Icecast trunk</server_id><server_start>Sat, 28 May 2011 11:37:07 +0400</server_start>
<source_client_connections>4</source_client_connections>
<source_relay_connections>0</source_relay_connections>
<source_total_connections>4</source_total_connections>
<sources>1</sources><stats>0</stats>
<stats_connections>0</stats_connections>
<source mount="/live"><listeners>0</listeners>
<listenurl>http://localhost:8000/live</listenurl>
<max_listeners>unlimited</max_listeners></source>
<source mount="/play"><audio_info>bitrate=96;channels=2;samplerate=44100</audio_info>
<channels>2</channels><genre>Ofther</genre><listener_peak>9</listener_peak>
<listeners>4</listeners><listenurl>http://localhost:8000/play</listenurl>
<max_listeners>unlimited</max_listeners>
<public>1</public>
<samplerate>44100</samplerate>
<server_description>Radio-Pirs 96kb</server_description>
<server_name>Radio-Pirs</server_name>
<server_type>audio/mpeg</server_type>
<server_url>http://radio-pirs.ru/</server_url>
<slow_listeners>74</slow_listeners><source_ip>::1</source_ip>
<stream_start>Sat, 28 May 2011 11:37:07 +0400</stream_start>
<title>Dilays - Belie rozi (Bold Brothers Rem</title>
<total_bytes_read>6368396395</total_bytes_read>
<total_bytes_sent>7040554708</total_bytes_sent>
<user_agent>libshout/2.2.2</user_agent></source></icestats>

Отредактировано Realwhite (03-06-2011 16:02:04)

23

Re: Как показать на странице точку монтирования IceCast2?

Уже лучше. Но желательно было бы посмотреть на файл при активном маунте /live. Но ничего, и так сойдет.

Вот какбэ скрипт, который работает.
Осталось подогнать его под двиг сайта или просто вставить куда-нибудь.

Писал для себя. Заточен под Ваш случай. Переключает на маунт /play, если маунт /live недоступен и выводит инфу (если маунт /live доступен, то есть активный - показывает инфу маунта /live).
Для Джумлы нужно переделывать. Я не работаю с этим движком - он поганый. big_smile
Если понадобится, скрипт можно дописать.

<?

//Icecast stats.xml parser

class Icestat {

private $xml = array();
private $stat = array();
var $current = array();

    function getfile($user, $pass, $serv, $port) {
    
        $url = "http://".$user.":".$pass."@".$serv.":".$port."/admin/stats.xml";
        $this->xml = simplexml_load_file($url);    
        
    }    
        
    function parsefile() {
        
        $mcount = count($this->xml->source);
        
        for ($i=0; $i<$mcount; $i++) {
            
            foreach ($this->xml->source as $arr) {
        
                $mnt=str_replace("/","",$arr['mount']);
                $this->stat[$mnt]['mount_name'] = $mnt; //ID маунта (например: ices)
                $this->stat[$mnt]['audio_info'] = $arr->audio_info; //инфо маунта
                $this->stat[$mnt]['bitrate'] = $arr->bitrate; //битрейт
                $this->stat[$mnt]['genre'] = $arr->genre; //жанр    
                $this->stat[$mnt]['channels'] = $arr->ice-channels; //каналы (моно, стерео)
                $this->stat[$mnt]['listener_peak'] = $arr->listener_peak; //пик слушателей
                $this->stat[$mnt]['listeners'] = $arr->listeners; //текущее кол-во слушателей    
                $this->stat[$mnt]['max_listeners'] = $arr->max_listeners; //максимум слушателей            
                $this->stat[$mnt]['server_description'] = $arr->server_description; //описание маунта        
                $this->stat[$mnt]['server_name'] = $arr->server_name; //название маунта
                $this->stat[$mnt]['title'] = $arr->title; // название текущей песни
                        
            }
            
        }
        
    }
    
    function currentmount() {
    
        //if (!$this->stat['ID маунта живого вещания (например: live)']['audio_info']) {
        if (!$this->stat['live']['audio_info']) {
        
            //$this->current = $this->stat['ID маунта нонстопа (например: play)'];
            $this->current = $this->stat['play']; 
        
        } else {
        
            $this->current = $this->stat['live']; 
        
        } 

        $this->stat = 0;
            
    }
    
    function printcurrent() {
    
    //Выводимая инфа (+ диз если нужно). Можно дополнять и изменять 
        print "
            <nowrap>
            Активный маунт: ".$this->current['mount_name']."<br />
            Название маунта: ".$this->current['server_name']."<br />
            Описание маунта: ".$this->current['server_description']."<br />
            Композиция: ".$this->current['title']."<br />";
    
        if (!$this->current['bitrate']) { 

        print "
            Битрейт: 96 Кб/с<br />";            
        
        } else {
        
        print "
            Битрейт: ".$this->current['bitrate']." Кб/с<br />";            
        
        }

        print "
            Слушателей: ".$this->current['listeners']."<br />
            Пик слушателей: ".$this->current['listener_peak']."
            </nowrap>";
    
    }
    
}


//Непосредственно вывод

$output = new Icestat;
//заполнить данные
//пример: $output->getfile('юзер', 'пароль', 'сервер', 'порт');
$output->getfile('', '', '', '');
$output->parsefile();
$output->currentmount();
$output->printcurrent();

//End of file
?>

Отредактировано Freak (03-06-2011 23:32:15)

24

Re: Как показать на странице точку монтирования IceCast2?

зачем изобретать велосипед? сказано же что этот модуль от Gronpipmaster'а есть у меня и помогал мне его переделывать tarasian666. в этот модуль запихали вывод аватарки диджея, 2 потока, вывод трека при переходе на нонстоп http://radiopuls.net.ru/mod_icecast.rar

Добавлено спустя     1 минуту   7 секунд:
пример у меня на сайте можно посмотреть http://radiopuls.net.ru

И да поможет мне F1,
И да сохранит меня F6,
Во имя Ctr'а, Alt'a и святого Delit'а.
Enter...

25

Re: Как показать на странице точку монтирования IceCast2?

Никто ничего не изобретал.
Для меня написать такой скрипт - дело 15 минут. Кроме того, человек спросил - я показал.
Да и приложенный модуль отличается глупостью - половину кода можно было бы сразу выкинуть, слишком много написано. Вывод через AJAX явно лишний.
Судить в компетентности не буду, ибо про структуру Джумла-модулей не знаю. Может быть по другому на этом дырявом и тормознутом движке не напишешь.