最近的項目需要使用設備的攝像頭拍照,原來的方案是使用opencv,因爲是使用Qt開發,就計劃使用Multimedia模塊簡化項目的庫依賴,參考官方示例:
https://doc.qt.io/qt-5/qtmultimedia-multimediawidgets-camera-example.html
開發環境是xubuntu 16.04.5,編譯完運行示例程序輸出:
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
接着示例程序報錯:
camera service is missing
搜索後發現這篇文章:
https://forum.qt.io/topic/57924/camera-service-is-missing/4
在終端中設置:
export QT_DEBUG_PLUGINS=1
再次運行程序,觀察輸出:
Found metadata in lib /mnt/data/dev_libs/qt_5.5.1/5.5/gcc/plugins/mediaservice/libqtmedia_audioengine.so, metadata=
{
"IID": "org.qt-project.qt.mediaserviceproviderfactory/5.0",
"MetaData": {
"Keys": [
"audiocapture"
],
"Services": [
"org.qt-project.qt.audiosource"
]
},
"className": "AudioCaptureServicePlugin",
"debug": false,
"version": 328961
}
通過查看Qt的安裝目錄/mnt/data/dev_libs/qt_5.5.1/5.5/gcc/plugins/mediaservice/,裏面只有libqtmedia_audioengine.so,看起來缺少視頻相關插件(這個很奇怪,是使用官方的程序安裝的),一番搜索這樣解決:
1.安裝本版本的多媒體插件,比如我安裝的是Qt5
sudo apt-get install libqt5multimedia5-plugins
2. 將安裝後的多媒體插件鏈接庫copy到Qt的安裝目錄,比如我的系統是這樣:
cp /usr/lib/i386-linux-gnu/qt5/plugins/mediaservice/* /mnt/data/dev_libs/qt_5.5.1/5.5/gcc/plugins/mediaservice/
如果不清楚第一步安裝的文件到哪裏了,可以通過 find /usr/lib -name libqtmedia_* 來定位,通常不會跑出/usr/lib這個目錄,要是系統安裝了dpkg,可以使用 dpkg -L libqt5multimedia5-plugins,比如在我的環境輸出:
saga@zzz:/$ dpkg -L libqt5multimedia5-plugins
/.
/usr
/usr/lib
/usr/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu/qt5
/usr/lib/i386-linux-gnu/qt5/plugins
/usr/lib/i386-linux-gnu/qt5/plugins/playlistformats
/usr/lib/i386-linux-gnu/qt5/plugins/playlistformats/libqtmultimedia_m3u.so
/usr/lib/i386-linux-gnu/qt5/plugins/audio
/usr/lib/i386-linux-gnu/qt5/plugins/audio/libqtaudio_alsa.so
/usr/lib/i386-linux-gnu/qt5/plugins/audio/libqtmedia_pulse.so
/usr/lib/i386-linux-gnu/qt5/plugins/mediaservice
/usr/lib/i386-linux-gnu/qt5/plugins/mediaservice/libgstcamerabin.so
/usr/lib/i386-linux-gnu/qt5/plugins/mediaservice/libgstmediacapture.so
/usr/lib/i386-linux-gnu/qt5/plugins/mediaservice/libgstmediaplayer.so
/usr/lib/i386-linux-gnu/qt5/plugins/mediaservice/libgstaudiodecoder.so
/usr/share
/usr/share/doc
/usr/share/doc/libqt5multimedia5-plugins
/usr/share/doc/libqt5multimedia5-plugins/copyright
/usr/share/doc/libqt5multimedia5-plugins/changelog.Debian.gz