最近做了一个关于摄像头的项目,需要适配WindowsXP及以上系统,需要兼容XP系统就打算用dshow技术,顺便把相关技术学了一遍,这里给大家分享一下如何打开指定摄像头设备。

通过设备VID/PID找到指定摄像头设备

HRESULTGetCameraId(){
   
   
	ICreateDevEnum *pDevEnum =NULL;
	IEnumMoniker *pEnum =NULL;HRESULT hr =NULL;CoInitialize(NULL);
	int index =-1;
	int iCapCount =0;
	hr =CoCreateInstance(CLSID_SystemDeviceEnum,NULL,CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast<void**>(&pDevEnum));if(SUCCEEDED(hr)){
   
   
		hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEnum,0);if(hr ==S_OK){
   
   //枚举捕获设备
			IMoniker *pMoniker =NULL;ULONG cFetched;while(pEnum->Next(1,&pMoniker,&cFetched)==S_OK){
   
   
				IPropertyBag* pPropBag;
				hr = pMoniker-