1、Windows下根据摄像头VID&PID获取设备名称与获取默认麦克风设备名称


注意 ;windows版本使用了video_capture.dll、和audio_sdk.dll两个库进行获取的。

获取摄像头名称

vector<VideoCapInfo>   vecVideoCapInfo;int32_t                 nHandle = -1;if (nHandle == -1)nHandle = CreateVideoCaptureHandle(NULL, NULL);vecVideoCapInfo.clear();//遍历获取当前电脑连接的摄像头设备int nNum = GetNumOfDevices(nHandle);if (nNum > 0){for (int nIndex = 0; nIndex < nNum; nIndex++){VideoCapInfo videoCapInfo;CaptureCapability maxCap;videoCapInfo.nIndex = nIndex;if (GetDeviceName(nHandle, nIndex, videoCapInfo.szDeviceName, 1024, videoCapInfo.szDeviceUniqueName, 1024) == 0){/*if (bPrint)dzlog_info("%s(%d) \n   Camera-%d \n    cameraName: %s \n   cameraPid: %s ", __FUNCTION__, __LINE__, nIndex, videoCapInfo.szDeviceName, videoCapInfo.szDeviceUniqueName);*/bool bFind = false;int nNumCap = GetNumOfCapabilities(nHandle, videoCapInfo.szDeviceUniqueName);for (int i = 0; i < nNumCap; i++){CaptureCapability cap;if (GetCapability(nHandle, videoCapInfo.szDeviceUniqueName, i, cap) == 0){if (i == 0){maxCap.width = cap.width;maxCap.height = cap.height;maxCap.frameRate = cap.frameRate;}else{if (cap.width >= maxCap.width &&cap.height >= maxCap.height &&cap.frameRate >= maxCap.frameRate){maxCap.width = cap.width;maxCap.height = cap.height;maxCap.frameRate = cap.frameRate;}}/*if (bPrint)dzlog_info("%s(%d) width:%d height:%d frameRate:%d", __FUNCTION__, __LINE__, cap.width, cap.height, cap.frameRate);*/videoCapInfo.vecCapability.push_back(cap);}}if (videoCapInfo.vecCapability.size() > 0){videoCapInfo.vecCapability.push_back(maxCap);}vecVideoCapInfo.push_back(videoCapInfo);}}}

获取麦克风名称

//获取默认的音频麦克风设备名称
static string GetAudioName()
{string strAudioName = "";int32_t audioRecNum = 0;int32_t   nHandleAudioEx = -1;if (nHandleAudioEx == -1)nHandleAudioEx = CreateAudioHandle(NULL, NULL);vector<AudioCapInfo>  vecAudioCapInfo;GetNumOfRecordingDevices(nHandleAudioEx, audioRecNum);if (audioRecNum > 0){for (int i = 0; i < audioRecNum; i++){char name[1024] = { 0 };char guid[1024] = { 0 };if (GetRecordingDeviceName(nHandleAudioEx, i, name, guid) == 0){AudioCapInfo audioCapInfo = { 0 };strcpy(audioCapInfo.szDeviceName, name);strcpy(audioCapInfo.szDeviceUniqueName, guid);audioCapInfo.nIndex = i;vecAudioCapInfo.push_back(audioCapInfo);}}}if (vecAudioCapInfo.size() > 0){strAudioName = vecAudioCapInfo[0].szDeviceName;}if (nHandleAudioEx != -1){DeleteAudioHandle(nHandleAudioEx);nHandleAudioEx = -1;}return strAudioName;
}

2、Linux下检测当前VID&PID摄像头设备是否存在

主要是查看/sys/class/video4linux/video%d/device/modalias这个文件

int isVaildCamera(int id, std::string stridvid)
{//char *pidVid = "v046Dp0843";//char *pidVid = "v1BCFp2281";//char *pidVid = "v046Dp0825";const char *pidVid = stridvid.c_str();char szDeviceName[256] = {0};int nCameaId = id;sprintf(szDeviceName, "/dev/video%d", nCameaId);struct stat st;//qDebug() << "isVaildCamera" << pidVid;if (-1 != stat(szDeviceName, &st)){sprintf(szDeviceName, "/sys/class/video4linux/video%d/device/modalias", nCameaId);if (-1 != stat(szDeviceName, &st)){int fd_t = open(szDeviceName, O_RDONLY, 0);if (fd_t >= 0){char szReadBuf[1024] = {0};read(fd_t, szReadBuf, 1024);close(fd_t);char szPID[16] = {0};strncpy(szPID, szReadBuf + 4, 10);if (strncasecmp(pidVid, szPID, 10) == 0){return 0;}}}}zlog_debug(m_zc ,"CMBCamera::isVaildCamera() Fail!");return -1;
}

工程地址:之后上传

WindowsLinux获取摄像头名称和默认麦克风设备名称相关推荐

  1. OpenCV:如何获取摄像头的型号以及USB设备的VID和PID信息?

    VID和PID PID/VID唯一标识一个设备,HardwareID是为了给系统识别的 ,他是根据PID/VID而生成的.这个与序列号没什么关系,序列号一般都是厂家固化到芯片中的信息而已.GUID只是 ...

  2. ubuntu如何查看网卡名称_ubuntu更改网卡设备名称

    问题描述:ubuntu服务器为单网卡,设备名称为eth0,插入一块网卡后,增加新的网卡设备eth1,后来由于某种原因更换了第二换网卡,重启以后,网卡设置为eth0和eht2,想将网卡设备eth2改为e ...

  3. 如何获取安卓手机设备名称(包括用户自定义名称)

    获取安卓手机设备名称 最近公司有个需求,需要获取安卓手机的设备名称 搜了一大波资料后发现大多数获取设备名称的方法都是通过android.os.Build这个类拿到的,但是这种方法只能拿到手机型号啊,不 ...

  4. 检测、获取控制硬件摄像头,扬声器,麦克风的C#小实例

    项目需要,检测机器是否安装摄像头和麦克风,于是利用AForge和NAudio写了一个小实例,可以检测.获取控制硬件摄像头,扬声器,麦克风,有需要用的哪去,贴上部分代码. 源码下载地址: 检测.获取控制 ...

  5. Directshow 如何获取摄像头音视频设备,并判断摄像头是否占用。

    Directshow 能很方便的获取连接的 视频和音频设备的名称.本篇文章同时介绍如何判断获取的摄像头是否正在占用. 代码如下: (1) 获取摄像头音视频设备名称 void CDeviceTree:: ...

  6. 获取摄像头和麦克风权限_js获取浏览器摄像头和麦克风权限

    前言 项目中会使用到摄像头或麦克风设备,这就需要我们获取浏览器的摄像头和麦克风权限,权限是无法通过js操控的,必须由浏览器用户设置. 下面我来告诉大家如何获取浏览器的摄像头或麦克风的权限,使浏览器弹出 ...

  7. Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容。通过plus.speech可获取语音输入管理对象

    Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容.通过plus.speech可获取语音输入管理对象. 语音输入接口可使得网页开发人员能快速调用设备的麦克风进 ...

  8. Android设备 D获取,如何获取Android设备名称(常用ADB命令介绍)

    如何获取Android设备名称 sdk安装和配置 1.Android SDK 工具的安装,下载地址:https://www.androiddevtools.cn 2.环境变量配置 2.1:增加选项AN ...

  9. ios 区分iphone ipod ipad的方法及获取设备名称。

    coding如何区分iphone ipod & ipad 的几种方法 UI_USER_INTERFACE_IDIOM Returns the interface idiom supported ...

最新文章

  1. 实现基于Keepalived主从高可用集群网站架构
  2. 【云中沙箱】视频直播技术浅析与实践!
  3. asp 转换html代码,asp下实现对HTML代码进行转换的函数
  4. iOS11新增版本判断API
  5. .NET Core 2.1路线图
  6. Linux 串口编程一 一些背景
  7. 实例20:python
  8. 未来网闸的发展趋势(实际应用需求,解决方案)
  9. Win10安装pdf虚拟打印机的方法
  10. matlab图像噪声处理,基于matlab图像处理的去噪处理.doc
  11. 百亿外卖CPS市场该怎么玩?(附公众号小程序裂变源码及搭建教程)
  12. 苹果自带相册打马赛克_剪映app怎么给视频局部打马赛克
  13. Python中Scrapy框架的代理使用
  14. component: resolve = require(['../pages/home.vue'], resolve),
  15. Nginx实现前后端分离(springboot+vue)+双机互备
  16. 基于Python的JS逆向和AST抽象语法树
  17. utf-8无BOM编码格式什么意思?
  18. java 对比度_调整图像亮度、对比度、饱和度
  19. MMSystem.h头文件
  20. 海量数据处理常见问题

热门文章

  1. 神州租车持续创新,为消费者带去更好的出行体验
  2. 企业CDN缓存加速原理解密
  3. 化生政组合能选计算机专业吗,选化生政的女生适合什么专业?女生选化生政好吗?...
  4. python随机数(random)
  5. qml中使用canvas绘制温度计
  6. 奔图P3022D 评测
  7. 大功率降压恒流驱动方案 输出电流可做6A
  8. 插入读卡器时出现存储卡出现目录名称无效,解决方案
  9. 【1】集团蓝信下载地址
  10. golang-奇淫巧技