在Gstreamer中可以设置appsrc--ximagesink吗

0 投票
1 回答
1347 浏览
提问于 2025-04-17 06:32

我想把一些随机的字节流传输到Gstreamer,并显示出来,像这样:

[Rand Bytes]--[Video source=appsrc]--[Video sink=ximagesink]

我在这个StackOverflow帖子中找到的下面这段Python代码可以正常工作。

source = gst.element_factory_make("appsrc", "source")
caps = gst.Caps("video/x-raw-gray,bpp=16,endianness=1234,width=320,height=240,framerate=(fraction)10/1")
source.set_property('caps',caps)
source.set_property('blocksize',320*240*2)
source.connect('need-data', self.genRandBytes)

colorspace = gst.element_factory_make('ffmpegcolorspace') #To remove

videosink = gst.element_factory_make('ximagesink')
caps = gst.Caps("video/x-raw-yuv,width=320,height=240,framerate=(fraction)10/1,format=(fourcc)I420")
videosink.caps = caps

gst.element_link_many(source, colorspace, videosink)

不过,如果我去掉了colorspace这一部分,并把videosink.caps设置成和source一样的,就不再工作了(点击开始后什么都没有发生)。

我想问的是,为什么这里需要colorspace?是否可以只用appsrc--ximagesink的设置呢?

1 个回答

1

ximagesink不支持x-raw-gray格式,所以需要进行颜色空间的转换。

不过,文档上说ximagesink只支持video/x-raw-rgb格式,所以我觉得在这个接收端设置这个属性可能没什么用。实际上,从ximagesource的get_caps()方法获取的接收端输出显示,即使设置了这个属性并开始播放,输出仍然是video/x-raw-rgb格式。去掉设置这个属性的那行代码,对输出没有任何影响。

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-ximagesink.html

撰写回答