Können zwei Prozesse gleichzeitig auf die Webcam zugreifen?

14

Ich möchte versuchen, Cheese in Google+ Hangouts und ähnlichen Konfigurationen zu verwenden, und möchte wissen, ob die Webcam von zwei Prozessen gleichzeitig verwendet werden kann, um auf die Webcam zuzugreifen. Ich habe es noch nicht ausprobiert, aber bevor ich es tue, dachte ich mir, ich würde fragen.

Also ist es möglich?

RolandiXor
quelle

Antworten:

6

Nun, ich habe es einfach versucht. Interessante Ergebnisse.

Ich habe Skype und Käse und Webcam-Spielzeug und Treffpunkte (die alle funktionieren) und habe sie zusammen ausprobiert.

Ergebnisse:

Sie können dieselbe Webcam nicht für zwei Dinge gleichzeitig verwenden.

Käse (funktioniert) + Webcam-Spielzeug (funktioniert nicht) + Skype (Klein, oben rechts. Funktioniert nicht).

Bildbeschreibung hier eingeben

Sie können jedoch 2 Webcams für 2 Dinge verwenden. (Käse + Webcam Spielzeug).

Bildbeschreibung hier eingeben

Hangouts (funktioniert nicht) + Käse (funktioniert)

Bildbeschreibung hier eingeben

Hangouts (alleine arbeiten).

Bildbeschreibung hier eingeben

Käse kaputt, als ich Hangouts zum ersten Mal öffnete. Bei den anderen war es genauso, aber mein Internet ist zu langsam, um jeden einzelnen Screenshot hochzuladen (und ich bezweifle, dass Sie mehr als 30 Screenshots schätzen würden) ...

Bildbeschreibung hier eingeben

Ich habe sogar versucht , einen symbolischen Link zu machen /dev/video0und speichert es in /devso video2. Das hat nicht geklappt

Ich kann auch nicht 2 Käseprozesse gleichzeitig ausführen.

Wenn Sie müssten, würde ich raten, es im Vollbildmodus zu machen und 2 Bildschirmaufnahmen zu machen. Ich bezweifle, dass das für das, was Sie wollen, funktionieren würde.

Tim
quelle
Vielen Dank! Dies ist kurz und sagt mir, was ich wissen muss. Schöner Garten übrigens! Das Kopfgeld wird gutgeschrieben, wenn das Zeitlimit abgelaufen ist (noch 21 Stunden). Dann werde ich diesen Kommentar löschen.
RolandiXor
@Mew Das war mein letzter Versuch, es zum Laufen zu bringen :)
Tim
@Tim Die nächste Antwort ist genau das, wonach Sie suchen, wenn Sie hierher gekommen sind, weil Sie einen Weg brauchen, dies zu tun.
Isiah Meadows
1
@impinball Nö, fand es gerade eine interessante Frage!
Tim
13

Zum Glück jetzt JA!

Derzeit gibt es ein Projekt auf GitHub, das nicht nur zwei, sondern eine unendliche (nur durch die Systemkapazität begrenzte) Anzahl von Videogeräten aus einer einzigen Quelle anzeigen kann.

Das Projekt wird aufgerufen v4l2loopback. (Überprüfen Sie den Link und scrollen Sie nach unten, um Anweisungen in der README-Datei zu erhalten.)

Sie können installieren, v4l2loopbackindem Sie den GitHub klonen und die folgenden Befehle ausführen:

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

Beispiele

Beispiele zur Verwendung mit GStreamer, FFmpeg, MPlayer und Skype finden Sie in ihrem kleinen Wiki . Hoffentlich finden Sie die richtigen Einstellungen für Ihre Bedürfnisse.

Viel Spaß beim Stöbern!

Das Auge
quelle
1
Virtuelle Geräte sind einer der Bereiche, in denen Linux (und * nix) eine herausragende Rolle spielen. Unter Windows ist es komplizierter, ein grundlegendes teeDienstprogramm zu schreiben , das nicht darauf wartet stdin, das Füttern zu beenden. Es würde mich nicht wundern, wenn dies tatsächlich ein binäres Äquivalent zu teemit besser skalierbarer Unterstützung unter der Haube verwendet.
Isiah Meadows
Während dies die Frage beantwortet, ist es vorzuziehen , Teile des Links hier einzuschließen und den Link als Referenz bereitzustellen, damit wir einige Beispiele haben - z. B. 2 Geräte aus 1 erstellen. Welche Optionen gibt es dafür? Und ist es möglich (wie in den Anforderungen des OP angegeben), Google Hangouts zu verwenden? Ich habe es auch gerade mit Skype getestet und es scheint nicht zu funktionieren. Wir sind jetzt Version 4.3 nicht 4.0 ...
Tim
2
Ich muss das überprüfen, wenn mein anderes System zurückkommt. Ich werde wahrscheinlich ein zusätzliches Kopfgeld geben.
RolandiXor
3
Dies ist jetzt tatsächlich Teil von Ubuntu - kein Bedarf an Git.
nbubis
Tatsächlich ist dies jetzt für Ubuntu / Debian als v4l2loopback-Utils gepackt. Sie müssen es nicht selbst kompilieren
Arnaud Jeansen
3

Basierend auf der Antwort von @The Eye

Ich habe zuerst gstreamer-Pakete auf Ubuntu 18.04 https://gstreamer.freedesktop.org/documentation/installing/on-linux.html installiert

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

Ich habe eine Warnmeldung wie hier auf Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 erhalten (aber es hat mich nicht daran gehindert, den v4l2loopback-Treiber zu laden)

$ sudo depmod -a

Ich habe nur 1 Webcam auf meinem Laptop / dev / video0 und ich wollte 2 Streams von der gleichen Hardware bekommen. Basierend auf https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Es sollte nun /dev/video1und /dev/video2erstellt unter der Annahme /dev/video0war das einzige Videogerät.

Jetzt führe ich folgendes in einem Terminalfenster aus

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

Ich öffne 2 weitere Tabs

In der ersten Registerkarte

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

In der zweiten Registerkarte

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

Jetzt sollte man 2 Videostreams sehen

AKTUALISIEREN

Auch wenn ich das selbe benutze /dev/video1 Gerät mehrmals gibt mir das alles so viele Streams. Beispiel.

In der ersten Registerkarte

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

In der zweiten Registerkarte

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

In der dritten Registerkarte

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

gibt mir drei ströme.

enthusiasticgeek
quelle
Übrigens, wenn die Webcam über Audio verfügt, filtern Sie Audiogeräte mit dem Befehl pactl list | grep -A2 'Source #'und verwenden Sie das Gerät in der folgenden Pipeline (kann auch mehrere Pipeline-Instanzen ausführen)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
enthusiasticgeek
Dies funktioniert viel besser als die FFmpeg-Lösung, da ich FFmpeg nicht dazu bringen konnte, h264 zu kopieren, ohne es zu dekodieren, was dazu führte, dass immer die CPU verwendet wurde, auch wenn niemand zuhörte
Fabian N.
2

Die Antwort ist nein mit einem vielleicht ... Die Bibliothek "Video 4 Linux" erkennt, ob ein Gerät verwendet wird, und wird nicht initiiert. Jedoch; Wenn Sie libv4l-dev herunterladen und manuell bearbeiten möchten, können Sie den Code bearbeiten, um diese Prüfung zu beseitigen, und ihn dann einfach neu kompilieren. Ich stelle mir vor, Sie könnten das zum Laufen bringen, aber es wäre äußerst instabil. Vielleicht lohnt es sich aber auch mal reinzuschauen.

TLDR: Alles ist möglich, wenn Sie ein Programmierer mit etwas Ellbogenfett sind. Willst du nicht so weit gehen? Dann nein; es ist nicht möglich.

Akiva
quelle