Webcam virtuelle

Il peut s'avérer utile de pouvoir utiliser une webcam virtuelle sur sa messagerie instantanée préférée (Chatroulette, blog-vidéo etc.) afin de pouvoir faire visionner la dernière vidéo familiale à un proche sans avoir besoin de filmer un écran avec sa webcam.

Cet article traite donc de la façon dont il faut procéder afin de créer une fausse webcam sur son système et de pouvoir écrire une vidéo dessus qui sera retranscrit comme si on visionnait ce qu'une webcam peut filmer.

Pour installer le pilote, nous allons avoir besoin d'installer quelques paquets contenant des outils ou des données précieuses. Installons les paquets nécessaires comme suit :

sudo apt-get install build-essential linux-headers-`uname -r` mencoder

Ensuite, téléchargeons le pilote et installons-le :

wget http://allonlinux.free.fr/Projets/AVLD/src/avld_0.1.4.tar.bz2
tar -jxf avld_0.1.4.tar.bz2
mv avld* /opt
cd /opt/avld*
make && sudo make install

Maintenant que le pilote est installé, il nous suffit de le charger et d'automatiser le chargement automatique au démarrage :

sudo modprobe avld
sudo echo "avld">>/etc/modules

Il faut au préalable connaître la résolution de votre vidéo (information que l'on peut aisément obtenir en allant en mode graphique dans les propriétés du fichier vidéo qui nous intéresse), ici on dira que notre vidéo est en 800x600.
On rentre donc la commande suivante afin de mettre notre webcam virtuelle à la bonne taille :

echo "width=800 height=600 fps=25" > /dev/video0

(ou /dev/video1 si vous avez déjà charger un autre périphérique vidéo auparavant comme une webcam ou un tuner…) Maintenant pour écrire la vidéo sur le périphérique virtuel il suffit d'utiliser la commande suivante :

mencoder my_movie.*** -nosound -ovc raw -vf format=bgr24 -of rawvideo -o /dev/video0

(même remarque concernant /dev/video0… )

Pour visualiser le résultat, vous pouvez soit aller dans votre Instant Messenger préféré et voir ce que ça donne sur l'aperçu webcam soit utiliser la commande suivante :

mplayer tv:// -tv "driver=v4l:device=/dev/video0:noaudio:outfmt=rgb24"

(même remarque concernant /dev/video0… )

Skype plante

Alalala!!!…Sacré Skype!! il fait jamais les choses comme les autres…heureusement, il y a une manip pour contourner ce plantage de Skype avec l'utilisation de AVLD… Mettons un peu la main à la pâte… Retournons dans notre dossier où se trouve notre pilote :

cd /opt/avld*

Maintenant éditons le fichier video_device.c et cherchons le passage suivant :

static struct file_operations v4l_fops = {
owner: THIS_MODULE,
open: v4l_open,
release: v4l_close,
read: v4l_read,
mmap: v4l_mmap,
write: v4l_write,
ioctl: v4l_ioctl,
llseek: no_llseek,
};

et ajoutons y la ligne « compat_ioctl: v4l_compat_ioctl32, », ce qui nous donne :

static struct file_operations v4l_fops = {
owner: THIS_MODULE,
open: v4l_open,
release: v4l_close,
read: v4l_read,
mmap: v4l_mmap,
write: v4l_write,
ioctl: v4l_ioctl,
compat_ioctl: v4l_compat_ioctl32,
llseek: no_llseek,
};

Maintenant, nous pouvons réinstaller notre pilote grâce à ces commandes :

make clean
make
sudo make install

Enfin, on charge le pilote un peu différemment et de façon définitive (concernant le démarrage) :

sudo modprobe avld palette=1

On édite le fichier /etc/modules et si on a déjà rentré avld dedans, on rajoute palette=1 juste à la suite pour que tout soit correct ; ce qui nous donne donc la ligne suivante apparaissant dans notre fichier :

avld palette=1

Et maintenant, si on veut envoyer une vidéo sur notre webcam virtuelle pour skype, on tape cette commande avec la bonne direction pour le fichier vidéo :

mencoder my_movie.*** -nosound -ovc raw -vf format=uyvy -of rawvideo -o /dev/video0

ou :

mencoder my_movie.*** -nosound -ovc raw -vf format=bgr24 -of rawvideo -o /dev/video0

Sans oublier, avant cela, de donner la bonne taille de la vidéo comme dans la section utilisation !

Opencv plante

Lorsqu'on essaie de capturer une image avec opencv juste après avoir chargé le module, on obtient une taille d'image nulle. Le problème n'apparait pas si on regarde d'abord une fois le flux avec mplayer.

En regardant ce qui se passe avec strace | grep VIDIO on s'aperçoit que la méthode d'initialisation de mplayer diffère de celle d'opencv. Et en comparant ce qui est normalement effectué pour chaque ioctl de v4l grace à http://users.sosdg.org/~qiyong/lxr/ident et à http://www.google.com/codesearch , on s'aperçoit que la structure video_window qui contient la taille de l'image n'est pas renseignée par avld lors du VIDIOCGWIN.

--- video_device.c.orig	2008-09-14 21:28:41.000000000 +0200
+++ video_device.c	2008-09-14 22:00:35.000000000 +0200
@@ -212,7 +212,10 @@
 			#ifdef DEBUG
 				printk (KERNEL_PREFIX "VIDIOCGWIN\n");
 			#endif
-			
+
+			capture_win.width=width;	
+			capture_win.height=height;
+
 			if(copy_to_user((void*)arg, &capture_win, sizeof(capture_win)))
 				return -EFAULT;
 			return 0;

Vous pouvez télécharger un patch qui inclut aussi le patch pour Skype présenté dans la section précédente et un patch pour changer de palette après le chargement du module sur: http://wiki.elphel.com/index.php?title=AVLD_-_Another_Video_Loopback_Device

WebCamStudio

  • webcamstudio :Ce logiciel est simple d'emploi et vous aide à créer une webcam virtuelle: Capture d'écran, Webcam virtuelle, des effets, streamer une vidéo,

Tout d'abord je dirais un grand merci au nom de toute la communauté d'ubuntu à ALLONLINUX qui a créé le pilote permettant ceci. l'article original se trouvant ici : http://allonlinux.free.fr/Projets/AVLD/


Contributeurs : FIXME.

  • webcamvirtuelle.txt
  • Dernière modification: Le 03/03/2014, 22:22
  • (modification externe)