Unsolved Qt and Gstreamer
-
Hi all,
I try to develop a QT application including Gstreamer on windows.
I had download GStreeamer 1.6.3 (normal and dev ) packages for windows and installed them.
Gstreamer alone work well. I try the following command and all is ok :
C:\gstreamer\1.0\x86\bin>gst-launch-1.0.exe videotestsrc pattern=0 ! autovideosinkSo I try to include Gstreamer in my QT application. I use QT 5.4.1 with mingw
To fix __gxx_personality_v0 link error, i remove stdc++.lib,libstdc++.la, and libstdc++.dll.a from gstreamer directory.
Here is my pro
#------------------------------------------------- # # Project created by QtCreator 2016-01-19T10:06:45 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = QtGstreamerPlayer TEMPLATE = app win32 { CONFIG(debug, debug|release): message("QT_CONFIG= debug") else: message("QT_CONFIG= release") } CONFIG(debug, debug|release){ DESTDIR = $${OUT_PWD}/bin/ } CONFIG(release, debug|release){ DESTDIR = $${OUT_PWD}/bin/ } #message("Dest DIR= $${DESTDIR}") INCLUDEPATH += c:/gstreamer/1.0/x86/include \ C:/gstreamer/1.0/x86/lib/gstreamer-1.0/include \ c:/gstreamer/1.0/x86/include/gstreamer-1.0 \ c:/gstreamer/1.0/x86/include/glib-2.0\ c:/gstreamer/1.0/x86/include/glib-2.0/glib \ c:/gstreamer/1.0/x86/lib/glib-2.0/include LIBS += -Lc:/gstreamer/1.0/x86/lib LIBS += -lglib-2.0 -lwinpthread -lgstreamer-1.0 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 CONFIG += c:/gstreamer/1.0/x86/lib/pkgconfig SOURCES += main.cpp\ qtgstreamerplayer.cpp HEADERS += qtgstreamerplayer.h FORMS += qtgstreamerplayer.ui
and source
#include "qtgstreamerplayer.h" #include <QApplication> #include <QGuiApplication> #include <gst/gst.h> #include "QDebug" int main(int argc, char *argv[]) { #if 1 QGuiApplication app(argc, argv); GstElement *pipeline; GstBus *bus; GstMessage *msg; putenv("GST_DEBUG=6"); // putenv("GST_PLUGIN_PATH_1_0=E:\\sdk\\gstreamer\\1.0\\x86_64\\lib\\gstreamer-1.0\\"); // putenv("GST_PLUGIN_PATH=E:\\sdk\\gstreamer\\1.0\\x86_64\\lib\\gstreamer-1.0\\"); putenv("GST_PLUGIN_PATH_1_0=C:\\gstreamer\\1.0\\x86\\lib\\gstreamer-1.0\\"); putenv("GST_PLUGIN_PATH=C:\\gstreamer\\1.0\\x86\\lib\\gstreamer-1.0\\"); /* Initialize GStreamer */ gst_init (&argc, &argv); /* Build the pipeline */ GError *Gerror = NULL; //pipeline = gst_parse_launch ("ksvideosrc device-index=0 ! autovideosink", &Gerror); // Windows OS specific //gst-launch-1.0.exe videotestsrc pattern=0 ! autovideosink pipeline = gst_parse_launch("videotestsrc pattern=0 ! autovideosink", &Gerror); QString str(Gerror->message); qDebug() << "gst_parse_launch error: " << str; if (!pipeline) { qDebug() << "pipeline empty error = " << str; exit (1); } if (!str.isEmpty()) { qDebug() << "gst_parse_launch error: " << str; exit (1); } /* Start playing */ gst_element_set_state (pipeline, GST_STATE_PLAYING); /* Wait until error or EOS */ bus = gst_element_get_bus (pipeline); msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS)); /* Free resources */ if (msg != NULL) gst_message_unref (msg); gst_object_unref (bus); gst_element_set_state (pipeline, GST_STATE_NULL); gst_object_unref (pipeline); return app.exec(); #else QApplication a(argc, argv); QtGstreamerPlayer w; w.show(); return a.exec(); #endif }
The application compile well but when I try to start the pipeline with gst_parse_launch I had this error : "no element "videotestsrc""
I suspect something wrong in gst_init. I had some warning for some dll not loaded
GStreamer-WARNING **: Failed to load plugin 'C:\gstreamer\1.0\x86\lib\gstreamer-1.0\libgstvideoconvert.dll': 'C:\gstreamer\1.0\x86\lib\gstreamer-1.0\libgstvideoconvert.dll': The specified module could not be found.
but don't understand why only some dll failed and some other successed. ( all the dll are present in this path) and I am not sure if this is really the issue.
Is anyone have some experience making Qt application with Gstreamer on windows?
Thans a lot
-
Hi ooznerol,
This question is old but same you, when i asked for gstreamer, i never had answer.
But i find something should help you (this helped me also):
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/build_system_integration.html
First, there is package make libray link with gstreamer-0.10 and gstreamer-1.x
This link show how to call/link the library the easy way.
hope this help.