1,276

Re: liquidsoap

проблема следующая:
icecast2 запускается, а liquidsoap - не понятно. то ли запустился, то ли нет.
в icecast не появляется значок плейлиста.

вот файлы настроек:

/home/radio/start_liquidsoap.liq

#My Inet Radio config
#Log dir and parametrs

set("log.file.path","/var/log/liquidsoap/myinetradio.log")
set("log.file.path","/home/radio/myinetradio.log")

set("log.stdout", true)

#Set tag encoding
set("tag.encodings",["UTF-8"])

# Use the telnet server for requests
set("server.telnet", true)

# Live Settings
set("harbor.bind_addr","0.0.0.0")



#Rewrite tags

def live_tag(j)
   rewrite_metadata([("title","Прямой эфир")], update=false, strip=true, j)
end

def live_rep_tag(j)
   rewrite_metadata([("title","Повтор прямого эфира")], update=false, strip=true, j)
end

def my_rec_tag(j)
   rewrite_metadata([("title","Моя передача")], update=false, strip=true, j)
end

def den_tag(j)
   rewrite_metadata([("title","Дневная музыка")], update=false, strip=true, j)
end

def jin_tag(j)
   rewrite_metadata([("title","Мое интернет-радио")], update=false, strip=true, j)
end

#Live input
live = audio_to_stereo(live_tag(input.harbor(id="LIVE", port=8010, password="mystationpassword", "live")))
liveover = audio_to_stereo(input.harbor(port=8010, password="mystationpassword2", "liveover"))

#Records play
live_rep = audio_to_stereo(live_rep_tag(request.queue(id="LIVE_REP", timeout=120.)))
my_rec_program = audio_to_stereo(my_rec_tag(request.queue(id="MY_REC_PROGRAM", timeout=120.)))

#Music playlists
den = audio_to_stereo(den_tag(playlist("/home/radio/kavkaz.m3u")))

#Jingle playlist
jin = audio_to_stereo(jin_tag(playlist("/home/radio/jingle/")))

den = random(weights=[1,3],[jin,den])

music = switch(track_sensitive = true, [({6h00m00s-11h59m59s},den),({12h00m00s-17h59m59s},den),({18h00m00s-23h59m59s},den),({00h00m00s-5h59m59s},den)])

record = fallback(id="REC", track_sensitive = false, ([my_rec_program,live_rep]))
ready_air = fallback(id="STREAM", track_sensitive = false, ([
    fallback.skip(input=live, nrj(fallback.skip(input=record,music))),
    blank()
]))
ready_air = add([ready_air, amplify(1.,liveover)])
radio = smart_crossfade(ready_air)

output.icecast(%mp3(bitrate=192, samplerate = 44100, stereo = true), host = "185.58.204.182", port = 8000, name="My Radio", genre="various", url="http://185.58.204.182:8000", description="Мое интернет-радио", password = "S0105877s", mount = "/kavkaz.mp3", radio)
output.icecast(%mp3(bitrate=96, samplerate = 44100, stereo = false), host = "185.58.204.182", port = 8000, name="My Radio", genre="various", url="http://185.58.204.182:8000", description="Мое интернет-радио", password = "S0105877s", mount = "/dj.mp3", mean(radio))

/usr/etc/icecast.xml

<icecast>
    <!-- Location and admin are two arbitrary strings that are e.g. visible
         on the server info page of the icecast web interface
         (server_version.xsl). -->
    <location>UK</location>
    <admin>radio</admin>

    <limits>
        <clients>100</clients>
        <sources>2</sources>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <!-- Same as burst-on-connect, but this allows for being more
             specific on how much to burst. Most people won't need to
             change from the default 64k. Applies to all mountpoints. -->
        <burst-size>65535</burst-size>
        <!--
        <max-bandwidth>100M</max-bandwidth>
        -->
    </limits>

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>S0105877s</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>S0105877s</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>S0105877s</admin-password>
    </authentication>

    <!-- Uncomment this if you want directory listings -->
    <!--
    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
    -->

    <!-- This is the hostname other people will use to connect to your server.
    It affects mainly the urls generated by Icecast for playlists and yp
    listings. -->
    <hostname>185.58.204.182</hostname>

    <!-- Set the mountpoint for a shoutcast source to use, the default if not
         specified is /stream but you can change it here if an alternative is
         wanted or an extension is required
    <shoutcast-mount>/kavkaz.mp3</shoutcast-mount>
    -->

    <!-- port to use when talking to YP etc -->
    <!--<port>8000</port> -->

    <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
        <!-- <bind-address>127.0.0.1</bind-address> -->
        <!-- use <shoutcast-mount> in here to implicitly define port n+1 -->
    </listen-socket>
    <!--
    <listen-socket>
        <port>8001</port>
        <ssl>1</ssl>
    </listen-socket>
    -->

    <!--<master-server>127.0.0.1</master-server>-->
    <!--<master-server-port>8001</master-server-port>-->
    <!--<master-update-interval>120</master-update-interval>-->

    <!--<master-username>hackme</master-username>-->
    <!--<master-password>hackme</master-password>-->

    <!-- issue above authentication for relays in slave setup -->
    <!--<master-relay-auth>1</master-relay-auth>-->

    <!-- setting this makes all relays on-demand unless overridden, this is
         useful for master relays which do not have <relay> definitions here.
         The default is 0 -->
    <!--<relays-on-demand>1</relays-on-demand>-->


    <!-- Request the master server to redirect new listeners to this slave
         the details passed are based on <hostname> and <port> -->
    <!--<master-redirect>1</master-redirect>-->

    <!-- The maximum nuber of slaves that can register for new listener redirection. -->
    <!--<max-redirect-slaves>10</max-redirect-slaves>-->



    <!-- Relays. State connection information, and by default
         request inline metadata for mp3 streams if available.
         An on-demand relay will only retrieve the stream if
         there are listeners connected -->
    <!--
    <relay>
        <server>127.0.0.1</server>
        <port>8001</port>
        <mount>/kazkaz.mp3</mount>
        <local-mount>/test</local-mount>
        <on-demand>1</on-demand>
        <retry-delay>30</retry-delay>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>
    -->
    <!-- Allow multiple master servers to be specified, tries each one in turn.
    <relay>
        <local-mount>/kazkaz.mp3</local-mount>
        <server>a.b.c.d</server>
        <timeout>6</timeout>
        <master>
            <port>8000</port>
            <mount>/a</mount>
        </master>
        <master>
            <port>80</port>
            <mount>/</mount>
        </master>
    </relay>
    -->

    <!-- Only define a <mount> section if you want to use advanced options,
         like alternative usernames or passwords
         With a master/slave setup you need to define a mount in the master
         or else the server will assume that the stream is not to be made
         available to the slave.
    <mount>
        <mount-name>/dj.mp3</mount-name>

        <username>radio</username>
        <password>S0105877s</password>

        <max-listeners>100</max-listeners>
        <max-bandwidth>1000k</max-bandwidth>
        <file-seekable>0</file-seekable>
        <dump-file>/backup/live-%d-%b.ogg</dump-file>
        <burst-size>65536</burst-size>
        <fallback-mount>/kavkaz.mp3</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>
        <intro>/path/to/stream-intro.ogg</intro>
        <max-listener-duration>3600</max-listener-duration>
        <hidden>1</hidden>
        <authentication type="htpasswd">
                <option name="filename" value="myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
        <on-connect>/home/icecast/bin/stream-start</on-connect>
        <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
    </mount>
    -->
    <!-- other auth possibilities include running a command
         to do the auth, mount, user and pass are passed via
         stdin to the program
    <mount>
    ....
        <authentication type="command">
             <option name="listener_add" value="auth_verify"/>
        </authentication>
       
        or

        for url auth, the add url needs to return a "icecast-auth-user:" http
        header for a user to authenicate. URLs are sent params via POST.

        <authentication type="url">
             <option name="username" value="radio"/>
             <option name="password" value="S0105877s"/>
             <option name="handlers"        value="3" />
             <option name="stream_auth"    value="http://myauthserver.com/scripts/auth_mount.php"/>
             <option name="mount_add"    value="http://myauthserver.com/scripts/add_mount.php"/>
             <option name="mount_remove" value="http://myauthserver.com/scripts/del_mount.php"/>
             <option name="listener_add"    value="http://myauthserver.com/scripts/add_listener.php"/>
             <option name="listener_remove" value="http://myauthserver.com/scripts/del_listener.php"/>
        </authentication>
    </mount>
    -->

    <fileserve>1</fileserve>

    <paths>
        <!-- basedir is only used if chroot is enabled --> 
    <basedir>/usr/share/icecast</basedir>

        <!-- Note that if <chroot> is turned on below, these paths must both
             be relative to the new root, not the original root -->
    <!--</usr/var/log/icecast>-->         
    <logdir>/home/radio/icecast</logdir>
        <webroot>/usr/share/icecast/web</webroot>
        <adminroot>/usr/share/icecast/admin</adminroot>
        <!-- <pidfile>/usr/share/icecast/icecast.pid</pidfile> -->
        <!-- <ssl-certificate>/usr/share/icecast/icecast.pem</ssl-certificate> -->
        <!-- <deny-ip>/path/to/file-with-IPs</deny-ip> -->
        <!-- <allow-ip>/path/to/file-with-IPs</allow-ip> -->
        <!-- <deny-agents>/path/to/file-with-useragents</deny-agents> -->

        <!-- location of mime types files used for file serving -->
        <!-- <mime-types>/etc/mime.types</mime-types> -->

        <!-- Aliases: treat requests for 'source' path as being for 'dest' path
             May be made specific to a port or bound address using the "port"
             and "bind-address" attributes.
          -->
        <!--
        <alias source="/foo" dest="/bar"/>
          -->
        <!-- Aliases: can also be used for simple redirections as well,
             this example will redirect all requests for http://server:port/ to
             the status page
          -->
        <alias source="/" dest="/index.html"/>
    </paths>

    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <!-- <accesslog_ip>0<accesslog_ip> -->
        <!-- <playlistlog>playlist.log</playlistlog> -->
          <loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
          <logsize>10000</logsize> <!-- Max size of a logfile -->
        <!-- If logarchive is enabled (1), then when logsize is reached
             the logfile will be moved to [error|access|playlist].log.DATESTAMP,
             otherwise it will be moved to [error|access|playlist].log.old.
             Default is non-archive mode (i.e. overwrite)
        -->
        <!-- <logarchive>1</logarchive> -->
    </logging>

    <security>
        <chroot>0</chroot>
        <!--
        <changeowner>
            <user>nobody</user>
            <group>nogroup</group>
        </changeowner>
        -->
    </security>
</icecast>

Запуск:
sudo /usr/bin/icecast -b start
sudo /usr/bin/liquidsoap -c /home/radio/start_liquidsoap.liq

Что я делаю не так?

1,277

Re: liquidsoap

Первое что не так - это что не читаем что в конфигах написано.

1,278

Re: liquidsoap

liquidsoap под рутом??

1,279

Re: liquidsoap

gyurgin_ пишет:

liquidsoap под рутом??

установлен или запускается?

1,280

Re: liquidsoap

при запуске
sudo liquidsoap -c /home/radio/start.liq

выдает ошибку:
Line 16, char 16 before "(": Parse error!

Не могу понять, на что ругается?

#!/usr/bin/liquidsoap
# где будут логи
set("log.file.path","/home/radio/radio.log")

# загружаем плейлист
myplaylist = mksafe(playlist("/home/radio/music.m3u")

#запускаем вещалку
output.icecast(%vorbis,
  host = "185.58.204.182", port = 8000,
  password = "S0105877s", mount = "123.mp3", myplaylist)

1,281

Re: liquidsoap

но в данном конфиге нету 16 строчки, точно этот конфиг запускается?

и если файл начинается с #!/usr/bin/liquidsoap то при запуске не надо добавлять liquidsoap -c, просто дать файлу права на запуск и запускать сразу его

1,282

Re: liquidsoap

Да я не понимаю какого хрена под sudo?

1,283

Re: liquidsoap

ребят, че то я намучался с супом....
Скажите, достаточно ли будет мне программы Ices для того, чтобы музыка играла 24\7 нон стопом?
Насколько запаристо будет добалять/удалять новые песни?
И возможно ли будет сделать 4 разбивки по времени: утро, день, вечер, ночь?

1,284

Re: liquidsoap

Скажите, достаточно ли будет мне программы Ices для того, чтобы музыка играла 24\7 нон стопом?

да

Насколько запаристо будет добалять/удалять новые песни?

физически добавить не сложно, сложно будет запустить их в ротацию для Ices  . для этого нужно пересоздать Плейлист и перезапустить ices

И возможно ли будет сделать 4 разбивки по времени: утро, день, вечер, ночь?

для ices - нет, не возможно без шаманства и "пятого колеса"
\

для ваших целей подойдет например Centovacast  от ru-hoster   всяко лучше и дешевле выйдет чем вы будете юзать VPS  от 250 руб/мес.

Отредактировано radio_good (31-03-2017 17:43:52)

1,285

Re: liquidsoap

radio_good пишет:

Скажите, достаточно ли будет мне программы Ices для того, чтобы музыка играла 24\7 нон стопом?

да

Насколько запаристо будет добалять/удалять новые песни?

физически добавить не сложно, сложно будет запустить их в ротацию для Ices  . для этого нужно пересоздать Плейлист и перезапустить ices

И возможно ли будет сделать 4 разбивки по времени: утро, день, вечер, ночь?

для ices - нет, не возможно без шаманства и "пятого колеса"
\

для ваших целей подойдет например Centovacast  от ru-hoster   всяко лучше и дешевле выйдет чем вы будете юзать VPS  от 250 руб/мес.

Я погуглю насчет этих программ.
А может ли мне кто нибудь помочь с супом?

1,286

Re: liquidsoap

sergey_iron пишет:

А может ли мне кто нибудь помочь с супом?

я иногда гоняю музон  с помощью liquidsoap, простейшая конструкция, radiostart.liq:

#!/usr/bin/liquidsoap

set("log.file",false)
# Log dir
set("log.file.path", "/home/zz999/Загрузки/Radio.log")

# Music
myplaylist = mksafe(normalize(playlist("/home/zz999/Музыка/playlist.txt")))

# Start building the feed with music
radio = myplaylist

output.icecast(
        %mp3(bitrate=128),
        host = "stream.radio-hosting.net",
        port = 8000,
        name = "scarred",
        description = "liquidsoap_mp3",
        genre = "various",
        url = "http://stream.radio-hosting.net:8000/scarred",
        password = "xxxxxxxxxxxxxxxx",
        mount = "scarred",
        radio
)

лог отключен, хост бесплатный,  пароль можно сразу свой указать на странице регистрации, запускать можно по-разному, я просто указываю путь в xfrun(Alt+F2) -  /home/zz999/radiostart.liq, самоконтроль - консольный плеер mocp, ссылка на поток в конфиге выше, создать плейлист, пишу как есть у меня:
$ find /media/zz999/A39A7D50044FD2C2/'my_music(repack_selene)' -name '*.mp3' -exec echo '{}' \; > /home/zz999/Музыка/playlist.txt
система - Debian 8.
P.S. для такой простой задачи ранее использовал ezstream, ices0, дебианский ices2 не поддерживает mp3, потому не годен для меня...
еще одна деталь - icecast сервер там не "понимает" кириллицу, поэтому у меня все теги версии ID3v2.3(ID3v2.4) и переведены в транслит, иначе "кракозяблики" увидим, ну и другой повод для транслитерации - плеер "железный" в автомобиле тоже не знает кириллицу.
не забывайте выполнить:
$ chmod u+x radiostart.liq

иначе получим - "не удалось выполнить процесс-потомок...отказано в доступе"

Отредактировано scarred (02-04-2017 08:08:34)

1,287

Re: liquidsoap

sergey_iron
вся кухня тут, внизу рабочий шаблон(скрипт)
немного сложнее вариант, с 2-ух листов, на одном - "запад", на втором - "наше", через одну)))

#!/usr/bin/liquidsoap

set("log.file",false)
# Log dir
set("log.file.path", "/home/zz999/Загрузки/Radio.log")

# Music
myplaylist = mksafe(normalize(playlist(reload=1, reload_mode="rounds", mode="randomize", "/home/zz999/Музыка/playlist.txt")))

# Some playlist2
playlist2 = mksafe(normalize(playlist(reload=1, reload_mode="rounds", mode="randomize", "/home/zz999/Музыка/playlist2.txt")))

# Start building the feed with music
radio = myplaylist

# Now add some playlist2
radio = rotate(weights = [1, 1],[playlist2, radio])

output.icecast.........................................................
..................................................................................
.................................................................................

Отредактировано scarred (04-04-2017 22:34:54)

1,288

Re: liquidsoap

Господа, ну сколько можно колхозить и изобретать, давно же понятно что request.dynamic делает все что надо?
Один liq скрипт, один выдающий - все.

1,289

Re: liquidsoap

gyurgin_ пишет:

Господа, ну сколько можно колхозить и изобретать, давно же понятно что request.dynamic делает все что надо?
Один liq скрипт, один выдающий - все.

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

Отредактировано scarred (12-04-2017 17:58:00)

1,290

Re: liquidsoap

scarred пишет:

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

Не надо вот, в документации на сайте есть и пример и описание.
Давно всем создатели программы объясняли - хочешь полный контроль - нате вот вот, хочешь чтобы что то как то играло - вот.
Если проблема вычитать доки,  -  это Ваша проблема.
Пойдете по правильному пути и есть минимальные навыки программирования - подскажу и поддержу.
Хотите нахаляву чтоб Вам сделали - ну ждите, может кто поделится.

1,291

Re: liquidsoap

gyurgin_ пишет:

Хотите нахаляву чтоб Вам сделали - ну ждите, может кто поделится.

я ничего не просил, где ты просьбу увидел?

Отредактировано scarred (12-04-2017 14:08:09)

1,292

Re: liquidsoap

Администрация - три пункта правил дите нарушило - отправьте куда нить с глаз долой.

1,293

Re: liquidsoap

Добрый день!
Использую этот код для вставки джинглов в поток, можно ли уменьшить громкость вставок?

def smooth_add(~delay=0.5,~p=0.2,~normal,~special)
  d = delay
  fade.final = fade.final(duration=d*2.)
  fade.initial = fade.initial(duration=d*2.)
  q = 1. - p
  c = amplify
  fallback(track_sensitive=false,
           [special,normal],
           transitions=[
             fun(normal,special)->
               add(normalize=false,
                   [c(p,normal),
                    c(q,fade.final(type="sin",normal)),
                    sequence([blank(duration=d),c(q,special)])]),
             fun(special,normal)->
               add(normalize=false,
                  [c(p,normal),
                    c(q,fade.initial(type="sin",normal))])
           ])
end

1,294

Re: liquidsoap

Добрый день!

Возможно ли запустить несколько десятков каналов?
Какое железо для этого надо?
Будет один плейлист (возможно несколько по расписанию)  и по времени должны вставляться промо ролики. Треки и ролики будет отдавать пхп скрипт.

1,295

Re: liquidsoap

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

1,296

Re: liquidsoap

Сколько угодно не получилось запустить. На 30 каналах проц. за 90% уходит и в логах выдает "we must catch up ...". Все это дело запускал на vds (проц. - Intel Xeon E5-2630 2 ядра, RAM - 6Gb). Конфиг тестил простой - один плейлист, треки отдает пхп скрипт. Возможно ли мне все таки запустить до сотни каналов, если взять железо получше?

1,297

Re: liquidsoap

ну, сотня ....  тебе нужен уж тогда какой-нибудь 8-ядерный ксенон ...   
на форуме думаю спецов таких тут нет по такой нагрузке серверов ...  остается лишь только опытным путем тестить .. и арифметикой.

Отредактировано radio_good (20-09-2017 22:20:13)

1,298

Re: liquidsoap

Здравствуйте, такая проблема, не могу запустить радио без mksafe, пишет, что source is fallible, НО мне нужно, чтоб вещание отвалилось как только source отвалится, чтоб отловить эту ошибку и исправить.
Сейчас у меня работает скрипт, который проверяет доступность радио и он всегда думает, что радио работает даже если оно отвалилось и там идет пустое вещание

1,299

Re: liquidsoap

Все, вопрос неактуален, нашел

fallible=true

параметр)