2013-03-22 75 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端口以及..可能工作。

相关问题