Re: liquidsoap
alexgard, как решил проблему-то? Не через порты - собирать из исходников.
Первый русскоязычный форум посвященный интернет-радиовещанию
Страницы Назад 1 … 24 25 26 27 28 … 53 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться
alexgard, как решил проблему-то? Не через порты - собирать из исходников.
пишет nivs:
alexgard, как решил проблему-то? Не через порты - собирать из исходников.
Плейлист обновляется динамически. В плейлисте скрипт который перед началом воспроизведения скачивает трек....
Привет!
Пролистал тему, но вроде ответа на вопрос не нашел.
Суть проблемы - сервер вещает по плейлисту, но я, как клиент, дослушиваю текущий трек до конца и тишина - до тех пор пока не обновлю стрим - тогда продолжается. То есть после каждого трека происходит "затыкание".
Вещательный скрипт:
#!/usr/bin/liquidsoap
set("log.file.path","___/ls.log")
mypl = mksafe(playlist(mode="random","./generalPlaylist.lst"))
output.icecast.vorbis(host = "___", port=___, password="___", mount="__", mypl)
Отредактировано gef0rce (26-05-2012 14:59:05)
gef0rce,
та же проблема.
Но сейчас меня мучает другой вопрос. Ребят, подскажите, как подсчитать требуемые ресурсы сервера для вещания?
Сейчас у меня 2,2 мГц + 500 Гц, RAM - 2048 Мб. 4 канала, 1 на 3 потока разбит (128, 96, 24), остальные по 128, проц загружен на ~60%. Переодически либо полностью виснет liquidsoap, либо полностью система зависает. Раньше было 1024 Гц + 1024 Мб все 4 канала по 3 потока - 99%. Надо купить выделенный, либо VPS покруче, но вот какой? Надеюсь на вашу помощь!
gef0rce, версия какая ? возможно надо добавить еще битрейт
azatxaker, 2,2 мГц ? может гигагерц?
на такое кол-во потоков надо брать как можно мощнее
Вот скрипт:
#!/usr/local/bin/liquidsoap
# Configuration
set("log.file.path", "/home/music/data/logs/broadcast.log")
set("server.telnet", true)
set("server.telnet.port", 12381)
set("init.daemon", true)
set("init.daemon.pidfile", false)
# Music's playlists
crazy_music = mksafe(playlist(reload = 600, "/home/music/data/public_html/music/crazy/"))
club_music = mksafe(playlist(reload = 600, "/home/music/data/public_html/music/club/"))
rap_music = mksafe(playlist(reload = 600, "/home/music/data/public_html/music/rap/"))
rock_music = mksafe(playlist(reload = 600, "/home/music/data/public_html/music/rock/"))
# Jingles' playlist
jingles = mksafe(playlist(reload = 3600, "/home/music/data/public_html/jingles/Jingles/"))
#jingles2 = mksafe(playlist(reload = 3600, "/home/music/data/public_html/jingles/Jingles/"))
#jingles3 = mksafe(playlist(reload = 3600, "/home/music/data/public_html/jingles/Jingles/"))
#jingles4 = mksafe(playlist(reload = 3600, "/home/music/data/public_html/jingles/Jingles/"))
# Mixing music and jingles
crazy_broadcast = smart_crossfade(rotate(weights = [3, 1], [crazy_music, jingles]))
#club_broadcast = smart_crossfade(rotate(weights = [3, 1], [club_music, jingles2]))
#rap_broadcast = smart_crossfade(rotate(weights = [3, 1], [rap_music, jingles3]))
#rock_broadcast = smart_crossfade(rotate(weights = [3, 1], [rock_music, jingles4]))
# Adding requests, "hour open" jingles and normalizing
crazy_broadcast = fallback([request.queue(id = "crazy_request"), request.queue(id = "hour_open"), crazy_broadcast])
#club_broadcast = fallback([request.queue(id = "crazy_request"), request.queue(id = "hour_open"), club_broadcast])
#rap_broadcast = fallback([request.queue(id = "crazy_request"), request.queue(id = "hour_open"), rap_broadcast])
#rock_broadcast = fallback([request.queue(id = "crazy_request"), request.queue(id = "hour_open"), rock_broadcast])
# Outputing
####################################################################################################
output.icecast(%mp3(bitrate = 128), host = "localhost", port = 8000, password = "***", mount = "crazy128", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Pop/Dance", url = "http://www.crazyradio.net/", encoding = "UTF-8", crazy_broadcast)
output.icecast(%mp3(bitrate = 96), host = "localhost", port = 8000, password = "***", mount = "crazy96", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Pop/Dance", url = "-", encoding = "UTF-8", crazy_broadcast)
output.icecast(%mp3(bitrate = 24), host = "localhost", port = 8000, password = "***", mount = "crazy24", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Pop/Dance", url = "-", encoding = "UTF-8", crazy_broadcast)
####################################################################################################
output.icecast(%mp3(bitrate = 128), host = "localhost", port = 8000, password = "***", mount = "club128", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Club", url = "-", encoding = "UTF-8", club_broadcast)
#output.icecast(%mp3(bitrate = 96), host = "localhost", port = 8000, password = "***", mount = "club96", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Club", url = "-", encoding = "UTF-8", club_broadcast)
#output.icecast(%mp3(bitrate = 24), host = "localhost", port = 8000, password = "***", mount = "club24", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Club", url = "-", encoding = "UTF-8", club_broadcast)
####################################################################################################
output.icecast(%mp3(bitrate = 128), host = "localhost", port = 8000, password = "***", mount = "rap128", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Rap", url = "-", encoding = "UTF-8", rap_broadcast)
#output.icecast(%mp3(bitrate = 96), host = "localhost", port = 8000, password = "***", mount = "rap96", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Rap", url = "-", encoding = "UTF-8", rap_broadcast)
#output.icecast(%mp3(bitrate = 24), host = "localhost", port = 8000, password = "***", mount = "rap24", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Rap", url = "-", encoding = "UTF-8", rap_broadcast)
####################################################################################################
output.icecast(%mp3(bitrate = 128), host = "localhost", port = 8000, password = "***", mount = "rock128", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Rock", url = "-", encoding = "UTF-8", rock_broadcast)
#output.icecast(%mp3(bitrate = 96), host = "localhost", port = 8000, password = "***", mount = "rock96", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Rock", url = "-", encoding = "UTF-8", rock_broadcast)
#output.icecast(%mp3(bitrate = 24), host = "localhost", port = 8000, password = "***", mount = "rock24", name = "Crazy Radio", description = "Crazy Radio - мы заставим зажигать вместе с нами вселенную!", genre = "Rock", url = "-", encoding = "UTF-8", rock_broadcast)
Ой, гигагерц:) Ну как можно мощнее, но хотелось бы и в капитал вписаться, поэтому хотелось бы поточнее, сколько примерно надо?
думаю надо от 3 Ггц но еще зависит от типа процессора.
Но и лучше брать выделеный сервер или виртуальный полностью отделен от других
Спасибо! С проблемой остановки плейлиста разобрался просто: проверил все пути. Оказалось, что путь к джинглам был левый, вот вещание на них и останавливалось.
Требуется помощь и совет знатоков. В общем, есть соап, его конфиг:
#!/usr/bin/liquidsoap
set("log.file.path","/tmp/liq.log")
set("init.daemon.pidfile.path","/tmp/liq.pid")
output.icecast(%mp3(samplerate=44100, bitrate=192), host = "localhost", port = 8000, password = "888", mount = "192", mksafe(input.http("http://uk3-pn.mixstream.net:8026/")))
output.icecast(%mp3(samplerate=44100, bitrate=96), host = "localhost", port = 8000, password = "888", mount = "96", mksafe(input.http("http://uk3-pn.mixstream.net:8026/")))
output.icecast(%aacplus(channels=2, samplerate=44100, bitrate=32), host = "localhost", port = 8000, password = "888", mount = "32", mksafe(input.http("http://uk3-pn.mixstream.net:8026/")))
Как видно, он 3 раза притягивает поток на перекодировку, можно ли как-то "писать" поток в переменную и уже её перекодировать и отправлять на сервер?
Также тут еще неприятный момент, с этим конфигом соап стартует, работает минуту-две и падает, в логах:
2012/05/29 19:45:17 [src_4322:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4318:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4314:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4314:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4318:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4322:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4318:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4314:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4322:3] Buffer overrun: Dropping 0.07s.
2012/05/29 19:45:17 [src_4318:3] Buffer overrun: Dropping 0.07s.
Отредактировано Falcon (29-05-2012 19:53:15)
Буфер на айскасте или соапе?
Еще вопрос попутно:
Как можно заставить соап реконнектится, если вдруг он прервался?
Отредактировано Falcon (29-05-2012 23:55:26)
Сделал так:
input=mksafe(input.http(buffer=128.,max=1024.,"http://uk3-pn.mixstream.net:8026/"))
Немного спасло ситуацию, но соап почему-то опять упал, в логах:
2012/05/30 10:39:12 [mksafe:3] Switch to src_4315 with transition.
2012/05/30 10:39:12 [src_4315:3] Incorrect stream type!
2012/05/30 10:39:13 [mksafe:3] Switch to safe_blank with forgetful transition.
2012/05/30 10:39:13 [src_4315:2] Feeding stopped: Incorrect stream type!.
2012/05/30 10:39:15 [decoder:3] Method "MP3/LIBMAD" accepted "audio/mpeg".
2012/05/30 10:39:15 [src_4315:3] Decoding...
2012/05/30 10:39:15 [src_4315:3] New metadata chunk: ? -- .
2012/05/30 10:39:58 [mksafe:3] Switch to src_4315 with transition.
2012/05/30 10:39:58 [src_4315:3] Incorrect stream type!
2012/05/30 10:39:59 [mksafe:3] Switch to safe_blank with forgetful transition.
2012/05/30 10:39:59 [src_4315:2] Feeding stopped: Incorrect stream type!.
2012/05/30 10:40:01 [decoder:3] Method "MP3/LIBMAD" accepted "audio/mpeg".
2012/05/30 10:40:01 [src_4315:3] Decoding...
2012/05/30 10:40:01 [src_4315:3] New metadata chunk: ? -- .
2012/05/30 10:40:44 [mksafe:3] Switch to src_4315 with transition.
2012/05/30 10:40:44 [src_4315:3] Incorrect stream type!
2012/05/30 10:40:44 [src_4315:2] #get_frame didn't add exactly one break!
2012/05/30 10:40:44 [threads:1] Thread "wallclock_main" aborts with exception File "source.ml", line 466, characters 10-16: Assertion failed!
2012/05/30 10:40:44 [main:3] Shutdown started!
2012/05/30 10:40:44 [main:3] Waiting for threads to terminate...
2012/05/30 10:40:44 [stderr:3] Thread 5 killed on uncaught exception Assert_failure("source.ml", 466, 10)
2012/05/30 10:40:44 [stderr:3] Raised at file "list.ml", line 144, characters 16-25
2012/05/30 10:40:44 [src_4315:2] Feeding stopped: Incorrect stream type!.
2012/05/30 10:40:46 [decoder:3] Method "MP3/LIBMAD" accepted "audio/mpeg".
2012/05/30 10:40:46 [src_4315:3] Decoding...
2012/05/30 10:40:47 [src_4315:3] New metadata chunk: ?
А реконнектится надо получается к 2ум потокам:
1)На инпуте
2)На айскаст
Сделал так: output.icecast(fallible=true, %mp3(samplerate=44100, bitrate=192),restart=true,....))
Но соап сдох с вышеописанными логами. Кроме того, как процесс он продолжает висеть.
1. на инпуте реконект хз, может timeout
2. вполне реально, fallible = true раньше надо было еще restart = true, restart_delay = 5 но щас эти переменные не валидны
буфер там в секундах, думаю 60 будет более чем достаточно, также убавить max
упал помоему изза Incorrect stream type!.
пишет tarasian666:
1. на инпуте реконект хз, может timeout
2. вполне реально, fallible = true раньше надо было еще restart = true, restart_delay = 5 но щас эти переменные не валидныбуфер там в секундах, думаю 60 будет более чем достаточно, также убавить max
упал помоему изза Incorrect stream type!.
Вполне возможно.
Не пойму, какой stream type ему не нравится(
Ну что, так нормальной панельки под liquidsoap так и не появилось никакой?
Еще вопрос по соапу:
Схема:
Поток с Вин 32 ->Linux (soap) -> Win32 Icecast
На выходе, искривляется метадата, русские буквы кракозябрами, как в айскасте, так и в аимпе.
Пробовал output.icecast(fallible=true, timeout=30.,encoding = "CP1251",...); Т.е. добавлять кодировку, но это не спасло.
Попробуйте в input.http указать metadata_encoding = "CP1251", в output - encoding = "UTF-8" и в настройках айскаста маунту указать <charset>UTF-8</charset>
Falcon, <charset>UTF-8</charset> в соответствующий mount icecast'a мне помог. Как на всех потоках исправить кракозябры я так и не понял - к каждому маунту приходится писать
Чарсет на маунте - не помогает. Искореженная метадата даже в локальном плеере (винамп, аимп)
эфир fm на приемнике, передаем через выход мини-джек на вход (line in) компа, как сделать в соап из этого поток?
p.s. Может кто делал уже такое, а то иногда глюки в fm а находясь за тредевять земель, не могу послушать что в эфире, только что из соапа, но здесь все ок.
пишет tarasian666:
в линуксе - без проблем (...), в винде хз как
как же часто я говорю эти слова последнее время -_- . Хотя вот немного костыльная идея в голову пришла - прослушивать с помощью VLC из линейного входа, сделать транслцию по HTTP, а затем эту трансляцию подхватывать liquidsoap'ом
Отредактировано nivs (07-06-2012 12:13:10)
можно но зачем тогда liquidsoap?
также есть всякие simplecast-ы и тп
Отредактировано tarasian666 (07-06-2012 12:18:47)
Страницы Назад 1 … 24 25 26 27 28 … 53 Далее
Чтобы отправить ответ, вы должны войти или зарегистрироваться