EVR-Medientypverhandlung
Die auf dieser Seite beschriebene Komponente, Erweiterter Videorenderer, ist ein Legacyfeature. Sie wurde durch den Simple Video Renderer (SVR) abgelöst, der über die Komponenten MediaPlayer und IMFMediaEngine verfügbar gemacht wurde. 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-APIs oder die IMFMediaEngine-APIs auf niedrigerer Ebene verwendet, um Videomedien in Windows anstelle des EVR wiederzugeben. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, wenn möglich umgeschrieben wird, um die neuen APIs zu verwenden.]
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 Elemente 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 passenden Typ findet. Der Medientyp für den Referenzdatenstrom muss festgelegt werden, bevor die Typen für einen der untergeordneten Datenströme festgelegt werden können.
Für den Referenzdatenstrom erhält der EVR-Mixer eine Liste der kompatiblen DirectX Video Acceleration (DXVA)-Renderzielformate. Der EVR-Moderator verwendet diese Liste, um das Format für die Direct3D-Swapchain auszuwählen. Wenn kein kompatibles Renderzielformat gefunden werden kann, lehnt der EVR den Medientyp ab.
Für die untergeordneten Datenströme fragt der EVR-Mixer ab, ob das DXVA-Gerät dieses Format für untergeordnete Datenströme in Kombination mit dem für den Referenzdatenstrom ausgewählten Renderzielformat unterstützt. Daher können sich die verfügbaren Formate für untergeordnete Datenströme je nach Referenzdatenstrom ändern.
Hier wird der Prozess ausführlicher erläutert. Diese Details sind für die meisten Anwendungen nicht wichtig, können aber hilfreich sein, wenn Sie einen benutzerdefinierten Mixer oder Moderator schreiben.
Für den Referenzdatenstrom erfolgt die Aushandlung wie folgt:
Der EVR ruft IMFTransform::SetInputType auf dem Mixer auf.
Der Mixer wandelt den Medientyp mithilfe der DXVA2_VideoDesc-Struktur in eine DXVA 2.0-Beschreibung um.
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::ProcessMessage für den Moderator mit der Nachricht MFVP_MESSAGE_INVALIDATEMEDIATYPE auf. Diese Nachricht bewirkt, dass der Moderator ein neues Format auswählt.
Der Moderator 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 Moderator wählt ein Format aus und ruft IMFTransform::SetOutputType auf dem Mixer auf.
Für untergeordnete Datenströme ist der Prozess einfacher:
Der EVR ruft IMFTransform::SetInputType auf dem Mixer auf.
Der Mixer ruft IDirectXVideoProcessorService::GetVideoProcessorSubStreamFormats auf, um eine Liste der verfügbaren Formate für untergeordnete Datenströme abzurufen.
Wenn das vorgeschlagene Format in dieser Liste enthalten ist, akzeptiert der EVR den Eingabetyp.
Zugehörige Themen