LINUX.ORG.RU

Gstreamer? Напиши на пистоне скрипт с графом gstreamer, который бы каждые n часов менял путь в filesrc.

Freyr69 ★★★
()
Ответ на: комментарий от werwolf2517

Почему ты не хочешь взять ffmpeg?

Смотри, вот эта команда:

ffmpeg -i 'http://example.com/stream' -c copy -f segment -segment_list out.csv -segment_time 02:00:00 output-%03d.mp4

будет тебе записывать твой mp4 поток в файлы продолжительностью по два часа. Именоваться файлы будут так: output-001.mp4, output-002.mp4, output-003.mp4 и т.д. Параллельно будет записываться текстовый файл out.csv с информацией о каждом mp4 файле: имя файла, время начала его записи (начиная с 0), время окончания его записи.

Запись в файл .csv идёт в реальном времени (каждая новая строка появляется после окончания записи соответствующего файла), так что, если тебе надо давать файлам имена, содержащие текущее время, то можешь воспользоваться вот такой последовательностью команд:

list=out.csv

rm $list      # удаляем старый, если есть
touch $list && tail -f $list | awk -F ',' '{system("mv "$1" $(date +record-%Y%m%d-%H%M%S).mp4")}' &

ffmpeg -i 'http://example.com/stream' -c copy -f segment -segment_list $list -segment_time 02:00:00 output-%03d.mp4

где record-%Y%m%d-%H%M%S — формат нового имени файла, содержащий текущее время (момент окончания записи файла). С таким форматом получаются файлы типа: record-20160428-174629.mp4.

Для выхода из режима записи можно нажать q или Ctrl+C. Чтобы убить переименовывающий процесс выполни команду kill %1. Смотри команду jobs.

Если ты хочешь «демонизировать» эти процессы, то можно сделать так:

list=out.csv

rm $list
touch $list && tail -f $list | awk -F ',' '{system("mv "$1" $(date +record-%Y%m%d-%H%M%S).mp4")}' &

ffmpeg -d -i 'http://example.com/stream' -c copy -f segment -segment_list $list -segment_time 02:00:00 output-%03d.mp4 &

disown %1 %2

Обрати внимание на аргумент -d у ffmpeg и на & в конце его строки.

С убиванием демонов ты должен будешь справиться сам :)

anonymous
()
Ответ на: комментарий от anonymous

огромное спасибо, буду пробовать а пока такой вопрос: мультикаст поток у нас udp://@240.x.x.x:xxxx и вещает в формате mpeg2 это имеет значение?

werwolf2517
() автор топика
Ответ на: комментарий от werwolf2517

По параметрам UDP можно тут посмотреть. Но всё должно и так нормально работать.

Если не нравится контейнер MP4, то можешь использовать MKV, просто поменяв все расширения в командах с .mp4 на .mkv.

anonymous
()
Ответ на: комментарий от anonymous

жаль только что толку не добавилось, он отписывает 2-3 дня и виснет, начинает всё писать в один огромный файл((((

werwolf2517
() автор топика
Ответ на: комментарий от werwolf2517

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

А что значит «виснет»? Не начинает новый сегмент или не завершается по q, Ctrl+C, SIGINT/SIGTERM?

Попробуй лог сообщений вести. Потом можно будет разрабам предъявить :)

Покопаю исходники на досуге, может чего найду.

anonymous
()
Ответ на: комментарий от werwolf2517

Смотри, оказывается можно без велосипедов генерировать время в названиях файлов:

ffmpeg -i 'http://example.com/stream' -c copy -f segment \
  -segment_list segments.csv \
  -segment_time 02:00:00 \
  -strftime 1 'record-%Y%m%d-%H%M%S.mp4' # \
  # -loglevel debug 2>&1 | split -l 100000 --filter 'gzip > report$FILE.log.gz' - _
Чтобы сгенерировать подробный отчёт, раскомментируй последнюю строку и последний символ в предпоследней строке — будет записываться лог всех сообщений, разбитый по 10К строк на один архив. В несжатом виде лог получится не маленький. Мегабайта три за 10 минут записывает. За трое суток вполне может вытянуть на 1.5 гига. В сжатом, мегов 100 всего выйдет.

Чтобы сгенерировать не очень подробный отчёт, можно заменить последнюю строку на 2> report.log.

Если охота поэкспериментировать, то можешь попробовать ограничивать сегменты не по продолжительности, а по количеству кадров, либо по часам.

Ещё VLC умеет потоки грабить и, возможно, gstreamer, но я с ними не связывался. В теории, можно свою тулзу на том же питоне накатать, а можно и ещё у кого поспрашивать. i-rinat много знает.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.