我想将一些随机字节流式传输到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
设置?
答案 0 :(得分:1)
ximagesink不支持x-raw-grey,因此需要进行颜色空间转换。
话虽如此,文档说ximagesink只支持video / x-raw-rgb,所以我认为在接收器上设置cap属性并没有做太多。实际上,在ximagesource的get_caps()方法中查看接收器输出的输出,即使在设置了caps属性并且开始播放之后,它仍然是video / x-raw-rgb。取出行设置cap属性对输出没有影响。