Webkamerový server v linuxe

V článku sa dozviete ako si vytvoriť, nakonfigurovať a spojazdniť webkamerový server na báze linuxovej minidistribúcii iomojo camera server. Dozviete sa čo væetko budete potrebovať a ako postupovať. Iomojo camera server obsahuje: camera server, video chat, picture sharing, photo album.

Co bylo na začátku

Kamarád si nainstaloval kameru a stavžl server podle www.iomojo.com. Toto Weæení
má nevýhody,
protože je distribuce jednoúčelová a na dost staram základž. A taka je na
zbytečnž velkam disku. Server se mi velice líbil, ale díky oWezana
distribuci se nedá použít na nic jinaho. A kromž toho Iomojo poskytuje
služby, ktera mi pWijdou zbytečna (tWeba funkce fotoalba, chatu nebo hýbání
s kamerou). A tak jsem se inspiroval a postavil si takový server na plna
distribuci na mam oblíbenam Slackwaru. Pokud byste ale chtžli opravdu jen
webkameru a distribuci jeætž více oWezat, tak to taka není problam, ukáži
zhruba jak na to. I když je tedy otázka, zda by se nevyplatilo koupit
rovnou kameru s ethernetovým rozhraním a integrovaným webserverem.

Co budeme potWebovat a jak to funguje

Vezmeme tedy standardní distribuci Linuxu; Slackware jsem zvolil jako
svou distribuci taka kvůli tomu, že po nainstalování zabírá nejmanž místa
(po naistalování serveru tWeba jen 150 MB). Pro začátečníky pWipojím
seznam nutných
balíčků
, protože jedním z velmi častých dotazů na mž je, co væechno
vlastnž potWebuji za balíčky, aby to chodilo, a kde vezmu ty, ktera
nejsou součástí distribuce.

Væimnžte si, že zde mám napWíklad uveden jak server Boa, který ovæem
není součástí distribuce, tak i Apache, který součástí distribucí bývá. Je
jasna, že na konec použijete jen jeden a je jen na vás, pro který se
rozhodnete.

Boa web server jsem získal na stránkách www.linuxpackages.net, kde je
sluæný archiv různých programů ve formž balíčků pro Slackware. Program
bttvgrab, který nám získává obrázky z kamery, je zase z rpmfind.net, kde byl jako rpm
pro Mandrake.
Ovæem lze ho pWevast pomocí konvertoru rpm2tgz a normálnž nainstalovat. Jak
vidíte, snažil jsem se vyhnout nutnosti vlastní kompilace a zdaWilo se.

Pozastavím se u volby web serveru. Boa server je jednoduchý a hlavnž
malý webový server na zobrazování statických stránek, ale umí i CGI.
Rozhodl jsem se ho použít právž z tžchto důvodů. Jedina, co ale nemá, je
autorizace jako Apache. PHP a dalæí vžci zde nejsou potWeba, ale je jen na
vás, který ze serverů vám vyhovuje více. Nicmanž já se v článku zmíním o
obou. Pokud by nžkdo toužil po ukládání obrázků, ktera se právž snímají,
taka není problam, já to ukáži na Boa serveru pomocí CGI skriptu. Ale do
detailů možností už opravdu zabíhat nebudu, protože pomocí CGI nebo PHP a
dalæích skriptovacích jazyků není problam obrázky posílat poætou a podobnž.
Fantazii se meze nekladou.

Jestli nžkdo použije jinou distribuci, tWeba Fedoru či Mandrake, názvy
balíčků budou podobna a závislosti za vás vyWeæí zbytek problamů. Ovæem
určitž se nedostanete na mnou avizovaných 150 MB. V pWípadž instalace
na flash budete balíčky ze seznamu potWebovat taka, ale ne cela. TWeba z
libungif potWebujete jen jednu knihovnu, tak proč instalovat celý
balíček.

Jak to funguje

Jak ten server vlastnž pracuje? Bttvgrab sype obrázky z kamery do jpg
souboru, který se stále pWepisuje. SamozWejmž není problam použít místo
bttvgrabu xawtv či jiný program. Web server se na obrázek odkazuje a pomocí
Javy se vytváWí plynulý obraz. Já si k tomuto serveru pWidal i teplomžr a
teplota se mi taka zobrazuje na stránce.

Jak vidíte, teorie je snadná, a tak můžeme pWistoupit k praxi. Budeme
potWebovat počítač, stačí P120, ale pokud máte nžco rychlejæího, je to
lepæí, protože obraz může mít pak vžtæí rozliæení a bude plynulejæí. RAM
64 MB stačí. Grabovací kartu jsem mžl k dispozici AVER EZ Capture, ale
je v podstatž fuk, co použijete, protože podstatna je, aby to Linux umžl
ovládat a brát z toho obrázky. Co se týče výbžru hardware, odkáži vás na

dokumentační projekt
linuxu
a tam si
najdžte video4linux a hardware, který je podporován pro bttv a pro xawtv.
Disk mám 800 MB, ale ukážeme si i způsob, jak kameru narvat i na
32 MB flash. Pro kartu, jakou jsem použil já, pWipojíte libovolnou
kameru, která má výstup kompozitního videa. Výhoda je, že karta nám pro
kameru poskytuje pWímo i napájení, a tak ho nemusíme tahat externím zdrojem
nebo pWes stabilizátor z PC. Ovæem pozor na velikost napžtí.

Zde se trochu vrátím. Spousta lidí bude asi chtít použít USB kameru. Já
se zde o ní bohužel nezmíním, protože se mi žádnou nepodaWilo rozchodit.
Mžl jsem půjčena asi 4, ale væechny chtžly modul sn9c102. Ten
je ale psán dost divoce a vyžaduje určitá jádra, jinak nechodí. Ovæem v
diskuzích a v popisu hardware na abclinuxu.cz bylo napsáno, že chodí. Proto
taka nemám vyzkouæeno, jestli chodí s bttvgrabem, ale xawtv jde použít
stejnž dobWe a s tím chodí určitž. PWíkaz, který bude grabovat, je pžknž
popsán v dokumentaci. A jakmile získáme obraz do souboru, je
dalæí postup
stejný. USB kamery mají ale taka nevýhodu; nelze jejich signál pWepínat, u
nás se to dá sehnat tWeba na www.papouch.com. U
Papoucha, možná to
džlá u nás i nžkdo jiný, seženete jak ten pWepínač, tak i teplomžr, kteramu
posíláte ASCII znak a on vám v ASCII odpoví. Je ale pro rozhraní RS485 a na
RS232 potWebujete jeætž pWevodník. Kompozitní videosignál lze tahat na
mnohem delæí vzdálenost, máme odzkouæeno asi 30 metrů. A jako zdroj může
sloužit opravdu jakakoliv zaWízení.

Stavba

Væechen ten HW si tedy seæijte do kupy a nainstalujte systam. Pro manž
zkuæenna uživatele vám může být pomocníkem můj staræí článek na rootu Linux
jako internetová gateway
; berte jen začátek, kde je instalace popsána
(vím, že by potWeboval zrevidovat, ale i já se učím 🙂 Na
abclinuxu.cz vyæel seriál Inætalácia Slackware.

Pokud necháte spuætžný na Slackware hotplug, tak se vám karta pWi bootu
najde sama a zavedou se k ní potWebna moduly. Na RedHatu 7, na kteram
je postavena distribuce Iomojo, jsou ovæem potWeba zadat parametry do
/etc/modules.conf, ovæem na Slackwaru se mi osvždčilo, aby si
systam væe naæel sám:

Linux video capture interface: v1.00
i2c-core.o: i2c core module
i2c-algo-bit.o: i2c bit algorithm module
bttv: driver version 0.7.107 loaded
bttv: using 4 buffers with 2080k (8320k total) for capture
bttv: Host bridge is Intel Corp. 430VX - 82437VX TVX [Triton VX]
bttv: Host bridge needs ETBF enabled.
bttv: Bt8xx card found (0).
bttv0: Bt878 (rev 2) at 00:0a.0, irq: 11, latency: 32, mmio: 0xe0000000
bttv0: using: BT878( *** UNKNOWN/GENERIC **) [card=0,autodetected]
bttv0: enabling ETBF (430FX/VP3 compatibilty)
i2c-core.o: adapter bt848 #0 registered as adapter 0.
bttv: readee error
bttv0: using tuner=-1
bttv0: i2c: checking for MSP34xx @ 0x80... not found
bttv0: i2c: checking for TDA9875 @ 0xb0... not found
bttv0: i2c: checking for TDA7432 @ 0x8a... not found
bttv0: registered device video0
bttv0: registered device vbi0

root@thovt:~# lsmod
Module                  Size  Used by    Not tainted
bttv                   94432   1 
i2c-algo-bit            6984   1  [bttv]
i2c-core               12740   0  [bttv i2c-algo-bit]
soundcore               3332   0  [bttv]
videodev                5664   3  [bttv]

Ale nelekejte se detekce trvá opravdu dost dlouho, klidnž i 5 minut, ale
jen pWi zavádžní modulu. To bude ale jen pWi bootu systamu, což asi nebude
tak často. Pro parametry do modules.conf vás odkážu opžt na tldp.org, kde je to
velmi dobWe popsáno. Detekce by pak mžla probžhnout rychleji.

Pokud nám systam kartu vidí, a to ovžWíme tak, že se nám objeví v procu
položka video (/proc/video/...), můžeme zkusit sejmout první
obrázek. Program bttvgrab má spoustu parametrů týkajících se norem, ale mnž
se opžt osvždčila automatika.

bttvgrab -b2 -w320 -W240 -ojpg -S1 -f
webcam:/home/www/ramdisk/webcam.jpg -Q -dq &

Co se parametrů týče, podrobnosti nám poskytne dokumentace či manuálova
stránky. Ale b je buffer, rozmžry obrázku asi poznáte, formát
je taka jasný. S je kanál, Q bez zvuku a nakonec
d. Parametr q vypne zobrazování statistiky
grabování a dalæích údajů. Když pustíte totiž bttvgrab bez parametrů objeví
se vám okno s informacemi o počtu sejmutých snímků, datovam toku a podobnž,
ktera ovæem pWi provozu nebudeme potWebovat.

Zde udžlám odbočku pro začátečníky, kterým se může stát, že jim program
zaWve, že mu chybí knihovna a co teď. Jednoduæe si můžeme zjistit, ktera
dynamicka knihovny program vyžaduje a to takto:

root@thovt:~# ldd `which bttvgrab`
        libm.so.6 => /lib/libm.so.6 (0x40019000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x4003d000)
        libungif.so.4 => /usr/lib/libungif.so.4 (0x4008e000)
        libaa.so.1 => /usr/lib/libaa.so.1 (0x40096000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x400af000)
        libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x400eb000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x40108000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x40117000)
        libc.so.6 => /lib/libc.so.6 (0x401de000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
        libslang.so.1 => /usr/lib/libslang.so.1 (0x40314000)
        libgpm.so.1 => /lib/libgpm.so.1 (0x40386000)
        libdl.so.2 => /lib/libdl.so.2 (0x4038c000)

A pokud programu nžjaká dynamická knihovna chybí, napíæe, že ji nenaæel,
a vy víte, co Weæit. Slackware na
svých stránkách spustil databázi, kde zadáte název souboru. TWeba
libungif.so (nedávejte cela názvy včetnž koncových čísel, ta
se občas liæí, protože jedna knihovna má nžkolik linků) a vypadne vám
balík, kde knihovna je. Než byla taková databáze spuætžna, prohledával jsem
balíčky na CD skriptem, a tak zjiæťoval, kde je knihovna obsažena. Bylo to
dost zdlouhava. Kdyby vám test knihoven proæel, ale program se pWesto
nespustil s odkazem na æpatnou verzi GCC, je to tím, že jste ho brali tWeba
z rpm balíčku jina distribuce a ta je kompilovaná novžjæí verzí GCC. Taka
platí, že balíček ze Slackware 10.1 nechodí na systamu
Slackware 9.1 Použijte tedy staræí verzi balíčku, nebo si budete muset
zkompilovat svou. Nicmanž verze, ktera jsou popsány na začátku v seznamu
balíčků, spolu korektnž chodí.

Pokud nám bttvgrab chodí, objeví se v adresáWi, kam jsme ho nechali
obrázek ukládat, následující soubory:

-rw-r--r--      3 Nov  2 16:48 format
-rw-r--r--   2218 Nov  2 19:28 image
-rw-r--r--      0 Nov  2 19:28 image-new
prw-r--r--      0 Nov  2 19:28 status|
prw-r--r--      0 Nov  2 19:28 status-lock|
lrwxrwxrwx     23 Nov  2 16:48 webcam.jpg -> /home/www/ramdisk/image

Výpis, Wekl bych, nepotWebuje vysvžtlení, ale soubor image
je právž oním neustále se obnovujícím obrázkem z kamery. Jeho
pWekopírováním pod novým jmanem získáme fotku. Po ukončení programu
(sestWelením pWes kill) nám soubory zmizí. Pozor, nžkdy zůstanou a je nutno
je smazat manuálnž, jinak si bttvgrab myslí, že je již spuætžn. Grabování
obrázku tedy spustíme jako proces na pozadí, já ho tWeba mám v
rc.local, aby se mi spustil sám po startu systamu.

Ne náhodou se v pWíkladu můj soubor ukládá do adresáWe
ramdisk. Jde o to, že soubor se neustále pWepisuje a disk
je tedy stále aktivní, zapisuje dokolečka jeden soubor. A pokud budeme
kameru rozcházet z flash, brzo bychom ji oddžlali. Proto jsem vytvoWil
ramdisk, kam obrázek zapisuji. PWi výpadku napájení mi navíc v adresáWi
nemohou zůstat zamykací soubory z výpisu, ramdisk se po výpadku napájení
maže. VytvoWení ramdisku je triviální záležitost, Slackware má jeho podporu
standardnž zakompilovanou v jádWe. A tak stačí zadat

mke2fs /dev/ram0

mount /dev/ram0 /home/www/ramdisk

a je hotovo. SamozWejmž musí adresáW ramdisk už existovat, abychom k
nžmu mohli nový disk pWipojit. Formátování ramdisku se musí pWidat tWeba
do rc.local, aby se pWi startu vytvoWil. A disk je hned
uæetWen neustálaho zápisu. Takovýto ramdisk je nutný pro chod systamu z
flash, kde adresáWe, do kterých se pWi chodu systamu zapisuje (jako
/var a /tmp) nalinkují symbolicka odkazy do
ramdisku.

Webový server Boa

Začnu tím jednoduææím serverem, Boa. Je mnohem snazæí jej rozchodit, ale
jeho možnosti jsou oproti Apachi dost omezena. Není tak výkonný, neumí
autentizaci, omezování pWístupu k adresáWům bere podle práv na filesystamu
a ze skriptů podporuje jen CGI. Otázkou ale je, zda skutečnž potWebujeme
kanón jako je Apache.

Konfigurace je v jednom souboru v /etc/boa/boa.conf a já z
ní vytáhnu pouze pár Wádek.

Port 80 Nastavení portu, na kteram má server naslouchat.
User nobody

Group nobodyUživatel a skupina, pod kterou má server bžžet.#ErrorLog /var/log/boa/error_log
ErrorLog /dev/null
AccessLog /dev/null
Po úspžænam rozchození logování vypínám.ServerName thovt.vetrnik.net DocumentRoot /home/wwwCesta k výchozímu HTML souboru, tj. kde máte vaæe HTML stránky.DirectoryIndex index.htmlJaký soubor z document rootu server poskytne, když nezadáte konkratní
soubor.KeepAliveMax 1000

KeepAliveTimeout 10Server umí HTTP 1.1 takže tento parametr nám Wíká, kolik souborů
na jedno spojení může poskytnout, a timeout je čas, kdy server spojení
ukončí, jestli nemáme žádna dalæí dotazy.MimeTypes /etc/mime.typesCesta k MIME typům souborů; zde pozor, tento soubor není součástí
balíku a musíte použít libovolný jiný, tWeba z Apache.ScriptAlias /cgi-bin/ /home/www/cgi-bin/Alias k cestž k CGI skriptům.

S dalæími parametry nemusíte hýbat, ale server umí i virtuální servery
atd. Pak už stačí do /home/www nahrát pokusný
index.html a server spustit. Na Slackwaru
/etc/rc.boa start. Pozor, startovací skripty Slackwaru s
tímto serverem nepočítají jako tWeba s Apachem, a proto je nutno spouætžní
tWeba do rc.local dopsat manuálnž.

 

Zdroj: www.abclinuxu.cz

Loading Facebook Comments ...