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

liquidsoap

 

223
Игорь @devilben
Разве что монтировать на сервер1, каталог с треками из сервера2, через nfs или smb, и указать абсолютные пути в Liquidsoap.

28
alexgard @alexgard
devilben пишет:

Разве что монтировать на сервер1, каталог с треками из сервера2, через nfs или smb, и указать абсолютные пути в Liquidsoap.


А для этого, нужны какие-то доступы к серверу №2?

223
Игорь @devilben
Нужны, иначе http онли

67
nivs @nivs
alexgard, openVPN. Внутри него делай, что хочешь

Отредактировано nivs - 18.05.2012
28
alexgard @alexgard
Всем спасибо, эту проблему решил!)

Не подскажете, как установить liquidsoap на freebsd не через порты?

Отредактировано alexgard - 23.05.2012
67
nivs @nivs
alexgard, как решил проблему-то? Не через порты - собирать из исходников.

28
alexgard @alexgard
nivs пишет:

alexgard, как решил проблему-то? Не через порты - собирать из исходников.


Плейлист обновляется динамически. В плейлисте скрипт который перед началом воспроизведения скачивает трек....

1
gef @gef0rce
Привет!
Пролистал тему, но вроде ответа на вопрос не нашел.
Суть проблемы - сервер вещает по плейлисту, но я, как клиент, дослушиваю текущий трек до конца и тишина - до тех пор пока не обновлю стрим - тогда продолжается. То есть после каждого трека происходит "затыкание".

Вещательный скрипт:

#!/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
89
Azat @azatxaker
gef0rce,
та же проблема.
Но сейчас меня мучает другой вопрос. Ребят, подскажите, как подсчитать требуемые ресурсы сервера для вещания?
Сейчас у меня 2,2 мГц + 500 Гц, RAM - 2048 Мб. 4 канала, 1 на 3 потока разбит (128, 96, 24), остальные по 128, проц загружен на ~60%. Переодически либо полностью виснет liquidsoap, либо полностью система зависает. Раньше было 1024 Гц + 1024 Мб все 4 канала по 3 потока - 99%. Надо купить выделенный, либо VPS покруче, но вот какой? Надеюсь на вашу помощь!

6245
Тарас @tarasian666
gef0rce, версия какая ? возможно надо добавить еще битрейт

azatxaker, 2,2 мГц ? может гигагерц?
на такое кол-во потоков надо брать как можно мощнее

89
Azat @azatxaker
Вот скрипт:


#!/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)

89
Azat @azatxaker
Ой, гигагерц:) Ну как можно мощнее, но хотелось бы и в капитал вписаться, поэтому хотелось бы поточнее, сколько примерно надо?

6245
Тарас @tarasian666
думаю надо от 3 Ггц но еще зависит от типа процессора.
Но и лучше брать выделеный сервер или виртуальный полностью отделен от других

89
Azat @azatxaker
Спасибо! С проблемой остановки плейлиста разобрался просто: проверил все пути. Оказалось, что путь к джинглам был левый, вот вещание на них и останавливалось.

888
Falcon @Falcon
Требуется помощь и совет знатоков. В общем, есть соап, его конфиг:

#!/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
6245
Тарас @tarasian666
попробуй буфер увеличить

888
Falcon @Falcon
Буфер на айскасте или соапе?

Еще вопрос попутно:
Как можно заставить соап реконнектится, если вдруг он прервался?

Отредактировано Falcon - 29.05.2012
6245
Тарас @tarasian666
буфер на input.http

рукнектился куда? через input.http?

888
Falcon @Falcon
Сделал так:
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,....))
Но соап сдох с вышеописанными логами. Кроме того, как процесс он продолжает висеть.

6245
Тарас @tarasian666
1. на инпуте реконект хз, может timeout
2. вполне реально, fallible = true раньше надо было еще restart = true, restart_delay = 5 но щас эти переменные не валидны


буфер там в секундах, думаю 60 будет более чем достаточно, также убавить max

упал помоему изза Incorrect stream type!.