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:
EVR nastaví typ média v referenčním streamu.
EVR volá MMFVideoPresenter::P rocessMessage na prezentujícího se zprávou MFVP_MESSAGE_INVALIDATEMEDIATYPE.
Prezentující nastaví typ média ve výstupním streamu mixéru.
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í:
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. |
Související témata