1

我正在尝试使用 jpg 文件作为 Skype(或类似软件)的虚拟网络摄像头。图像文件每隔几秒钟就会重新加载一次,并且管道也应该始终传输最新的图像。我开始像这样创建管道

gst-launch filesrc location=~/image.jpg ! jpegdec ! ffmpegcolorspace ! freeze ! v4l2sink device=/dev/video2

但它只流式传输第一个图像并忽略图像文件的较新版本。我读了一些关于 concat 和动态更改管道的内容,但我无法让它为我工作。

你能给我一些关于如何让它工作的提示吗?

4

2 回答 2

0

如果您添加一些参数调整并将其与延迟multifilesrc配对,则可以使用通用文件名。identity它有点脆弱,但只要您保持输入图像的尺寸和格式相同,它就可以用于临时的一次性程序。

gst-launch-1.0 multifilesrc loop=true start-index=0 stop-index=0 location=/tmp/whatever ! decodebin ! identity sleep-time=1000000 ! videoconvert ! v4l2sink

于 2016-02-24T19:33:33.400 回答
0

动态刷新输入文件是不可能的(至少使用filesrc)。
此外,您的示例使用freeze,这将防止图像更改。

一种可能的方法是使用multifilesrcandvideorate代替。 multifilesrc可以读取很多文件(提供类似于 scanf/printf 的模式),并且videorate可以控制速度。

例如,您创建 100 张图像,格式为 image0000.jpg、image0001.jpg、...、image0100.jpg。然后连续播放它们,每张图像在 1 秒内播放:

gst-launch multifilesrc location=~/image%04d.jpg start-index=0 stop-index=100 loop=true caps="image/jpeg,framerate=\(fraction\)1/1" ! jpegdec ! ffmpegcolorspace ! videorate ! v4l2sink device=/dev/video2

更改图像数量stop-index=100和更改速度caps="image/jpeg,framerate=\(fraction\)1/1"
有关这些元素的更多信息,请参阅 gstreamer.freedesktop.org/documentation/plugins.html 上的文档

编辑:看起来你使用 GStreamer 0.10,而不是 1.x
在这种情况下,请参考旧文档multifilesrcvideorate

于 2016-02-24T16:23:08.837 回答