Camera web fara camera web
Camera web sau placa TV
Numai o parte dintre camerele web sunt suportate de Linux deci ar
trebui sa va informati mai intai daca o camera functioneaza sub Linux
sau nu.
Proprietarul unei placi TV si a unei camere video nu au atat de ce
sa se teama.
Dar chiar si fara o camera multe lucruri frumoase pot fi facute, cum
ar fi transmiterea filmelor in retzea sau doar programul tv.
Nu ar fi frumos daca i-ati arata ultimul film din vacanta oricarei
rude din srainatate cu ajutorul internetului (destula latime de banda
recomandata).
Cel putin in reteaua locala puteti privi la TV prin browser printr-un
PC fara placa TV.
Software-ul
Software-ul folosit este programul bttvgrab, versiunea 0.15.5
(il puteti lua de la
http://moes.pmnet.uni-oldenburg.de/bttvgrab/)
Acest program se poate folosi foarte usor si proprietatea ca poate
fi pornit din consola. Se poate folosi fara scripturi sau alte programe.
Dupa ce ati desfacut progrmul in directorul /tmp
>> tar zxvf bttvgrab-0.15.5.tar.gz -C /tmp/trei comenzi sunt de ajuns
>> cd /tmp/bttvgrab-0.15.5/ >> ./configure >> makepentru a compila programul. Apoi copiati tot directorul in /usr/local
>> cp /tmp/bttvgrab-0.15.5/ /usr/local/(Comanda make install nu este recomandata pentru ca va folosi bttvgrab intr-un script si nu vrem sa imprastiem fisierele prin tot sistemul.)
Daca vreti sa incepeti sa prindeti acualul program TV, aveti nevoie de o comanda in urmatorul format (executata in directorul/usr/local/bttvgrab-0.15.10/)
>> bttvgrab -f webcam:/tmp/bttvgrab.jpg -s <sleeptime> -w <width> -o jpg -QSLEEPTIME realizeaza intervalul de timp pentru care trebuie asteptat pana cand urmatoarea secventa TV este inregistrata. Aceasta depinde de "obiectul" pe care vreti sa il inregistrati. Pentru dumneavoastra, o valoare intre 5 si 10 secunde ar trebui sa fie destul.
WIDTH realizeaza dimensiunea ecranului si ar trebui sa fie intre 32 si 768.
Optiunile ramase sunt pentru:
-f webcam:/tmp/bttvgrab saves the recorded picture with this file name. -o jpg creaza imagini in format JPEG iar -q anuleaza orice inregistrare a sunetului TV.
O comanda ar trebui sa arate cam asa:
>> bttvgrab -f webcam:/tmp/bttvgrab.jpg -s 5 -w 640 -o jpg -QProgramul raspunde cu urmatorul text:
| Output: bttvgrab |
+-< bttvgrab 0.15.10 [2000-03-21] (v4l) by J. Walter/A. Kopacz >---------------+ | | | | |------------------------------------------------------------------------------| | | | Image Nr.: 8 Time: 0:0.43 | | FPS: 0.2 (0.2) Frames lost: 11 | | Image size: 640x480 | | | | Status: Working... | | | |------------------------------------------------------------------------------| | | | | | Keys: Q - Quit | | P - Pause | | S - Sync HDDs | | Grabbing into: /tmp/image-new [19] | | | | | | | | | | | +-----------------------------< http://moes.pmnet.uni-oldenburg.de/bttvgrab/ >-+ |
O crestere a Image Nr. va arata ca totul merge bine. Aditional veti vedea ca programul creaza fisierul /tmp/image-new in timp ce bttvgrab.jpg este linkul catre acest fiseri.
Pentru Web...
Pana acum am setat o inresgistrare normala a actualei imagini. In urmatorul pas trebuie sa dam acces userilor web pentru aceasta imagine..
Asadar vom crea un nou director pe serverul web (presupunem ca principalul director pentru serverul web este in /usr/local/httpd - aici este in distributia SuSE).
Prima data creem directorulwebcam unde vor fi stocate toate fisierele.
>> mkdir /usr/local/httpd/htdocs/webcam
Cea mai usoare cale de a pune actuala imagine abttvgrab pe pagina web este un meta tag.
<meta http-equiv="refresh" content="5">Acesta reincarca pagina la fiecare 5 secunde. Fiecare reincarcare a paginii reincarca automat imaginea.
| webcam.html |
<HTML><HEAD><TITLE>bttvgrab WebCam</TITLE></HEAD> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="refresh" content="5"> <!-- Here you have to set the time interval --> </HEAD> <BODY BGCOLOR="black" TEXT="black" LINK="blue" VLINK="blue" ALINK="red"> <CENTER> <P><IMG SRC="./webgrab.jpg" ALT="-bttvgrab WebCam Picture-"> <P> </BODY></HTML> |
Acest script arata fisierul/usr/local/httpd/htdocs/webcam/webgrab.jpg
dupa fiecare refresh.
Bineinteles ca trebuie sa executati comandabttvgrab cu o
optiune usor diferita. In particular este important ca rata de refresh
a paginii web si a bttvgrab sa fie identice. Altfel, serverul va fi
incarcat prea mult.
>> bttvgrab -f webcam:/usr/local/httpd/htdocs/webcam/webgrab.jpg -s 1 -w 640 -o jpg -QLa adresa http://localhost/webcam/webcam.html puteti vedea aceasta pagina.
Asa cum puteti observa, aceasta metoda de refresh a imaginii nu este
prea placuta. Pentru fiecare refresh imaginea trebuie reconstruita
iar acest lucru este enervant.
Mult mai bine ar fi daca pagina ramane neschimbata si doar imaginea
ar fi reimprospatata cu regularitate.
Server-Push
De asemenea, aceasta optiune este suportata de browserele moderne
si se numeste server push.
Pentru aceasta trebuie muncit un pic mai mult dar nu este cine stie
ce.
Pagina HTML de care este nevoie ar trebui sa arate in felul urmator:
| server-push.html |
<pre> <HTML><HEAD><TITLE>bttvgrab WebCam</TITLE></HEAD> </HEAD> <BODY BGCOLOR="black" TEXT="white" LINK="blue" VLINK="blue" ALINK="red"> <CENTER> Text <hr> <P><IMG SRC="./cgi-bin/nph-webgrab.cgi/0.gif" ALT="-bttvgrab WebCam Picture-"> <P> </BODY></HTML> </pre> |
si are o singura folosinta: sa arate imaginea. Tagul imaginii <IMG
SRC="..."> nu indica spre o imagine ci sspre un script CGI care
este responsabil pentru vizionarea imaginii.
Scriptul ar trebui sa arate ca in exemplul urmator si trebuie plasat
in directorul cgi-bin inauntrul directorului webcam.
| cgi-bin/nph-webgrab.cgi |
#!/usr/bin/perl
print "HTTP/1.0 200 Document follows\n";
print "Content-type: multipart/x-mixed-replace;boundary=goober\n\n";
while(true){
print "\n--goober\n";
print "Content-type: image/gif\n\n";
open(IN, "../webgrab.jpg");
while (read(IN, $buffer, 4096)){
print $buffer;
}
close("../webgrab.jpg");
#sleep(1);
}
print "\n--goober--\n";
exit 0;
|
Este important ca numele scriptului sa inceapa cu literele nph.
Acest lucru comunica browserului ca nu trebuie sa aiba cache.
Daca in cache-ul browserului a ramas un flux de date, se poate intampla
ca sa apara scurte intreruperi ale prezentarii imaginii si mai multe
imagini sunt aratate in acelasi timp.
Intreruperea cache-ului browserului ne forteaza sa ne ocupam de alte
parti ale protocolului HTTP de care de obicei nu avem nevoie.
De aceea avem nevoie de
print "HTTP/1.0 200 Document follows\n";
print "Content-type: multipart/x-mixed-replace;boundary=goober\n\n";
Linia
#sleep(1);realizeaza intervalul de timp in secunde dupa care imaginea este reimprospatata. In setarile curente aceasta linie este inchisa si permite o succesiune de imagini pe atat de rapida pe cat suporta reteaua.
Dar acest lucru este recomandat in reteaua locala. Daca vreti sa puneti imaginea pe internet trebuie sa activati linia si sa puneti un numar similar cu acela pe care il folositi in pentru bttvgrab.
in continuare trebuie sa comunicati serverului Apache ca exista un
script CGI in webcam/cgi-bin.
Trebuie sa adaugati urmatoarele randuri in fisierul/etc/httpd/srm.conf:
| File /etc/httpd/srm.conf |
# ScriptAlias: This controls which directories contain server scripts. # Format: ScriptAlias fakename realname ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/" #The next line has to be added! ScriptAlias /webcam/cgi-bin/ "/usr/local/httpd/htdocs/webcam/cgi-bin/" |
Apoi restartati serverul web (cu SuSE)
>> /sbin/init.d/apache restartIn acest moment totul ar trebui sa fie gata si puteti incerca site-ul web cu tehnologia server push.
Asadar porniti bttvgrab (pentru a demonstra ca abilitatea sleep-time este inchisa)
>> bttvgrab -f webcam:/usr/local/httpd/htdocs/webcam/webgrab.jpg -w 200 -o jpg -Qiar dupa aceea duceti-va la http://localhost/webcam/server-push.html.
Am ramas surprins decat de bine merge in browser. Pe de alta parte
veti avea procesorul foarte incarcat.
Pentru a fi suportata came dumneavoastra web trebuie sa puneti un
sleeping-time in bttvgrab si nph-webgrab.cgi
care are sens.
Outlook
Cum sa folositi aceasta tehnologie ca o camera web?
Foarte simplu. Conectati camera video la placa TV sau la un video
recorder si pe acesta la placa TV.
Aceasta inlocuire a camerei web are sens numai daca deja aveti o
camera video si un video. Daca nu, ar fi prea sump pentru a cumpara
aceasta aparatura ca o alternativa la camera web.
Dar este o cale interesanta si ieftina daca nu investiti nici un ban.
O alta problema ar fi ca nu aveti nici un program care sa seteze
tunerul pe placa TV si nu este nici o posibilitate pentru a schimba
canalul.
O setare a cananlului ar putea functiona cu ajutorul set-tv
din pachetul XawTV realizat deGerd Knorr.
Un mic efort de programare poate face posibila schimbarea canalelor
cu ajutorul site-ului dumneavoastra web.
Pentru userii experimentati sugeram sa porneasca automat camera web
dupa ce se logheaza la provider cu ajutorul unei comenzi in /etc/ppp/ip-up.
Daca aveti o conexiune permanenta la internet are sens sa porniti
automat camera web dupa restartare. Asadar puteti crea un script init.
O alta cale de a pune imaginile luate de camera pe un site web ar fi un applet Java. Folosind aceasta optiune este posibil sa opriti incarcarea continua a imaginii si sa o arate dupa ce s-a incarcat in totalitate. Daca sunteti interesat de aceasta solutie ar trebui sa cautati in documentatia Java: cuvant cheie ImageObserver.
Links:
| http://moes.pmnet.uni-oldenburg.de/bttvgrab/ | Homepage of the bttvgrab program |
translated into romanian by : Dan Stanculescu