Не все голые сервера настраивать. Есть и общественнополезные занятия. Например, поставить видеонаблюдение.
Можно подъезд снимать, любимую машину под окном ночью или саму квартиру изнутри.
Собственно для видеонаблюдения на компе лучше не мучить себя с 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-а можно применить найденный на просторах интернета скрипт
#!/bin/sh
#
# Initscript for ffserver
#
DAEMON="/usr/bin/ffserver"
DESC="Streaming server"
PIDFILE="/var/run/ffserver.pid"
start () {
if start-stop-daemon --stop --quiet --pidfile $PIDFILE --signal 0
then
echo "already running."
exit
fi
start-stop-daemon --start --quiet --exec $DAEMON > /dev/null 2>&1
ps -ef | grep $DAEMON | grep -v grep | awk '{print $2}' > $PIDFILE
}
stop () {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON > /dev/null 2>&1
if test -f $PIDFILE ; then
rm -f $PIDFILE
fi
}
case "$1" in
start)
echo "Starting $DESC "
start
;;
stop)
echo "Stopping $DESC "
stop
;;
restart)
echo "Stopping $DESC "
stop
sleep 2
echo "Starting $DESC "
start
echo "Done"
;;
*)
echo "Usage: /etc/init.d/ffserver {start|stop|restart}"
exit 1
esac
exit 0
Кладем его в /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");