A shelter from pigs on the wing
DMZ
дневник заведен 09-08-2004
постоянные читатели [32]
3 CaHuTaPa, 517design, Arde, Art`Is, aviabaza, BlackDrago, CyberJoe, DeadMorozz, Depeche Mode, DMZ, d_r, Ewige, glv12 Marla Zinger, goldenandy, Grimble, Hydralisk, Jude, Katrine Himitsu, Leave-me-alone, MISTIK, My3a, Nash, Nicholas Hawkwood, Pingvin, Riskoff, VorteX DrAgON, Wolfram, Букля_, достало, Муть, Рика, Эль
закладки:
цитатник:
дневник:
местожительство:
Красноярск, Россия, Сибирь
интересы [24]
программирование, C++, Depeche Mode, Star Wars, perl, DVD, JavaScript, FAR, lost, 80е, Half Life 2, долго спать, Miami Vice, веб-роботы, кентаврицы
антиресы [9]
грибы, грейпфрутовый сок, мёртвые люди, табличка обед, долго спать
Четверг, 9 Июля 2009 г.
07:19 Про домашнее видеонаблюдение
Не все голые сервера настраивать. Есть и общественнополезные занятия. Например, поставить видеонаблюдение.
Можно подъезд снимать, любимую машину под окном ночью или саму квартиру изнутри.

Собственно для видеонаблюдения на компе лучше не мучить себя с web-камерами, а взять сразу IP-камеру. Уже в пределах 100-150$ есть неплохие представители.
Основные минусы web-камер — низкое качество изображения и ограничение по длине USB-кабеля. Если камеру надо поставить в пяти метрах от компа и дальше, то надо пользоватся или хабами или активными какелями. IP-камеры уже хороши тем, что они цифрованный поток передают по обычному Ethernet (а особо продвинутые уже и по Wi-Fi). А тут уж длина ничем не ограничена (в пределах квартиры уж точно). Кроме того даже такая недорогая камера как D-Link DCS-920 (107$ в Красноярске) умеет Wi-Fi, умеет подключаться к интернету, определять движение в кадре, сохранять картинки и видео и пересылать все это по HTTP, FTP, SMTP (почта) и вещать в сеть (правда только в формате MJPEG).
Собственно подключил её к сети, настроил через web-интерфейс, указал куда складывать картинки и все. Дальше она сама всем займется.

Но если есть web-камера и покупать ip-камеру не охота, то и тут можно найти решение. Сперва, конечно надо разобраться с проводами, а потом уже мутить и софт.

Как оказывается, под Linux уже есть сервер, который умеет общаться с устройствами видео, определять движение в кадре и сохранять картинки и видео. Также Linux очень хорошо дружит с web-камерами. На ядре 2.6.26-2 моя Logitech QuickCam обнаружилась сразу же после подключения и заработала без пинков. Теперь ставим софт
sudo aptitude install motion ffmpeg

и настраиваем его по этой инструкции.

Плюс, я еще себе прописал
snapshot_interval 6
, чтобы каждые 6 секунд независимо от движеня сохранялась картинка.

В итоге получаем разные интересные картинки



Теперь также можно заходить браузером (или VLC) на камеру и смотреть видео в прямом эфире. Правда видео в формате MJPEG, и если захочется смотреть его через флеш плеер на сайте, то ничего не выйдет. Правда есть способы это победить, но все таки кодирование видео в реальном времени это ресурсоемкая задача. Двухядерный Intel Atom (2x1.6Ghz) кодирование MJPEG->FLV 320x240 16fps нагружает на 30-60%.

Через ffserver, который идет вместе с ffmpeg можно сделать такое правило преобразования (в /etc/ffserver.conf):
Port 8090
BindAddress 10.5.11.1
MaxClients 10
MaxBandwidth 50000
CustomLog -

#Feed — это вход для потока. Сюда будем потом слать данные
<Feed webcam.ffm>
  File /tmp/webcam.ffm
  FileMaxSize 5M
</Feed>

#Stream — это выход для потока. Он потом будет доступен по 
#адресу http://10.5.11.1:8090/webcam.flv
<Stream webcam.flv>
  #Кушаем фид
  Feed webcam.ffm
  #И кодируем его во флэш
  Format flv
  VideoBitRate 400
  VideoBufferSize 40
  VideoFrameRate 12
  VideoSize 320x240
  NoAudio
  VideoQMin 4
  VideoQMax 7
  Preroll 0
</Stream>


Для запуска и остановки ffserver-а можно применить найденный на просторах интернета скрипт читать подробнее
Кладем его в /etc/init.d/ffserver и обновляем
sudo update-rc.d ffserver defaults


Ну и теперь остается только перенаправить поток с камеры на сервер:
ffmpeg -s 4cif -y -an -r 4 -f mjpeg -i \ 
http://127.0.0.1:8081/stream.mjpg http://10.5.11.1:8090/webcam.ffm


Теперь берем любимый флеш-плеер, создаем HTML страничку и пишем код типа такого (на примере JW FLV Media Player):
	var s1 = new SWFObject("flvplayer.swf",'ply',"400","321","9");
	s1.addParam("allowfullscreen","false");
	s1.addParam('allowscriptaccess','always');
	s1.addParam("wmode", "transparent");
	s1.addVariable('file', 'http://10.5.11.1:8090/webcam.flv');
	s1.write("playeriu");
Закрыть