我可以通过 gphoto2 + v4l2loopback 将我的 DSLR 用作网络摄像头吗?

use*_*303 11 linux webcam camera v4l2

所以,我正在尝试做的事情可能有点复杂,因为我正在寻找自己的方式。

让我解释一下基础知识:

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(这样我就可以将其用作网络摄像头)?

谢谢!

小智 6

结果变得相当简单:

modprobe v4l2loopback
Run Code Online (Sandbox Code Playgroud)

然后这样做

gphoto2 --stdout --capture-movie | gst-launch-0.10 fdsrc ! decodebin2 name=dec ! queue ! ffmpegcolorspace ! v4l2sink device=/dev/video0
Run Code Online (Sandbox Code Playgroud)

您当然应该根据您的情况更换视频设备。


小智 5

截至 2017 年 10 月,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
Run Code Online (Sandbox Code Playgroud)