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

liquidsoap

 

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

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

0
68
Алексей @features
tarasian666 пишет:

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

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


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

Кстати, по поводу add я ложанулся, он, вроде, сливает 2 трека в один. Но это надо проверить. Вместо random, можно использовать **********. Динамическую ротацию можно попробоваьт сделать так:
  1.  
  2. rotate(weights=[1,3,1,4], [jingles, music,jingles,music])

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

0
67
nivs @nivs
Sasha.Yohan пишет:

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

**********
  1. def restart(_)
  2. restart()
  3. "Done!"
  4. end
  5. server.register(namespace="usr",
  6. description="Restart the application.",
  7. usage="restart",
  8. "restart",
  9. restart)


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

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

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

Отредактировано namikiri - 08.06.2014
0
6245
Тарас @tarasian666
вот у меня завалялось, может надо подправить, правда вместо имени файла берет тег из скрипта
  1.  
  2. # The title metadata
  3. title = m["title"]
  4. # Our addition
  5. content = list.hd(get_process_lines("/home/taras/ls/history-title.py"))
  6. def update_title(m) =
  7. # If title is empty
  8. if title == "" then
  9. [("artist - title",content)]
  10. # Otherwise
  11. else
  12. [("title","#{title} on #{content}")]
  13. end
  14. end
  15. radio = map_metadata(update_title,radio)

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


  1. title = m["title"]



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

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

Отредактировано namikiri - 15.06.2014
0
6245
Тарас @tarasian666
вот откуда m
update_title(m)

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

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

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

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

  1. def update_title(m) =
  2. title = m["title"]
  3. # Если тэга нет или там "Unknown"
  4. if title == "" or title == "Unknown" then
  5. # Получаем имя файла
  6. content = m["filename"]
  7. # Вырезаем имя файла из пути...
  8. content = basename (content)
  9. # ...но там осталось ".mp3", что нехорошо.
  10. # Как назло, в Liquidsoap нет функции substr(),
  11. # поэтому извращаемся и вырезаем расширение средствами bash:
  12. content = get_process_output("STR=\""^content^"\"; echo ${STR%.mp3*}")
  13. # Задаём новые метаданные
  14. [("title", content)]
  15. else
  16. # Ну а иначе просто посылаем тэг
  17. [("title","#{title}")]
  18. end
  19. end
  20. # Применяем изменения к нашему потоку
  21. radio = map_metadata(update_title,radio)

0
25
djgelius @djgelius
Здравствуйте!
У меня накопилось много вопросов по поводу liquidsoap:
все таки в каком формате сохранять конфиг, где его сохранять?
Как запустить и перезапустить liquidsoap
читаю эту тему: **********
нифига не пойму

0
6245
Тарас @tarasian666
1. в любом (текстовом), можно и без расширения, сохранять где-угодно
2. запустить конфиг как исполняемый файл, перезапустить - убить процес и запустить наново или **********


читаю эту тему: **********
нифига не пойму

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

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

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

  1. liquidsoap /etc/icecast2/retranslator.liq


Ответ терминала:
  1.  
  2. init: security exit, root euid (user).


конфиг

  1.  
  2. # Input the stream,
  3. # from an Icecast server or any other source
  4. url = "ссылка на поток в виде локалхост:8000/маунт"
  5. input = mksafe(input.http(url))
  6. # First transcoder: MP3 192 kbps
  7. # We also degrade the samplerate, and encode in mono
  8. # Accordingly, a mono conversion is performed on the input stream
  9. output.icecast(
  10. %mp3(bitrate=128),
  11. mount="/128k",
  12. host="localhost", port=8000, password="пароль",
  13. input)
  14. output.icecast(
  15. %aacplus(bitrate=32),
  16. mount="/32k_aacplus",
  17. host="localhost", port=8000, password="пароль",
  18. input)


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

  1. apt-get install libaacplus-ocaml-dynlink


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

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

Отредактировано djgelius - 30.06.2014
0
6245
Тарас @tarasian666
Нужен еще сам aac+ не ocaml

0
25
djgelius @djgelius
tarasian666 пишет:

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

создал пользователя получилось ввести команду ответ:
  1. sh: 0: Can't open liquidsoap


при установке аас+:
  1.  
  2. apt-get install libaacplus2
  3. Reading package lists... Done
  4. Building dependency tree
  5. Reading state information... Done
  6. libaacplus2 is already the newest version.
  7. libaacplus2 set to manually installed.
  8. 0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.

Отредактировано djgelius - 30.06.2014
0
25
djgelius @djgelius
djgelius пишет:

tarasian666 пишет:

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

создал пользователя получилось ввести команду ответ:
  1. sh: 0: Can't open liquidsoap


при установке аас+:
  1.  
  2. apt-get install libaacplus2
  3. Reading package lists... Done
  4. Building dependency tree
  5. Reading state information... Done
  6. libaacplus2 is already the newest version.
  7. libaacplus2 set to manually installed.
  8. 0 upgraded, 0 newly installed, 0 to remove and 10 not upgraded.


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

0
6245
Тарас @tarasian666
init: security exit, root euid (user).

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

0
25
djgelius @djgelius
tarasian666 пишет:

init: security exit, root euid (user).

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

это уже давно решил! Вот теперь проблема:

  1. sh: 0: Can't open liquidsoap

0
89
Ok_go_love @Ok_go_love
djgelius пишет:

tarasian666 пишет:

init: security exit, root euid (user).

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

это уже давно решил! Вот теперь проблема:

  1. sh: 0: Can't open liquidsoap

Через bash-скрипт запускаете?
А если просто liquidsoap liquidsoap-config.liq?

0
25
djgelius @djgelius
запустил так:
  1. su логин_юзера /etc/icecast2/start_silver.sh


потом ввел пароль и опа!

0
25
djgelius @djgelius
как остановить liquidsoap или перезапустить чтобы потоки лишние в конфиге убрать?

и где данные меняются в маунте? у меня вот такое:

Mount Point /128

M3UXSPF
Stream Title: /128
Stream Description: Liquidsoap Radio!
Content Type: audio/mpeg
Mount started: Tue, 01 Jul 2014 22:01:45 +0400
Bitrate: 128
Current Listeners: 0
Peak Listeners: 1
Stream Genre: Misc
Stream URL: **********
Current Song: Denis Shapovalov - Night Shift # 21

Отредактировано djgelius - 01.07.2014
0
89
Ok_go_love @Ok_go_love
djgelius пишет:

как остановить liquidsoap или перезапустить чтобы потоки лишние в конфиге убрать?

и где данные меняются в маунте? у меня вот такое:

Mount Point /128

M3UXSPF
Stream Title: /128
Stream Description: Liquidsoap Radio!
Content Type: audio/mpeg
Mount started: Tue, 01 Jul 2014 22:01:45 +0400
Bitrate: 128
Current Listeners: 0
Peak Listeners: 1
Stream Genre: Misc
Stream URL: **********
Current Song: Denis Shapovalov - Night Shift # 21


Самый тупой вариант это сделать ps -A | grep liquidsoap, найти номер процесса, а потом отправить процессу kill
То же самое можно написать на bash.


Метаданные проще всего править прямо в конфиге айскаста, например
  1. <mount-name>/musicc.ogg</mount-name>
  2. <password>hackme</password>
  3. <stream-name>My super stream</stream-name>
  4. <stream-description>Bla-bla</stream-description>
  5. <stream-url>http://domain.com</stream-url>
  6. <charset>UTF8</charset>

Почитайте доку к айскасту **********

Отредактировано Ok_go_love - 02.07.2014
0





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

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