平臺: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
這個提示很重要,在文件系統裏確定沒查到,去編譯完成的找到了文件,補進去。
這個問題就解決了。
經驗:跟進源碼,才能從根本處解決問題。