平台:imx8mini
软件:linux
编译:yocto
按NXP文档通过yocto编译出来的系统,在rootfs里,有一部分qtmultimedia的库,但不全,且没有测试用例。所以要增加这个部分的程序库。通过增加编译,放到文件系统里,总是出现:
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
这个错误
通过网络查到的原因是没有安装一个插件,但我这个是嵌入式系统,不能通过安装。所以只能从别的方面来找原因。
通过跟进源码,发现如下:
Got keys from plugin meta data ("audiocapture")
QFactoryLoader::QFactoryLoader() checking directory path "/mnt/sd/mediaservice" ...
QMediaPluginLoader: loading metadata for iid "org.qt-project.qt.mediaserviceproviderfactory/5.0" at location "/mediaservice"
QMediaPluginLoader: Inserted index 0 into metadata: QJsonObject({"Keys":["gstreameraudiodecode"],"Services":["org.qt-project.qt.audiodecode"],"index":0})
QMediaPluginLoader: Inserting new list for key: "org.qt-project.qt.audiodecode"
QMediaPluginLoader: Inserted index 1 into metadata: QJsonObject({"Keys":["gstreamercamerabin"],"Services":["org.qt-project.qt.camera"],"index":1})
QMediaPluginLoader: Inserting new list for key: "org.qt-project.qt.camera"
QMediaPluginLoader: Inserted index 2 into metadata: QJsonObject({"Keys":["gstreamermediacapture"],"Services":["org.qt-project.qt.audiosource"],"index":2})
QMediaPluginLoader: Inserting new list for key: "org.qt-project.qt.audiosource"
QMediaPluginLoader: Inserted index 3 into metadata: QJsonObject({"Keys":["gstreamermediaplayer"],"Services":["org.qt-project.qt.mediaplayer"],"index":3})
QMediaPluginLoader: Inserting new list for key: "org.qt-project.qt.mediaplayer"
QMediaPluginLoader: Inserted index 4 into metadata: QJsonObject({"Keys":["audiocapture"],"Services":["org.qt-project.qt.audiosource"],"index":4})
Cannot load library /usr/lib/qt5/plugins/mediaservice/libgstcamerabin.so: (libQt5MultimediaGstTools.so.5: cannot open shared object file: No such file or directory)
QLibraryPrivate::loadPlugin failed on "/usr/lib/qt5/plugins/mediaservice/libgstcamerabin.so" : "Cannot load library /usr/lib/qt5/plugins/mediaservice/libgstcamerabin.so: (libQt5MultimediaGstTools.so.5: cannot open shared object file: No such file or directory)"
defaultServiceProvider::requestService(): plugins.isEmpty()
- true
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt5/plugins/wayland-graphics-integration-client" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt5/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so"
Found metadata in lib /usr/lib/qt5/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so, metadata=
上面的信息里:
libQt5MultimediaGstTools.so.5: cannot open shared
这个提示很重要,在文件系统里确定没查到,去编译完成的找到了文件,补进去。
这个问题就解决了。
经验:跟进源码,才能从根本处解决问题。