2

別のスレッドで実行される 2 つの DirectShow グラフを使用して、ストリーミング ビデオを表示し (別の VMR 9 を使用)、2 つの Web カメラからフレームをキャプチャします (Sample Grabber を使用)。1 つは内蔵 Web カメラ (HP TrueVision HD) で、もう 1 つは USB ポートに接続された Creative VF0520 です。他の USB ポートは使用されていません。

問題は、Creative カメラがオンになる (LED が点灯する) が、ストリームが流れないことです。内蔵 Web カメラを無効にしても問題は解決しません。ただし、Creative cam が接続されている唯一のカメラであるデスクトップで実行している場合、Creative cam は機能します。

このプログラムは、各カメラが 1 台しか接続されていない場合に機能します (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);
4

2 に答える 2

1

2 つ以上の USB Web カメラのトラブルシューティングを行うと、USB 帯域幅の制限に達しています。USBビデオを使用すると、ヒットする可能性が非常に高くなります。あなたが言及したすべての症状で。これに関する以前の Q を必ずお読みください。

于 2013-03-23T09:41:03.010 に答える
1

これは、USB ハードウェアに関連している可能性が最も高いです。vlc をダウンロードし、2 つの異なる vlc インスタンスで両方のカメラからビデオを取得できるかどうかを確認します。

vlc.exe -> メディア -> opencapturecapture

できない場合は、USB へのドリルを開始します。2 台目の USB カメラが USB 1.0 コントローラーによって検出されている可能性があります。DirectShow で複数のカメラを動作させることができるので、DirectShow ではないと思います。

私は同じ問題を抱えていましたが、それはusb帯域幅とusbコントローラーに関連していました。カメラを別のUSBポートに接続してみてください..うまくいくかもしれません.

于 2013-04-06T01:37:34.640 に答える