问题描述
用directshow操作摄像头,当摄像头数量超过5个的时候提示连接到系统上的设备没有发挥作用,4个的时候都可以正常工作代码是用的是directshow的samples改的如下inthr;ISampleGrabbersampGrabber=null;IBaseFiltercapFilter=null;IPinpCaptureOut=null;IPinpSampleIn=null;IPinpRenderIn=null;//Getthegraphbuilderobjectm_FilterGraph=newFilterGraph()asIFilterGraph2;try{#ifDEBUGm_rot=newDsROTEntry(m_FilterGraph);#endif//addthevideoinputdevicehr=m_FilterGraph.AddSourceFilterForMoniker(dev.Mon,null,dev.Name,outcapFilter);DsError.ThrowExceptionForHR(hr);//Findthestillpinm_pinStill=DsFindPin.ByCategory(capFilter,PinCategory.Still,0);//Didn'tfindone.Isthereapreviewpin?if(m_pinStill==null){m_pinStill=DsFindPin.ByCategory(capFilter,PinCategory.Preview,0);}//Stillhaven'tfoundone.Needtoputasplitterinsowehave//onestreamtocapturethebitmapfrom,andonetodisplay.Ok,we//don't*have*todoitthatway,butwearegoingtoanyway.if(m_pinStill==null){IPinpRaw=null;IPinpSmart=null;//Thereisnostillpinm_VidControl=null;//AddasplitterIBaseFilteriSmartTee=(IBaseFilter)newSmartTee();try{hr=m_FilterGraph.AddFilter(iSmartTee,"SmartTee");DsError.ThrowExceptionForHR(hr);//Findthefindthecapturepinfromthevideodeviceandthe//inputpinforthesplitter,andconnnectthempRaw=DsFindPin.ByCategory(capFilter,PinCategory.Capture,0);pSmart=DsFindPin.ByDirection(iSmartTee,PinDirection.Input,0);hr=m_FilterGraph.Connect(pRaw,pSmart);DsError.ThrowExceptionForHR(hr);//Nowsetthecaptureandstillpins(fromthesplitter)m_pinStill=DsFindPin.ByName(iSmartTee,"Preview");pCaptureOut=DsFindPin.ByName(iSmartTee,"Capture");//Ifanyofthedefaultconfigitemsareset,performtheconfig//ontheactualvideodevice(ratherthanthesplitter)if(iHeight+iWidth+iBPP>0){//SetConfigParms(pRaw,iWidth,iHeight,iBPP);}}finally{if(pRaw!=null){Marshal.ReleaseComObject(pRaw);}if(pRaw!=pSmart){Marshal.ReleaseComObject(pSmart);}if(pRaw!=iSmartTee){Marshal.ReleaseComObject(iSmartTee);}}}else{//Getacontrolpointer(usedinClick())m_VidControl=capFilterasIAMVideoControl;pCaptureOut=DsFindPin.ByCategory(capFilter,PinCategory.Capture,0);//Ifanyofthedefaultconfigitemsaresetif(iHeight+iWidth+iBPP>0){SetConfigParms(m_pinStill,iWidth,iHeight,iBPP);}}//GettheSampleGrabberinterfacesampGrabber=newSampleGrabber()asISampleGrabber;//ConfigurethesamplegrabberIBaseFilterbaseGrabFlt=sampGrabberasIBaseFilter;ConfigureSampleGrabber(sampGrabber);pSampleIn=DsFindPin.ByDirection(baseGrabFlt,PinDirection.Input,0);//GetthedefaultvideorendererIBaseFilterpRenderer=newVideoRendererDefault()asIBaseFilter;hr=m_FilterGraph.AddFilter(pRenderer,"Renderer");DsError.ThrowExceptionForHR(hr);pRenderIn=DsFindPin.ByDirection(pRenderer,PinDirection.Input,0);//Addthesamplegrabbertothegraphhr=m_FilterGraph.AddFilter(baseGrabFlt,"Ds.NETGrabber");DsError.ThrowExceptionForHR(hr);if(m_VidControl==null){//ConnecttheStillpintothesamplegrabberhr=m_FilterGraph.Connect(m_pinStill,pSampleIn);DsError.ThrowExceptionForHR(hr);//Connectthecapturepintotherendererhr=m_FilterGraph.Connect(pCaptureOut,pRenderIn);DsError.ThrowExceptionForHR(hr);}else{//Connectthecapturepintotherendererhr=m_FilterGraph.Connect(pCaptureOut,pRenderIn);DsError.ThrowExceptionForHR(hr);//ConnecttheStillpintothesamplegrabberhr=m_FilterGraph.Connect(m_pinStill,pSampleIn);DsError.ThrowExceptionForHR(hr);}//LearnthevideopropertiesSaveSizeInfo(sampGrabber);ConfigVideoWindow(hControl);//StartthegraphIMediaControlmediaCtrl=m_FilterGraphasIMediaControl;hr=mediaCtrl.Run();DsError.ThrowExceptionForHR(hr);}hr=mediaCtrl.Run();当跑到这步的时候就报示连接到系统上的设备没有发挥作用
解决方案
解决方案二:
自己顶一下,没人遇到过类似的问题么
解决方案三:
不会,帮顶
解决方案四:
本人项目3个高清USB启动也遇到这个问题,最后确定是硬件总线资源不足,无法启动摄像头。请尝试将摄像头连接到位于不同总线控制器的USB接口上,并避免使用USB3.0.如果依旧无法解决问题,则基本确定你需要更强劲的主板、扩展USB卡或视频监视卡以支持多摄像头。
解决方案五:
虽然不知道为什么,但3楼的说法有一定道理。
解决方案六:
问题解决了?本人也遇到类似的问题,但是在笔记本有自带摄像头时就没有这个问题