80 votes

Utilisation du bureau comme fausse webcam sous linux

Je veux faire un streaming en direct de (une fenêtre sur) mon bureau linux en utilisant un site de streaming gratuit, en utilisant la vidéo capturée comme une fausse webcam. Il existe de nombreux outils pour cela sous Windows. ffmpeg me permet de capturer l'entrée sur une fenêtre spécifique, mais je ne trouve pas de moyen de sortir la vidéo vers un périphérique de type fausse webcam utilisable par flash.

Quelqu'un peut-il recommander une méthode (ou un logiciel) pour ce faire ?

89voto

Vous pouvez installer v4l2loopback . C'est un module du noyau qui simule une webcam. Chargez-le avec :

modprobe v4l2loopback

Ensuite, vous devez envoyer le flux vidéo sur le périphérique /dev/video0 en utilisant un programme comme ffmpeg. Afin de capturer le bureau et de l'envoyer vers /dev/video0 avec ffmpeg, vous pouvez utiliser la ligne de commande suivante :

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

Changez la valeur de -r de 15 à quelque chose d'autre si vous voulez une fréquence d'images différente. La résolution est choisie dans le paramètre -s. Si vous voulez spécifier un décalage par rapport au coin supérieur gauche de l'écran, passez-le dans le paramètre -i sous la forme "-i :0.0+x,y", où x et y sont respectivement le décalage horizontal et vertical.

11voto

erik Points 1818

Utilisez v4l2loopback avec mplayer .

  1. Téléchargez-le,

  2. le compiler ( make y su -c 'make install' ),

  3. charger le module avec su -c 'modprobe v4l2loopback' ,

  4. puis changez une ligne dans le fichier examples/yuv4mpeg_to_v4l2.c du dossier source de v4l2loopback de

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;

à

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
  1. et faire make dans ce dossier.

  2. Ensuite, exécutez-la à partir du examples un répertoire comme celui-ci :

    mkfifo /tmp/pipe  # only needed once, as long as you do not delete the file /tmp/pipe
    ./yuv4mpeg_to_v4l2 < /tmp/pipe &
    mplayer movie.mp4 -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

où vous remplacez movie.mp4 avec le nom de votre fichier vidéo. Et remplacez /dev/video0 avec votre dispositif de bouclage.

MPlayer est capable de lire n'importe quel flux web, tous les types de fichiers vidéo, même à partir de stdin ! Je viens de le tester avec un fichier provenant de http://www.tagesschau.de qui est un site d'information allemand.

TS=$(wget "http://www.tagesschau.de/multimedia/video/" -q -O - | grep --regexp='http.*\.webm"' | sed -e 's%.*href="%%' -e 's%\.webm".*%\.webm%')
./yuv4mpeg_to_v4l2 < /tmp/pipe &
mplayer $TS -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Au lieu du $TS, vous pourriez mettre un - (qui signifie stdin). Et devant mplayer votre commande ffmpeg redirigeant sa sortie vers stdout. Donc quelque chose comme :

./yuv4mpeg_to_v4l2 < /tmp/pipe &
ffmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Je n'ai pas testé la dernière, car vous n'avez pas dit à quoi ressemble votre commande ffmpeg.

4voto

Quelle distro utilisez-vous ? J'ai eu du succès avec WebCamStudio sous Arch combiné avec le "studio" web Livestream. Cela fait un petit moment que je ne l'ai pas utilisé, cependant.

http://www.ws4gl.org/

Qu'essayez-vous de faire exactement ? ffmpeg compilé avec x11grab peut enregistrer le bureau. J'ai eu un succès limité en poussant ça vers Ustream, mais encore une fois ça fait un moment et je pense que ce que je faisais ne fonctionnera plus.

Si vous voulez simplement diffuser un fichier plutôt que votre bureau (je pense que lorsque vous dites "une fenêtre", vous voulez dire "VLC"), je peux vous indiquer la bonne direction pour que cela fonctionne avec Livestream (peut-être Ustream). Je suis en train de comprendre maladroitement comment faire cela en expérimentant. Ce n'est pas fantastique mais cela fonctionne avec Livestream.

Justin.tv dispose de scripts qui permettent de faire du streaming depuis VLC vers leur service, également.

http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API

3voto

cdp1337 Points 31

Premièrement, appear.in fait probablement ce que vous voulez sans problème (je ne suis pas affilié) : http://appear.in/

Ensuite, vous pouvez diffuser sur Twitch ou d'autres services en utilisant OBS, qui a récemment ajouté la prise en charge de Linux ( !): https://obsproject.com/

OBS résout également le problème beaucoup plus difficile du muxing du son du système et de l'entrée audio lors de la capture d'écran sur Ubuntu (non résolu par quoi que ce soit dans la version universe que j'ai trouvé jusqu'à présent).

Je n'ai pas de solution géniale sous Unix. Mais celles-ci ont fonctionné pour moi dans le monde réel.

3voto

lepe Points 466

Sans utiliser ffmpeg, voici ce qui a fonctionné pour moi (Ubuntu 20.04) :

  1. Installer OBS : https://obsproject.com/download
  2. Installer le v4l2loopback module : https://github.com/umlaeute/v4l2loopback#run
  3. Démarrez le module : v4l2loopback devices=1 video_nr=10 card_label="OBS Cam" exclusive_caps=1 (dans laquelle video_nr signifie le numéro du périphérique (il deviendra /dev/video10 dans cet exemple)
  4. Installer obs-v4l2sink : (paquet deb) https://github.com/CatxFish/obs-v4l2sink/releases
  5. Installer libobs-dev (pas sûr que ce soit nécessaire)
  6. Liez la bibliothèque au bon répertoire : ln /usr/lib/obs-plugins/v4l2sink.so /usr/lib/x86_64-linux-gnu/obs-plugins/
  7. Alors suivez : https://github.com/CatxFish/obs-v4l2sink/

NOTE : n'oubliez pas d'utiliser le dispositif que vous avez spécifié, comme : /dev/video10

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X