Сохранение непрерывного потока RTSP до 5-10-минутных файлов mp4
Как сохранить поток (протокол rtsp, кодек h264) в файле (контейнер mp4)? То есть, при вводе бесконечного потока (с камерой видеонаблюдения) и выходных файлов в формате mp4 размером 5-10 минут времени записи.
ОС: debian, ubuntu
Программное обеспечение: vlc, ffmpeg (avconv)
В настоящее время используется эта схема:
cvlc rtsp://admin:[email protected]:554/ch1-s1 --sout=file/ts:stream.ts
ffmpeg -i stream.ts -vcodec copy -f mp4 stream.mp4
Но он не может записывать видео непрерывно (между перезапусками vlc проигрывает около 10 секунд живого видео).
Ответы
Ответ 1
См. этот вопрос и ответьте на Ошибка сервера. Короче говоря, переключайте инструменты. avconv будет делать то, что вы хотите. (ffmpeg стал avconv.)
Функция, которую вы ищете, называется сегментацией. Ваша командная строка будет выглядеть примерно так:
avconv -i rtsp://10.2.2.19/live/ch01_0 -c copy -map 0 -f segment -segment_time 300 -segment_format mp4 "capture-%03d.mp4"
Ответ 2
Решение Alexander Garden работает на ffmpep
, используя приведенную ниже версию. Замените avconv
на ffmpeg
.
./ffmpeg -i rtsp://10.2.2.19/live/ch01_0 -c copy -map 0 -f segment -segment_time 300 -segment_format mp4 "capture-% 03d.mp4"
Я включаю этот заголовок из-за путаницы FFmpeg над версиями, раскола ubuntu и быстрого развития.
версия ffmpeg N-80023-gd55568d Copyright (c) 2000-2016 разработчики FFmpeg построенный с использованием gcc 4.8 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.1) Конфигурация: --prefix =/home/rhinchley/q10/ffmpeg_build --pkg-config-flags = - static --extra-cflags = -I/home/rhinchley/q10/ffmpeg_build/include --extra-ldflags = - L/home/rhinchley/q10/ffmpeg_build/lib --bindir =/home/rhinchley/q10/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonless libavutil 55. 24.100/55. 24.100 libavcodec 57. 42.100/57. 42.100 libavformat 57. 36.100/57. 36.100 libavdevice 57. 0.101/57. 0.101 libavfilter 6. 45.100/6. 45.100 libswscale 4. 1.100/4. 1.100 libswresample 2. 0.101/2. 0.101 libpostproc 54. 0.100/54. 0.100
Ответ 3
Командная работа: Разделите источник видео и выполните два процесса поочередно, записывая временные рамки. Вы захотите проверить, насколько переменна является временем запуска, и как она переменной. Возможно, вы захотите установить приоритет процессов в реальном времени, чтобы уменьшить дисперсию времени начала. Будет некоторое перекрытие, но похоже, что это может быть хорошо для вашего приложения из того, что я делаю. Пример:
p1: sRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRR...
p2: wwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwww...
time -->
s: startup
R: running
w: wait