Posso usar minha DSLR como webcam através de gphoto2 + v4l2loopback?

7

Então, o que estou tentando fazer pode ser um pouco complicado, pois estou encontrando meu caminho.

Deixe-me explicar o básico:

1 - Eu tenho uma câmera DSLR e eu quero usá-la como webcam (mas v4l2 não pode fazer um dispositivo / dev / videoX com ela, então nenhum aplicativo de internet pode usá-la, apenas aplicações específicas como Darktable)

2 - Eu posso pegar quadros ao vivo da câmera através do gphoto2 (mas eu não tenho certeza sobre como canalizá-los, e se eu precisar escalar e codificar / decodificá-los)

3 - Eu posso usar o v4l2loopback para criar um dispositivo de webcam falso (como / dev / video1) e eu posso usar o gst-launch para enviar dados para ele (mas não tenho certeza de como posso canalizar quadros para ele)

E o que eu sei sobre isso:

1 - Eu posso enviar os quadros da câmera para a stdout assim:

gphoto2 --capture-movie --stdout

2 - Eu posso enviar dados de uma fonte de teste de vídeo para o dispositivo de webcam falsa assim:

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

3 - o formato usado pelo gphoto2 é mjpg (formato JPEG)

Então, você pode me ajudar com isso?

Como posso pipilar os quadros do gphoto2 para o gst-launch e usá-los com o v4l2sink para enviá-los para o / dev / video1 (assim, poderei usá-lo como webcam)?

Obrigado!

    
por user2934303 28.01.2015 / 20:36

2 respostas

6

Acabou sendo bastante direto:

modprobe v4l2loopback

e faça isso

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

Você deve mudar o dispositivo de vídeo, dependendo da sua situação.

    
por 24.08.2015 / 14:13
4

Em outubro de 2017, o GStreamer foi atualizado para o 1.0 e o v4l2loopback também recebeu algumas atualizações.

Como tal, o antigo comando postado por @Reinaert Albrecht não funciona mais, e o novo comando que funciona agora é

gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc fd=0 ! decodebin name=dec ! queue ! videoconvert ! tee ! v4l2sink device=/dev/video0
  • decodebin2 foi substituído por decodebin
  • ffmpegcolorspace foi substituído por videoconvert
  • o filtro tee foi adicionado para responder a um erro no driver v4l2loopback (consulte: link )
por 03.10.2017 / 14:55