Windows&Linux获取摄像头名称和默认麦克风设备名称 您所在的位置:网站首页 摄像头id大全 Windows&Linux获取摄像头名称和默认麦克风设备名称

Windows&Linux获取摄像头名称和默认麦克风设备名称

2023-08-17 02:08| 来源: 网络整理| 查看: 265

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

在这里插入图片描述 注意 ;windows版本使用了video_capture.dll、和audio_sdk.dll两个库进行获取的。

获取摄像头名称

vector 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 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()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有