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

liquidsoap

 

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

0
9
Harper @Harper
Странно но оно работает )
  1.  
  2. req = request.dynamic({request.create("bar:foo", indicators=get_process_lines("php get_req.php "))})
  3. # Start building the feed with music
  4. radio = fallback(track_sensitive = false, [req, myplaylist])

Это для liquidsoap
  1.  
  2. <?php
  3. $host = "localhost";
  4. $user = "user";
  5. $base = "base";
  6. $pass = "pass";
  7. $link = mysql_connect($host, $user, $pass) or die();
  8. mysql_select_db($base) or die();
  9. $query = 'SELECT * FROM `requests` LIMIT 1 ORDER by date ASC';
  10. $result = mysql_query($query) or die();
  11. $line = mysql_fetch_array($result, MYSQL_ASSOC);
  12. if(!empty($line) && $line != 0){
  13. echo $line['path'];
  14. mysql_query('DELETE FROM `request` WHERE `id` = '.$line['id'].' LIMIT 1') or die();
  15. }
  16. mysql_free_result($result);
  17. mysql_close($link);
  18. ?>

Это для скрипта запроса
З.Ы. Такой вот вопрос появился. При HUP рестарте айскаста - в статусе начниает показываться /live маунт, хотя играет только нонстоп. Как побороть?

0
6245
Тарас @tarasian666
Никак

0
20
Marko @namikiri
Здравствуйте!
Решил перейти на Liquidsoap (перед этим был mpd), всё настроил, скрипт написал, всё работает, кроме злосчастного harbor.
Вот полный скрипт радио:
  1. set("harbor.bind_addr","0.0.0.0")
  2. set("harbor.max_connections",5) # пробовал
  3. set("harbor.verbose",true) # полный вывод логов
  4. set("log.file.path","./debug.log") # и в файло пишем
  5. set("log.level",5) # пишем всё что думаем
  6. set("log.stdout",true) # в stdout для отладки
  7. # Jingle Injection
  8. def smooth_add(~delay=0.5,~p=0.2,~normal,~special)
  9. d = delay
  10. fade.final = fade.final(duration=d*2.)
  11. fade.initial = fade.initial(duration=d*2.)
  12. q = 1. - p
  13. c = amplify
  14. fallback(track_sensitive=false,
  15. [special,normal],
  16. transitions=[
  17. fun(normal,special)->
  18. add(normalize=false,
  19. [c(p,normal),
  20. c(q,fade.final(type="sin",normal)),
  21. sequence([blank(duration=d),c(q,special)])]),
  22. fun(special,normal)->
  23. add(normalize=false,
  24. [c(p,normal),
  25. c(q,fade.initial(type="sin",normal))])
  26. ])
  27. end
  28. # Music
  29. music = mksafe(audio_to_stereo(playlist("/home/service/audio/jtrance/music/")))
  30. music = crossfade(start_next=2.,fade_out=3.,fade_in=1.,music)
  31. # Some jingles
  32. jingles = mksafe(audio_to_stereo(playlist("/home/service/audio/jtrance/jingle/")))
  33. jingles = amplify(2., jingles)
  34. # Start building the feed with music
  35. radio = random([music])
  36. # Mixing music and jingles
  37. radio = smooth_add(p=0.05, delay=0.3, normal=radio, special=switch([({0h0m or 0h30m }, jingles)]))
  38. #Тот самый харбор
  39. live = input.harbor("stream",port=8080,password="AZAZAazazaAZAZA",debug=true,logfile="./harbor.log")
  40. # Stream it out
  41. #Constant J-Trance Feed
  42. output.icecast(%mp3(bitrate=128),
  43. host = "localhost", port = 8000,
  44. name = "NyanServer :: Japanese Electronic Music",
  45. url="убрал ссылку. не отправлялось",
  46. genre = "Trance, JTrance, Electronic, Anime, Japanese, Vocaloid",
  47. description = "J-Trance and Japanese Electronic Music",
  48. password = "***stream pass***",
  49. mount = "jtrance",
  50. # Radio stream
  51. radio)
  52. #Live feed
  53. output.icecast(%mp3(bitrate=128),
  54. host = "localhost", port = 8000,
  55. name = "NyanServer Live :3",
  56. url="убрал ссылку",
  57. genre = "Kosherbient",
  58. description = "NyanServer :3",
  59. password = "***stream pass***",
  60. mount = "stream",
  61. # Radio stream
  62. fallback([live,radio]))



Прекрасно играют оба потока (/jtrance и /stream), однако запланировано, чтобы при подключении к /stream через harbor можно было бы вещать RJ-ю, а после отключения вернуться на "исходную".
При попытке подключиться к харбору на порт 8080 в логах сыплется вот это:
  1. 2014/01/08 13:42:24 [harbor:4] New client on port 8080: router
  2. 2014/01/08 13:42:24 [harbor:4] Header: content-type, value: audio/mpeg.
  3. 2014/01/08 13:42:24 [harbor:4] Header: Authorization, value: Basic c291cmNlOkFaQVpBYXphemFBWkFaQU==.
  4. 2014/01/08 13:42:24 [harbor:4] Header: ice-name, value: My Station name.
  5. 2014/01/08 13:42:24 [harbor:4] Header: ice-description, value: My station description.
  6. 2014/01/08 13:42:24 [harbor:4] Header: ice-url, value: тут ссылка
  7. 2014/01/08 13:42:24 [harbor:4] Header: ice-genre, value: Various.
  8. 2014/01/08 13:42:24 [harbor:4] Header: ice-public, value: 1.
  9. 2014/01/08 13:42:24 [harbor:4] Header: ice-bitrate, value: 128.
  10. 2014/01/08 13:42:24 [harbor:4] Header: ice-audio-info, value: ice-samplerate=44100;ice-bitrate=128;ice-channels=2.
  11. 2014/01/08 13:42:24 [harbor:4] Requested username: source, password: AZAZAazazaAZAZA.
  12. 2014/01/08 13:42:24 [harbor:4] Client logged in.
  13. 2014/01/08 13:42:24 [harbor:4] SOURCE request on /stream.
  14. 2014/01/08 13:42:24 [harbor:4] Adding source on mountpoint "/stream" with type "audio/mpeg".
  15. 2014/01/08 13:42:24 [harbor:4] Returned 500 for '/stream': File "tools/harbor.ml", line 354, characters 31-37: Assertion failed



То есть он как бы принимает поток, но потом ВНЕЗАПНО рвёт его с ошибкой 500. В том **********, содержится код на OCaml, который я править не рискнул:
  1. let protocol =
  2. match hprotocol with
  3. | `Http_10 -> "HTTP/1.0"
  4. | `Http_11 -> "HTTP/1.1"
  5. | _ -> assert false


Ругается на последнюю строчку в нём.
Пробовал подключатсья другими источниками (EDCast, ezstream) — жидкое мыло посылает всех с ошибкой 500.
Может быть кто-нибудь знает как побороть проблему?
Мыло собирал сам, вот configure:
  1. ---------------------------------------------------------------- Installation
  2. prefix : /usr/local
  3. exec_prefix : ${prefix}
  4. binary : ${exec_prefix}/bin
  5. configuration : ${prefix}/etc/liquidsoap
  6. logging : ${prefix}/var/log/liquidsoap
  7. PIDs : ${prefix}/var/run/liquidsoap
  8. logrotate conf : ${prefix}/etc/logrotate.d
  9. man page : ${datarootdir}/man/man1
  10. doc : ${datarootdir}/doc
  11. -------------------------------------------------------------------- Features
  12. * Supported input formats
  13. - Vorbis : yes
  14. - Theora : no (requires theora)
  15. - Speex : no (requires speex)
  16. - Dirac : no (requires schroedinger)
  17. - Flac (native) : no (requires flac)
  18. - Flac (ogg) : no (requires flac.ogg)
  19. - MP3 : yes
  20. - AAC : no (requires faad)
  21. - text-to-speech : requires text2wave (festival) and sox at runtime
  22. - XML playlists : no (requires xmlplaylist)
  23. - Lastfm : no (requires lastfm)
  24. * Supported output formats
  25. - Vorbis : yes
  26. - MP3 : yes
  27. - MP3 (fixed-point) : no (requires shine)
  28. - AAC : no (requires voaacenc)
  29. - AAC+ : detected at runtime
  30. - FDK-AAC : yes
  31. - SPEEX : no (requires speex)
  32. - Opus : no (requires opus)
  33. - Theora : no (requires theora)
  34. - Dirac : no (requires schroedinger)
  35. * Tags
  36. - Taglib (ID3 tags) : yes
  37. - Vorbis : yes
  38. - charset detection : yes
  39. * Input / output
  40. - Icecast/Shoutcast : yes
  41. - AO : yes
  42. - OSS : yes
  43. - ALSA : no (requires alsa)
  44. - Portaudio : no (requires portaudio)
  45. - Pulseaudio : no (requires pulseaudio)
  46. - JACK : no (requires bjack)
  47. - GStreamer : no (requires gstreamer)
  48. * Audio manipulation
  49. - Samplerate : yes
  50. - SoundTouch : no (requires soundtouch)
  51. - LADSPA : yes
  52. * Video manipulation
  53. - Gavl : no (requires gavl)
  54. - FFmpeg : no (requires ffmpeg)
  55. - frei0r : no (requires frei0r)
  56. - camlimages : no (requires camlimages)
  57. * MIDI manipulation
  58. - DSSI : no (requires dssi)
  59. * Visualization
  60. - Graphics : yes
  61. - SDL : no (requires sdl)
  62. - GD : no (requires gd)
  63. * Additional libraries
  64. - wget URI resolver : requires wget at runtime
  65. - dynlink : yes
  66. - inotify : no (requires inotify)
  67. - lo : no (requires lo)
  68. - magic : no (requires magic)
  69. - yojson : no (requires yojson)
  70. - windows service : no (requires winsvc)
  71. * Graphical interfaces
  72. - Python GUI : no



Сталкивался ли кто-нибудь с таким? Как решить? Чего не хватает в configure? Если нет, куда писать разработчикам? Mailing Lists я не понимаю (да, школота, ребёнок веб-два-ноль и так далее, слышали, знаем), а внятных контактов у них нет.

Отредактировано namikiri - 08.01.2014
0
6245
Тарас @tarasian666
попробуйте через mksafe fallback сделать и track_sensitive=false

0
20
Marko @namikiri
tarasian666 пишет:

попробуйте через mksafe fallback сделать



  1. #Live feed
  2. output.icecast(%mp3(bitrate=128),
  3. host = "localhost", port = 8000,
  4. name = "NyanServer Live :3",
  5. url="убрал ссылку",
  6. genre = "Kosherbient",
  7. description = "NyanServer :3",
  8. password = "***stream pass***",
  9. mount = "stream",
  10. # Radio stream
  11. fallback([live,radio])) # вот fallback на live. или нужно в виде переменной его делать?

0
6245
Тарас @tarasian666
radio = mksafe(fallback(track_sensitive=false, [live, radio]))

а потом radio в output вставить

0
20
Marko @namikiri
tarasian666 пишет:

radio = mksafe(fallback(track_sensitive=false, [live, radio]))

а потом radio в output вставить



Сделал всё так, как Вы сказали. Та же ошибка в логах.
  1. radio = mksafe(fallback(track_sensitive=false, [live,radio]))
  2. output.icecast(%mp3(bitrate=128),
  3. host = "localhost", port = 8000,
  4. name = "NyanServer Live :3",
  5. url="http://nyanserver.com",
  6. genre = "Kosherbient",
  7. description = "NyanServer :3",
  8. password = "32resfasfaewfewfewrferf",
  9. mount = "stream",
  10. # Radio stream
  11. radio)

0
6245
Тарас @tarasian666
а в каком формате идет стрим на харбор?

0
6245
Тарас @tarasian666
может ему еще название маунта не нравится судя по логам, может убрать или добавить слеш (не в liquidsoap)

0
20
Marko @namikiri
tarasian666 пишет:

а в каком формате идет стрим на харбор?

MP3@128kbps, частота auto.
Пробовал убирать/добавлять слэш, пробовал менять частоту дискретизации, безрезультатно.
Мне кажется, здесь проблема в запросах HTTP или конфигурации liquidsoap, а не в форматах, ведь на форматы заругался бы MAD, накрайняк модуль source/decode/encode, но никак не харбор, ведь харбор просто принимает данные и отдаёт их источнику.

0
6245
Тарас @tarasian666
конфигурация вроде впорядке, у меня с такой же работает, только логи отключены

0
20
Marko @namikiri
tarasian666 пишет:

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

Какая у Вас версия liquidsoap? Вот моя:
  1. root@srv-main:/home/namikiri# liquidsoap --version
  2. Liquidsoap 1.1.1+scm (@:20140107:154214)
  3. Copyright (c) 2003-2013 Savonet team
  4. Liquidsoap is open-source software, released under GNU General Public License.
  5. See <http://liquidsoap.fm> for more information.


Собирал из git, ОС Ubuntu 12.10. А, да, ещё, какая у Вас версия OCaml? Моя:
  1. root@srv-main:/home/namikiri# ocaml -version
  2. The Objective Caml toplevel, version 3.12.1


На всякий случай:
  1. Linux srv-main 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux

Отредактировано namikiri - 08.01.2014
0
20
Marko @namikiri
Проблема решена.
Спасибо, tarasian666, за попытки помочь мне.
От безысходности обновил дистрибутив Ubuntu, снёс собранный руками liquidsoap и поставил его из репозиториев.
Всё работает идеально, MP3 поддерживается из коробки, скрипт был написан правильно.

0
888
Falcon @Falcon
Добрый день. Такой вопрос:
Есть два инпута, их надо смикшировать. У первого инпута понизить громкость до 20%, и на него наложить второй инпут со 100% громкостью. Желательно сделать "врезку" красивым кроссфейдом.
Подскажите, как сие можно реализовать?
Читал про функцию smooth_add(~delay=0.5,~p=0.2,~normal,~special), но не уверен, что она подойдет.
Спасибо.

Отредактировано Falcon - 30.01.2014
0
6245
Тарас @tarasian666
есть функция mix
насчет врезки с кросфейдом незнаю как там получится, я делал такое внешне через telnet скриптом - плавное изменение громкостей двух потоков

0
3
second8prize @second8prize
Добрый день.

Пишу скрипт, который показывал бы текущий трек.
Обычно предлагается следующее решение, каждый заданный интервал времени запрашивать с помощью AJAX сервер Icecast и забирать от туда информацию.

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

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

Буду очень благодарен за любую помощь.

0
6245
Тарас @tarasian666
Возможность есть, настраивать ничего не надо, только включить telnet в liqauidsoap
  1. set("server.telnet",true)


название трека <id стрима>.metadata и парсить то что с rid=0
сколько осталось <id стрима>.remaining
осталось только сделать telnet клиент на php и парсить данные )

0
3
second8prize @second8prize
Спасибо за ответ.

если адрес ip-adress:port/mountpoint , то <id стрима> - это mountpoint ? наверное, не так все-таки.

или это radio = playlist(...) или <id стрима> - это radio

0
6245
Тарас @tarasian666
если id не задан то выбирает mountpoint или название переменной "плейлиста" помоему

0





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

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