home   articles   forum   masthead  
Published at 14.10.2000
Author: Ronny Ziegler
Translator: Dan Stanculescu
Languages: none
Support Us!
 

Camera web fara camera web

Webcam Camerele Web sunt pe cat de frumoase pe atat de inutile. Aproape toate camerele de ultima generatie folosesc portul USB si un protocol special asa incat lumea Linuxului este inchisa pentru ele. Daca vroiati sa folositi o camera web ar trebui sa incercati cu o placa TV.

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
  >> make
  
pentru 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 -Q
  
SLEEPTIME 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 -Q
  
Programul 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 -Q
  
La 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 restart 
  
In 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 -Q
  
iar 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