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.
Installation
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
Utilisation
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… )
Problèmes rencontrés
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
logiciel: webcam virtuelle
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,
Liens
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 : .