在Gstreamer中可以设置appsrc--ximagesink吗
我想把一些随机的字节流传输到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格式。去掉设置这个属性的那行代码,对输出没有任何影响。