main

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-бакенд более "всеяден". Однакож, в итоге отказался и от него, т.к. видео смотреть невозможно - кубиками и плывёт. ИМХО, это в значительной степени обусловлено кривоватой реализацией кодера со стороны камер, но легче от этого не становится.