Этот вопрос связан с оставшимся без ответа вопросом «Отображать видео в Qml через плагин Gstreamer qmlglsink», поскольку у меня такая же проблема.
Проблема в том, что Qt Creator не может найти файл, необходимый для разрешения оператора import «org.freedesktop.gstreamer.GLVideoItem 1.0».
Когда я создаю новый проект QML и добавляю строку импорта «org.freedesktop.gstreamer.GLVideoItem 1.0». Я получаю эту ошибку. Проект компилируется и работает нормально.
У меня есть еще один проект, взятый из загруженного мной примера. Он использует GstGLVideoItem в своем qml-файле. Он также дает ту же ошибку, а также компилируется и работает нормально. Он без проблем воспроизводит видео Big Buck Bunny из файла.
Я полностью перестроил свой компьютер, пытаясь решить эту проблему. Переустановил Qt 5.15.2 с помощью онлайн-установщика и GStreamer 1.18.0, следуя инструкциям на веб-сайте GStreamer, на ПК с Ubuntu 20.10. И Qt, и GStreamer работают, как ожидалось. Мне удалось собрать и запустить любой желаемый пример Qt без проблем. Я также смог скомпилировать и запустить любое из руководств по GStreamer, а также свои собственные конвейеры с использованием C и gst-launch-1.0.
Эта проблема возникает в Qt Creator, когда я объединяю их и пытаюсь отобразить видео GStreamer в QML.
Я новичок в Linux, Qt, GStreamer, qmake, cmake ... Как я могу это отладить? Какой файл ищет оператор импорта? Это файл .qml или какой-то другой файл? Как мне найти точное имя файла, чтобы узнать, существует ли оно?
Вот содержимое файла .pro для проекта, в котором отображается видео. Я перепробовал все, что смог найти в Интернете, чтобы решить эту проблему, но без всякой радости.
TEMPLATE = app
QT += qml quick widgets
CONFIG += qml_debug
QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig debug
PKGCONFIG += \
gstreamer-1.0 \
gstreamer-sdp-1.0 \
gstreamer-gl-prototypes-1.0 \
gstreamer-gl-1.0 \
gstreamer-gl-egl-1.0 \
gstreamer-app-1.0 \
gstreamer-net-1.0 \
gstreamer-video-1.0 \
gstreamer-controller-1.0 \
gstreamer-rtsp-1.0 \
gstreamer-plugins-base-1.0 \
gstreamer-pbutils-1.0 \
gstreamer-check-1.0 \
gstreamer-allocators-1.0 \
gstreamer-rtp-1.0 \
gstreamer-riff-1.0 \
gstreamer-tag-1.0 \
gstreamer-audio-1.0 \
gstreamer-gl-x11-1.0 \
gstreamer-fft-1.0 \
gstreamer-base-1.0
CONFIG += c++17
INCLUDEPATH += /usr/include/gstreamer-1.0/
INCLUDEPATH += /usr/include/glib-2.0/
INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include/
DEFINES += GST_USE_UNSTABLE_API
INCLUDEPATH += ../lib
SOURCES += main.cpp \
qmlplayer.cpp \
setplaying.cpp
RESOURCES += qmlsink.qrc
QML_IMPORT_PATH += /usr/lib/x86_64-linux-gnu/gstreamer-1.0
QML_IMPORT_PATH += /usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0
QML_IMPORT_PATH += /lib/x86_64-linux-gnu/gstreamer-1.0
HEADERS += \
qmlplayer.h \
setplaying.h
Мэтью Уотерс на форуме GStreamer ответил на этот вопрос.
Цитирую его ниже.
Ах, ваша проблема заключается в том, что конструктор Qt не показывает поиск соответствующий qml-код. Этот вариант использования в настоящее время не поддерживается qmlglsink..
Проблема в том, что необходимый элемент QML содержится в qmlglsink и регистрируется динамически, когда элемент сам создается. Дизайнер Qt ничего не знает о GStreamer не может выполнить эту инициализацию за вас. Нет qmldir или файлы qmltype для qmlglsink.
«Исправление» связано с довольно сложной реструктуризацией qmlglsink. элемент для поддержки размещения части / плагина qml в отдельном .таким образом можно найти с помощью инструментов Qt (используя qmldir или что-то еще).
Какая это версия QtCreator?