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

Написал jQuery Plugin для Icecast

 

156
Eugene @MechanisM
Забрать можно тут **********

0
888
Falcon @Falcon
Что-то не работает. json xsl прижился хорошо, все показывает. а вот exapmle.html не выводит ничего. В качестве сервера вписал айпи и порт

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"><title>Icecast - json demo</title>
<script src='http://code.jquery.com/jquery-1.7.1.js'></script>
<script src='jquery-icecast.js'></script>
<script>
$(function(){$('.mounts').icecast({server:"46.4.209.149:8004"});});
</script>
</head>
<body>
<ul class="mounts"></ul>
</body>
</html>

0
223
Игорь @devilben
Falcon пишет:

а вот exapmle.html не выводит ничего

А jquery-icecast.js вызывается ? Его нужно было в папку exapmle перекинуть, либо exapmle.html в корень

0
888
Falcon @Falcon
devilben пишет:

Falcon пишет:

а вот exapmle.html не выводит ничего

А jquery-icecast.js вызывается ? Его нужно было в папку exapmle перекинуть, либо exapmle.html в корень

Конечно вызывается

0
223
Игорь @devilben
  1. 200 OK 123ms
  2. data is null
  3. $.getJSON('http://'+options.server+'/j...$.each(data.mounts,function(i,mount){

Ждем комментарии автора )

0
833
metra52 @metra52
у него скрипт лежал в самой папке icecast/web поэтому работал, завтра сделает, обещался что бы везде работало.

0
223
Игорь @devilben
Ну что, сделал, везде работает ?)

Сначала нужно генерировать валидный JSON что бы с него что то получать:

  1. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  2. <xsl:output method="text" media-type="text/plain" indent="yes" encoding="UTF-8" />
  3. <xsl:template match = "/icestats" >
  4. <!-- <xsl:param name="callback" /> -->
  5. <!-- <xsl:value-of select="$callback" /> -->
  6. parseMusic (
  7. {
  8. <xsl:for-each select="source">
  9. &quot;<xsl:value-of select="@mount" />&quot; :
  10. {
  11. "listeners" : &quot;<xsl:value-of select="listeners" />&quot;,
  12. "description" : &quot;<xsl:value-of select="description" />&quot;,
  13. "artist" : &quot;<xsl:value-of select="artist" />&quot;,
  14. "title" : &quot;<xsl:value-of select="title" />&quot;,
  15. "genre" : &quot;<xsl:value-of select="genre" />&quot;,
  16. "url" : &quot;<xsl:value-of select="server_url" />&quot;,
  17. </xsl:for-each>
  18. "total" : &quot;<xsl:value-of select="listeners" /><xsl:for-each select="source"><xsl:if test="position() != last()"></xsl:if></xsl:for-each>&quot;
  19. },
  20. }
  21. );
  22. </xsl:template>
  23. </xsl:stylesheet>


Далее привожу пример как получить, распарсить ответ и загрузить в нужные id с авто обновлением:

  1. <!DOCTYPE html>
  2. <html lang="ru">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>Icecast2 Satat</title>
  6. <script src='http://code.jquery.com/jquery-1.7.1.js'></script>
  7. <script>
  8. // немного кастомизации
  9. var mountpoint = "/live"; //маунт с которого берем инфу в массиве
  10. var counter=0;
  11. var url = "http://radio.example.com:8000/json.xsl?"; //наш url к json в папке Web
  12. url+= "mount=" + mountpoint + "&callback=";
  13. function parseMusic(results)
  14. {
  15. // #id >> data
  16. var nm = results[mountpoint];
  17. $('#artist').text(nm["artist"]);
  18. $('#title').text(nm["title"]);
  19. $('#total').text(nm["total"]);
  20. $('#genre').text(nm["genre"]);
  21. }
  22. var span;
  23. var script;
  24. $.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});
  25. function initMusic()
  26. {
  27. span = document.createElement("span");
  28. span.id="getscript";
  29. document.body.appendChild(span);
  30. script = document.createElement("script");
  31. script.type="text/javascript";
  32. script.charset="UTF-8";
  33. }
  34. function addMusic()
  35. {
  36. $('#getscript').empty();
  37. script.src = url + counter;
  38. $('#getscript').append(script);
  39. }
  40. function updateMusic()
  41. {
  42. counter=counter+1; // счетчик для наглядности частоты обновления
  43. addMusic();
  44. $('#counter').text(counter);
  45. }
  46. $(document).ready(
  47. function () {
  48. initMusic();
  49. addMusic();
  50. setInterval('updateMusic()', 3000 ); // интервал обновления, сейчас 3 сек.
  51. });
  52. </script>
  53. </head>
  54. <!-- Выводим полученные данные на страницу -->
  55. <body>
  56. <span id="artist"></span> - <span id="title"></span>
  57. (<span id="total"></span> listeners)
  58. <span id="counter"></span>
  59. </body>
  60. </html>

Для использования на продакшине лучше отключить access.log у icecast2. Ну и вынести js в отдельный фаил чтоб оно кешеровалось и т.д.

Отредактировано devilben - 10.02.2012
0
10
Roma90 @Roma90
При подключении второго или третьего потока (sambroadcaster) скрипт падает, допишите плз, я не силен в этом, оч надо! спасибо
параметр total не работает :(

Отредактировано Roma90 - 25.10.2012
0
6245
Тарас @tarasian666
что значит "скрипт падает" ?

0
10
Roma90 @Roma90
tarasian666 пишет:

что значит "скрипт падает" ?

Если поток один, то всё корректно отображается, ифна нормально считывается с json.xsl, но стоит добавить в сэме ещё один поток, то скрипт перестает работать, и информация о треке уже не показывается на странице, думаю, потому что скрипт написан под один поток, т.к.
  1. var mountpoint = "/live"; //маунт с которого берем инфу в массиве
в коде следует указать только один поток.
решил эту проблему с "падением" скрипта, если потоков сэма больше чем один, но..

Нужно дописать как то скрипт, чтобы он брал информацию о слушателях 'liseners' на всех существующих потоках сэма и складывал их в 'total' , судя по всему json.xsl тоже не дописан, потому что параметры 'liseners' не складываются в общий 'total' ...
Уже всю бошку сломал :(
Помогите дописать json.xsl

Отредактировано Roma90 - 25.10.2012
0
129
UAFM @UAFM
Как сделать на два маунта? Тоесть если live отключен то парсить с нонстоп.

0
6245
Тарас @tarasian666
Парсить первый маунт потом если "пусто" парсить второй

0
129
UAFM @UAFM
А как сделать проверку пустой ли маунт? И еще проблема в том что переменые mount и url сдесь глобальные. Если помещаю в функциию то все перестает работать. Обьясните пожалуйста.

0
6245
Тарас @tarasian666
как то на подобии такого
  1.  
  2. function parseMusic(results)
  3. {
  4. // #id >> data
  5. var nm = results['mountpoint1'];
  6. if(nm["title"] =='') nm = results['mountpoint2'];
  7. $('#artist').text(nm["artist"]);
  8. $('#title').text(nm["title"]);
  9. $('#total').text(nm["total"]);
  10. $('#genre').text(nm["genre"]);
  11. }


если глобальные то перемещение их в функцию наоборот должно пройти без проблем

0
129
UAFM @UAFM
Это хорошо, но перед тем мы загружаем еще адрес в переменной url

  1. var url = "http://radio.example.com:8000/json.xsl?"; //наш url к json в папке Web
  2. url+= "mount=" + mountpoint + "&callback=";


тут у нас mountpoint а нужен еще mountpoint2

создать еще переменою
  1. var urlSecond =http://radio.example.com:8000/json.xsl?"; //наш url к json в папке Web
  2. urlSecond+= "mount=" + mountpoint2 + "&callback=";

И здесь выводить ??
  1. function addMusic()
  2. {
  3. $('#getscript').empty();
  4. script.src = url + counter;
  5. $('#getscript').append(script);
  6. }

Как то трудно получается(

Отредактировано UAFM - 03.11.2012
0
6245
Тарас @tarasian666
  1.  
  2. var url = "http://radio.example.com:8000/json.xsl?"; //наш url к json в папке Web
  3. url+= "mount=" + mountpoint + "&callback=";

тут не указывать маунт, а указывать там где я написал

в таком случае сточку url+= "mount=" + mountpoint + "&callback="; удалить

это потом можно будет приветси в более красивую форму

Отредактировано tarasian666 - 03.11.2012
0
6245
Тарас @tarasian666
  1.  
  2. <!DOCTYPE html>
  3. <html lang="ru">
  4. <head>
  5. <meta charset="UTF-8" />
  6. <title>Icecast2 Satat</title>
  7. <script src='http://code.jquery.com/jquery-1.7.1.js'></script>
  8. <script>
  9. // немного кастомизации
  10. var mountpoint = "/bodr";
  11. var mountpoint2 = "/ametrin";//нонстоп
  12. var nac = true;
  13. var counter=0;
  14. var url = "http://listen.rcast.pro:8000/json.xsl?"; //наш url к json в папке Web
  15. var url2 = url;
  16. url+= "mount=" + mountpoint + "&callback=";
  17. url2+="mount=" + mountpoint2 + "&callback=";
  18. function parseMusic(results)
  19. {
  20. // #id >> data
  21. for (var n in results){
  22. var nm = results[n];
  23. if(nm["title"] && nac){
  24. nac = false;
  25. $('#artist').text(nm["artist"]);
  26. $('#title').text(nm["title"]);
  27. $('#total').text(nm["total"]);
  28. $('#genre').text(nm["genre"]);
  29. }
  30. }
  31. }
  32. var span;
  33. var script;
  34. $.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});
  35. function initMusic()
  36. {
  37. span = document.createElement("span");
  38. span.id="getscript";
  39. document.body.appendChild(span);
  40. script = document.createElement("script");
  41. script.type="text/javascript";
  42. script.charset="UTF-8";
  43. }
  44. function addMusic()
  45. {
  46. nac = true;
  47. $('#getscript').empty();
  48. script.src = url + counter;
  49. $('#getscript').append(script);
  50. script.src = url2 + counter;
  51. $('#getscript').append(script);
  52. }
  53. function updateMusic()
  54. {
  55. counter=counter+1; // счетчик для наглядности частоты обновления
  56. addMusic();
  57. $('#counter').text(counter);
  58. }
  59. $(document).ready(
  60. function () {
  61. initMusic();
  62. addMusic();
  63. setInterval('updateMusic()', 3000 ); // интервал обновления, сейчас 3 сек.
  64. });
  65. </script>
  66. </head>
  67. <!-- Выводим полученные данные на страницу -->
  68. <body>
  69. <span id="artist"></span> - <span id="title"></span>
  70. (<span id="total"></span> listeners)
  71. <span id="counter"></span>
  72. </body>
  73. </html>

Отредактировано tarasian666 - 04.11.2012
0
10
Артем @TemKa
tarasian666 пишет:

  1.  
  2. <!DOCTYPE html>
  3. <html lang="ru">
  4. <head>
  5. <meta charset="UTF-8" />
  6. <title>Icecast2 Satat</title>
  7. <script>
  8. // немного кастомизации
  9. var mountpoint = "/bodr";
  10. var mountpoint2 = "/ametrin";//нонстоп
  11. var nac = true;
  12. var counter=0;
  13. var url = "http://listen.rcast.pro:8000/json.xsl?"; //наш url к json в папке Web
  14. var url2 = url;
  15. url+= "mount=" + mountpoint + "&callback=";
  16. url2+="mount=" + mountpoint2 + "&callback=";
  17. function parseMusic(results)
  18. {
  19. // #id >> data
  20. for (var n in results){
  21. var nm = results[n];
  22. if(nm["title"] && nac){
  23. nac = false;
  24. $('#artist').text(nm["artist"]);
  25. $('#title').text(nm["title"]);
  26. $('#total').text(nm["total"]);
  27. $('#genre').text(nm["genre"]);
  28. }
  29. }
  30. }
  31. var span;
  32. var script;
  33. $.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"});
  34. function initMusic()
  35. {
  36. span = document.createElement("span");
  37. span.id="getscript";
  38. document.body.appendChild(span);
  39. script = document.createElement("script");
  40. script.type="text/javascript";
  41. script.charset="UTF-8";
  42. }
  43. function addMusic()
  44. {
  45. nac = true;
  46. $('#getscript').empty();
  47. script.src = url + counter;
  48. $('#getscript').append(script);
  49. script.src = url2 + counter;
  50. $('#getscript').append(script);
  51. }
  52. function updateMusic()
  53. {
  54. counter=counter+1; // счетчик для наглядности частоты обновления
  55. addMusic();
  56. $('#counter').text(counter);
  57. }
  58. $(document).ready(
  59. function () {
  60. initMusic();
  61. addMusic();
  62. setInterval('updateMusic()', 3000 ); // интервал обновления, сейчас 3 сек.
  63. });
  64. </script>
  65. </head>
  66. <!-- Выводим полученные данные на страницу -->
  67. <body>
  68. <span id="artist"></span> - <span id="title"></span>
  69. (<span id="total"></span> listeners)
  70. <span id="counter"></span>
  71. </body>
  72. </html>


Не работает ваш вариант почему-то, выводит только такую надпись - ( listeners)

0
6245
Тарас @tarasian666
работает, проверял у себя и UAFM тоже говорил что работает
так что проблема не в скрипте


например ********** - не работает в этот момент

Отредактировано tarasian666 - 12.11.2012
0
10
Артем @TemKa
tarasian666 пишет:

работает, проверял у себя и UAFM тоже говорил что работает
так что проблема не в скрипте


например ********** - не работает в этот момент


Само собой меняю ссылку на свой поток. Закачал файлы под рутом, сейчас попробую изменить владельца на icecast

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.