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

7

Also, was ich versuche zu tun, kann ein wenig 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 mit v4l2 kann kein / dev / videoX-Gerät erstellt werden, sodass keine Internetanwendung darauf zugreifen kann, nur bestimmte Anwendungen wie Darktable)

2 - Ich kann über gphoto2 Live-Bilder von der Kamera abrufen (aber ich bin mir nicht sicher, wie ich sie weiterleiten soll und ob ich sie skalieren und codieren / 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 dorthin zu übertragen (aber ich bin nicht sicher, wie ich Frames dorthin weiterleiten kann)

Und was ich darüber weiß:

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

gphoto2 --capture-movie --stdout

2 - Ich kann wie folgt Daten von einer Video-Testquelle an das gefälschte Webcam-Gerät senden:

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

3 - das von gphoto2 verwendete Format ist mjpg (JPEG-Format)

Können Sie mir dabei helfen?

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

Vielen Dank!

user2934303
quelle

Antworten:

6

Es stellte sich als ziemlich einfach heraus:

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 je nach Ihrer Situation ändern.

Reinaert Albrecht
quelle
5

Ab Oktober 2017 wurde GStreamer auf 1.0 aktualisiert 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
Florian Segginger
quelle
1
Leider scheitert , dass mit libv4l2: error getting pixformat: Invalid argumentmir , wenn ich wähle /dev/video1statt /dev/video0und mit mehr Fehlern bei /dev/video0.
Kelunik