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

liquidsoap

 

6245
Тарас @tarasian666
там все просто и интуитивно, подключаемся клиентом telnet пишем help и выводит список доступных команд, кол-во которых также зависит от того что в скрипте liquidsoap задействовано

когда знаем нужные команды делаем скрипт, например на php вообще просто - подключиться через fsockopen, дальше шлем команды fwrite и тд

30
Azat @Azat
Благодарю за помощь!

UPD. А порт где то указывается или он всегда 1234?

UPD. Ой, все, нашел в настройках:)

Отредактировано Azat - 05.01.2012
30
Azat @Azat
Блин, что то не хочет у меня работать telnet... Точнее он работает через встроенную утилиту, а через php - нет! Вот код:

<?php

$telnet = fsockopen("127.0.0.1", "1234");

if($telnet === false) {
die("Плохо");
}

while(!feof($telnet)) {
$out .= fgets($telnet, 1024);
}

echo $out;

fwrite($telnet, "request.push /home/music/otbivky/02.mp3");

fclose($telnet);

?>

Пишет следующее: Connection timed out.. Bye!

Заранее благодарю за помощь!

PS. Файл php запускаю через Apache2, на том же сервере, что и liquidsoap

Отредактировано Azat - 05.01.2012
6245
Тарас @tarasian666
пробуй ставить таймаут в fsockopen
$fp = fsockopen("127.0.0.1", 1234, $errno, $errstr, 30);

я использовал не fgets а fread и не использоваk while
echo fread($fp, 10);

30
Azat @Azat
Блин, не хотелось бы конечно таких задержек... Через консоль то моментально конектит. Ну что делать, сейчас попробую, спасибо!

30
Azat @Azat
Неа, не хочет. Даже при таймауте 180 не хочет. Мне кажется, тут дело в telnet, а не в php. Ведь если бы был действительно таймаут, то php выдал бы варнинг, или функция вернула бы false, но ни того, ни этого нет, ведь этот текст, "Connection timed out.. Bye!" приходит из сокета, если закомментировать чтение, то ничего нет. Вот текущий код:

<?php

$telnet = fsockopen("127.0.0.1", "1234", $errno, $errstr, 180);

if($telnet === false) {
die("Плохо");
}

/*while(!feof($telnet)) {
$out .= fgets($telnet, 1024);
}*/

echo fread($telnet, 40);

fwrite($telnet, "request.push /home/music/otbivky/02.mp3");

fclose($telnet);

?>

PS. Пробовал с таймаутом 30 и 180. Результат один и тот же: пишет, что таймаут гораздо раньше, секунд через 10, значит, это не таймаут.

Заранее благодарю!

UPD. Ой, я кажется понял. Он не выводит приглашение, он выводит "Connection timed out.. Bye!" и то же самое он выводит, если в консоли не делать что то 10 секунд, и после этого отключается. Странно, почему он не выводит "Escape character is '^]'." и тд. Сейчас буду разбираться.

Отредактировано Azat - 05.01.2012
6245
Тарас @tarasian666
вот код который работает у меня
<?php

$fp = fsockopen("127.0.0.1", 1234, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
#$out = "queue.push /tmp/plupload/09 - Never Shall Be Again.mp3\r\n";
$out = "queue.push ";
$out .= "/var/www/music/Nargaroth/Nargaroth - Spectral Visions Of Mental Warfare 2011/Nargaroth - Spectral Visions Of Mental Warfare 2011/01 - Odin's Weeping for Jordh.mp3";
$out .= "\r\n";
usleep(500);
fwrite($fp, $out);
echo fread($fp, 10);
usleep(500);
$out = "quit\r\n";
fwrite($fp, $out);
echo "<br>".fread($fp, 10);
fclose($fp);
}



?>

30
Azat @Azat
Да, сам только что пришел к выводу, что надо поставить небольшую задержку и "нажать" enter с помощью "\r", большое спасибо за помощь!

833
metra52 @metra52
У меня и без задержки работает)
P.S Вывел список следующих треков на главную. штук 6, мне хватает))) Осталось просшедшие сделать) и еще бы неплохо что бы скинули скриптик для стола заказов для Liquidsoap

Отредактировано metra52 - 07.01.2012
6245
Тарас @tarasian666
metra52 пишет:

и еще бы неплохо что бы скинули скриптик для стола заказов для Liquidsoap

сканируешь нужную папку, выводишь все на сайт, при клике на определенный трек делаешь через телнет queue.push
делов то на пару минут

833
metra52 @metra52
tarasian666 пишет:

metra52 пишет:

и еще бы неплохо что бы скинули скриптик для стола заказов для Liquidsoap

сканируешь нужную папку, выводишь все на сайт, при клике на определенный трек делаешь через телнет queue.push
делов то на пару минут


Ты как вседа все мериишь по своим возможностям=)
у меня на платформе где стоит liquidsoap и папка с музыкой нет веб сервера) и достучаться туда можно только по FTP или же через Radmin

Отредактировано metra52 - 07.01.2012
30
Azat @Azat
Не, это не задержки были, это была тупость моя :D А так задержки перед каждой командой полсекунды, не заметно. Сделал пока управление нон-стопом для своих, работает:) Но не представляю, как сделать вывод следующих треков... Я, конечно, могу получить список из плейлиста music, но тогда будет без учета queue.push. Подскажите, как можно это реализовать:) Вот скрипт:

#!/usr/local/bin/liquidsoap -d
set("tag.encodings", ["UTF-8", "CP1251"])
set("server.telnet", true)
set("server.telnet.port", 1234)

music = mksafe(playlist(reload = 600, "/home/music/music"))
jingles = mksafe(playlist(reload = 600, "/home/music/jingles"))
jingles = rewrite_metadata([("title","бешеные улитки отдыхают вместе с нами!"),
("artist", "Crazy Radio")],jingles)
short = mksafe(playlist(reload = 600, "/home/music/short"))
short = rewrite_metadata([("title","бешеные улитки отдыхают вместе с нами!"),
("artist", "Crazy Radio")],short)
jinglesnewyear = mksafe(playlist(reload = 600, "/home/music/jinglesnewyear"))
jinglesnewyear = rewrite_metadata([("title","бешеные улитки отдыхают вместе с нами!"),
("artist", "Crazy Radio")],jinglesnewyear)
chart = mksafe(playlist(reload = 600, "/home/music/chart"))

radio = rotate(weights = [3, 1, 2, 1, 2, 1], [music, jingles, music, jinglesnewyear, chart, short])

radio = fallback([request.queue(id = "otbivka"), request.queue(id = "request"), radio])

radio = smart_crossfade(radio)

live = input.harbor("onair", port = 8095, password = "***", metadata_charset = "CP1251")
#live = input.http("http://82.146.58.205:8000/onair")

def append_title(m) =
title = m["title"]
[("title","#{title} - Crazy Radio")]
end

radio = map_metadata(append_title, radio)

#radio = smooth_add(delay = 2.0, p = 0.0, normal = radio, special = live)
radio = fallback(track_sensitive = false, [live, radio])

output.icecast(%mp3(bitrate=128), host = "localhost", icy_metadata = "true", port = 8000, mount = "crazy", description = "The Craziest Radio On The World!", name = "Crazy Radio", url = "**********", genre = "Varios", password = "***", mksafe(normalize(radio)))
output.icecast(%mp3(bitrate=96), host = "localhost", icy_metadata = "true", port = 8000, mount = "crazy96", description = "The Craziest Radio On The World!", name = "Crazy Radio", url = "**********", genre = "Varios", password = "***", mksafe(normalize(radio)))
output.icecast(%mp3(bitrate=24), host = "localhost", icy_metadata = "true", port = 8000, mount = "crazy24", description = "The Craziest Radio On The World!", name = "Crazy Radio", url = "**********", genre = "Varios", password = "***", mksafe(normalize(radio)))

music.next не предлагать, он без учета заказов работает:) Спасибо заранее!

Отредактировано Azat - 07.01.2012
6245
Тарас @tarasian666
metra52 пишет:


Ты как вседа все мериишь по своим возможностям=)
у меня на платформе где стоит liquidsoap и папка с музыкой нет веб сервера) и достучаться туда можно только по FTP или же через Radmin

ну так как ты вообще собираешься делать стол заказов? Каждый раз дергать через телнет весь плейлист?

Ни кто не мешает достучатся на стороне вебсервера через фтп чтоб получить список треков

6245
Тарас @tarasian666
но ни то ни другое не выход если это будет стол заказов не для одного человека

833
metra52 @metra52
tarasian666 пишет:

но ни то ни другое не выход если это будет стол заказов не для одного человека


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

833
metra52 @metra52
такой вопрос, как записать данные в файл используя liquidsoap, тоесть нашел вот такое


last_xml = "/home/dbaelde/dolebrai_public_html/last.xml"

def feedback(m)
system("last.rb > #{last_xml}")
end

s = store_metadata(size=20,id="history",s)
s = on_metadata(feedback,s)


а вот файла last.rb у меня нет и хз где достать, но данная связка должна выводить историю треков

29
platinum07 @platinum07
примерно через час после запуска поток падает. с aacplusenc ровно так же. liquidsoap 0.9.3.
2012/02/01 13:46:57 [output(dot)icecast(dot)lame:3] Restarting encoder after delay (3600s)
перед каждым треком
2012/02/01 13:43:41 [root:2] We must catchup 1.94 seconds!
и кроссфейд не работает

Отредактировано platinum07 - 01.02.2012
11
Sanka @Sanka
Всем привет, очень нужна помощь, есть вещание с помощью liquidsoap 1.0.0 + icecast2, но проблема с русскими тегами они выводятся в следующем виде:
К402 - Час [Украинский Рок]

С латиницей проблем нет никаких. Никто не стыкался с такой проблемой?Может подскажет кто то в чем проблема???

6245
Тарас @tarasian666
в плеере также пишет?

833
metra52 @metra52
На страничке статистики так, на остальный так же, у меня тош такая лажа есть....