Имеется много разных регистраторов и IP-камер.
Есть необходимость записывать с них видео на компьютер и транслировать картинку на веб-странице. Помимо удобства и наглядности решается проблема безопасности - при поломке/уничтожении камер или регистратора, все видео до последнего момента должны сохраниться.
Регистраторы и камеры разных возрастов и моделей, часть подключена по локальной сети, часть - по интернету, в том числе по 3G/4G.
Не имея опыта в этом, решил подключить всех в одну сеть (посредством VPN), затем собирать rtsp-потоки и писать их в файлы mp4 небольшой длительности.
Задачу с картинкой на веб-странице решил путём сохранения jpg раз в секунду с каждой камеры в определённую папку и добавления js-кода автообновления картинки.
Вот пример команды:
Код: Выделить всё
ffmpeg
-rtsp_transport tcp
-probesize 150KB
-i "rtsp://192.168.0.35:554/user=admin&password=&channel=3&stream=1.sdp"
-an
-map 0
-f segment
-segment_time 60
-strftime 1
-segment_format mp4
v:\o3\%Y-%m-%d\o3.%Y-%m-%d_%H-%M-%S.mp4
-f image2
-vf fps=1
-updatefirst 1
-y
c:\apache24\htdocs\o3.jpg
-f image2
-vf fps=1
-updatefirst 1
-y
c:\apache24\htdocs\.o3.jpg
Вся эта бадяга в принципе работает, но есть проблемы:
- ffmpeg по неизвестной причине отваливается (перестаёт писать), при этом процесс висит
- высокая нагрузка на ЦП (при том что перекодирование не происходит)
- ffmpeg очень плохо реагирует на потери пакетов (видимо), видео с 3G/4G камер очень косячное, обрезано кусками, не все файлы открываются и т.д.; при этом с этой же камеры картинка в браузере выглядит прекрасно, никаких задержек или проблем нету.
Проблему с внезапным отваливанием записи решил сохранением второй картинки (в команде - .o3.jpg) и внешнего скрипта, удаляющего этот файл. Если файл удалён и не появляется - значит, ffmpeg завис, он убивается и стартует снова. При этом на веб-странице сохраняется последний имеющийся кадр (o3.jpg), он удалён не будет. Другой вариант - сохранять логи в файл и парсить его (это было бы удобнее в линуксе), но там тоже свои заморочки были.
Однако, отваливается он чересчур много, каждый запуск занимает по полминуты и очень много "кушает" ресурсов сервера. Камер, повторюсь, много.
А теперь, собственно, вопрос: как нормальные люди решат эту задачу? Какие есть альтернативы ffmpeg/avconv? Vlc не умеет делить видео на сегменты, чем сразу же не подошёл, однако (по крайней мере, в плеере) стабильность потока видео была выше, чем у ffmpeg. Может, есть какие-то наработки по этой теме, или вообще другой подход?
Если не туда написал - просьба модераторам сразу не удалять. Спасибо.