ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Архив радио.

 

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

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

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

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

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

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

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

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

Отредактировано VapSite - 01.04.2016
382
Grigorij @gyurgin_1
А может для отчетов, одно дело - плейлист, другое дело - запись.

382
Grigorij @gyurgin_1
Поток не предоставили, ну да ладно, вот так одной строкой liquidsoap цепляет и пишет что надо
output.file(%mp3(bitrate=128),"путь к архиву/%d.%m.%Y/%H/%M:%S $(title).mp3",reopen_on_metadata=true,mksafe(input.http("http://<хост>:<порт>/<точка монтирования>")))

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

30
Павел @workiglow
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 после с него на сайт...

30
Павел @workiglow
VapSite пишет:

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

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

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

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


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

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

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

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

30
Павел @workiglow
gyurgin_1 пишет:

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

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

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


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

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

Отредактировано workiglow - 05.04.2016
382
Grigorij @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("http://sc.ultima.fm:8001/stream/1/stream.mp3")))

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

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

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

30
Павел @workiglow
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 пишет:

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

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


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

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

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

30
Павел @workiglow
gyurgin_1 пишет:

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


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

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

30
Павел @workiglow
gyurgin_1 пишет:

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


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

30
Павел @workiglow
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.


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

382
Grigorij @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 скрипт должен иметь все права на папку проекта, сообразите я надеюсь.

Отредактировано gyurgin_1 - 12.04.2016
30
Павел @workiglow
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 скрипт должен иметь все права на папку проекта, сообразите я надеюсь.


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

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...


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

382
Grigorij @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

30
Павел @workiglow
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

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