951

Re: liquidsoap

playlist = playlist(reload=28800,"#{md}/ROCK/")
radio = playlist
radio = fallback([ request.queue(id="q"), radio])

output.icecast(%vorbis.abr(samplerate = 44100, channels = 2, bitrate = 128, max_bitrate = 192, min_bitrate = 96),
        host = "srv", port = 8180,
        url = "",
        password = "",
        mount = "",
        mksafe(radio))

Отредактировано Ok_go_love (25-04-2014 11:09:16)

952

Re: liquidsoap

у меня так

queue = request.queue(id="queue", length=0.5)
myplaylist = mksafe(fallback([queue, myplaylist]))

работает 100%

953

Re: liquidsoap

пишет tarasian666:

у меня так

queue = request.queue(id="queue", length=0.5)
myplaylist = mksafe(fallback([queue, myplaylist]))

работает 100%

Спасибо, заработало. smile

954

Re: liquidsoap

Использовать: queue.push "/path/to/file" ? в телненете сокете ?

955

Re: liquidsoap

пишет den68:

Использовать: queue.push "/path/to/file" ? в телненете сокете ?

Без кавычек.

956

Re: liquidsoap

Пытаюсь понять принцип его рандома. Можно ли вообще какую-то ротацию песен указывать? (типа не повторять одного исполнителя в течение 30 мин, одну песню в течение 3 часов (как в SAMBC)).

957

Re: liquidsoap

Нет, такого там нет. Я делал это внешними скриптами

958

Re: liquidsoap

Бывает джинглы идут два подряд, подскажите, как-то можно это исправить?

radio = request
radio = fallback([radio,default])
radio = random(weights = [1, 4],[jingle, radio])

Отредактировано features (29-04-2014 17:29:35)

959

Re: liquidsoap

может если убрать random то будет лучше. Там нет "логики неповторения", просто смешивает в соотношении

960

Re: liquidsoap

У него какое-то странное понятие соотношения. Бывает 2 джингла подряд, а бывает 10 песен отыграет и ни одного джингла. Но примерно понятное.
Если убираем random то ротацию треков с джинглами надо перекладывать на:
1) какой-нибудь скрипт
2) add
3) есть ещё однострочные решения на уровне liquidsoap'a?

Минус второго варианта, я так понимаю это жёсткость, т.е. он джингл всегда будет играть N раз в M песен.

961

Re: liquidsoap

Соотношение не означает порядок, если посчитать общее кол-во треков и джинглов и сопоставить с количеством отигравших треков и джинглов то все сходится. 1 джингл на 4 песни = 10 джинглов на 40 песен, то есть может отиграть 10 джинглов подряд а потом 40 песен и тд

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

962

Re: liquidsoap

пишет tarasian666:

Соотношение не означает порядок, если посчитать общее кол-во треков и джинглов и сопоставить с количеством отигравших треков и джинглов то все сходится. 1 джингл на 4 песни = 10 джинглов на 40 песен, то есть может отиграть 10 джинглов подряд а потом 40 песен и тд

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

У меня все треки тоже в базе. Джинглы лежат, пока что, просто статично. 2 перловых скрипта, один на джинглы, другой на треки. Просто думал что можно их смешивать средствами встроенными в liquidsoap. Но видидо придётся делать один скрипт, который будет отвечать за выпуск джинглов и треков в эфир.

Кстати, по поводу add я ложанулся, он, вроде, сливает 2 трека в один. Но это надо проверить. Вместо random,  можно использовать rotate. Динамическую ротацию можно попробоваьт сделать так:

rotate(weights=[1,3,1,4], [jingles, music,jingles,music])

Но попробовать ещё не успел.

963

Re: liquidsoap

пишет Sasha.Yohan:

а можно как то обновить конфиг не выключая liquidsoap?
по типу как kill -hup в icecast
чтобы радио не выключать и снова включать

http://savonet.sourceforge.net/doc-svn/ … l?#restart

def restart(_)
    restart()
    "Done!"
end

server.register(namespace="usr",
                description="Restart the application.",
                usage="restart",
                "restart",
                restart)

Нужно только подкрутить ещё ожидание конца трека, его плавное затухание в течение 0.5-1 секунды, сразу после затухания restart(), а затем первое появление с возрастанием громкости, должно получиться хорошо, не пробовал реализовать пока что.

VLC не рвёт таким образом рестарченный liquidsoap, а вот <audio> на странице IceCast'а рвётся. Но это лучше, чем ничего. Советую быть осторожным при таком рестарте с изменением кодеков и их свойств у существующих потоков (var ogg меняется плохо, const mp3 хорошо), с JACK тоже аккуратно, но мои запросы удовлетворяет.

Отредактировано nivs (03-06-2014 01:19:00)

964

Re: liquidsoap

Вновь здравствуйте, вновь прошу помощи у вас, радиолюбители.
Имеется сервер со стандартной связкой Liquidsoap+Icecast2, всё работает прекрасно, однако есть одна проблема — не во всех файлах указаны тэги, в итоге самым популярным треком у нас на радио является Unknown.
Однако, имена у файлов вполне себе информативные, и из них можно извлечь нужную информацию об исполнителе.
Вопрос: как это сделать средствами Liquidsoap? Как заставить его проверять, что, если нет мета-тегов, брать имя файла?
Подскажите, пожалуйста. Поиском по форуму пользовался, по запросу "liquidsoap unknown" ничего толкового не выдало, а в документации по жидкому мылу есть только пример подстановки тэгов с названием радио. Ну или я неправильно читал или не там.
В общем, прошу, скажите пожалуйста, можно ли в отдельных случаях использовать имена файлов в качестве Title в случае, если ID3 отсутствует?

Отредактировано namikiri (08-06-2014 13:56:11)

mew~

965

Re: liquidsoap

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

  # The title metadata
  title = m["title"]
  # Our addition
  content = list.hd(get_process_lines("/home/taras/ls/history-title.py"))


def update_title(m) = 
# If title is empty
  if title == "" then
    [("artist - title",content)]
    
  # Otherwise
  else
    [("title","#{title} on #{content}")]
  end
end

radio = map_metadata(update_title,radio)

966

Re: liquidsoap

пишет tarasian666:

 title = m["title"]

Откуда взялась переменная m? Что в ней?

И, да, я так и не нашёл, как спросить у мыла текущий трек.
Весь API на тему Input и Source.Track прочитал, нет там такого.
Гуглил запросы "liquidsoap current track filename" и "liquidsoap current playlist position", ничего путного не даёт.

Отредактировано namikiri (15-06-2014 15:35:26)

mew~

967

Re: liquidsoap

вот откуда m
update_title(m)

ей присвоена переменная radio
radio = map_metadata(update_title,radio)

а radio это сгенерированый ранее плейлист или трек или что там

название трека можно взять через ту же m
title = m["filename"]

968

Re: liquidsoap

И вновь спасибо tarasian666 за помощь, я наконец-то сделал то, что хотел.
Код, правда, пришлось немного изменить, потому что в жидком мыле нет некоторых, казалось бы, жизненно важных функций.
Привожу свою версию:

def update_title(m) =
        title = m["title"]
        # Если тэга нет или там "Unknown"
        if title == "" or title == "Unknown" then

                # Получаем имя файла
                content = m["filename"]

                # Вырезаем имя файла из пути...
                content = basename (content)

                # ...но там осталось ".mp3", что нехорошо. 
                # Как назло, в Liquidsoap нет функции substr(), 
                # поэтому извращаемся и вырезаем расширение средствами bash:
                content = get_process_output("STR=\""^content^"\"; echo ${STR%.mp3*}")

                # Задаём новые метаданные
                [("title", content)]
        else
                # Ну а иначе просто посылаем тэг
                [("title","#{title}")]
        end
end


# Применяем изменения к нашему потоку
radio = map_metadata(update_title,radio)
mew~

969

Re: liquidsoap

Здравствуйте!
У меня накопилось много вопросов по поводу liquidsoap:
все таки в каком формате сохранять конфиг, где его сохранять?
Как запустить и перезапустить liquidsoap
читаю эту тему: http://zzzepr.ru/liquidsoap_transcoding/
нифига не пойму

970

Re: liquidsoap

1. в любом (текстовом), можно и без расширения, сохранять где-угодно
2. запустить конфиг как исполняемый файл, перезапустить - убить процес и запустить наново или http://savonet.sourceforge.net/doc-svn/ … ml#restart

читаю эту тему: http://zzzepr.ru/liquidsoap_transcoding/
нифига не пойму

вот там и задавайте вопросы

971

Re: liquidsoap

создал файл retranslator.liq почитал на официальном сайте что это liq формат конфига

запускаю через терминал:

liquidsoap /etc/icecast2/retranslator.liq

Ответ терминала:

init: security exit, root euid (user).

конфиг

# Input the stream,
# from an Icecast server or any other source
url = "ссылка на поток в виде локалхост:8000/маунт"
input = mksafe(input.http(url))

# First transcoder: MP3 192 kbps
# We also degrade the samplerate, and encode in mono
# Accordingly, a mono conversion is performed on the input stream
output.icecast(
  %mp3(bitrate=128),
  mount="/128k",
  host="localhost", port=8000, password="пароль",
  input)
  
  output.icecast(
  %aacplus(bitrate=32), 
  mount="/32k_aacplus",
  host="localhost", port=8000, password="пароль",
  input)
  

Установнена поддержка  ААСplus

apt-get install libaacplus-ocaml-dynlink

Конфиг сделан на основе этой статьи: savonet.sourceforge.net/doc-svn/cookbook.html

Подскажите пожалуйста в чем косяк?

Отредактировано djgelius (30-06-2014 20:11:49)

972

Re: liquidsoap

Нужен еще сам aac+ не ocaml

973

Re: liquidsoap

пишет tarasian666:

Нужен еще сам aac+ не ocaml

создал пользователя получилось ввести команду ответ:

sh: 0: Can't open liquidsoap

при установке аас+:

apt-get install libaacplus2

Reading package lists... Done
Building dependency tree
Reading state information... Done
libaacplus2 is already the newest version.
libaacplus2 set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.

Отредактировано djgelius (30-06-2014 20:50:30)

974

Re: liquidsoap

пишет djgelius:

пишет tarasian666:

Нужен еще сам aac+ не ocaml

создал пользователя получилось ввести команду ответ:

sh: 0: Can't open liquidsoap

при установке аас+:

apt-get install libaacplus2

Reading package lists... Done
Building dependency tree
Reading state information... Done
libaacplus2 is already the newest version.
libaacplus2 set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.

чуть позже поставил  libaacplus-dev такая же ошибка

975

Re: liquidsoap

init: security exit, root euid (user).

от рута запускать нельзя