Windows设备信息获取:(摄像头,声卡为例)Qt,WindowsAPI对比说明(2)

网友投稿 813 2022-05-30

Windows设备信息获取:(摄像头,声卡为例)Qt,WindowsAPI对比说明

补充说明

问题

QT摄像头相关信息获取(分辨率,图像格式)

WindowsAPI,win10,win7不兼容问题

兼容代码

解决方案

其他相关

补充说明

在上一篇文档中,文档末尾提到了,win10,win7兼容问题,QCamera未发现的问题,这里都做一下说明。

问题

QCameraInfo问题

在QAudioDeviceInfo中,DeviceName()直接打印,即

foreach(const QAudioDeviceInfo &deviveInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioInput)) { qDebug() << "InputDeviceName:" << deviveInfo.deviceName(); }

1

2

3

4

打印结果。

InputDeviceName: "立体声混音 (Realtek High Definition Audio)"

1

在QCamerInfo中,打印结果如下

Windows设备信息获取:(摄像头,声卡为例)Qt,WindowsAPI对比说明(2)

QList cameras = QCameraInfo::availableCameras(); foreach(const QCameraInfo &cameraInfo, cameras) { qDebug() << "CameraInfo:-deviceName()" <

1

2

3

4

打印的是设备路径,不是我们想要的设备名称,后来我去看官方文档说明:

CameraInfo:-deviceName() "@device:pnp:\\\\?\\usb#vid_046d&pid_0843&mi_00#6&86ea809&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global"

1

说明如下:

返回的是摄像头的驱动名称,这是唯一的机器可识别的ID号,和是人类不能识别的。

**QString QCameraInfo::deviceName() const** Returns the device name of the camera This is a unique ID to identify the camera and may not be human-readable.

1

2

3

4

后来继续看文档,看到一个这函数

description(),返回的是人类可识别的描述。

QString QCameraInfo::description() const Returns the human-readable description of the camera.

1

2

后将几个函数打印出来看。

QList cameras = QCameraInfo::availableCameras(); foreach(const QCameraInfo &cameraInfo, cameras) { qDebug() << "CameraInfo:-description()" << cameraInfo.description(); qDebug() << "CameraInfo:-deviceName()" <

1

2

3

4

5

6

打印结果如下:

CameraInfo:-description() "Logitech Webcam C930e" CameraInfo:-deviceName() "@device:pnp:\\\\?\\usb#vid_046d&pid_0843&mi_00#6&86ea809&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global" CameraInfo:-defaultCamera() "QCameraInfo(deviceName=@device:pnp:\\\\?\\usb#vid_046d&pid_0843&mi_00#6&86ea809&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global, position=UnspecifiedPosition, orientation=0)"

1

2

3

我然后去查看了一下QAudioDeviceInfo的文档说明

QAudioDeviceInfo::deviceName(),说到,这个函数,返回音频驱动,人类可识别的名称。

QString QAudioDeviceInfo::deviceName() const Returns the human readable name of the audio device. Device names vary depending on the platform/audio plugin being used. They are a unique string identifier for the audio device. eg. default, Intel, U0x46d0x9a4

1

2

3

4

5

QT摄像头相关信息获取(分辨率,图像格式)

捎带,又看了一下其他函数。

摄像头驱动名称已经拿到,还有摄像头支持图像格式,分辨率

函数如下:

QList mResSize = {};//分辨率List 定义 QList cameras = QCameraInfo::availableCameras(); foreach(const QCameraInfo &cameraInfo, cameras) { qDebug() << "CameraInfo:-description()" << cameraInfo.description(); QCamera mCamera(cameraInfo); mCamera.start(); QList mList = mCamera.supportedViewfinderPixelFormats();//图像格式 mResSize = mCamera.supportedViewfinderResolutions(); foreach (QSize msize, mResSize) { qDebug()<

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Format_YUYV Format_Jpeg //图像格式 //分辨率如下 QSize(160, 120) QSize(176, 144) QSize(320, 180) QSize(320, 240) QSize(352, 288) QSize(424, 240) QSize(480, 270) QSize(640, 360) QSize(640, 480) QSize(800, 448) QSize(848, 480) QSize(800, 600) QSize(960, 540) QSize(1024, 576) QSize(1280, 720) QSize(1600, 896) QSize(1920, 1080) QSize(2304, 1296) QSize(2304, 1536)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

相关功能函数:

注意使用时,先打开摄像头,并且摄像头打开成功,才能获取到这些信息。

QList QCamera::supportedViewfinderResolutions(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const

1

QList QCamera::supportedViewfinderPixelFormats(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const

1

其他函数还有。

QList QCamera::supportedViewfinderFrameRateRanges(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const QList QCamera::supportedViewfinderSettings(const QCameraViewfinderSettings &settings = QCameraViewfinderSettings()) const

1

2

WindowsAPI,win10,win7不兼容问题

HID,调用的时候,打印发现

Win10下,摄像头类为

Camera

1

Win7下,摄像头类为

Image

1

所以函数在识别的判断的时候,判断不到。

音频类同理,

QT库,我在win10下安装,编译的,在Win7下使用不了,同理。在调用windows底层API时,判断条件不一样,所以不兼容。

GUID,属性,随后测试结果给说明。

兼容代码

随后,写好之后贴上来。

/****更新/

解决方案并不是代码原因而是一些依赖库的的问题,详细解决方案见下文。

解决方案

Qt 有一个官方打包依赖库文件的工具,windeployqt.exe,在 Qt bin 目录下,以我的为例。

C:\Qt\Qt5.8.0\5.8\msvc2013\bin

1

使用方法。

C:\Qt\Qt5.8.0\5.8\msvc2013\bin>windeployqt -h Usage: windeployqt [options] [files] Qt Deploy Tool 5.8.0 The simplest way to use windeployqt is to add the bin directory of your Qt installation (e.g. ) to the PATH variable and then run: windeployqt If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH variable. If your application uses Qt Quick, run: windeployqt --qmldir Options: -?, -h, --help Displays this help. -v, --version Displays version information. --dir Use directory instead of binary directory. --libdir Copy libraries to path. --plugindir Copy plugins to path. --debug Assume debug binaries. --release Assume release binaries. --pdb Deploy .pdb files (MSVC). --force Force updating files. --dry-run Simulation mode. Behave normally, but do not copy/update any files. --no-plugins Skip plugin deployment. --no-libraries Skip library deployment. --qmldir Scan for QML-imports starting from directory. --no-quick-import Skip deployment of Qt Quick imports. --no-translations Skip deployment of translations. --no-system-d3d-compiler Skip deployment of the system D3D compiler. --compiler-runtime Deploy compiler runtime (Desktop only). --no-compiler-runtime Do not deploy compiler runtime (Desktop only). --webkit2 Deployment of WebKit2 (web process). --no-webkit2 Skip deployment of WebKit2. --json Print to stdout in JSON format. --angle Force deployment of ANGLE. --no-angle Disable deployment of ANGLE. --no-opengl-sw Do not deploy the software rasterizer library. --list

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

简单的说,因为没有配置系统变量,所以需要进入 windeployqt.exe所在目录下,即

cd C:\Qt\Qt5.8.0\5.8\msvc2013\bin

1

打包命令如下:

windeployqt

1

即,你需要打包的exe全路径

windeployqt /path/file.exe

1

运行结果,如下

C:\Qt\Qt5.8.0\5.8\msvc2013\bin>windeployqt E:\9-Pccamer\DesConsole\build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug\debug\app\file.exe E:\9-Pccamer\DesConsole\build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug\debug\app\PCCamer.exe 32 bit, debug executable Adding Qt5Svg for qsvgicond.dll Skipping plugin qtvirtualkeyboardplugind.dll due to disabled dependencies. Direct dependencies: Qt5Core Qt5Multimedia Qt5Widgets All dependencies : Qt5Core Qt5Gui Qt5Multimedia Qt5Network Qt5Widgets To be deployed : Qt5Core Qt5Gui Qt5Multimedia Qt5Network Qt5Svg Qt5Widgets Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set. Updating Qt5Cored.dll. Updating Qt5Guid.dll. Updating Qt5Multimediad.dll. Updating Qt5Networkd.dll. Updating Qt5Svgd.dll. Updating Qt5Widgetsd.dll. Updating libGLESV2d.dll. Updating libEGLd.dll. Updating D3Dcompiler_47.dll. Updating opengl32sw.dll. Patching Qt5Cored.dll... Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/audio. Updating qtaudio_windowsd.dll. Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/bearer. Updating qgenericbearerd.dll. Updating qnativewifibearerd.dll. Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/iconengines. Updating qsvgicond.dll. Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/imageformats. Updating qgifd.dll. Updating qicnsd.dll. Updating qicod.dll. Updating qjpegd.dll. Updating qsvgd.dll. Updating qtgad.dll. Updating qtiffd.dll. Updating qwbmpd.dll. Updating qwebpd.dll. Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/mediaservice. Updating dsengined.dll. Updating qtmedia_audioengined.dll. Updating wmfengined.dll. Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/platforms. Updating qwindowsd.dll. Creating directory E:/9-Pccamer/DesConsole/build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug/debug/app/playlistformats. Updating qtmultimedia_m3ud.dll. Creating E:\9-Pccamer\DesConsole\build-DesConsole-Desktop_Qt_5_8_0_MSVC2013_32bit-Debug\debug\app\translations... Creating qt_ca.qm... Creating qt_cs.qm... Creating qt_de.qm... Creating qt_en.qm... Creating qt_fi.qm... Creating qt_fr.qm... Creating qt_he.qm... Creating qt_hu.qm... Creating qt_it.qm... Creating qt_ja.qm... Creating qt_ko.qm... Creating qt_lv.qm... Creating qt_pl.qm... Creating qt_ru.qm... Creating qt_sk.qm... Creating qt_uk.qm...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

打包完的目录结构如下。

即可打包完成,不兼容问题,就这样解决了。

其他相关

从目录结构上来看,可能其他系统不兼容的问题,是由于,audio,mediaservice,imageformats,playlistformats几个目录下的文件缺失导致的。

建议,也算个人经验吧,以后打包Qt可执行程序时尽量使用官方打包软件。

API Qt Windows

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《敏捷软件开发:用户故事实战》
下一篇:【RecyclerView】 十三、RecyclerView 数据更新 ( 移动数据 | 数据改变 )
相关文章