Sdílet prostřednictvím


Formát streamu

[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, MMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]

Ovladač MSDV i UVC můžou výstupem dvou formátů DV: prokládání zvukových videí nebo pouze videa. Prokládané zvukové video je původní formát ze zařízení. Formát pouze videa obsahuje stejná data, ale ukázky jsou označené jako bez zvukových dat. Formát pouze pro video existuje hlavně kvůli kompatibilitě s aplikacemi, které používají Video pro Windows. Další informace naleznete v tématu Type-1 vs. Type-2 DV AVI Soubory.

ovladače MSDV

Ovladač MSDV má dva výstupní kolíky. První výstupní kolík odesílá prokládání dat a druhý výstupní kolík odesílá data jen pro video. Najednou je možné připojit pouze jeden výstupní kolík. Pokud chcete vybrat formát, připojte příslušný výstupní pin kód. K vyhledání formátu můžete použít rozhraní IAMStreamConfig na výstupním špendlíku.

ovladače UVC

Na rozdíl od ovladače MSDV ovladač UVC poskytuje oba formáty ze stejného pin kódu. Výchozí formát je pouze pro video. K výběru formátu použijte rozhraní IAMStreamConfig na výstupním kolíku. Volání metody GetStreamCaps k vytvoření výčtu typů médií na výstupním kolíku. Pro každý typ média, pokud hlavní typ odpovídá požadovanému formátu, zavolejte SetFormat a předejte tento typ média.

Formát Hlavní typ
Prokládání zvuku a videa MEDIATYPE_Interleaved
Jenom video MEDIATYPE_Video

 

Následující funkce nastaví formát na základě guid hlavního typu.

HRESULT SetStreamFormat(IAMStreamConfig *pConfig, const GUID& majorType)
{
    if (pConfig == NULL)
    {
        return E_POINTER;
    }

    // Get the number of stream capabilities.
    int count = 0, size = 0;
    HRESULT hr = pConfig->GetNumberOfCapabilities(&count, &size);
    if (FAILED(hr))
    {
        return hr;
    }

    // Allocate memory for the stream capabilities structure.
    BYTE *pCaps = new BYTE[size];
    if (pCaps == NULL)
    {
        return E_OUTOFMEMORY;
    }
    
    // Enumerate the stream capabilities.
    bool bFoundType = false;
    for (int ix = 0; ix < count; ix++)
    {
        AM_MEDIA_TYPE *pmt;
        hr = pConfig->GetStreamCaps(ix, &pmt, pCaps);
        if (FAILED(hr))
        {
            break;
        }
        else if (pmt->majortype == majorType)
        {
            // This is the media type we want.
            bFoundType = true;
            hr = pConfig->SetFormat(pmt);
            DeleteMediaType(pmt);
            break;
        }
        DeleteMediaType(pmt);
    }
    delete [] pCaps;
    if (FAILED(hr))
    {
        return hr;
    }
    return bFoundType ? S_OK : E_FAIL;
}

Ovladač MSDV také podporuje IAMStreamConfig, takže můžete psát kód, který funguje pro oba typy zařízení.

řízení dv camcorder