1,126

Re: liquidsoap

пишет gyurgin_1:

Вы там в своем уме? втрой конфиг изначально не рабочий. Liquidsoap выдает ошибку - смотрите и если совсем тупняк пишите.

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

До этого работало все так же .. где-то . что-т не дописал или упустил и не могу найти...

1,127

Re: liquidsoap

Liquidsoap пишет в какой строке и позиции ошибка. Давайте конфиг если сами не можете.

1,128

Re: liquidsoap

пишет gyurgin_1:

Liquidsoap пишет в какой строке и позиции ошибка. Давайте конфиг если сами не можете.

я его предоставил выше...

1,129

Re: liquidsoap

Откуда мы знаем, где у Вас там седьмая строка?

1,130

Re: liquidsoap

пишет Ok_go_love:

Откуда мы знаем, где у Вас там седьмая строка?

Повторюсь, вот мой конфиг)

#!/usr/bin/liquidsoap
#...
set("log.file.path","/home/netmaster/liq.log")

#..
myplaylist = (playlist("/home/netmaster/music.m3u"))


#.
output.icecast(%aacplus(bitrate=16, samplerate=44100, channels=2),
  host = "192.168.1.16", port = 8888,
  password = "pass", mount = "music", mksafe(myplaylist))

Отредактировано firefedot (15-01-2015 13:32:35)

1,131

Re: liquidsoap

Могу только предложить убрать mksafe из функции output, и после строки myplaylist= дописать строку
myplaylist = mksafe(myplaylist)
Со вложенными инструкциями у него иногда случается беда.

Отредактировано Ok_go_love (02-02-2015 12:20:11)

1,132

Re: liquidsoap

#!/etc/liquidsoap -d
set("init.daemon",true)
set("init.daemon.pidfile",false)
set("log.file.path","/var/log/site/asot_radio.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, '/var/www/asot_radio/'))
radio = myplaylist
radio = mksafe(radio)
radio = smart_crossfade(start_next=6.0, fade_out=3.0, fade_in=3.0, radio)

potok = out(input.http("http://сайт:порт/маунт" ))
radio = fallback(track_sensitive=false, [ switch([({ 4w22h00m-4w23h59m }, potok)]), radio ])

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

url = "http://localhost:8000/asot"
input = mksafe(input.http(url))

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

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

1,133

Re: liquidsoap

Ищу специалиста по liquidsoap, в продолжении темы, осталось сделать пару вещей:
http://radiotalk.ru/viewtopic.php?id=7157

Отредактировано Myradio24.com (06-03-2015 14:43:54)

1,134

Re: liquidsoap

Привет, уважаемые форумчане.
Помогите решить одну, по идеи, простую задачку.
Есть два плейлиста с треками для дня и для ночи. Так же есть некая папка promo. Задача - днем играть день, ночью играть ночь и каждый час играть рандомно что то из папки промо. Я написал конфиг - он работает, все хорошо. Есть две проблемки, которые я не могу решить:
1. когда по времени начинает играть промо - он резко обрывает играющий трек.
2. после того, как промка перестает играть и плавно выключается (фейд срабатывает в этом случае) продолжает играть конец трека, который был прерван промкой.
Просмотрел весь форум, решение вроде банально простое, но не получается сделать именно так, как хотелось и все тут.
Заранее благодарю всех.

Вот конфиг:
#!/usr/bin/liquidsoap

set("log.file.path","/var/log/liquidsoap/radio.log")
set("log.level", 3)
set("log.file",true)
set("log.stdout",false)


wd = "/srv/music"
pl = "#{wd}/playlist"
sc = "#{wd}/sec"
ni = "#{pl}/night"
da = "#{pl}/day"
pr = "#{pl}/promo"

mus_ni = playlist(mode="random",reload=86400,"#{ni}")
mus_da = playlist(mode="random",reload=86400,"#{da}")
mus_pr = playlist(mode="random",reload=86400,"#{pr}")
mus_sc = mksafe(playlist("#{sc}"))

main_ef = fallback([ request.queue(id="request"),
                    switch([({ 6h-22h }, mus_da),
                            ({ 22h-6h }, mus_ni)]),
                    mus_sc])

default = fallback(track_sensitive = false, [ switch ([({0m0s},mus_pr)]), main_ef])


default = crossfade(start_next=1., fade_out=3., fade_in=1., default)
default = compress(attack=2., ratio=2., knee=6.,  gain=-1., threshold=-4.64, release=50.,default)
default = ladspa.tap_equalizer(band_7_freq=16., band_7_gain=3., default)
default = ladspa.tap_limiter(output_volume=-1., limit_level=1., default)

output.alsa(default)

1,135

Re: liquidsoap

track_sensitive = false меняем на track_sensitive = true.

1,136

Re: liquidsoap

пишет gyurgin_1:

track_sensitive = false меняем на track_sensitive = true.

пробовал. тогда он перестает отрабатывать на время вообще.

1,137

Re: liquidsoap

Немного недоглядел, track_sensitive = true надо попробовать в switch там где промо, да и почему бы промо не воткнуть в switch с дневным и ночным плейлистами?

1,138

Re: liquidsoap

пишет gyurgin_1:

Немного недоглядел, track_sensitive = true надо попробовать в switch там где промо, да и почему бы промо не воткнуть в switch с дневным и ночным плейлистами?

сделал так:
default = fallback(track_sensitive = true,
        [switch ([
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni),
            ({50m0s}, mus_pr)
            ]), mus_sc
        ])

так же не отрабатывает по времени, как будто даже не знает о промо. если ставить track_sensitive = false - отрабатывает, он резко обрывает играющую музыку.

1,139

Re: liquidsoap

Попробуйте промо поставить превым, вот как то так:

default = fallback(
        [switch ([
            ({50m0s}, mus_pr),
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni)
            ]), mus_sc
        ])

1,140

Re: liquidsoap

пишет gyurgin_1:

Попробуйте промо поставить превым, вот как то так:

default = fallback(
        [switch ([
            ({50m0s}, mus_pr),
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni)
            ]), mus_sc
        ])

Пробовал. Эффект такой же. Он отрабатывает по времени только при track_sensitive = false, но при этом резко обрывает играющий трек. Если ставить true, что по идеи должно заставить работать так, как нужно, то он не отрабатывает по времени вовсе.

Пожалуйста, подскажите еще варианты, как решить данную задачу sad

1,141

Re: liquidsoap

Так будет работать

default = fallback(
        [switch ([
            ({12h00-12h01 or 13h00-13h01 or 14h00-14h01 or 15h00-15h01 or 16h00-16h01 or 17h00-17h01 or 18h00-18h01}, mus_pr),
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni)
            ]), mus_sc
        ])

Мысль надеюсь уловили.

1,142

Re: liquidsoap

пишет gyurgin_1:

Так будет работать

default = fallback(
        [switch ([
            ({12h00-12h01 or 13h00-13h01 or 14h00-14h01 or 15h00-15h01 or 16h00-16h01 or 17h00-17h01 or 18h00-18h01}, mus_pr),
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni)
            ]), mus_sc
        ])

Мысль надеюсь уловили.

Мысль ясна smile ну надо понимать, что промо может быть и 2 минуты и 5 минут. Они рандомно берутся из папки определенной и в данном случае, такой вариант, мало пригоден. И опять же, даже если допустить, что нам известно какой трек долежн играть в какое время, то этот способ не меняет смысл того, что написано у меня.

1,143

Re: liquidsoap

Privet vsem opat smile Nuzna pomash kak realizirovat nakladku sireni kazdij cas .naprimer igrajit muzika i rovna kazdij cas po verhu muziki nakladivaitsa naprimer alarm.mp3.

https://cdn1.iconfinder.com/data/icons/fatcow/16/debian.png

1,144

Re: liquidsoap

пишет oprst:

пишет gyurgin_1:

Так будет работать

default = fallback(
        [switch ([
            ({12h00-12h01 or 13h00-13h01 or 14h00-14h01 or 15h00-15h01 or 16h00-16h01 or 17h00-17h01 or 18h00-18h01}, mus_pr),
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni)
            ]), mus_sc
        ])

Мысль надеюсь уловили.

Мысль ясна smile ну надо понимать, что промо может быть и 2 минуты и 5 минут. Они рандомно берутся из папки определенной и в данном случае, такой вариант, мало пригоден. И опять же, даже если допустить, что нам известно какой трек долежн играть в какое время, то этот способ не меняет смысл того, что написано у меня.

А вот и не поняли, хотя бы попробовали чтоли... В данном примере задан период минута, а на самом деле при track_sensitive = true (это по умолчанию, поэтому не обязательно указывать) спокойно проиграет рандомный трек из промо и после него вернется к обычным плейлистам.

1,145

Re: liquidsoap

пишет gyurgin_1:

пишет oprst:

пишет gyurgin_1:

Так будет работать

default = fallback(
        [switch ([
            ({12h00-12h01 or 13h00-13h01 or 14h00-14h01 or 15h00-15h01 or 16h00-16h01 or 17h00-17h01 or 18h00-18h01}, mus_pr),
            ({6h-22h}, mus_da),
            ({22h-6h}, mus_ni)
            ]), mus_sc
        ])

Мысль надеюсь уловили.

Мысль ясна smile ну надо понимать, что промо может быть и 2 минуты и 5 минут. Они рандомно берутся из папки определенной и в данном случае, такой вариант, мало пригоден. И опять же, даже если допустить, что нам известно какой трек долежн играть в какое время, то этот способ не меняет смысл того, что написано у меня.

А вот и не поняли, хотя бы попробовали чтоли... В данном примере задан период минута, а на самом деле при track_sensitive = true (это по умолчанию, поэтому не обязательно указывать) спокойно проиграет рандомный трек из промо и после него вернется к обычным плейлистам.

Воот. Точно. работает smile Хотите маленький нюанс  при данном варианте еще? Знаете, почему я думал, что при track_sensitive = true якобы он игнорировал время? Вот мы указываем в вашем варианте интервал в минуту. А теперь такая фишка - условно трек из основного плейлиста начал играть в 11:59... , промка должна заиграть в интервал с 12:00 до 12:01 и разумеется, трек который начал играть в 11:59 не успевает закончится до 12:01 - поэтому плейлист продолжает играть без промо...

Спасибо большое за помощь - мне теперь все понятно в этом вопросе. smile

Отредактировано oprst (24-03-2015 10:28:13)

1,146

Re: liquidsoap

Мда, нюанс такой есть, но тут похоже ничего не придумать. Хотя... используйте request.dynamic и все будет как надо. Вот набросал для Вас пример, будет желание - пробуйте, конфиг будет выглядеть так:

#!/usr/bin/liquidsoap
set("log.file.path","/var/log/liquidsoap/radio.log")
set("log.level", 3)
set("log.file",true)
set("log.stdout",false)
sc = "/srv/music/sec"
def get_request() =
  uri = get_process_output("php КАКОЙ_ВАМ_УДОБНО_ПУТЬ/switch.php")
  request.create(uri)
end
mus_sc = mksafe(playlist("#{sc}"))
main_ef = request.dynamic(id="main_playlist",get_request)
default = fallback(track_sensitive=false,[mksafe(main_ef),mus_sc])
default = crossfade(start_next=1., fade_out=3., fade_in=1., default)
default = compress(attack=2., ratio=2., knee=6.,  gain=-1., threshold=-4.64, release=50.,default)
default = ladspa.tap_equalizer(band_7_freq=16., band_7_gain=3., default)
default = ladspa.tap_limiter(output_volume=-1., limit_level=1., default)
output.alsa(default)

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

output.alsa(bufferize=true,mksafe(buffer(default)))

, ну и скрипт switch.php:

<?php
error_reporting(0);
$mus_ni           = "/srv/music/playlist/night";
$mus_da           = "/srv/music/playlist/day";
$mus_pr           = "/srv/music/playlist/promo";
$promo_state_file = "/srv/music/playlist/promo/promo_state.txt";  // По этому файлу будем проверять играло уже промо в этом часе или нет
function scanDirectory($rootDir, $allData = array())
{
    $FilesExt           = array(
        "ogg",
        "mp3",
        "wav"
    );
    $invisibleFileNames = array(
        ".",
        "..",
        "promo_state.txt"
    );
    $dirContent         = scandir($rootDir);
    foreach ($dirContent as $key => $content) {
        $path    = $rootDir . '/' . $content;
        $ext_arr = explode(".", $content);
        $ext     = strtolower(array_pop($ext_arr));
        if (!in_array($content, $invisibleFileNames)) {
            if (is_file($path) && is_readable($path)) {
                if (in_array($ext, $FilesExt)) {
                    $allData[] = $path;
                }
            } elseif (is_dir($path) && is_readable($path)) {
                $allData = scanDirectory($path, $allData);
            }
        }
    }
    return $allData;
}
$file_promo_state = fopen($promo_state_file, "a+") or die("File promo_state does not exist!");
$promo_state = fread($file_promo_state, filesize($promo_state_file));
fclose($file_promo_state);
if ((date('G') >= 6) and (date('G') <= 22)) {
    $directory = $mus_da;
} else {
    $directory = $mus_ni;
}
if ((date('i') >= 0) and (date('i') <= 10) and ($promo_state !== date('G'))) {
    $directory        = $mus_pr;
    $file_promo_state = fopen($promo_state_file, "w+");
    fwrite($file_promo_state, date('G'));
    fclose($file_promo_state);
}
$mp3_files  = scanDirectory($directory);
$rand       = mt_rand(0, count($mp3_files) - 1);
$next_track = $mp3_files[$rand];
if (file_exists($next_track)) {
    echo $next_track;
}
?>

Скажем так - вариант довольно глупый, но нужные функции выполнит.

1,147

Re: liquidsoap

пишет gyurgin_1:

Мда, нюанс такой есть, но тут похоже ничего не придумать. Хотя... используйте request.dynamic и все будет как надо. Вот набросал для Вас пример, будет желание - пробуйте, конфиг будет выглядеть так:

#!/usr/bin/liquidsoap
set("log.file.path","/var/log/liquidsoap/radio.log")
set("log.level", 3)
set("log.file",true)
set("log.stdout",false)
sc = "/srv/music/sec"
def get_request() =
  uri = get_process_output("php КАКОЙ_ВАМ_УДОБНО_ПУТЬ/switch.php")
  request.create(uri)
end
mus_sc = mksafe(playlist("#{sc}"))
main_ef = request.dynamic(id="main_playlist",get_request)
default = fallback(track_sensitive=false,[mksafe(main_ef),mus_sc])
default = crossfade(start_next=1., fade_out=3., fade_in=1., default)
default = compress(attack=2., ratio=2., knee=6.,  gain=-1., threshold=-4.64, release=50.,default)
default = ladspa.tap_equalizer(band_7_freq=16., band_7_gain=3., default)
default = ladspa.tap_limiter(output_volume=-1., limit_level=1., default)
output.alsa(default)

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

output.alsa(bufferize=true,mksafe(buffer(default)))

, ну и скрипт switch.php:

<?php
error_reporting(0);
$mus_ni           = "/srv/music/playlist/night";
$mus_da           = "/srv/music/playlist/day";
$mus_pr           = "/srv/music/playlist/promo";
$promo_state_file = "/srv/music/playlist/promo/promo_state.txt";  // По этому файлу будем проверять играло уже промо в этом часе или нет
function scanDirectory($rootDir, $allData = array())
{
    $FilesExt           = array(
        "ogg",
        "mp3",
        "wav"
    );
    $invisibleFileNames = array(
        ".",
        "..",
        "promo_state.txt"
    );
    $dirContent         = scandir($rootDir);
    foreach ($dirContent as $key => $content) {
        $path    = $rootDir . '/' . $content;
        $ext_arr = explode(".", $content);
        $ext     = strtolower(array_pop($ext_arr));
        if (!in_array($content, $invisibleFileNames)) {
            if (is_file($path) && is_readable($path)) {
                if (in_array($ext, $FilesExt)) {
                    $allData[] = $path;
                }
            } elseif (is_dir($path) && is_readable($path)) {
                $allData = scanDirectory($path, $allData);
            }
        }
    }
    return $allData;
}
$file_promo_state = fopen($promo_state_file, "a+") or die("File promo_state does not exist!");
$promo_state = fread($file_promo_state, filesize($promo_state_file));
fclose($file_promo_state);
if ((date('G') >= 6) and (date('G') <= 22)) {
    $directory = $mus_da;
} else {
    $directory = $mus_ni;
}
if ((date('i') >= 0) and (date('i') <= 10) and ($promo_state !== date('G'))) {
    $directory        = $mus_pr;
    $file_promo_state = fopen($promo_state_file, "w+");
    fwrite($file_promo_state, date('G'));
    fclose($file_promo_state);
}
$mp3_files  = scanDirectory($directory);
$rand       = mt_rand(0, count($mp3_files) - 1);
$next_track = $mp3_files[$rand];
if (file_exists($next_track)) {
    echo $next_track;
}
?>

Скажем так - вариант довольно глупый, но нужные функции выполнит.

Спасибо Вам огромное. Я обязательно погоняю данный скрипт. smile

1,148

Re: liquidsoap

Позвольте попросить о помощи еще в одном моменте.
music = fallback ([
                switch (track_sensitive = false,[
                        ({16h28m}, promo_15),
                        ({18h-1h}, mus_ni),
                        ({08h-18h}, mus_da)
                        ]), security
])
Все бы просто - в 16h28m - все отрабатывает, кроссфедится и играет. НО promo_15 = это 10ти секундный ролик и почему то он продолжает играть целую минуту (ну или раз 5-6 точно) один и тот же ролик. По идеи - отъиграл один раз и играешь основной плейлист дальше, ну как я понимаю. Задача в целом такая, как писал ранее, сделать в начале каждого часа промки - для каждого часа свою. Что я делаю не правильно ?
Заранее благодарю за помощь.

Отредактировано oprst (24-03-2015 17:55:11)

1,149

Re: liquidsoap

Что - то в таком роде должно быть:

promo_15 = once(single(some_file.mp3))

. Тогда точно проиграет всего один раз.

1,150

Re: liquidsoap

пишет gyurgin_1:

Что - то в таком роде должно быть:

promo_15 = once(single(some_file.mp3))

. Тогда точно проиграет всего один раз.

yeeeessss. Точно. Все работает теперь как нада smile Спасибо большое.