Webcam était pas mal, mais gourmant en ressource. J’ai donc testé webcam-server. version 0.50.
1/ Installation :
2/ Placer le paquet dans l’arborescence d’apache :
[quote]$ sudo updatedb
$ locate webcam-server
…
/usr/bin/webcam-server
/usr/share/doc/webcam-server
/usr/share/doc/webcam-server/applet
/usr/share/doc/webcam-server/applet/applet.jar
/usr/share/doc/webcam-server/applet/error.jpg
/usr/share/doc/webcam-server/applet/ImageCanvas.java.gz
/usr/share/doc/webcam-server/applet/ImageDownloader.java.gz
/usr/share/doc/webcam-server/applet/init.jpg
/usr/share/doc/webcam-server/applet/WebCamApplet.java
/usr/share/doc/webcam-server/applet/webcam.html
/usr/share/doc/webcam-server/applet/WebCam.java
/usr/share/doc/webcam-server/changelog.Debian.gz
/usr/share/doc/webcam-server/changelog.gz
/usr/share/doc/webcam-server/copyright
/usr/share/doc/webcam-server/README
/usr/share/doc/webcam-server/README.Debian[/quote]
NB: les chemins si dessous sont donnés à titre d’exemple, à adapter donc.
$ cd /home/DocumentRoot
$ mkdir webcam-server && chgrp www-data webcam-server
$ cd webcam-server && cp -R /usr/share/doc/webcam-server/applet .
3/ Préparatifs :
[code]$ cd applet
$ mv webcam.html webcam.php
## Compilation des classes :
$ gunzip Image*[/code]
NB: il est important que webcam.php ou webcam.html soit dans le répertoire de l’applet (du moins, ça m’a semblé).
les soucis commencent, pas étonnant, quand on lit dans README.Debian que :
[quote]Depending on your Java installation, you might need to provide the classpath to
the standard Java classes. On my system this is
’/usr/lib/jdk1.1/lib/classes.zip’. [/quote]
0.50 est la dernière version (?), le jdk, c’est une autre histoire …
[code]$ javac -Xlint *.java
ImageCanvas.java:292: warning: [deprecation] show() in java.awt.Window has been deprecated
f.show();
^
ImageCanvas.java:312: warning: [deprecation] hide() in java.awt.Window has been deprecated
about.hide();
^
ImageCanvas.java:450: warning: [deprecation] show() in java.awt.Window has been deprecated
about.show();
^
ImageCanvas.java:18: wB/ ça se corse … :arning: [serial] serializable class ImageCanvas has no definition of s erialVersionUID
public class ImageCanvas extends Canvas
^
ImageDownloader.java:40: warning: [unchecked] unchecked call to addElement(E) as a member of the raw type java.util.Vector
chatQueue.addElement(message);
^
WebCamApplet.java:16: warning: [serial] serializable class WebCamApplet has no definition of serialVersionUID
public class WebCamApplet extends Applet {
^
WebCam.java:31: warning: [deprecation] show() in java.awt.Window has been deprecated
f.show ();
^5/ Et iptables ?
WebCam.java:15: warning: [serial] serializable class WebCam has no definition of serialVersi onUID
public class WebCam extends Frame
^
8 warnings
[/code]
4/ Résolution des problèmes :
A/ definition of serialVersionUID : ydisanto.developpez.com/tutoriel … n/partie1/
Ajout de la ligne : static private final long serialVersionUID = 1L;
dans la définition de la classe WebCam.java, ce qui donne :
public class WebCam extends Frame {
static private final long serialVersionUID = 1L;
private Applet applet;
private Frame f;
private ImageCanvas imageCanvas;
private TextField input;
public WebCam (Applet a, String host, int port)
( .......................................................................)
}
Même manipulation pour les classes : ImageCanvas et WebCamApplet.
B/ ça se corse … :
1/ dans la classe WebCam.java remplacer l’appel à show() par setVisible(true) ce qui
donne : f.setVisible(true); (approx. ligne 32).
2/ dans la classe ImageCanvas, de même (2 occurences).
NB: gardez vous de remplacer la méthode show(a, b, c), celle là n’est pas deprecated.
Et puisqu’on y est, on remplace l’appel à hide() pas un setVisible(false).
3/ dans ImageDownloader, remplacer la déclaration du vector chatQueue par :
private Vector chatQueue = new Vector();
ce qui nécessite de supprimer les cast lignes 101 et 102 pour obtenir enfin :
System.out.println(chatQueue.elementAt(0));
printWriter.println(chatQueue.elementAt(0));
Voilà, on peut compiler tranquille maintenant …
NB: ça n’était que des warning, si vous compiler avec un 1.4 voir inférieur, vous en
aurez moins. J’ai fait ces modifs pour compiler avec le 1.6.
On devrait obtenir une chose comme ça :
[code]$ javac -Xlint *.java
$ jar cvf applet.jar *.class *.jpg
adding: META-INF/ (in=0) (out=0) (stored 0%)
adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%)
adding: ImageCanvas$10.class (in=805) (out=513) (deflated 36%)
adding: ImageCanvas$11.class (in=805) (out=514) (deflated 36%)
adding: ImageCanvas$12.class (in=805) (out=513) (deflated 36%)
adding: ImageCanvas$13.class (in=805) (out=510) (deflated 36%)
adding: ImageCanvas$14.class (in=638) (out=423) (deflated 33%)
adding: ImageCanvas$1.class (in=1442) (out=762) (deflated 47%)
adding: ImageCanvas$2.class (in=1414) (out=777) (deflated 45%)
adding: ImageCanvas$3.class (in=1046) (out=513) (deflated 50%)
adding: ImageCanvas$4.class (in=634) (out=414) (deflated 34%)
adding: ImageCanvas$5.class (in=1281) (out=725) (deflated 43%)
adding: ImageCanvas$6.class (in=804) (out=510) (deflated 36%)
adding: ImageCanvas$7.class (in=804) (out=509) (deflated 36%)
adding: ImageCanvas$8.class (in=804) (out=513) (deflated 36%)
adding: ImageCanvas$9.class (in=791) (out=504) (deflated 36%)
adding: ImageCanvas.class (in=9784) (out=4780) (deflated 51%)
adding: ImageDownloader.class (in=4635) (out=2699) (deflated 41%)
adding: WebCam$1.class (in=965) (out=531) (deflated 44%)
adding: WebCam$2.class (in=885) (out=457) (deflated 48%)
adding: WebCamApplet.class (in=1318) (out=804) (deflated 38%)
adding: WebCam.class (in=1620) (out=888) (deflated 45%)
adding: error.jpg (in=3071) (out=2486) (deflated 19%)
adding: init.jpg (in=3169) (out=2560) (deflated 19%)
Total:
(in = 38373) (out = 25625) (deflated 33%)[/code]
Ensuite, On édite le fichier webcam.php (ou html, si vous n’utilisez pas php).
On va indiquer le chemin vers l’archive applet.jar. Simplement, et provisoirement,
voici ce que je mets dans ce fichier en l’éditant :
[code]<?php
/** inclusion d’un fichier qui teste si l’utilisateur est autorisé à acceder à ce fichier
** pour exemple, son code peut être simplement un :
** <?php
** if($_SESSION[‘login’] == “”){
** Header(“Location: /pagedelogin”);
** }
** ?> Ce qui sous entend d’utiliser les sessions php.
**/
include ‘/scriptsPHP/protected.php’;
?>
WebCam
[/code]
NB: dans mon include de début, un simple fichier contenant à peu prés ce que j'ai commenté avant l'include.
5/ Et iptables ?
J’utilise le port 6012 en exemple parce que le port 8888 est déjà utilisé par un
serveur (gnump3d).
Ouverture des ports et sauvegarde de la config: et on vérifie …
[code]$ su
password
iptables -A INPUT -p tcp --dport 6012 -j ACCEPT
iptables -A INPUT -p udp --dport 6012 -j ACCEPT
iptables -L | grep 6012
-A INPUT -p tcp -m tcp --dport 6012 -j ACCEPT
-A INPUT -p udp -m udp --dport 6012 -j ACCEPT[/code]
5/ Et apache dans tout ça ?
Rien à faire dans httpd.conf …
6/ Un petit alias :
$ nano ~/.bash_aliases
alias webcam='webcam-server -vs -p 6012 -l /home/www-logs/webcam_server.logs 1> /home/www-logs/webcam_server.logs'
On sauvegarde, on vérifie :
$ alias | grep webcam
alias webcam='webcam-server -vs -p 6012 -l /home/www-logs/webcam_server.logs 1> /home/www-logs/webcam_server.logs'
NB: On a crée un fichier de logs soit même, je me souviens plus là …
7/ Lancement :
$ webcam &
Relativement facile, il n’y a pas de fichier de conf, on passe les arguement en ligne de commande (cf. l’alias et webcam-server -help) .ça marche bien