我正在使用两个DirectShow图形,在不同的线程上运行,以显示流视频(单独使用VMR 9)和从两个网络摄像头捕获帧(使用Sample Grabber)。其中一个是内置网络摄像头(HP TrueVision HD),另一个是连接到USB端口的Creative VF0520。其他USB端口均未使用。
问题是Creative相机开启(LED亮起),但没有流来。即使我禁用了内置网络摄像头,问题仍然存在。但是,如果在Creative CAM是唯一连接的相机的桌面上运行,Creative cam可以正常工作。
当每个摄像机是唯一连接的摄像机(Creative VF0520是唯一连接到桌面的摄像机时),该程序可以正常工作,但是当连接两个摄像机时,视频显示和抓帧仅适用于内置摄像机。在网络摄像头。
我怀疑使用捕获过滤器进行名字对象绑定可能会产生问题。我正在使用MSDN中的修改代码。这是绑定标记以捕获多个摄像机的过滤器的正确方法吗?
ULONG VideoPlayer::GetMonikers(IEnumMoniker *pEnum, std::vector<IMoniker *> *pListMonikers)
{
ULONG numRetrieved = 0;
IMoniker* pMoniker = NULL;
while (pEnum->Next(1, &pMoniker, &numRetrieved) == S_OK)
{
// Bind to vector
pListMonikers->push_back(pMoniker);
IPropertyBag *pPropBag;
HRESULT hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));
if (FAILED(hr))
{
(*ppMoniker)->Release();
continue;
}
// Get information to display
pPropBag->Release();
}
return numRetrieved;
}
然后访问包含标记的向量以绑定到捕获过滤器:
hr = listMonikers[CAMERA_ID]->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pCap);
答案 0 :(得分:0)
您的第一个也是最好的猜测故障排除2+ USB网络摄像头正在达到USB带宽限制。使用USB视频,您有很高的机会获得它,特别是。你提到的所有症状。请务必阅读以前的问题:
答案 1 :(得分:0)
这很可能与USB硬件有关。下载vlc并检查是否可以在两个不同的vlc实例上从两个摄像头获取视频。
vlc.exe - &gt;媒体 - &gt; opencapturecapture
如果你不能再开始钻进usb。可能是你的第二台usb摄像机被一台usb 1.0控制器拿起。我不认为这是directshow因为我可以让多个摄像头与directshow一起工作。
我遇到了同样的问题,它与usb带宽和usb控制器有关。尝试将摄像头插入不同的USB端口以及可能有效的。