我的客户端上正在运行管道:
gst-launch-1.0 tcpclientsrc port=3344 host=10.0.0.7 ! tsdemux ! h264parse ! avdec_h264 ! autovideosink
运行正常。现在,我尝试将其转换为c ++程序,并使用qmlglsink将其显示在Qt小部件中。
我找出了以下对我有用的测试代码:
GstElement *pipeline = gst_pipeline_new(NULL);
GstElement *src = gst_element_factory_make("videotestsrc",NULL);
GstElement *glupload = gst_element_factory_make("glupload",NULL);
GstElement *qmlglsink = gst_element_factory_make("qmlglsink",NULL);
g_assert(src && glupload && qmlglsink);
gst_bin_add_many(GST_BIN(pipeline), src, glupload, sink);
gst_element_link_many(src, glupload, sink, NULL);
现在,我尝试以这种方式转换另一个管道:
GstElement *pipeline = gst_pipeline_new(NULL);
GstElement *src = gst_element_factory_make("tcpclientsrc",NULL);
GstElement *demuxer = gst_element_factory_make("tsdemux",NULL);
GstElement *parser = gst_element_factory_make("h264parse",NULL);
GstElement *decoder = gst_element_factory_make("avdec_h264",NULL);
GstElement *glupload = gst_element_factory_make("glupload",NULL);
GstElement *qmlglsink = gst_element_factory_make("qmlglsink",NULL);
g_assert(src && demuxer && parser && decoder && glupload && qmlglsink);
g_object_set(G_OBJECT(src), "host", "10.0.0.7", NULL);
g_object_set(G_OBJECT(src), "port", 3344, NULL);
gst_bin_add_many(GST_BIN(pipeline), src, demuxer, parser, decoder, glupload, sink);
gst_element_link_many(src, demuxer, parser, decoder, glupload, sink, NULL);
但是当我运行后一个管道时,它什么也没做。没有错误,但也没有视频流。我想我错过了一些链接命令。请帮忙,告诉我我在做什么错。
答案 0 :(得分:1)
没有错误?您是否在管道总线上轮询错误消息?您是否已使用GST_DEBUG=3
运行该应用以检查提示?
但是,仅从观看角度来看-我假设avdec_h264
将以I420
作为输出视频格式,而qmlglsink
则需要RGBA
格式。因此,您缺少色彩空间转换器。既然您还是要上传到GL,我建议使用glcolorconvert
。
因此,请更改代码以创建如下所示的管道:.. ! glupload ! glcolorconvert ! qmlglsink