我使用了兩個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);