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

liquidsoap

 

888
Falcon @Falcon
EnigmA_MaN_1 пишет:

Уважаемые, кто подскажет как запустить 1 рубрику скажем в 9 утра - с повтором через час - но при том чтобы она включилась в 9 - отключилась по окончанию (1 запись mp3) и дальше играла музыка до повтора. потом повтор рубрики - далее опять музыка - у меня же получается включить рубрику и она постоянна "трындит" - не отключаясь!!!

Я бы вам советовал написать внешний скрипт, который бы обрабатывал ваши правила и выдавал ликвидсупу просто файл.

22
Ярослав @EnigmA_MaN_1
Falcon пишет:

EnigmA_MaN_1 пишет:

Уважаемые, кто подскажет как запустить 1 рубрику скажем в 9 утра - с повтором через час - но при том чтобы она включилась в 9 - отключилась по окончанию (1 запись mp3) и дальше играла музыка до повтора. потом повтор рубрики - далее опять музыка - у меня же получается включить рубрику и она постоянна "трындит" - не отключаясь!!!

Я бы вам советовал написать внешний скрипт, который бы обрабатывал ваши правила и выдавал ликвидсупу просто файл.

а есть с чего пример взять - в написании скриптов я не силен а вот переделать чей нибудь, это запросто.

22
Ярослав @EnigmA_MaN_1
а все же, как заставить воспроизвестись разово один файл рубрики в swich. чтобы потом дальше шла музыка до следующего файла рубрики именно в liquidsoap

Отредактировано EnigmA_MaN_1 - 22.09.2014
382
Grigorij @gyurgin_1
Вот так например: example = "/mp3/some_file.mp3"
source = once(single(example))

Подробности: liquidsoap -h once

89
Ok_go_love @Ok_go_love
Как этому засранцу подпихнуть целый плейлист, а не по одной песне? (как в request.dynamic)
В идеале хотелось бы, чтобы по окончании плейлиста он запускал внешний скрипт (который генерит pls) и начинал играть свежесозданный пелейлист.

И что есть playlist.reloadable?

Интересно, а можно как-то синхронизировать окончание трека в liquidsoap и началом трека в harbor из внешнего вещателя?

Отредактировано Ok_go_love - 07.10.2014
382
Grigorij @gyurgin_1
Как этому засранцу подпихнуть целый плейлист, а не по одной песне? (как в request.dynamic)

Выше описано и не раз
В идеале хотелось бы, чтобы по окончании плейлиста он запускал внешний скрипт (который генерит pls) и начинал играть свежесозданный пелейлист.

Вот как раз то что нужно
И что есть playlist.reloadable?

Доигрывает плейлист до конца и может остановить приложение, перезагрузить, выполнить команду, которую Вы заранее опишете, можно даже новый путь к плейлисту (например c учетом даты и времени)

Я может не совсем понимаю задачу ну подробнее пожалуйста.

Отредактировано gyurgin_1 - 08.10.2014
89
Ok_go_love @Ok_go_love
Вот на что наткнулся **********
Правда я свой проект тоже назвал Shampoo (админка для liquidsoap), печаль-печальная.

89
Ok_go_love @Ok_go_love
Вот как раз то что нужно

Дак это по одной песне (get_process_lines), а как ему скормить целый массив с URI на файлы? Там нет циклов, я не очень понимаю, как ему поочередно элементы массива отдавать.
Доигрывает плейлист до конца и может остановить приложение, перезагрузить, выполнить команду, которую Вы заранее опишете, можно даже новый путь к плейлисту (например c учетом даты и времени)

Я указывал ему в качестве функции (system("/path/to/super/script.py")), который в свою очередь генерит pls-файл, но liquidsoap не подхватывает его - пишет, что неверный URI файла.

Отредактировано Ok_go_love - 09.10.2014
68
Алексей @features
Ok_go_love пишет:

Вот как раз то что нужно

Дак это по одной песне (get_process_lines), а как ему скормить целый массив с URI на файлы? Там нет циклов, я не очень понимаю, как ему поочередно элементы массива отдавать.
Доигрывает плейлист до конца и может остановить приложение, перезагрузить, выполнить команду, которую Вы заранее опишете, можно даже новый путь к плейлисту (например c учетом даты и времени)

Я указывал ему в качестве функции (system("/path/to/super/script.py")), который в свою очередь генерит pls-файл, но liquidsoap не подхватывает его - пишет, что неверный URI файла.


Я треки подсовываю так:
request = request.dynamic({ request.create(get_process_output("perl /path/to/my/script/for/get_next_track.pl"))})

Ссылки не пробовал ему подсовывать, если получится расскажи, тоже интересно. Ну и как быстро он эти ссылки воспроизводит, нет ли между ними задержки, во время которой мыло начнёт думать что всё пропало и пора дефолтный плейлист играть.

89
Ok_go_love @Ok_go_love
С метаданными в harbor печаль печальная - все сует внутрь title.
Что с этим сделать можно?

upd. Вопрос решен изменением метаданных.

Отредактировано Ok_go_love - 15.10.2014
89
Ok_go_love @Ok_go_love
Ну ок, коли тишина, задам еще вопрос - можно как-то заставить не срать в лог информацией о telnet-подключении и отключении?

И есть в скриптовом языке какая-то работа с регулярными выражениями или может быть как-то иначе можно обрабатывать текст?
Мне например метаданные надо расцепить. Ибо harbor кладет в title или song всю информацию целиком "artist - title". Метадату конечно изменить можно, но как бы расцепить ее, чтобы можно было распихать по правильным полям?

upd. По второму вопросу - переписал немного py-scrobbler, все теперь скробблится вне зависимости от источника. Там надо поменять буквально несколько строк и добавить одну функцию в конфиг мыла. Кому интересно - пишите.

upd.2 Так я и не врубился, можно ли как-то изменить метаданные на строку из аргумента к функции.
upd.2.1 Собственно, то, для чего это нужно было, сделано иначе (хоть и через задницу) - rewrite_metadata дает возможность поменять что угодно в метаданных.

Отредактировано Ok_go_love - 15.10.2014
89
Ok_go_love @Ok_go_love
Меня постигла участь сего
Buffer overrun: Dropping 0.03s.
Увеличением буффера это не лечится.

upd. Это говно происходит только если track_sensitive= true, при false все ок.

Отредактировано Ok_go_love - 16.10.2014
2
swarnk @swarnk
Добрый день. Сделал вот такой конфиг. Что-то я не могу сообразить как сделать плавный переход межу собственно радио и потоком от диджея. Тему я просматривал и такой вопрос встречался. А ответ на него был такой: "также как и плавный переход между треками".

Заранее спасибо.


#!/usr/bin/liquidsoap
set("log.stdout", true)
set("log.file.path","/tmp/radio.log")
set("server.telnet",true)
set("server.telnet.bind_addr","172.16.116.20")


myplaylist = playlist("/home/kirill/radio/music.m3u")
jingles = playlist("/home/kirill/radio/jingles.m3u")
security = single("/media/mp3/jingles/rock.mp3")

radio = myplaylist
radio = rotate(weights = [2, 1],[jingles, radio])
radio = fallback(track_sensitive = false, [radio, security])

set("harbor.bind_addr","172.16.116.20")
djlive = input.harbor("test", port=8080, password="hackme")
radio = fallback(track_sensitive=false, [djlive, radio])

output.icecast(%mp3, host = "172.16.116.29", port = 8000, password = "hackme", mount = "live", radio)

89
Ok_go_love @Ok_go_love
Думаю, это поможет.
**********

Вот бы кто подсказал, как это реализовать - есть следующее
playlist = mksafe(fallback(track_sensitive=true,[queue, playlist]))
playlist = mksafe(fallback(track_sensitive=false,([fallback.skip(input=live,playlist)])))

playlist = on_metadata(info2db, playlist)
playlist = on_metadata(lastfm, playlist)

При получении данных информация о треке отдается в python-скрипт, который пишет информацию в БД и отправляет на ласт.
Все чудесно работает, но проблема в следующем - при отключении лайва, не смотря на fallback.skip, песня, игравшая до подключения лайва, все же отрабатывает скрипт и получается так, что БД и на ласт отправляется ложная информация. Не могу понять, как сделать так, чтобы этого не происходило. Может быть как-то скипать старый трек в источнике playlist при отключении лайва или что-нибудь еще.
Пока в голову пришел только костыль со скриптом, но это не дело.

upd. replay_metadata = false в функции fallback Ваш друг в этом вопросе. И так всеми расхваленная mksafe() должна быть убрана, иначе описанное выше нереализуемо.

Отредактировано Ok_go_love - 16.10.2014
2
swarnk @swarnk
Да я понимаю что надо crossfade, но как конкретно применительно к моему конфигу? Что-то я два дня бьюсь и ничего не выходит...

25
djgelius @djgelius
Подскажите какие пакеты нужно на сервер ставить для Debian 7, у меня стоит Icecast2, lame, libaacplus-ocaml-dynlink, libaacplus2 и сам liquidsoap

Какой еще конфиг подойдет чтобы с папки а не с плейлиста все это читалось?
Я не могу настроить ни как

89
Ok_go_love @Ok_go_love
Не обязательно собирать из исходников, хотя, учитывая стабильность Debian, в репозиториях версия наверняка доисторическая.
Вообще почитайте ./configure --help, там описано что и для чего нужно, собирать с поддержкой всех функций смысла, скорее всего, нет.
По поводу папки это выглядит так (насколько я помню). По дефолту он рандомно проигрывает файлы из папки.
playlist = playlist ("/path/to/my/cool/music/")

25
djgelius @djgelius
Ok_go_love пишет:

Не обязательно собирать из исходников, хотя, учитывая стабильность Debian, в репозиториях версия наверняка доисторическая.
Вообще почитайте ./configure --help, там описано что и для чего нужно, собирать с поддержкой всех функций смысла, скорее всего, нет.
По поводу папки это выглядит так (насколько я помню). По дефолту он рандомно проигрывает файлы из папки.



#!/etc/liquidsoap -d
set("init.daemon",true)
set("init.daemon.pidfile",false)
set("log.file.path","/var/log/liquidsoap/basic.log")
set("log.stdout",true)
set("log.level",3)
set("server.telnet.bind_addr","127.0.0.1")
set("server.telnet",true)
myplaylist = mksafe(playlist(reload=360, '/home/radio/nonstop/'))
radio = myplaylist
radio = mksafe(radio)
radio = crossfade(start_next=6.0, fade_out=3.0, fade_in=3.0, radio)

output.icecast(%mp3(bitrate=256, samplerate = 44100, stereo = true),
host = "localhost",
port = 8000,
name="EDM Radio 256 Kbit/s",
genre="Elecrtonic",
url="http://edmradio.ru/",
description="Electronic Dance Music Radio",
password = "Пароль",
mount = "/autodj",
radio)

# другие потоки:
url = "http://localhost:8000/live"
input = mksafe(input.http(url))

output.icecast(
%mp3(bitrate=192),
mount="/192",
host="localhost",
name="EDM Radio 192 Kbit/s",
genre="Elecrtonic",
url="http://edmradio.ru/",
description="Electronic Dance Music Radio",
port=8000,
password="Пароль",
input)

output.icecast(
%mp3(bitrate=128),
mount="/128",
host="localhost",
name="EDM Radio 128 Kbit/s",
genre="Elecrtonic",
url="http://edmradio.ru/",
description="Electronic Dance Music Radio",
port=8000,
password="Пароль",
input)

output.icecast(
%aacplus(channels=2, samplerate=44100, bitrate=32),
mount="/32aac",
host="localhost",
port=8000,
name="EDM Radio 32 AAC Kbit/s",
genre="Elecrtonic",
url="http://edmradio.ru/",
description="Electronic Dance Music Radio",
password="Пароль",
input)


Разобрался немного уже, осталось сетку для резидентов сделать не могу ни как запустить, часто ругается на "radio = myplaylist" помогите

382
Grigorij @gyurgin_1
Да Вы в своем уме? myplaylist = mksafe(playlist(reload=360, '/home/radio/nonstop/')) по этой схеме он будет шлепать в эфир что не попадя. Одного и того же исполнителя подряд и так далее. Данная схема подходит разве что для джинглов.

25
djgelius @djgelius
gyurgin_1 пишет:

Да Вы в своем уме? myplaylist = mksafe(playlist(reload=360, '/home/radio/nonstop/')) по этой схеме он будет шлепать в эфир что не попадя. Одного и того же исполнителя подряд и так далее. Данная схема подходит разве что для джинглов.

Если вы понимаете в этом и готовы мне помочь, буду очень признателен!
Со мной можно связаться через контакт: ********** или предложите свой вариант связи!