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

запись интернет радиостанции

 

37
Алексей @anester
Здравствуйте!
Возникла необходимость, в целях организации архива, записывать интернет радиостанцию.

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

Какие решения попробованы.

1. wget - умеет писать потоки в mp3, но при обрыве связи сам "падает" и больше не поднимается. Пишет в один файл
2. streamripper - при обрыве также падает и не поднимается. Даже не умеет писать в один файл, пишет кусками по метатегам.
3. mplayer - ведет себя как wget

Если кто то знает как решить проблему, помогите.

398
ubuntu-studio @ubuntu-studio
anester пишет:

Здравствуйте!
Возникла необходимость, в целях организации архива, записывать интернет радиостанцию.


Для винды есть бесплатное решение полностью отвечающее вашим требованиям. (пишет с аудиокарты, включая и тишину, бьет на отрезки)
**********

37
Алексей @anester
А для линукса? Да еще и из командной строки?

Дело в том, мы пишем поток и доступа к аудиокарте у нас нет. Да и более того, самой аудиокарты тоже. Дигиспот у нас работает напрямую с icecast.

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

А так культурно пишешь поток на vps.

68
Алексей @features
man ffmpeg

Отредактировано features - 22.11.2013
398
ubuntu-studio @ubuntu-studio
anester пишет:

А для линукса? Да еще и из командной строки?


Я предложил, что первое пришло на ум.
Но, вы должны понимать, что даже если вы найдете решение под линукс, то если будет обрыв - запись тоже оборвется. =)

Желаю удачи в поисках, но если решение будет найдено, напиши его сюда. Думаю, будет многим интересно

37
Алексей @anester
features пишет:

man ffmpeg


Отправлять в гугл или читать маны - очень в стиле русских форумов.

Я думаю даже на этом форуме найдутся (если найдутся) единицы людей которые хорошо знают ffmpeg и как из этого винигрета сконструировать строку для выполнения этих задач.

888
Falcon @Falcon
Я могу ошибаться, но стоит посмотреть в сторону liquidsoap. Вроде бы даже сам icecast может писать копию потока. Что-то подобное видел в доках у них.

6245
68
Алексей @features
anester пишет:

features пишет:

man ffmpeg


Отправлять в гугл или читать маны - очень в стиле русских форумов.

Я думаю даже на этом форуме найдутся (если найдутся) единицы людей которые хорошо знают ffmpeg и как из этого винигрета сконструировать строку для выполнения этих задач.

Ну так и шагали бы на не русские форумы, в чём проблема то? Я вам подсказал утилиту которая могла бы справиться с задачей, но так, как я сам не решал такую задачу, то и не знаю конкретного решения.

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

37
Алексей @anester
Сам начал, сам и закончу. Попробовано с десяток утилит, основное требование это linux и командная строка.
Если уже совсем ничего не ставить, то поток отлично пишет wget, но у этого способа есть один недостаток, который вряд ли кто заметит.
Чем дольше время записи, тем больше идет временной сдвиг. Например час эфира, занимает 58 минут, хотя весь эфир записан.

Сейчас остановились на mplayer , работает отлично и очень стабильно.

382
Grigorij @gyurgin_1
Если используете Liquidsoap то перед передачей потока на icecast добавить:
output.file(%mp3(bitrate=64),
"/home/radio/liquidsoap/archive/%Y-%m-%d/%Y-%m-%d-%H_%M_%S.mp3",
reopen_when={0m0s},radio)


/home/radio/liquidsoap/archive/ - путь к архиву
radio заменить на Ваш source
Создается папка на каждый день, по файлу в час.
Как по мне - проще некуда!

Отредактировано gyurgin_1 - 27.01.2014
8
matrun @matrun
Сделал конфиг

#!/usr/local/bin/liquidsoap

set("log.file.path","/home/radio/logs/radio.log");
set("tag.encodings",["UTF-8"]);

radio = out(input.http("http://kashernoradio.ru/radio.mp3"));

output.file(%mp3(bitrate=64),
"/home/radio/archive/%Y-%m-%d/%Y-%m-%d-%H_%M_%S.mp3",
reopen_when={0m0s},radio);


Запускаю liquidsoap. В результате в логах:

2015/08/24 04:32:51 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2015/08/24 04:32:51 [threads:3] Created thread "generic queue #1".
2015/08/24 04:32:51 [threads:3] Created thread "generic queue #2".
2015/08/24 04:32:51 [threads:3] Created thread "non-blocking queue #1".
2015/08/24 04:32:51 [threads:3] Created thread "non-blocking queue #2".
2015/08/24 04:32:51 [threads:3] Created thread "http polling" (1 total).
2015/08/24 04:32:51 [clock.wallclock_OSS:2] Error when starting output oss_out(/dev/dsp): No such file or directory in open(/dev/dsp)!


Как я понимаю это из-за декодирования? Поток прогняется через ALSA'у при декодировании. Или я не прав?

Если так то как через lame тогда пустить декодинг?

Отредактировано matrun - 24.08.2015
382
Grigorij @gyurgin_1
Поток прогняется через ALSA'у при декодировании. Или я не прав?

Ничего не надо прогонять через звуковую карту. Делаете radio = mksafe(input.http("http://kashernoradio.ru/radio.mp3")) и пишете.

8
matrun @matrun
gyurgin_1 пишет:

Поток прогняется через ALSA'у при декодировании. Или я не прав?

Ничего не надо прогонять через звуковую карту. Делаете radio = mksafe(input.http("http://kashernoradio.ru/radio.mp3")) и пишете.


Спасибо. Работает.

382
Grigorij @gyurgin_1
Да не за что, если надо будет писать выборками чаще часа читаем ********** (Time intervals), так же можно инициировать запись по событиям, смена метаданных например или писать когда лайв играет...