WindowsLinux获取摄像头名称和默认麦克风设备名称
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获取摄像头名称和默认麦克风设备名称相关推荐
- OpenCV:如何获取摄像头的型号以及USB设备的VID和PID信息?
VID和PID PID/VID唯一标识一个设备,HardwareID是为了给系统识别的 ,他是根据PID/VID而生成的.这个与序列号没什么关系,序列号一般都是厂家固化到芯片中的信息而已.GUID只是 ...
- ubuntu如何查看网卡名称_ubuntu更改网卡设备名称
问题描述:ubuntu服务器为单网卡,设备名称为eth0,插入一块网卡后,增加新的网卡设备eth1,后来由于某种原因更换了第二换网卡,重启以后,网卡设置为eth0和eht2,想将网卡设备eth2改为e ...
- 如何获取安卓手机设备名称(包括用户自定义名称)
获取安卓手机设备名称 最近公司有个需求,需要获取安卓手机的设备名称 搜了一大波资料后发现大多数获取设备名称的方法都是通过android.os.Build这个类拿到的,但是这种方法只能拿到手机型号啊,不 ...
- 检测、获取控制硬件摄像头,扬声器,麦克风的C#小实例
项目需要,检测机器是否安装摄像头和麦克风,于是利用AForge和NAudio写了一个小实例,可以检测.获取控制硬件摄像头,扬声器,麦克风,有需要用的哪去,贴上部分代码. 源码下载地址: 检测.获取控制 ...
- Directshow 如何获取摄像头音视频设备,并判断摄像头是否占用。
Directshow 能很方便的获取连接的 视频和音频设备的名称.本篇文章同时介绍如何判断获取的摄像头是否正在占用. 代码如下: (1) 获取摄像头音视频设备名称 void CDeviceTree:: ...
- 获取摄像头和麦克风权限_js获取浏览器摄像头和麦克风权限
前言 项目中会使用到摄像头或麦克风设备,这就需要我们获取浏览器的摄像头和麦克风权限,权限是无法通过js操控的,必须由浏览器用户设置. 下面我来告诉大家如何获取浏览器的摄像头或麦克风的权限,使浏览器弹出 ...
- Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容。通过plus.speech可获取语音输入管理对象
Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容.通过plus.speech可获取语音输入管理对象. 语音输入接口可使得网页开发人员能快速调用设备的麦克风进 ...
- Android设备 D获取,如何获取Android设备名称(常用ADB命令介绍)
如何获取Android设备名称 sdk安装和配置 1.Android SDK 工具的安装,下载地址:https://www.androiddevtools.cn 2.环境变量配置 2.1:增加选项AN ...
- ios 区分iphone ipod ipad的方法及获取设备名称。
coding如何区分iphone ipod & ipad 的几种方法 UI_USER_INTERFACE_IDIOM Returns the interface idiom supported ...
最新文章
- 实现基于Keepalived主从高可用集群网站架构
- 【云中沙箱】视频直播技术浅析与实践!
- asp 转换html代码,asp下实现对HTML代码进行转换的函数
- iOS11新增版本判断API
- .NET Core 2.1路线图
- Linux 串口编程一 一些背景
- 实例20:python
- 未来网闸的发展趋势(实际应用需求,解决方案)
- Win10安装pdf虚拟打印机的方法
- matlab图像噪声处理,基于matlab图像处理的去噪处理.doc
- 百亿外卖CPS市场该怎么玩?(附公众号小程序裂变源码及搭建教程)
- 苹果自带相册打马赛克_剪映app怎么给视频局部打马赛克
- Python中Scrapy框架的代理使用
- component: resolve = require(['../pages/home.vue'], resolve),
- Nginx实现前后端分离(springboot+vue)+双机互备
- 基于Python的JS逆向和AST抽象语法树
- utf-8无BOM编码格式什么意思?
- java 对比度_调整图像亮度、对比度、饱和度
- MMSystem.h头文件
- 海量数据处理常见问题