19 votes

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

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 ayant accès à la webcam en même temps. Je n'ai pas encore essayé, mais avant de le faire, j'ai pensé que je devais poser la question.

Alors, c'est possible ?

22voto

tremby Points 472

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 dispositifs vidéo à partir d'une seule source.

Le projet s'appelle v4l2loopback . (Vérifiez le lien et faites défiler vers le bas pour voir le README pour les instructions).

Vous pouvez installer v4l2loopback en 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 d'utilisation avec GStreamer, FFmpeg, MPlayer, et Skype, consultez leur petit wiki . Nous espérons que vous avez pu trouver les paramètres qui correspondent à vos besoins.

Amusez-vous à faire des modifications !

7voto

Tim Points 30349

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

J'ai pris skype et cheese et webcam toy et hangouts (qui fonctionnent tous) et je les ai essayés ensemble.

Résultats :

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

Fromage (Fonctionne) + Jouet Webcam (Ne fonctionne pas) + Skype (Petit, en haut à droite. Ne fonctionne pas).

enter image description here

Vous pouvez utiliser 2 webcams sur 2 choses cependant. (Fromage + Jouet Webcam).

enter image description here

Hangouts (ne fonctionne pas) + Cheese (fonctionne)

enter image description here

Hangouts (fonctionne seul).

enter image description here

Le fromage s'est cassé quand j'ai ouvert Hangouts en premier. Il a fait la même chose avec les autres, mais mon internet est trop lent pour télécharger toutes les captures d'écran (et je doute que vous appréciiez plus de 30 captures d'écran)...

enter image description here

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

Je ne peux pas non plus exécuter 2 processus de fromage en même temps.

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

7voto

dln Points 651

Basé sur la réponse de @The Eye

J'ai d'abord installé les paquets 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

J'ai juste une webcam sur mon ordinateur portable /dev/video0 et je voulais obtenir 2 flux à partir du même matériel. Sur la base de https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Il devrait maintenant y avoir /dev/video1 y /dev/video2 créé en supposant /dev/video0 était le seul dispositif 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 autres onglets

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

UPDATE

Même si j'utilise le même /dev/video1 dispositif plusieurs fois il me donne tous que beaucoup 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.

7voto

temple Points 51

Puisqu'il n'y a pas de réponse en utilisant ffmpeg c'est ça.


Explication

Alors que v4l2loopback crée des périphériques vidéo virtuels, ils ne sont associés à rien par défaut. Pour les rendre utiles, vous devez leur envoyer des flux via des applications externes telles que ffmpeg .

Chargez d'abord le module

$ sudo modprobe v4l2loopback exclusive_caps=1 video_nr=5 #creates `/dev/video5`

puis envoyez l'entrée de votre webcam à l'appareil virtuel.

$ ffmpeg -i /dev/video0 -f v4l2 -codec:v rawvideo -pix_fmt yuv420p /dev/video5

Maintenant /dev/video5 fonctionne comme une pseudo-webcam. Notez que, contrairement à une webcam physique, il est possible d'accéder à un seul périphérique vidéo virtuel à partir de plusieurs applications simultanément. Ainsi, dans ce cas, il n'est pas nécessaire de créer de nombreux périphériques virtuels.

J'ai écrit un script pour envelopper ces étapes : v4l2_webcam - GitHub .


Application

Vous pouvez envoyer n'importe quelle vidéo (brute) vers un périphérique vidéo virtuel. Cela signifie, par exemple, qu'il est possible d'utiliser une vidéo mixée de manière complexe en OBS comme entrée de caméra dans une réunion Web (par exemple, Skype, Zoom, etc.).

Voici un exemple relativement complexe mais très pratique :

Structure

example_structure

Résultat

example_result

2voto

Anon Points 11025

La réponse est non avec un peut-être... La bibliothèque, "Video 4 Linux" détecte si un périphérique est utilisé, et ne l'initie pas. Cependant, si vous souhaitez télécharger libv4l-dev et l'éditer manuellement, vous pouvez modifier le code pour vous débarrasser de cette vérification et ensuite le recompiler. J'imagine que vous pourriez faire en sorte que cela fonctionne, mais ce serait extrêmement instable. Cela peut valoir 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.

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