2016-02-23 55 views
1

我试图用一个JPG格式的文件为Skype(或类似)的虚拟网络摄像头JPEG虚拟摄像头。图像文件每隔几秒重新加载一次,Pipeline也应该始终传输最新的图像。 我开始创建一个管道这样创建使用的GStreamer

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

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

你能不能给我如何得到这个工作的任何提示?

回答

0

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

一种可能的方法是使用multifilesrcvideorate代替。 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。组织/文档/ plugins.html

编辑:看起来像你使用的GStreamer 0.10,不1.X
在这种情况下,请参考旧文件multifilesrcvideorate

0

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

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