web-dev-qa-db-fra.com

Est-il possible que deux processus accèdent simultanément à la webcam?

Je voudrais essayer d'utiliser Cheese dans Google+ Hangouts et dans des configurations similaires. J'aimerais également savoir s'il est possible que la webcam soit utilisée par deux processus simultanément. Je ne l'ai pas encore essayé, mais auparavant, je pensais le demander.

Alors, est-ce possible?

12
RolandiXor

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

J'ai skype, du fromage, des jouets webcam et des lieux de rencontre (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 (travail) + Webcam Toy (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) + fromage (travail)

enter image description here

Hangouts (travailler sur son propre).

enter image description here

Fromage cassé lorsque 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 chaque capture d'écran (et je doute que vous apprécieriez 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 de l'enregistrer dans /dev sous le nom de video2. Ça n'a pas marché.

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

Une photo de mon jardin, pour vous remonter le moral, car la réponse est non. C'est très cool en ce moment: je peux me balancer (sur la balançoire) et sauter et atterrir dans la pataugeoire. Pris avec du fromage.

enter image description here

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 bien.

5
Tim

Heureusement maintenant OUI!

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

Le projet s'appelle v4l2loopback . (Consultez le lien et faites défiler l'écran pour afficher le README pour obtenir des instructions.)

Vous pouvez installer _v4l2loopback_ en clonant son GitHub et en exécutant les commandes suivantes:

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

Exemples

Pour des exemples d'utilisation de GStreamer, FFmpeg, MPlayer et Skype, consultez leur petit wiki . J'espère que vous pourrez trouver les bons réglages pour répondre à vos besoins.

Profitez de tweaking autour!

13
The Eye

La réponse est non avec peut-être ... La bibliothèque, "Video 4 Linux" détecte si un périphérique est en cours d'utilisation et ne s'initiera pas. Pourtant; si vous souhaitez télécharger libv4l-dev et le modifier manuellement, vous pouvez modifier le code pour supprimer ce contrôle, puis le recompiler. J'imagine que cela pourrait fonctionner, mais ce serait extrêmement instable. Peut être intéressant de vérifier si.

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

2
Akiva

Basé sur la réponse @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 1 webcam sur mon ordinateur portable/dev/video0 et je voulais obtenir 2 flux 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/video1 et /dev/video2 créés en supposant que /dev/video0 était le seul périphérique 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 périphérique /dev/video1 plusieurs fois, tout 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 ruisseaux.

1
enthusiasticgeek