Webcam / video

 

De nombreuses bibliothèques permettent de gérer la vidéo / les webcams en Java. Malheureusement, nombre d'entre elles sont des usines à gaz tant au niveau de l'installation, de la configuration ou de l'utilisation.

Nous nous sommes intéressés à :

  1. JMF (API permettant la manipulation de vidéos et fichiers audio fournie par Sun), plus mis à jour depuis 2003
  2. FMJ (une alternative à JMF)
  3. QTJ (QuickTime for Java), non compatible avec Linux
  4. VLCJ (java Bendings for VideoLAN), non compatible avec Linux
  5. ...

Finalement, nous avons trouvé notre bonheur avec les librairies V4L4J (Video for Linux for Java) et Xuggle.

V4L4J pour la webcam

Installation

Exécution des commandes :

sudo apt-get install libv4l4j-java
sudo apt-get udpate
sudo add-apt-repository ppa:gillesg/ppa

La version installée chez nous est : 0.8.9-0ubuntu1~ppa4

Configuration

V4L4J utilise la librairie système libv4l4j.so, qui a normalement été placée dans le répertoire /usr/lib/jni/

Il est nécessaire que le programme java sache où cette librairie se trouve. Lui indiquer avec l'argument suivant (concerne la JRE) :

-Djava.library.path=/usr/lib/jni

 

Utilisation

Nous avons été agréablement surpris par la qualité de la documentation et des exemples de V4L4J. Pour l'utiliser plus aisément (avec une Webcam), nous avons créé la classe hssh.util.webcam.Webcam.

int width = 640, height = 480, quality = 85;
Webcam webcam = new Webcam("/dev/video0");
webcam.init(width, height, quality);
webcam.start();

[...]
BufferedImage img = webcam.getImage();
[...]

webcam.stop();

 

Xuggle pour les enregistrements vidéos

Xuggle [website - wiki] est une bibliothèque Java qui permet de décoder, modifier, encoder et enregistrer des médias.

Installation

Suivre les étapes expliquées ici même : http://www.xuggle.com/xuggler/downloads/

Configuration

De même que pour V4L4J qui nécessite libv4l4j.so, xuggle nécessite des librairies présentes dans /usr/local/xuggler/lib.

L'argument à fournir à la JRE devient donc :

-Djava.library.path=/usr/lib/jni:/usr/local/xuggler/lib

Utilisation

Dans notre cas, nous utilisons Xuggler pour créer une vidéo à partir d'objets de type BufferedImage (issus de la webcam). Pour faire cela de manière facile, nous avons créé 2 classe : Video et WebcamVideo (voir package hssh.util.webcam).

Voici un exemple d'utilisation :

int width = 640, height = 480, quality = 85, framerate = 5, videoduration = 10;
Webcam webcam = new Webcam("/dev/video0");
webcam.init(width, height, quality);
webcam.start();
WebcamVideo wv = new WebcamVideo(webcam, "/home/xavier/Desktop/video.mp4", videoduration, framerate);
wv.startRecord();
webcam.stop();

La vidéo enregistrée est au format mp4.