Могу ли я использовать DSLR в качестве веб-камеры через gphoto2 + v4l2loopback?

5034
user2934303

Итак, то, что я пытаюсь сделать, может быть немного сложным, потому что я нахожу свой путь.

Позвольте мне объяснить основы:

1 - У меня есть камера DSLR, и я хочу использовать ее в качестве веб-камеры (но v4l2 не может создать с ней устройство / dev / videoX, поэтому ни одно интернет-приложение не может использовать его, только определенные приложения, такие как Darktable)

2 - я могу получить живые кадры с камеры через gphoto2 (но я не уверен, как их транслировать, и если мне понадобится масштабировать и кодировать / декодировать их)

3 - я могу использовать v4l2loopback для создания поддельного устройства веб-камеры (например, / dev / video1), и я могу использовать gst-launch для передачи данных на него (но я не уверен, как я могу передать кадры жестко на него)

И что я знаю об этом:

1 - я могу отправить кадры с камеры на стандартный вывод следующим образом:

gphoto2 --capture-movie --stdout

2 - Я могу отправлять данные из источника видео-теста на поддельное устройство веб-камеры, например:

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

3 - формат, используемый gphoto2 - mjpg (формат JPEG)

Итак, вы можете помочь мне с этим?

Как я могу передать кадры из gphoto2 в gst-launch и использовать его с v4l2sink для отправки их в / dev / video1 (так что я смогу использовать его как веб-камеру)?

Спасибо!

7

2 ответа на вопрос

6
Reinaert Albrecht

Turned out to be rather straightforward:

modprobe v4l2loopback 

and then do this

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

You should of course change the video device depending on your situation.

4
Florian Segginger

По состоянию на октябрь 2017 года GStreamer был обновлён до версии 1.0, а v4l2loopback также получил некоторые обновления.

Таким образом, старая команда, опубликованная @Reinaert Albrecht, больше не работает, а новая команда, которая работает сейчас:

gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc fd=0 ! decodebin name=dec ! queue ! videoconvert ! tee ! v4l2sink device=/dev/video0 
  • decodebin2 был заменен decodebin
  • ffmpegcolorspace был заменен videoconvert
  • teeфильтр был добавлен для учета ошибки в v4l2loopback драйвера (см https://github.com/umlaeute/v4l2loopback/issues/83 )
К сожалению, это не работает с `libv4l2: ошибка при получении pixformat: неверный аргумент` для меня, если я выберу` / dev / video1` вместо `/ dev / video0` и с большим количеством ошибок в случае` / dev / video0`. kelunik 6 лет назад 0

Похожие вопросы