Невозможно отобразить две камеры в 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-видео у вас так много шансов попасть в него, особенно со всеми симптомами, которые вы упомянули. Обязательно прочитайте предыдущие вопросы по этому вопросу:

Другие вопросы по тегам