Est-il possible que deux processus accèdent à la webcam en même temps?

14

Je voudrais essayer d'utiliser Cheese dans Google+ Hangouts et des configurations similaires, et je voudrais savoir s'il est possible que la webcam soit utilisée par deux processus pour avoir accès à la webcam en même temps. Je ne l'ai pas encore essayé, mais avant de le faire, j'ai pensé que je demanderais.

Alors, est-ce possible?

RolandiXor
la source

Réponses:

6

Eh bien, je viens d'essayer. Des résultats intéressants.

J'ai des skype et du fromage et des jouets et des hangouts webcam (qui fonctionnent tous) et les ai essayés ensemble.

Résultats:

Vous ne pouvez pas utiliser la même webcam sur 2 choses à la fois.

Fromage (de travail) + Jouet webcam (ne fonctionne pas) + Skype (petit, en haut à droite. Ne fonctionne pas).

entrez la description de l'image ici

Vous pouvez cependant utiliser 2 webcams sur 2 choses. (Fromage + webcam jouet).

entrez la description de l'image ici

Hangouts (ne fonctionne pas) + Fromage (fonctionne)

entrez la description de l'image ici

Hangouts (travailler seul).

entrez la description de l'image ici

Fromage cassé lorsque j'ai ouvert Hangouts en premier. Il en a fait de même avec les autres, mais mon Internet est trop lent pour télécharger chaque capture d'écran (et je doute que vous apprécieriez plus de 30 captures d'écran) ...

entrez la description de l'image ici

J'ai même essayé de créer un lien symbolique vers /dev/video0et de l'enregistrer /devsous video2. Ça n'a pas marché.

Je ne peux pas non plus exécuter 2 processus de fromage à la fois.

Si vous deviez le faire, je vous conseillerais de le faire en plein écran et de faire 2 enregistrements d'écran. Je doute que cela fonctionnerait pour ce que vous voulez.

Tim
la source
Merci! Ceci est concis et me dit ce que je dois savoir. Joli jardin btw! La prime sera accordée lorsque le délai expirera (21 heures avant). Je supprimerai ensuite ce commentaire.
RolandiXor
@Mew C'était ma dernière tentative pour le faire fonctionner :)
Tim
@Tim La prochaine réponse est exactement ce que vous recherchez si vous êtes venu ici parce que vous avez besoin d'un moyen de le faire.
Isiah Meadows
1
@impinball non, je viens de trouver une question intéressante!
Tim
14

Heureusement, maintenant, OUI!

Il existe actuellement un projet sur GitHub qui peut afficher non seulement deux, mais un nombre infini (limité uniquement par la capacité du système) de périphériques vidéo à partir d'une seule source.

Le projet est appelé v4l2loopback. (Vérifiez le lien et faites défiler vers le bas pour afficher le fichier README pour obtenir des instructions.)

Vous pouvez installer v4l2loopbacken clonant son GitHub et en exécutant ces commandes:

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

Exemples

Pour des exemples sur la façon de l'utiliser avec GStreamer, FFmpeg, MPlayer et Skype, consultez leur petit wiki . J'espère que vous pourrez trouver les bons paramètres pour répondre à vos besoins.

Profitez de peaufiner!

L'oeil
la source
1
Les périphériques virtuels sont l'un des domaines où Linux (et * nix, d'ailleurs) brille. Il est plus compliqué sous Windows d'écrire même un teeutilitaire de base qui n'attend pas pour stdinfinir de le nourrir. Je ne serais pas surpris si cela utilise un équivalent binaire teeavec un support plus évolutif sous le capot.
Isiah Meadows du
Bien que cela réponde à la question, il serait préférable d'inclure des parties du lien ici et de fournir le lien pour référence, afin que nous ayons quelques exemples - par exemple, fabriquer 2 appareils à partir de 1. Quelles sont les options pour cela? Et est-il possible (comme indiqué dans les exigences du PO) d'utiliser avec les Hangouts Google? Je viens aussi de le tester avec Skype et cela ne semble pas fonctionner. Nous sommes maintenant la version 4.3 et non 4.0 ...
Tim
2
Je vais devoir vérifier cela lorsque mon autre système reviendra. Je donnerai probablement une prime supplémentaire.
RolandiXor
3
Cela fait maintenant partie d'ubuntu - pas besoin de git.
nbubis
En effet, ceci est maintenant empaqueté pour Ubuntu / Debian en tant que v4l2loopback-utils Pas besoin d'auto-compiler ceci
Arnaud Jeansen
3

Basé sur la réponse @The Eye

J'ai d'abord installé les packages gstreamer sur Ubuntu 18.04 https://gstreamer.freedesktop.org/documentation/installing/on-linux.html

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

J'ai reçu un message d'avertissement comme ici sur Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 (mais cela ne m'a pas empêché de charger le pilote v4l2loopback)

$ sudo depmod -a

Je n'ai qu'une webcam sur mon ordinateur portable / dev / video0 et je voulais obtenir 2 flux à partir du même matériel. Basé sur https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Il devrait maintenant y avoir /dev/video1et /dev/video2créé en supposant que /dev/video0c'était le seul appareil vidéo.

Maintenant, je lance ce qui suit dans une fenêtre de terminal

gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t ! queue ! v4l2sink device=/dev/video1 t. ! queue ! v4l2sink device=/dev/video2

J'ouvre 2 onglets de plus

Dans le premier onglet

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Dans le deuxième onglet

gst-launch-1.0 v4l2src device=/dev/video2 ! videoconvert ! ximagesink

Maintenant, on devrait voir 2 flux vidéo

MISE À JOUR

Même si j'utilise le même /dev/video1appareil plusieurs fois, cela me donne autant de flux. exemple.

Dans le premier onglet

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Dans le deuxième onglet

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Dans le troisième onglet

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

me donne trois flux.

enthousiaste
la source
BTW si l' un de webcam audio a ensuite filtrer les périphériques audio en utilisant la commande pactl list | grep -A2 'Source #'puis utiliser ce dispositif dans la canalisation suivante (peut exécuter plusieurs instances de pipeline trop)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
enthusiasticgeek
Cela fonctionne beaucoup mieux que la solution FFmpeg car je ne pouvais pas faire en sorte que FFmpeg copie le h264 sans le décoder, ce qui lui permettait de toujours utiliser le CPU même lorsque personne n'écoutait
Fabian N.
2

La réponse est non avec peut-être ... La bibliothèque, "Video 4 Linux" détecte si un périphérique est utilisé, et ne démarre pas. Pourtant; si vous souhaitez télécharger libv4l-dev et l'éditer manuellement, vous pouvez éditer le code pour vous débarrasser de cette vérification puis simplement le recompiler. J'imagine que cela pourrait fonctionner, mais ce serait extrêmement instable. Peut-être vaut-il la peine de vérifier.

TLDR: Tout est possible si vous êtes un programmeur avec un peu d'huile de coude à portée de main. Vous ne voulez pas aller aussi loin? Alors non; ce n'est pas possible.

Akiva
la source