28.12.11

Webkamery opat o malicky kusok dalej 2

Tak som sa este trochu pohral s tymi webkami a vymenil som na vsetkych zariadeniach gstreamer za mjpg_streamer a je to parada - prehrava to v pohode video s 5 snimkami za sekundu na lubovolny pocet miest v sieti a este k tomu je vytazenie procesora (500MHz AMD Geode) pod 10%, na tom routeri dokonca este menej.
Skvele.

A upravil som aj tu cast, ktora uklada video na serveri, takze je to parada.
A nasiel som aj aplikaciu na android (mLiveCams), ktora prehra vsetky kamery naraz ;)

No a dnes som si spravil radost a kupil som si Microsoft Lifecam HD-3000 a zistil som, ze pri 1280x720 (HDready) ma router vyuzitie CPU na urovni 4-6%. Co k tomu dodat...

A aby to bolo uplne dokonale, nastavil som ten router do modu WDS, takze este mi aj zosilnuje wifinu na hornom poschodi :)

Tak a dnes (30.12.2011) mi napadla este jedna drobnost po precitani manualu k mjpg_streamer-u. Namiesto zlozitej konstrukcie na ukradnutie obrazku

gst-launch-0.10 souphttpsrc location=http://<IP_adresa>:<port>/\?action=stream \
! multipartdemux ! jpegdec ! ffmpegcolorspace ! pngenc\
! filesink location=<cesta, kam ma ist obrazok png> >/dev/null 2>/dev/null

staci spravit daleko jednoduchsie (a systemovo daleko menej narocne)

wget -q -O <cesta kam ma ist jpg obrazok> "http://<IP_adresa>:<port>/?action=snapshot"

Pricom takyto screenshot cez wget dokaze spravit aj samotny router, akurat ulozit ho nema kam - ale dokaze ho cez scp skopirovat trebarz niekam na server...

Webkamery o kusok dalej

Tak som mierne posunul moje pokusy s webkamerou.
Najskor ta zlozitejsia instalacia - pouziva Alix dosku (draha, cez 100EUR), USB HUB (~5EUR), 2 webkamery Microsoft webcam VX-700 (~8EUR/kus).
Nainstalovany je tam voyage linux a bezi tam gstreamer, ktory posiela video cez tcp port, konkretny prikaz je asi takyto:

gst-launch-0.10 v4l2src device=/dev/video0 ! videorate ! image/jpeg,width=640,height=480,framerate=1/1 ! multipartmux ! tcpserversink port=5000

Vyzera to zlozito, ale ide len o to, ze hovorim gstreameru, aby zobral video z prvej webkamery, neondal sa s poctom snimkov, ktore generuje kamera, ale vzal to, co chcem ja, nastavil rozlisenie a pocet snimkov, spravil z toho MJPEG stream a poslal ho cez TCP na port 5000 pre kohokolvek, komu sa chce prave pocuvat.
Tento prikaz je, samozrejme, pusteny pre 2 kamery (port 5000 a 5001).

Funguje to bez problemu.
Pozeranie je jednoduche.
Na linuxe
gst-launch-0.10 tcpclientsrc host=IP_ADRESA port=5000 ! multipartdemux ! jpegdec ! autovideosink

Na takmer comkolvek inom sa da pouzit napriklad VLC pomocou

vlc tcp://IP_ADRESA:5000

Funguje to skvele.

Dnes som ale objavil lacnejsiu moznost.
Router TP-LINK tl-mk3220 (pripadne 3420). Bezi na nom OpenWRT, staci nainstalovat spravne moduly a do USB pichnut kameru.
Nasledne nainstalovat mjpeg_streamer a v /etc/config/mjpeg_streamer zmenit udaje v polozke port (ja som dal 5002), fps (mne staci 1).
Pre uplnost dodam, ze openWRT potrebuje doinstalovat balicky kmod-video-uvc a samozrejme aj mjpg-streamer.
Po reboote ale obraz nenabehol - USB moduly sa nacitavaju neskor, ako samotny mjpeg streamer, takze som este v konfiguracnom subore /etc/init.d/mjpg-streamer zmenil v tretom riadku hodnotu START na 99, takze riadok teraz je
START=99
Tym padom sa nacitava vsetko v spravnom poradi, kamerka nabehne a je to.

Aby som mal vacsiu srandu, na domacom serveri som spravil script, ktory kazdu minutu spravi screenshot zo vsetkych kamier, napise nan z ktorej kamery to je screenshot a aky bol datum/cas, ulozi ho na disk do strukturovaneho adresara.
No a potom kazdych 30 minut bezi dalsi script, ktory zoberie cely adresar a spravi z neho .flv video, ktore sa da prehrat vo flashi (pripadne mplayeri).
Ak zisti, ze uz je koniec toho dna, tak po vyrobe videa zmaze obrazky z daneho dna, aby som to nemal duplicitne.
Potom som este spravil ceresnicky na torte - ak je na obrazku moc ciernej (tma, pripadne len jedna lampa na ulici), jednoducho taky obrazok neulozim a nezabera tym padom miesto na disku.

Sranda s tym routerom a webkamerou je, ze to mozem umiestnit doslova kamkolvek, kde mi dociahne wifi-signal (a ten dociahne vlastne vsade v dome aj mimo), ak tam je 230V zasuvka. Cize uz viem, ako sa budem pozerat k brane a pred vchod ;)