最近的项目需要使用设备的摄像头拍照,原来的方案是使用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