Sdílet prostřednictvím


Vlastní mixéry

[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 napsat vlastní mixér pro vylepšený video renderer (EVR). Vlastní mixér můžete použít buď s jímkou médií Media Foundation EVR, nebo filtrem DirectShow EVR. Další informace o směšovačích a prezentujících naleznete v tématu Enhanced Video Renderer.

Mixér je transformace Media Foundation (MFT) s jedním nebo více vstupy (referenční datový proud plus podstreamy) a jedním výstupem. Vstupní datový proud přijímá ukázky z upstreamu. Výstupní datový proud doručuje ukázky prezentujícímu. EVR zodpovídá za volání MMFTransform::P rocessInput na mixéru a prezentující je zodpovědný za volání MMFTransform::P rocessOutput.

Minimálně musí mixér EVR implementovat následující rozhraní:

Rozhraní Popis
MMFTransform Poskytuje základní funkce MFT.
DATACENTERTopologyServiceLookupClient Umožňuje směšovač získat rozhraní z EVR.
MMFVideoDeviceID Umožňuje směšovač získat rozhraní z EVR.
MMFAttributes Slouží k zveřejnění atributu MF_SA_D3D_AWARE pro EVR.

 

Volitelně může MFT implementovat některá z následujících rozhraní:

Rozhraní Popis
IEVRTrustedVideoPlugin Vyžaduje se k přehrávání chráněného obsahu.
MMFGetService Zveřejňuje rozhraní, jako je MMFVideoMixerBitmap a MMFVideoProcessor aplikaci.
MMFQualityAdvise Umožňuje správci kvality upravit kvalitu videa.
MMFVideoMixerBitmap Umožňuje aplikaci kombinovat statický rastrový obrázek s videem.
MMFVideoPositionMapper Mapuje souřadnice na výstupním rámečku videa na souřadnice na vstupním rámečku videa.
MMFVideoProcessor Zveřejňuje některé funkce zpracování videa DXVA pro aplikaci.

 

Formátování vyjednávání s mixérem funguje takto:

  1. EVR nastaví typ média v referenčním streamu.

  2. EVR volá MMFVideoPresenter::P rocessMessage na prezentujícího se zprávou MFVP_MESSAGE_INVALIDATEMEDIATYPE.

  3. Prezentující nastaví typ média ve výstupním streamu mixéru.

  4. EVR nastaví typ média v podstreamech.

Pokud se změní typ média v referenčním streamu, ostatní typy médií mixéru už nejsou platné. Metoda MIXERTRANSform::P rocessOutput pak selže a vrátí MF_E_TRANSFORM_STREAM_CHANGE. Prezentující by neměl v tuto chvíli nic dělat. EVR znovu zahájí proces vyjednávání formátu.

Když jakýkoli vstupní datový proud dosáhne konce datového proudu, EVR volá MMFTransform::P rocessMessage na mixéru s MFT_MESSAGE_NOTIFY_END_OF_STREAM.

Mixér odešle do EVR následující události pomocí rozhraní IMediaEventSink. Toto rozhraní je popsané v dokumentaci k sadě DirectShow SDK.

Událost Popis
EC_SAMPLE_NEEDED Mixér vyžaduje nový vstupní vzorek.

 

EVR může před spuštěním streamování volat ProcessOutput na mixéru. Mixér by neměl tyto volání selhat. Místo toho by měl výstupní povrch vyplnit černými pixely. Mixér by měl pokračovat ve výstupních vzorcích barevného vyplnění, dokud neobdrží MFT_MESSAGE_NOTIFY_BEGIN_STREAMING zprávu nebo ProcessInput metoda je volána. Pokud mixér obdrží MFT_MESSAGE_NOTIFY_END_STREAMING zprávu, měl by se přepnout zpět do režimu barevného výplně.

Implementace MMFVideoDeviceID

Rozhraní MMFVideoDeviceID obsahuje jednu metodu, GetDeviceID, která vrátí identifikátor GUID zařízení. Identifikátor GUID zařízení zajišťuje, aby prezentující a mixér používaly kompatibilní technologie. Pokud identifikátory GUID zařízení neodpovídají, EVR se nepodaří inicializovat.

Standardní mixér i prezentující používají Direct3D 9 s identifikátorem GUID zařízení, který se rovná IID_IDirect3DDevice9. Pokud chcete použít vlastního prezentujícího se standardním mixérem, musí být identifikátor GUID zařízení prezentujícího IID_IDirect3DDevice9. Pokud nahradíte obě komponenty, můžete definovat nový identifikátor GUID zařízení.

Implementace DATACENTERTopologyServiceLookupClient

Mixér musí implementovat rozhraní DATACENTERTopologyServiceLookupClient. Před zahájením streamování volá EVR DATACENTERTopologyServiceLookupClient::InitServicePointers a předává ukazatel na rozhraní DATACENTERTopologyServiceLookup. Mixér používá tento ukazatel k získání ukazatelů rozhraní z EVR.

Minimálně se mixér musí dotazovat na následující rozhraní:

  • IMediaEventSink

Když EVR volá DATACENTERTopologyServiceLookupClient::ReleaseServicePointers, mixér musí uvolnit všechny ukazatele získané z volání InitServicePointers.

Atributy mixéru

Mixér by měl podporovat následující atributy.

Atribut Popis
MF_SA_D3D_AWARE Určuje, jestli mixér podporuje akceleraci videa DirectX (DXVA).
MF_SA_REQUIRED_SAMPLE_COUNT Počet ukázek videa, které by měl EVR přidělit pro každý stream mixéru. Tento atribut se vztahuje na jednotlivé datové proudy; použít úložiště atributů vrácené MMFTransform::GetInputStreamAttributes.

 

Nastavení mixéru na EVR

Chcete-li nastavit vlastní mixér na EVR, zavolejte MMFVideoRenderer::InitializeRenderer. Tuto metodu implementují filtr DirectShow EVR i jímka médií EVR.

aktivační objekt EVR. Pokud používáte aktivační objekt EVR, můžete zadat vlastní mixér nastavením jednoho z následujících atributů na aktivační objekt EVR:

Atribut Popis
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE Ukazatel na aktivační objekt pro mixér. Aktivační objekt musí implementovat MMFActivate rozhraní.
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID CLSID mixéru.

 

rozšířeného rendereru videa