1,001

Re: liquidsoap

Пилите скрипты (на perl например или на PHP). В Sam Broadcaster, например, ротация сделана занесением в БД игравших песен и уже оттуда (учитывая настройки SB) подкладываются треки в queue.

а можно ли пример такого скрипта, облазил весь форум ничего похожего не нашел

1,002

Re: liquidsoap

И не найдете,  это целый комплекс скриптов, каждый пилит под себя. Логику вам подсказали, дальше додумайте под свои цели и воплотите в скрипт. В итоге скрипты выходят простые, не надо быть гением программистом.

1,003

Re: liquidsoap

Есть строчка которая играет плей лист в том порядке в котором стоит в нем

source  =  crossfade(start_next=3.,fade_out=5.,fade_in=1.,mksafe(playlist(mode="normal","/home/radio/radio.m3u")))

Сейчас он его гоняет по кругу.

Как сделать так, чтобы liquidsoap отыграл плейлист 1 раз и завершил свою работу?

1,004

Re: liquidsoap

playlist.once

1,005

Re: liquidsoap

пишет tarasian666:

playlist.once

Спасибо. Действительно работает, однако есть момент. После того как проиграется плейлист, потом в потоке начинает идти тишина и поток не отмонтируется на айскасте и продолжает висеть, ликвидсоаповский процесс также висит в системе.

А так можно сделать чтобы проиграл плейлист и завершил свою работу? Процесс убился, liquidsoap отмонтировался от icecast

Отредактировано anester (29-07-2014 16:36:35)

1,006

Re: liquidsoap

Всем доброго дня!
Возможно вопрос не совсем в эту тему, но кто знает...
третий день как пытаюсь разбираться с айскаст + ...
в качестве "..." было протестировано ices, ices2, liquidsoap.
Основной вопрос который интересует - как организовать с помощью одного из указанных плееров(возможно с помощью какого-то другого) монтирование двух точек с разным контентом на айскасте?
Как уже было здесь написано айсес (айсес2) двумя процессами не запускается. Соап два плейлиста параллельно не запускает, проверено опытным путем(есть надежда, что ошибочный вывод).
Можно конечно запускать параллельно айсес и соап, или вообще разворачивать точки на разных сайтах, но мое такое мнение - не стоит усилий.
Возможно кто-то разворачивал под одним плеером на одной машине несколько точек? Есть решения?
Заранее благодарен!

1,007

Re: liquidsoap

и ices двумя (и более) процессами запустить можно и liquidsoap разные плейлисты одновременно вещать может

1,008

Re: liquidsoap

пишет tarasian666:

И не найдете,  это целый комплекс скриптов, каждый пилит под себя. Логику вам подсказали, дальше додумайте под свои цели и воплотите в скрипт. В итоге скрипты выходят простые, не надо быть гением программистом.

Может этот:

<?php
$host = "localhost";
$user = "user";
$base = "base";
$pass = "pass";
$link = mysql_connect($host, $user, $pass) or die();
mysql_select_db($base) or die();
$query = 'SELECT * FROM `requests` LIMIT 1 ORDER by date ASC';
$result = mysql_query($query) or die();
$line = mysql_fetch_array($result, MYSQL_ASSOC);
if(!empty($line)  && $line != 0){
   echo $line['path'];
   mysql_query('DELETE FROM `request` WHERE `id` = '.$line['id'].' LIMIT 1') or die();
}
mysql_free_result($result);
mysql_close($link);
?>

1,009

Re: liquidsoap

это только для пригрывания запросов-трэков с сайта.

1,010

Re: liquidsoap

Возможно увидеть каие-то конкретные примеры написания конфига для соап и айсес?
Запуск как:
"Для организации нескольких каналов музыки используйте возможности командной строки ices, например:

# ices -c '/usr/local/etc/ices.conf' -D '/media/music/' -F '/media/music/album1/playlist.txt' -m 'sample1' -u 'siava.ru:8000/sample1' -d 'sample1 descr' -n 'blablabla1' -g 'test1' -b 192 -B
# ices -c '/usr/local/etc/ices.conf' -D '/media/music/' -F '/media/music/album2/playlist.txt' -m 'sample2' -u 'siava.ru:8000/sample2' -d 'sample2 descr' -n 'blablabla2' -g 'test2' -b 160 -B

таким образом, будут организованы 2 канала с музыкой. "
- результатов не принес. Конфиг написан как в инструкции один в один. По одному работает.
Второй запускается вроде как также как и первый, но в процессы не встает.
В конфиге соапа три строчки как здесь на первой странице. Только добавлены еще 2: playlist2 и соответственно mount2.
без этих строчек работает, с ними в логах: 403 mountpoint in use, too many sources connected
Мне для моих домашних нужд очень нужно несколько точек вещания, пожалуйста, подскажите-помогите!...
или хотя бы укажите место где читать...

1,011

Re: liquidsoap

пишет anester:

пишет tarasian666:

playlist.once

Спасибо. Действительно работает, однако есть момент. После того как проиграется плейлист, потом в потоке начинает идти тишина и поток не отмонтируется на айскасте и продолжает висеть, ликвидсоаповский процесс также висит в системе.

А так можно сделать чтобы проиграл плейлист и завершил свою работу? Процесс убился, liquidsoap отмонтировался от icecast

Должен же быть какой то параметр, который указывает liquidsoap , что пора завершить работу

1,012

Re: liquidsoap

Поищите тут http://savonet.sourceforge.net/doc-svn/reference.html
Может и есть, я не сталкивался.
karrik, опредилитесь сначала что вам надо, ices или liquidsoap, не засоряйте ветку

1,013

Re: liquidsoap

пишет tarasian666:

Поищите тут http://savonet.sourceforge.net/doc-svn/reference.html

Спасибо.

Это случаем не оно? http://savonet.sourceforge.net/doc-svn/ … l#shutdown

Честно говоря не знаю как ее приложить к конфигу.

1,014

Re: liquidsoap

Раз мы в этой ветке и Liquidsoap может покрыть с лихвой все потребности, то подскажите как с помощью liquidsoap организовать несколько точек.

1,015

Re: liquidsoap

Всем спасибо за рвение помочь!)
Под соапом две точки свои поднял (рок и джаз, мп3 и огг), также подкрутил релей. Работают, но со сбоями - введя имя точки после адреса сайта работают только в первый раз на нетбуке, на ноуте вроде проверил пару раз - проблем пока нет... Надеюсь проблема браузера!) Надеюсь не айскаста, ведь соап вроде выдаетвсегда (в плеере через ссылку работает без проблем).
Будет интерес - обращайтесь, в сети мало кто может объяснить решение проблем по которым был "затык" у меня. (камень не в огород местных обитателей!)

1,016

Re: liquidsoap

пишет Vadim.CHichkan:

пишет tarasian666:

И не найдете,  это целый комплекс скриптов, каждый пилит под себя. Логику вам подсказали, дальше додумайте под свои цели и воплотите в скрипт. В итоге скрипты выходят простые, не надо быть гением программистом.

Может этот:

<?php
$host = "localhost";
$user = "user";
$base = "base";
$pass = "pass";
$link = mysql_connect($host, $user, $pass) or die();
mysql_select_db($base) or die();
$query = 'SELECT * FROM `requests` LIMIT 1 ORDER by date ASC';
$result = mysql_query($query) or die();
$line = mysql_fetch_array($result, MYSQL_ASSOC);
if(!empty($line)  && $line != 0){
   echo $line['path'];
   mysql_query('DELETE FROM `request` WHERE `id` = '.$line['id'].' LIMIT 1') or die();
}
mysql_free_result($result);
mysql_close($link);
?>

Пипец, кто юзает до сих пор mysql API? Привет из PHP >= 5.5.0
http://php.net/manual/ru/book.mysqli.php

Отредактировано Ok_go_love (31-07-2014 16:25:57)

1,017

Re: liquidsoap

пишет tarasian666:

это только для пригрывания запросов-трэков с сайта.

в каком формате или что php файл должен возращать при обращении к нему, чтобы liquidsoap подхватывал данные? Делаю скрипт на php.

Отредактировано Vadim.CHichkan (04-08-2014 11:49:46)

1,018

Re: liquidsoap

должен возвращать путь к треку в текстовом формате (это если request.dynamic)

1,019

Re: liquidsoap

сделал скрипт выводит

/home/radio/hits80/13.Valerie Dore - Get Gloser.mp3

Liquidsoap

def my_request_function() =
  # Get the first line of my external process
  result =
    list.hd(
      get_process_lines("/var/www/1.php"))
  # Create and return a request using this result
  request.create(result)
end
myplaylist = request.dynamic(my_request_function)
queue = request.queue(id="queue", length=0.5)
radio = mksafe(fallback([queue, myplaylist]))
radio  = compress(gain=3.,ratio=2.,threshold=-15.,radio)
radio = crossfade(start_next=5.,fade_out=3.,fade_in=1.,radio)
#запускаем вещалку
output.icecast(%mp3(stereo=true, samplerate=44100, bitrate=128),
host = "localhost", port = 9000, icy_metadata="true",
password = "*****", mount = "radio",name="test", description = "test", genre="Pop",url="http://***.com/",radio)

В логах вот что выводит

2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 7: /var/www/1.php: //Подключаемся: not found
2014/08/05 23:11:32 [request:3] Nonexistent file or ill-formed URI ""!
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 8: /var/www/1.php: Syntax error: word unexpected (expecting ")")
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 1: /var/www/1.php: cannot open ?: No such file
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 2: /var/www/1.php: //Подключаемся: not found
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 3: /var/www/1.php: =: not found
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 4: /var/www/1.php: =: not found
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 5: /var/www/1.php: =: not found
2014/08/05 23:11:32 [stderr:3] /var/www/1.php: 6: /var/www/1.php: =: not found

Отредактировано Vadim.CHichkan (06-08-2014 13:46:58)

1,020

Re: liquidsoap

проверить права на запуск скрипта, а также запускается ли скрипт как консольный

http://php.net/manual/ru/features.commandline.usage.php

1,021

Re: liquidsoap

Как вариант:
get_process_lines("/usr/bin/php /var/www/1.php"))

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

1,022

Re: liquidsoap

tarasian666 все заработало спс

Отредактировано Vadim.CHichkan (06-08-2014 14:27:33)

1,023

Re: liquidsoap

Как разбить на рубрики через внешний скрипт
как это было только через liquidsoap

music = switch(track_sensitive=true,
[
({0h - 7h}, night),
({7h - 14h}, nonstop),
({14h - 17h}, hits80),
({17h - 19h}, nonstop),
({19h - 0h}, retro)
])

Сделал так

def night() =
  # Get the first line of my external process
  result =
    list.hd(
      get_process_lines("/var/www/night.php"))
  # Create and return a request using this result
  request.create(result)
end
def nonstop() =
  # Get the first line of my external process
  result =
    list.hd(
      get_process_lines("/var/www/nonstop.php"))
  # Create and return a request using this result
  request.create(result)
end
def hits80() =
  # Get the first line of my external process
  result =
    list.hd(
      get_process_lines("/var/www/hits80.php"))
  # Create and return a request using this result
  request.create(result)
end
def retro() =
  # Get the first line of my external process
  result =
    list.hd(
      get_process_lines("/var/www/retro.php"))
  # Create and return a request using this result
  request.create(result)
end
night = request.dynamic(night)
nonstop = request.dynamic(nonstop)
hits80 = request.dynamic(hits80)
retro = request.dynamic(retro)
music = switch(track_sensitive=true,
[
({0h - 7h}, night),
({7h - 14h}, nonstop),
({14h - 17h}, hits80),
({17h - 19h}, nonstop),
({19h - 0h}, retro)
])

В итоге liquidsoap делает одновременно несколько запросов. Как сделать чтобы запрос к скрипту был в определенное время??

Отредактировано Vadim.CHichkan (07-08-2014 20:15:35)

1,024

Re: liquidsoap

Через внешний срипт как бы нет ограничений, незнаю в чем там у вас возникла проблема.

1,025

Re: liquidsoap

Добрый день!

Конфиг liquidsoap минимален:

set("log.file.path","liquidsoap.log")

set("log.level", 4)
set("harbor.bind_addr","82.146.33.16")

live = input.harbor("mount", port=8000)

single = single("fa0b6aa85ffd63.mp3")

radio = fallback(track_sensitive=false, [live, single])

output.icecast(%mp3, 
   host = "82.146.33.16", 
   port = 8080, 
   password = "XXXX", 
   mount = "AutoDJ", 
   mksafe(radio))

На моунте AutoDJ играет сингл fa0b6aa85ffd63.mp3

Дальше начинается чертовщина: пытаюсь подконнектится вебкастером (https://github.com/webcast/webcaster) к моунту mount.

Лог, показывающий, что моунт вроде как создан:

2014/08/08 14:43:24 [threads:3] Created thread "generic queue #1".
2014/08/08 14:43:24 [threads:3] Created thread "generic queue #2".
2014/08/08 14:43:24 [clock:4] Currently 1 clocks allocated.
2014/08/08 14:43:24 [clock.wallclock_main:4] Starting 1 sources...
2014/08/08 14:43:24 [source:4] Source output.icecast_5881 gets up.
2014/08/08 14:43:24 [source:4] Source mksafe gets up.
2014/08/08 14:43:24 [source:4] Source fallback_5877 gets up.
2014/08/08 14:43:24 [source:4] Source harbor_5873 gets up.
2014/08/08 14:43:24 [harbor_5873:4] Content kind is {audio=2;video=0;midi=0}.
2014/08/08 14:43:24 [harbor:4] Opening port 8000 with icy = false
2014/08/08 14:43:24 [harbor:3] Adding mountpoint '/mount' on port 8000
2014/08/08 14:43:24 [harbor_5873:4] Activations changed: static=[], dynamic=[fallback_5877:mksafe:AutoDJ:AutoDJ].
2014/08/08 14:43:24 [source:4] Source single_5875 gets up.
2014/08/08 14:43:24 [single_5875:4] Content kind is {audio=2;video=0;midi=0}.
2014/08/08 14:43:24 [single_5875:4] Activations changed: static=[], dynamic=[fallback_5877:mksafe:AutoDJ:AutoDJ].
2014/08/08 14:43:24 [fallback_5877:4] Activations changed: static=[], dynamic=[mksafe:AutoDJ:AutoDJ].
2014/08/08 14:43:24 [source:4] Source safe_blank gets up.
2014/08/08 14:43:24 [safe_blank:4] Content kind is {audio=2;video=0;midi=0}.
2014/08/08 14:43:24 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:AutoDJ:AutoDJ].
2014/08/08 14:43:24 [mksafe:4] Activations changed: static=[AutoDJ:AutoDJ], dynamic=[].
2014/08/08 14:43:24 [single_5875:3] Prepared "fa0b6aa85ffd63.mp3" (RID 0).
2014/08/08 14:43:24 [AutoDJ:4] Activations changed: static=[AutoDJ], dynamic=[].
2014/08/08 14:43:24 [AutoDJ:4] Enabling caching mode: active source.
2014/08/08 14:43:24 [AutoDJ:3] Connecting mount AutoDJ for source@82.146.33.16...
2014/08/08 14:43:24 [AutoDJ:3] Connection setup was successful.
2014/08/08 14:43:24 [threads:3] Created thread "wallclock_main" (1 total).
2014/08/08 14:43:24 [clock:4] Main phase starts.
2014/08/08 14:43:24 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2014/08/08 14:43:24 [mksafe:3] Switch to fallback_5877.
2014/08/08 14:43:24 [fallback_5877:4] Activations changed: static=[mksafe:AutoDJ:AutoDJ], dynamic=[mksafe:AutoDJ:AutoDJ].
2014/08/08 14:43:24 [fallback_5877:3] Switch to single_5875.
2014/08/08 14:43:24 [single_5875:4] Activations changed: static=[fallback_5877:mksafe:AutoDJ:AutoDJ], dynamic=[fallback_5877:mksafe:AutoDJ:AutoDJ].

Но жидкое мыло посылает меня далеко и надолго:

2014/08/08 14:45:38 [harbor:4] New client on port 8000: 87.228.30.246
2014/08/08 14:45:38 [harbor:4] Header: Upgrade, value: websocket.
2014/08/08 14:45:38 [harbor:4] Header: Connection, value: Upgrade.
2014/08/08 14:45:38 [harbor:4] Header: Host, value: gcmedia.ru:8000.
2014/08/08 14:45:38 [harbor:4] Header: Sec-WebSocket-Protocol, value: webcast.
2014/08/08 14:45:38 [harbor:4] Header: Pragma, value: no-cache.
2014/08/08 14:45:38 [harbor:4] Header: Cache-Control, value: no-cache.
2014/08/08 14:45:38 [harbor:4] Header: Sec-WebSocket-Key, value: qK2nym/slHUZj1EOakP79A==.
2014/08/08 14:45:38 [harbor:4] Header: Sec-WebSocket-Version, value: 13.
2014/08/08 14:45:38 [harbor:4] Header: Sec-WebSocket-Extensions, value: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame.
2014/08/08 14:45:38 [harbor:4] Header: User-Agent, value: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36.
2014/08/08 14:45:38 [harbor:4] HTTP GET request on /mount.
2014/08/08 14:45:38 [harbor:4] Returned 404 for '/mount'.

Если есть идеи, буду очень рад выслушать. Спасибо.

Отредактировано Kunik (08-08-2014 16:11:43)