我使用了两个DirectShow图表(在单独的线程上运行)来显示流式视频(在单独使用VMR 9时)并从两个摄像头捕获帧(使用Sample Grabber)。其中一个是内置摄像头(HP TrueVision HD),另一个是连接到USB端口的Creative VF0520。没有其他USB端口正在使用中。无法在DirectShow中显示两台摄像机
问题是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);