Sdílet prostřednictvím


Vyjednávání typů médií EVR

[Komponenta popsaná na této stránce, Enhanced Video Renderer, je starší funkce. Nahradila ho simple Video Renderer (SVR) vystavená prostřednictvím komponent MediaPlayer a MMFMediaEngine. Pokud chcete přehrát videoobsáh, měli byste do jedné z těchto komponent odesílat data a umožnit jim vytvořit instanci nového rendereru videa. Tyto komponenty jsou optimalizované pro Windows 10 a Windows 11. Společnost Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer nebo nižší úroveň ROZHRANÍ API PRO MMFMediaEngine k přehrávání videosouborů ve Windows místo EVR, 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é.]

Toto téma popisuje, jak vylepšený renderer videa (EVR) ověřuje typy médií.

  • U filtru DirectShow EVR dojde k vyjednávání typů, když jsou připojeny špendlíky filtru.

  • U jímky médií EVR jsou typy médií nastaveny prostřednictvím rozhraní MMFMediaTypeHandler na jímkách datových proudů. Zavaděč topologie obvykle vyjedná typy médií, i když aplikace může typy médií nastavit přímo.

EVR nehlásí žádné upřednostňované typy médií. Klient musí testovat typy médií, dokud nenajde přijatelný typ. Typ média pro referenční datový proud musí být nastaven, aby bylo možné typy nastavit na libovolném z podstreamů.

U referenčního streamu získá mixér EVR seznam kompatibilních formátů cíle vykreslování DirectX Video Acceleration (DXVA). Prezentující EVR používá tento seznam k výběru formátu pro řetězec prohození Direct3D. Pokud není nalezen žádný kompatibilní cílový formát vykreslení, EVR odmítne typ média.

U podstreamů dotazuje mixér EVR, zda zařízení DXVA podporuje tento podstreamový formát v kombinaci s cílovým formátem vykreslení, který byl vybrán pro referenční datový proud. V důsledku toho se mohou dostupné podstreamové formáty změnit v závislosti na referenčním streamu.

Tady je postup podrobněji. Tyto podrobnosti nejsou pro většinu aplikací důležité, ale můžou být užitečné, pokud píšete vlastní mixér nebo prezentující.

U referenčního datového proudu probíhá vyjednávání takto:

  1. EVR volá MMFTransform::SetInputType na mixéru.

  2. Mixér převede typ média na popis DXVA 2.0 pomocí DXVA2_VideoDesc struktury.

  3. Mixér volá IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids získat seznam identifikátorů GUID grafického procesoru.

  4. Pro každý identifikátor GUID grafického procesoru volá mixér IDirectXVideoProcessorService::GetVideoProcessorRenderTargets získat podporované formáty cíle vykreslování.

  5. EVR volá MMFVideoPresenter::P rocessMessage na prezentujícího se zprávou MFVP_MESSAGE_INVALIDATEMEDIATYPE. Tato zpráva způsobí, že prezentující vybere nový formát.

  6. Prezentující volá MMFTransform::GetOutputAvailableType získat seznam dostupných výstupních formátů z mixéru. Mixér vygeneruje tento seznam z formátů získaných v kroku 4.

  7. Prezentující vybere formát a zavolá MMFTransform::SetOutputType na mixéru.

U podstreamů je proces jednodušší:

  1. EVR volá MMFTransform::SetInputType na mixéru.

  2. Mixér volá IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats získat seznam dostupných podstreamových formátů.

  3. Pokud je navrhovaný formát obsažen v tomto seznamu, přijme EVR vstupní typ.

rozšířeného rendereru videa