我是GStreamer领域的新手,所以我不知道它是如何工作的以及如何配对所有GstElement。
我想将视频(例如,mp4或任何其他视频格式)与qml(来自Qt)进行合并。 This example可以正常工作。
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);
但是该示例使用videotestsrc
作为源,我更喜欢使用类似filesrc
的东西。
我尝试了这段代码:
GstElement *pipeline = gst_pipeline_new (NULL);
GstElement *src = gst_element_factory_make ("filesrc", "file-source");
GstElement *parser = gst_element_factory_make("h264parse",NULL);
GstElement *decoder = gst_element_factory_make("avdec_h264",NULL);
GstElement *colors = gst_element_factory_make("glcolorconvert",NULL);
GstElement *glupload = gst_element_factory_make ("glupload", NULL);
GstElement *sink = gst_element_factory_make ("qmlglsink", NULL);
g_assert (src && parser && decoder %% colors && glupload && sink);
g_object_set (G_OBJECT (src), "location", "file:///home/test.mp4", NULL);
gst_bin_add_many (GST_BIN (pipeline), src, parser, decoder, glupload, colors, sink, NULL);
gst_element_link_many (src, parser, decoder, glupload, colors, sink, NULL);
它可以编译,但是输出只是一个黑屏。
由于我不确定GStreamer管道的工作方式,因此我尝试了这一点。
首先,使用filesrc
从内存中获取文件,然后使用h265parse
对其进行解析,并使用avdec_h264
对其进行解码。然后将其转发(我猜为原始未压缩的数据)到glupload
并使用glcolorconvert
使颜色变好,因为qmlglsink
使用 RGBA ,而avdec_h264
是 I420 。上色后,将其调整为qmlglsink
,以qml显示。
我丢失了一些东西,而且我不知道如何配对GstElemnts
,因为我说过需要配对filesrc
(任何视频格式)和qmlglsink
。
答案 0 :(得分:1)
你可以像下面这样尝试
MediaPlayer{
id: playVideo
source: "gst-pipeline: filesrc location=/home/root/skim-debris.mp4 ! qtdemux ! avdec_h264 ! qtvideosink"
autoLoad: true
autoPlay: true
playbackRate: 1.0
loops: 10
}
VideoOutput {
anchors.fill: parent
source: playVideo
}
答案 1 :(得分:0)
使用bin
或任何GStreamers自动插件会更容易。
但是这里的主要问题是您尝试将MP4文件视为H.264流。这样无法正常工作。您需要从容器中解复用媒体流。
例如管道应该是这样的:
gst-launch-1.0 filesrc location=/home/test.mp4 ! qtdemux ! \
h264parse ! avdec_h264 ! glupload ! glcolorconvert ! qmlglsink