EVR-Medientypverhandlung
[Die auf dieser Seite beschriebene Komponente, enhanced Video Renderer, ist ein Legacyfeature. Es wurde durch den simple Video Renderer (SVR) ersetzt, der über die MediaPlayer- und IMFMediaEngine-komponenten verfügbar gemacht wird. Um Videoinhalte wiederzugeben, sollten Sie Daten an eine dieser Komponenten senden und es ihnen ermöglichen, den neuen Videorenderer zu instanziieren. Diese Komponenten wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer- oder die untere Ebene IMFMediaEngine-APIs zum Wiedergeben von Videomedien in Windows anstelle des EVR verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
In diesem Thema wird beschrieben, wie der erweiterte Videorenderer (EVR) Medientypen überprüft.
Für den DirectShow EVR-Filter tritt die Typverhandlung auf, wenn die Pins des Filters verbunden sind.
Für die EVR-Mediensenke werden die Medientypen über die IMFMediaTypeHandler Schnittstelle auf den Datenstromsenken festgelegt. In der Regel handelt das Topologieladeprogramm die Medientypen aus, obwohl die Anwendung die Medientypen auch direkt festlegen kann.
Der EVR meldet keine bevorzugten Medientypen. Der Client muss Medientypen testen, bis er einen zulässigen Typ findet. Der Medientyp für den Referenzdatenstrom muss festgelegt werden, bevor die Typen für einen der Unterstreams festgelegt werden können.
Für den Referenzdatenstrom erhält der EVR-Mixer eine Liste der kompatiblen DirectX Video Acceleration (DXVA)-Renderzielformate. Der EVR-Referenten verwendet diese Liste, um das Format für die Direct3D-Swapchain auszuwählen. Wenn kein kompatibles Renderzielformat gefunden werden kann, lehnt das EVR den Medientyp ab.
Für die Unterstreams fragt der EVR-Mixer ab, ob das DXVA-Gerät dieses Unterstreamformat in Kombination mit dem für den Referenzdatenstrom ausgewählten Renderzielformat unterstützt. Daher können sich die verfügbaren Unterstreamformate je nach Referenzdatenstrom ändern.
Hier ist der Prozess ausführlicher. Diese Details sind für die meisten Anwendungen nicht wichtig, können aber hilfreich sein, wenn Sie einen benutzerdefinierten Mixer oder Referenten schreiben.
Für den Referenzdatenstrom erfolgt die Aushandlung wie folgt:
Die EVR ruft IMFTransform::SetInputType auf dem Mixer auf.
Der Mixer konvertiert den Medientyp mithilfe der DXVA2_VideoDesc Struktur in eine DXVA 2.0-Beschreibung.
Der Mixer ruft IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids auf, um eine Liste der Videoprozessor-GUIDs abzurufen.
Für jede Videoprozessor-GUID ruft der Mixer IDirectXVideoProcessorService::GetVideoProcessorRenderTargets auf, um die unterstützten Renderzielformate abzurufen.
Der EVR ruft IMFVideoPresenter::P rocessMessage für den Referenten mit der MFVP_MESSAGE_INVALIDATEMEDIATYPE Nachricht auf. Diese Nachricht bewirkt, dass der Referent ein neues Format auswählt.
Der Referent ruft IMFTransform::GetOutputAvailableType auf, um eine Liste der verfügbaren Ausgabeformate vom Mixer abzurufen. Der Mixer generiert diese Liste aus den in Schritt 4 abgerufenen Formaten.
Der Referent wählt ein Format aus und ruft IMFTransform::SetOutputType- auf dem Mixer auf.
Für Unterstreams ist der Prozess einfacher:
Die EVR ruft IMFTransform::SetInputType auf dem Mixer auf.
Der Mixer ruft IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats auf, um eine Liste der verfügbaren Unterstreamformate abzurufen.
Wenn das vorgeschlagene Format in dieser Liste enthalten ist, akzeptiert der EVR den Eingabetyp.
Verwandte Themen