Kann ich meine DSLR als Webcam über gphoto2 + v4l2loopback verwenden?

5169
user2934303

Also, was ich zu tun versuche, kann etwas kompliziert sein, indem ich meinen Weg finde.

Lassen Sie mich die Grundlagen erklären:

1 - Ich habe eine DSLR-Kamera und möchte sie als Webcam verwenden (aber v4l2 kann kein / dev / videoX-Gerät damit erstellen, sodass keine Internetanwendung sie verwenden kann, nur bestimmte Anwendungen wie Darktable).

2 - Ich kann über gphoto2 Live-Bilder von der Kamera erhalten (aber ich bin mir nicht sicher, wie man sie pfeifen soll und ob ich sie skalieren und kodieren / decodieren muss).

3 - Ich kann v4l2loopback verwenden, um ein gefälschtes Webcam-Gerät (wie / dev / video1) zu erstellen, und ich kann gst-launch verwenden, um Daten darauf zu pipeline.

Und was ich darüber weiß:

1 - Ich kann die Bilder von der Kamera wie folgt an stdout senden:

gphoto2 --capture-movie --stdout

2 - Ich kann Daten von einer Videotestquelle wie folgt an das falsche Webcam-Gerät senden:

gst-launch-0.10 videotestsrc ! v4l2sink device=/dev/video1

3 - Das von gphoto2 verwendete Format ist mjpg (JPEG-Format).

Kannst du mir dabei helfen?

Wie kann ich die Frames von gphoto2 nach gst-launch pipeline und mit v4l2sink an / dev / video1 senden (damit ich sie als Webcam verwenden kann)?

Vielen Dank!

7

2 Antworten auf die Frage

6
Reinaert Albrecht

Es stellte sich heraus, dass es recht einfach war:

modprobe v4l2loopback 

und dann mach das

gphoto2 --stdout --capture-movie | gst-launch-0.10 fdsrc ! decodebin2 name=dec ! queue ! ffmpegcolorspace ! v4l2sink device=/dev/video0 

Sie sollten das Videogerät natürlich abhängig von Ihrer Situation ändern.

4
Florian Segginger

Seit Oktober 2017 ist GStreamer auf 1.0 aktualisiert worden und v4l2loopback hat auch einige Updates erhalten.

Daher funktioniert der alte Befehl von @Reinaert Albrecht nicht mehr, und der neue Befehl, der jetzt funktioniert, ist

gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc fd=0 ! decodebin name=dec ! queue ! videoconvert ! tee ! v4l2sink device=/dev/video0 
Leider scheitert dies mit `libv4l2: Fehler beim Abrufen von pixformat: Ungültiges Argument` für mich, wenn ich` / dev / video1` anstelle von `/ dev / video0` wähle und bei` / dev / video0` mehr Fehler. kelunik vor 6 Jahren 0