Для Linux существует множество решений для видеонаблюдения, тот же Zoneminder, однако, большая их часть непригодня для использования среднестатистическим параноиком ввиду чрезмерной навороченности.
Совсем простое наблюдение можно организовать связкой
fswebcam+cron+
dropbox - это вполне очевидно и доступно каждому. Поэтому я решил сделать это при помощи связки
motion+
lighttpd±
vloopback.
В чем, собственно, плюсы:
- Возможность состряпать любой удобный веб-интерфейс
- Можно смотреть mjpeg поток прямо в браузере
- motion самостоятельно умеет делать скриншоты и/или видео при обнаружении движения
В качестве аппаратной части была взята веб-камера от A4Tech и допилена до инфракрасной в надежде, что потом будет сделана светодиодная ИК-подсветка.
Теперь о конфигах.
В конфиге Motion были изменены следующие опции:
#запуск motion демоном
daemon on
#мне не нужны автоматические снимки при обнаружении движения
output_normal off
#видеоролики тоже не нужны
ffmpeg_cap_new off
#время и дата перенесены в левую часть картинки
text_right
text_left %Y-%m-%d/n%T
#так текст лучше видно на маленьком экране мобильного телефона
text_double on
Конфиг Lighttpd совсем немного отличается от минимального:
#подключено несколько необходимых модулей
server.modules = ( "mod_auth", "mod_cgi", "mod_expire" )
#определены cgi которые нам нужны
cgi.assign = ( "nph-mjgrab" => "", "nph-mjprox" => "" )
#определено время устаревания для файлов
expire.url = ("index.htm" => "access plus 60 seconds", "index.2.htm" => "access plus 60 seconds" )
#настройки аутентификации
auth.debug = 0
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.lighttpd-passwd"
auth.require = ( "/" => ( "method"=>"digest", "realm"=>"auth req", "require"=>"valid-user" ) )
Для генерации файла htdigest используется одноименная утилита из пакета apache-tools
# /usr/sbin/htdigest -c /etc/lighttpd/.lighttpd-passwd "auth req" username
Упомянутые выше cgi нужно скомпилять из пакета
MjpegProxyGrab. При этом нужно руками поправить путь к директории cgi-bin в Makefile
bindir = /srv/http/www/cgi-bin
По необходимости поправить #define'ы в исходниках - указать адрес, порт и лимит камер.
Еще можно поменять размер буфера, особенно если используется картинка больше чем 320х240 - в файле nph-proxygrab.c найти
char chbuffer[40000] = "";
и заменить 40000 на, например, 100000.
make && make install
Осталось только сделать пригодный вывод этого счастья.
Я сделал две html'ки в одной из них есть строка:
<img src="/cgi-bin/nph-mjgrab?1" width=320 height=240>
с помощью которой отображается один текущий кадр с камеры;
В другом
<img src="/cgi-bin/nph-mjprox?1" width=320 height=240>
для вывода mjpeg потока, который можно смотреть в любом нормальном браузере, вроде Firefox'а.
Авторефреш по вкусу.