Невозможно отобразить две камеры в DirectShow
Я использую два графика DirectShow, работающие в отдельных потоках, для отображения потокового видео (с использованием VMR 9 на отдельном устройстве) и захвата кадров (с использованием Sample Grabber) с двух веб-камер. Одна из них - встроенная веб-камера (HP TrueVision HD), а другая - Creative VF0520, подключенная к порту USB. Ни один из других портов USB не используется.
Проблема в том, что камера Creative включается (горит светодиод), но поток не проходит. Проблема сохраняется, даже если я отключил встроенную веб-камеру. Однако 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);
2 ответа
Скорее всего, это связано с USB-оборудованием. скачайте vlc и проверьте, можете ли вы получить видео с обеих камер на 2 разных экземплярах vlc.
vlc.exe -> медиа -> opencapturecapture
Если вы не можете тогда начать бурение в USB. Может случиться так, что ваши 2-ые USB-камеры обнаруживаются контроллером USB 1.0. Я не думаю, что это DirectShow, потому что я могу заставить несколько камер работать с DirectShow.
У меня была такая же проблема, и она была связана с пропускной способностью USB и контроллером USB. Попробуйте подключить камеры к различным USB-портам, а это может сработать.
Ваша первая и самая лучшая догадка при поиске и устранении неисправностей для 2+ USB-камер превышает ограничение пропускной способности USB. С USB-видео у вас так много шансов попасть в него, особенно со всеми симптомами, которые вы упомянули. Обязательно прочитайте предыдущие вопросы по этому вопросу: