zoneminder
Хочу немного рассказать про свой опыт борьбы с zoneminder'ом.
Как мне думается, лучшие времена его давно прошли и держат его из-за полного отсутствия альтернатив.
Почему я так думаю:
- последний релиз был 2 года назад (в принципе не смертельно)
- в проекте накопились мелкие баги, которые не торопятся фиксить.
Например баг в Memory.pm с некорректным определением размера памяти висит с 2009 года. По поводу разделения ffmpeg и libav не было предпринято никаких телодвижений (а это минимум 2 основных бакенда и заимствованный код rtsp). Кроме того, тот же libav сыплет warning'ами на неинициализацию сети при использовании rtsp через ffmpeg-овский бакенд, типа "скоро сломаюсь".
Архитектура представляет собой модульный комбайн. На каждый источник запускается от одной до нескольких спецутилит, в частности захват, анализ и сохранение потоков производится разными процессами. Здраво.
Что не понравилось - так это реализация. mmap на 90 метров - обычное дело. На каждую камеру. Т.о. придется или тщательно подбирать железо, или довольствоваться примерно 10 камерами, больше оно не потянет.
Отладка - достаточно невнятная. Иногда понять, что именно не понравилось тому же zmc - можно только с помощью strace.
Хотя я потом наловчился. zmc -m <N>
из консоли и смотрим выхлоп или код возврата.
Отдельное слово про ffmpeg. Они слишком любят соблюдать стандарты и не предусматривают возможные ошибки. mplayer сожрал всё предложенные rtsp-потоки, vlc - большую часть, а вот ffplay - меньше половины.
Непонятна и ситуация с заимствованным кодом. rtsp они разбирают сами, игнорируя половину параметров, а вот декодируют через ffmpeg. Таким образом, ffmpeg-бакенд более "всеяден". Однакож, в итоге отказался и от него, т.к. видео смотреть невозможно - кубиками и плывёт. ИМХО, это в значительной степени обусловлено кривоватой реализацией кодера со стороны камер, но легче от этого не становится.