web-dev-qa-db-fra.com

Utiliser desktop comme faux webcam sur linux

Je veux créer un flux 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 sur Windows. ffmpeg me permet de capturer les entrées sur une fenêtre spécifique, mais je ne trouve pas le moyen de sortir la vidéo sur un faux périphérique de type webcam utilisable par flash.

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

46
bkconrad

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

modprobe v4l2loopback

Ensuite, vous devez envoyer le flux vidéo au périphérique/dev/video0 en utilisant un programme tel que ffmpeg. Pour capturer le bureau et le transférer 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 à autre chose si vous voulez une cadence différente. La résolution est choisie dans le paramètre -s. Si vous souhaitez spécifier un décalage à partir du coin supérieur gauche de l'écran, transmettez-le au paramètre -i sous la forme "-i: 0.0 + x, y", où x et y sont respectivement les décalages horizontal et vertical.

48
Víctor Fernández

Utilisez v4l2loopback avec mplayer .

  1. Télécharge le,
  2. compilez-le (make et 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 v4l2loopback de

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    à

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. et faites make dans ce dossier.

  6. Puis lancez le depuis le répertoire examples comme ceci:

    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 par le nom de votre fichier vidéo. Et remplacez /dev/video0 par votre périphérique de bouclage.

MPlayer est capable de lire n'importe quel flux Web, tout type de fichier vidéo, même à partir de stdin! Je viens de le tester avec un fichier de http://www.tagesschau.de qui est un site de nouvelles 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 de $ TS, vous pouvez mettre un - (qui signifie stdin). Et devant mplayer, votre commande ffmpeg redirige sa sortie vers stdout. Donc, quelque chose comme:

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

N'a pas testé le dernier, car vous n'avez pas expliqué comment votre commande ffmpeg ressemblait.

6
erik

Quelle distro utilisez-vous? J'ai eu du succès avec WebCamStudio sous Arch combiné au "studio" basé sur le Web Livestream. Cela fait un petit moment que je l'utilise, 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 cela vers Ustream, mais encore une fois, cela fait longtemps et je pense que ce que je faisais ne fonctionnera plus.

Si vous souhaitez simplement diffuser un fichier plutôt que votre bureau (je pense quand 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 trouve maladroitement comment faire cela par des expériences. Ce n'est pas fantastique mais cela fonctionne avec Livestream.

Justin.tv a également des scripts qui peuvent diffuser depuis VLC vers leur service.

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

3
Mike Mitchell

Tout d’abord, apparence.in fait probablement ce que vous voulez sans tracas (je ne suis pas affilié): http://appear.in/

Deuxièmement, vous pouvez diffuser en continu vers Twitch ou d’autres services en utilisant OBS, qui a récemment ajouté le support Linux (!): https://obsproject.com/

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

Je n'ai aucune solution Unix-y géniale. Mais ceux qui ont fonctionné pour moi dans le monde réel.

2
bkconrad