是否可以在Gstreamer中进行appsrc-ximagesink设置

时间:2011-11-17 21:54:27

标签: python gstreamer

我想将一些随机字节流式传输到Gstreamer并按如下方式显示:

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

我发现以下Python代码in this SO post有效

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 个答案:

答案 0 :(得分:1)

ximagesink不支持x-raw-grey,因此需要进行颜色空间转换。

话虽如此,文档说ximagesink只支持video / x-raw-rgb,所以我认为在接收器上设置cap属性并没有做太多。实际上,在ximagesource的get_caps()方法中查看接收器输出的输出,即使在设置了caps属性并且开始播放之后,它仍然是video / x-raw-rgb。取出行设置cap属性对输出没有影响。

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