QmlGlSink BlackScreen on Rtsp Display
-
When i try to build & run the example down below i see the videotestsrc in my qml. But i can not do the same for a rtsp stream. Only thing that i get is a black screen ? Any help would be appreciated.
Here is the example : https://github.com/GStreamer/gst-plugins-good/tree/1.18/tests/examples/qt/qmlsink
And here is a part of my code :
GstElement *pipeline = gst_pipeline_new(NULL); GstElement *src = gst_element_factory_make("rtspsrc",NULL); GstElement *rtph264depay = gst_element_factory_make("rtph264depay",NULL); GstElement *h264parse = gst_element_factory_make("h264parse",NULL); //GstElement *encoder = gst_element_factory_make("x264enc",NULL); GstElement *decoder = gst_element_factory_make("avdec_h264",NULL); GstElement *glupload = gst_element_factory_make("glupload",NULL); GstElement *glcolorconvert = gst_element_factory_make("glcolorconvert",NULL); GstElement *qmlglsink = gst_element_factory_make("qmlglsink",NULL); g_assert(src && rtph264depay && h264parse && decoder && glupload && glcolorconvert && qmlglsink); g_object_set(G_OBJECT(src), "location", "rtsp://localhost:9300/" , NULL); gst_bin_add_many(GST_BIN(pipeline), src, rtph264depay,h264parse,decoder,glupload, glcolorconvert , qmlglsink , NULL ); gst_element_link_many(src, rtph264depay,h264parse,decoder,glupload, glcolorconvert , qmlglsink , NULL); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QQuickItem *videoItem; QQuickWindow *rootObject; /* find and set the videoItem on the sink */ rootObject = static_cast<QQuickWindow *> (engine.rootObjects().first()); videoItem = rootObject->findChild<QQuickItem *> ("videoItem"); g_assert (videoItem); g_object_set(qmlglsink , "widget", videoItem, NULL); rootObject->scheduleRenderJob (new SetPlaying (pipeline), QQuickWindow::BeforeSynchronizingStage); ret = app.exec(); -
Hi and welcome to devnet,
Beside the QML sink, are you sure the rest of the pipeline is correct ?
-
Hi and welcome to devnet,
Beside the QML sink, are you sure the rest of the pipeline is correct ?
@SGaist When i use some pipeline like this :
gst-launch-1.0 filesrc location=C:/Users/X/Desktop/Stabil.mp4 ! decodebin ! glupload ! glcolorconvert ! glimagesink
It works but when i convert this to my code i guess the decodebin what makes it looks like a black screen.
And here is my code for a pipeline like this :
GstElement *pipeline = gst_pipeline_new (NULL); GstElement *src = gst_element_factory_make ("filesrc", NULL); GstElement *decoder = gst_element_factory_make("decodebin",NULL); GstElement *glupload = gst_element_factory_make ("glupload", NULL); GstElement *glcolorconvert = gst_element_factory_make("glcolorconvert",NULL); /* the plugin must be loaded before loading the qml file to register the * GstGLVideoItem qml item */ GstElement *sink = gst_element_factory_make ("qmlglsink", NULL); g_object_set(G_OBJECT(src), "location", "C:/Users/X/Desktop/Stabil.mp4" , NULL); g_assert (src && decoder && glupload && glcolorconvert && sink); gst_bin_add_many (GST_BIN (pipeline), src, decoder , glupload, glcolorconvert , sink, NULL); gst_element_link_pads(src, "src", decoder, "sink"); gst_element_link_many (src, decoder , glupload, glcolorconvert , sink, NULL); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QQuickItem *videoItem; QQuickWindow *rootObject; /* find and set the videoItem on the sink */ rootObject = static_cast<QQuickWindow *> (engine.rootObjects().first()); videoItem = rootObject->findChild<QQuickItem *> ("videoItem"); g_assert (videoItem); g_object_set(sink , "widget", videoItem, NULL); rootObject->scheduleRenderJob (new SetPlaying (pipeline), QQuickWindow::BeforeSynchronizingStage); ret = app.exec();