2013-03-22 42 views
2

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

回答

0

這是最有可能與USB硬件。下載vlc並檢查是否可以在兩個不同的vlc實例上從兩個攝像頭獲取視頻。

vlc.exe - >媒體 - > opencapturecapture

如果你不能再啓動鑽孔插入USB。這可能是你的第二個USB攝像頭被USB 1.0控制器拾起。我不認爲它是directshow,因爲我可以讓多個攝像頭與directshow一起工作。

我有同樣的問題,它與usb帶寬和usb控制器有關。嘗試將相機插入不同的USB端口以及..可能工作。

相關問題