1

Тема: Архив радио.

Всем привет!
Ребят кто делал архив радио вещания подскажите что лучше использовать.
То есть , открываем прошлый час там будет разбивка по песням и можно их прослушать.

На данный момент для вещания использую shoutcast ... Эфир формируется Synadin и их же ротатор. С танцами с бубном отдаю поток на шауткаст...

Если нужна еще инфа спрашивайте.
Либо пишите подробней как можно такое сделать , пакет ПО и т.д...

2

Re: Архив радио.

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

3

Re: Архив радио.

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

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

Synadin и их же ротатор

разберитесь толком как работает автоматизация в вашей связке ...

архив радио вещания

как правило есть (отдельный модуль) такой функционал во всех платных ПО автоматизации. Synadin/DJin

Отредактировано VapSite (01-04-2016 20:12:35)

4

Re: Архив радио.

А может для отчетов, одно дело - плейлист, другое дело - запись.

5

Re: Архив радио.

Поток не предоставили, ну да ладно, вот так одной строкой liquidsoap цепляет и пишет что надо

output.file(%mp3(bitrate=128),"путь к архиву/%d.%m.%Y/%H/%M:%S $(title).mp3",reopen_on_metadata=true,mksafe(input.http("http://<хост>:<порт>/<точка монтирования>")))

Что к чему догадаться и дописать для себя думаю труда не составит...

6

Re: Архив радио.

пишет gyurgin_1:

Поток не предоставили, ну да ладно, вот так одной строкой liquidsoap цепляет и пишет что надо

output.file(%mp3(bitrate=128),"путь к архиву/%d.%m.%Y/%H/%M:%S $(title).mp3",reopen_on_metadata=true,mksafe(input.http("htt p://<хост>:<порт>/<точка монтирования>")))

Что к чему догадаться и дописать для себя думаю труда не составит...

День добрый , спасибо за ответы!:)

У нас костыль на костыле , пожалуйста ultima.fm  сайт еще кривой но поток можете взять от туда , ходим сделать нормальный архив на пару дней что играло что бы люди с сайта слушали то что было....

У нас идет захват  звука с вещательного компа и передает уже потоком дальше на сервер shoutcast после с него на сайт...

7

Re: Архив радио.

пишет VapSite:

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

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

Synadin и их же ротатор

разберитесь толком как работает автоматизация в вашей связке ...

архив радио вещания

как правило есть (отдельный модуль) такой функционал во всех платных ПО автоматизации. Synadin/DJin

Мы хотим , архив в виде полосы на сайте и можно слушать хоть неделю назад весь эфир...
Если что Synadin  это только для FM радиостанций , нет у них даже поддержки шауткаста все везде на костылях )
Может сайт хоть видели где такое реализовано , делитесь буду продолжать тему хочу довести до конца и оставить тут.

8

Re: Архив радио.

Проверил метод с liquidsoap, все прекрасно пишется, то есть задача поставленная первоначально решается. Однако,

пишет workiglow:

Мы хотим , архив в виде полосы на сайте и можно слушать хоть неделю назад весь эфир...

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

9

Re: Архив радио.

пишет gyurgin_1:

Проверил метод с liquidsoap, все прекрасно пишется, то есть задача поставленная первоначально решается. Однако,

пишет workiglow:

Мы хотим , архив в виде полосы на сайте и можно слушать хоть неделю назад весь эфир...

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

Спасибо!) Думаю по  liquidsoap инфы много разберусь как поставить...
Для меня это лучший вариант , имхо использовать винду на записи накладно , проще на линуксе smile
Вот еще интересно , временные отметки shoutcast куда пишет ? 
Видел только "последние 1000" воспроизведенных к примеру... правиться в конфиге

Кинь конфиг liquidsoap свой которым ты пробовал писать эфир... спасибо!)

Отредактировано workiglow (05-04-2016 11:21:42)

10

Re: Архив радио.

По shoutcast не скажу, в логи куда - нибудь))
Незамысловатый конфиг для liquidsoap:

#!/usr/bin/liquidsoap
set("init.daemon",true)
set("init.daemon.pidfile",true)
set("log.file.path", "/<путь к лог файлу>.log")
set("init.daemon.pidfile.path", "/<путь к файлу процесса>.pid")
set("log.level",1)
output.file(%mp3(bitrate=128),"<путь куда писать архив>/%Y-%m-%d/%H/%H:%M:%S $(title).mp3",reopen_on_metadata=true,mksafe(input.http("http://sc.ultima.fm:8001/stream/1/stream.mp3")))

С этой ерундой "Empty Title" решайте сами что делать, лучше всего конечно чтобы этого просто не было, можно подменять, можно игнорировать, вариантов масса.

пишет workiglow:

имхо использовать винду на записи накладно , проще на линуксе smile

Ну тогда еще и shotcast заменить на icecast и загрузить liquidsoap кодированием во все нужные форматы.

11

Re: Архив радио.

пишет gyurgin_1:

По shoutcast не скажу, в логи куда - нибудь))
Незамысловатый конфиг для liquidsoap:

#!/usr/bin/liquidsoap
set("init.daemon",true)
set("init.daemon.pidfile",true)
set("log.file.path", "/<путь к лог файлу>.log")
set("init.daemon.pidfile.path", "/<путь к файлу процесса>.pid")
set("log.level",1)
output.file(%mp3(bitrate=128),"<путь куда писать архив>/%Y-%m-%d/%H/%H:%M:%S $(title).mp3",reopen_on_metadata=true,mksafe(input.http("ht tp://sc.ultima.fm:8001/stream/1/stream.mp3")))

С этой ерундой "Empty Title" решайте сами что делать, лучше всего конечно чтобы этого просто не было, можно подменять, можно игнорировать, вариантов масса.

пишет workiglow:

имхо использовать винду на записи накладно , проще на линуксе smile

Ну тогда еще и shotcast заменить на icecast и загрузить liquidsoap кодированием во все нужные форматы.

Спасибо!)
Эммм у нас Z/IP Stream omnia 9  - дает поток касту уже в нужных форматах а каст чисто как вещалка ... хотя уже иногда и правда думаю что icecast лучше.... Что посоветуете в таком случае стоит менять ? Если он чисто для отдачи потока...

А по поводу этих эмпинейм , получается плеер дает кривые названия ... а еще если быть точнее файлы подписаны криво smile)

12

Re: Архив радио.

Конечно менять. Притом, если планируете вещать AAC, - переходите на Icecast KH.

13

Re: Архив радио.

пишет gyurgin_1:

Конечно менять. Притом, если планируете вещать AAC, - переходите на Icecast KH.

Подскажи , а можно как то в liqudsoap , сделать фильтр , к примеру что бы он отбивки не нарезал на отдельные файлы , к примеру назвать их все "dfm"   и к примеру в исполнителе если dfm игнорить этот трек... либо дописывать в конец или начало файла.
Подскажешь??

14

Re: Архив радио.

Я смотрю пофиксили уже, а было уже начал ваять костыль... Можно сторить title, сверять с предыдущим и проверять что не пустой, ну и append=true чтобы дописывал кусок, но это воистину костыль.

15

Re: Архив радио.

пишет gyurgin_1:

Я смотрю пофиксили уже, а было уже начал ваять костыль... Можно сторить title, сверять с предыдущим и проверять что не пустой, ну и append=true чтобы дописывал кусок, но это воистину костыль.

Вроде бы пофиксили , но он все равно пишет пустой файл , даже если названий не видно в касте от перебивок 1-2 сек , тега нет и херачит пустой файл.
А за костыль буду благодарен smile Не совсем понял как сделать sad

16

Re: Архив радио.

пишет gyurgin_1:

Я смотрю пофиксили уже, а было уже начал ваять костыль... Можно сторить title, сверять с предыдущим и проверять что не пустой, ну и append=true чтобы дописывал кусок, но это воистину костыль.

2016/04/12 09:59:15 [http_4753:3] New metadata chunk: ? -- Gene Vincent & His Blue Caps - Be-Bop-a-Lula.
2016/04/12 09:59:17 [/home/worksart/ultimaback/%d(dot)%m(dot)%Y/%H/%M:%S_$(title)(dot)mp3:3] Re-opening output pipe...
2016/04/12 09:59:20 [http_4753:3] New metadata chunk: ? -- .
2016/04/12 09:59:22 [/home/worksart/ultimaback/%d(dot)%m(dot)%Y/%H/%M:%S_$(title)(dot)mp3:3] Re-opening output pipe...
2016/04/12 09:59:30 [http_4753:3] New metadata chunk: ? -- Gene Vincent & His Blue Caps - Be-Bop-a-Lula.
2016/04/12 09:59:32 [/home/worksart/ultimaback/%d(dot)%m(dot)%Y/%H/%M:%S_$(title)(dot)mp3:3] Re-opening output pipe...
2016/04/12 10:01:48 [http_4753:3] New metadata chunk: ? -- MGMT - kids.
2016/04/12 10:01:50 [/home/worksart/ultimaback/%d(dot)%m(dot)%Y/%H/%M:%S_$(title)(dot)mp3:3] Re-opening output pipe...
2016/04/12 10:06:48 [http_4753:3] New metadata chunk: ? -- John Newman - Lights Down.

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

17

Re: Архив радио.

Да если бы у Вас не шли метаданные отбивок или чего там поверх, то можно было бы просто проверять $(title) на пустоту и пропускать создание очередного файла, а так пришлось ваять костыль, в общем как то так получается, - в liq :

def check_metadata(m) =
    title = get_process_output('php <абсолютный путь к папке проекта>/title.php "'^ m["title"] ^'"')
    [("title", "#{title}")]
end
source = mksafe(input.http("http://sc.ultima.fm:8001/stream/1/stream.mp3"))
source = map_metadata(check_metadata, source)
output.file(%mp3(bitrate=128),"<абсолютный путь к папке проекта>/records/%Y-%m-%d/%H/$(title).mp3", append=true, reopen_on_metadata=true, source)

и сам title.php:

<?php
error_reporting(0);
$file = "<абсолютный путь к папке проекта>/title.txt";
$stored_title = explode("::", file_get_contents($file));
if ((isset($argv[1])) and (strlen($argv[1]) !== 0) and ($argv[1] !== $stored_title[1])) {
    echo date("H:i:s") . " " . $argv[1];
    $title = date("H:i:s") . "::" . $argv[1];
    $file_to = fopen($file, "w+");
    fwrite($file_to, $title);
    fclose($file_to);
} else {
    echo $stored_title[0] . " " . $stored_title[1];
}
?>

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

Отредактировано gyurgin_1 (12-04-2016 21:11:40)

18

Re: Архив радио.

пишет gyurgin_1:

Да если бы у Вас не шли метаданные отбивок или чего там поверх, то можно было бы просто проверять $(title) на пустоту и пропускать создание очередного файла, а так пришлось ваять костыль, в общем как то так получается, - в liq :

def check_metadata(m) =
    title = get_process_output('php <абсолютный путь к папке проекта>/title.php "'^ m["title"] ^'"')
    [("title", "#{title}")]
end
source = mksafe(input.http("http://sc.ultima.fm:8001/stream/1/stream.mp3"))
source = map_metadata(check_metadata, source)
output.file(%mp3(bitrate=128),"<абсолютный путь к папке проекта>/records/%Y-%m-%d/%H/$(title).mp3", append=true, reopen_on_metadata=true, source)

и сам title.php:

<?php
error_reporting(0);
$file = "<абсолютный путь к папке проекта>/title.txt";
$stored_title = explode("::", file_get_contents($file));
if ((isset($argv[1])) and (strlen($argv[1]) !== 0) and ($argv[1] !== $stored_title[1])) {
    echo date("H:i:s") . " " . $argv[1];
    $title = date("H:i:s") . "::" . $argv[1];
    $file_to = fopen($file, "w+");
    fwrite($file_to, $title);
    fclose($file_to);
} else {
    echo $stored_title[0] . " " . $stored_title[1];
}
?>

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

Большое спасибо , буду пробовать! smile
На скорую руку , протестил получил вот что...

2016/04/14 10:26:53 [http_4761:3] New metadata chunk: ? -- .
2016/04/14 10:26:54 [mksafe:3] Switch to http_4761 with transition.
2016/04/14 10:26:54 [map_metadata_4765:3] Inserting missing metadata.
/home/worksart/ultimaback/title.php: 1: /home/worksart/ultimaback/title.php: cannot open ?php: No such file
/home/worksart/ultimaback/title.php: 2: /home/worksart/ultimaback/title.php: Syntax error: word unexpected (expecting ")")
2016/04/14 10:26:54 [/home/worksart/ultimaback/%Y-%m-%d/%H/$(title)(dot)mp3:3] Re-opening output pipe...
/home/worksart/ultimaback/title.php: 1: /home/worksart/ultimaback/title.php: cannot open ?php: No such file
/home/worksart/ultimaback/title.php: 2: /home/worksart/ultimaback/title.php: Syntax error: word unexpected (expecting ")")
2016/04/14 10:26:55 [/home/worksart/ultimaback/%Y-%m-%d/%H/$(title)(dot)mp3:3] Re-opening output pipe...
 

Путь правильный , в коде тоже синтаксис уже проверил...

19

Re: Архив радио.

Ну подставьте путь к бинарнику, узнать -

whereis php

, получится что то вроде:

def check_metadata(m) =
    title = get_process_output('/usr/bin/php /home/worksart/ultimaback/title.php "'^ m["title"] ^'"')
    [("title", "#{title}")]
end

20

Re: Архив радио.

пишет gyurgin_1:

Ну подставьте путь к бинарнику, узнать -

whereis php

, получится что то вроде:

def check_metadata(m) =
    title = get_process_output('/usr/bin/php /home/worksart/ultimaback/title.php "'^ m["title"] ^'"')
    [("title", "#{title}")]
end

Вот я лошара , спасибо!:))