Benutzerdefinierte Mixer

In diesem Thema wird beschrieben, wie ein benutzerdefinierter Mixer für den erweiterten Videorenderer (EVR) geschrieben wird. Sie können einen benutzerdefinierten Mixer mit der Media Foundation EVR-Mediensenke oder dem DirectShow EVR-Filter verwenden. Weitere Informationen zu Mixern und Moderatoren finden Sie unter Enhanced Video Renderer.

Der Mixer ist eine Media Foundation-Transformation (MFT) mit mindestens einer Eingabe (dem Verweisstream plus den Unterstreams) und einer Ausgabe. Der Eingabestream empfängt Beispiele vom Upstream. Der Ausgabestream übermittelt Beispiele an die Moderatorin. Die EVR ist für den Aufruf von "CSVTransform::P rocessInput" auf dem Mixer verantwortlich, und der Presenter ist für den Aufruf von "MIXERTransform::P rocessOutput"verantwortlich.

Ein EVR-Mixer muss mindestens die folgenden Schnittstellen implementieren:

Schnittstelle BESCHREIBUNG
ÜBERTRANSFORM Stellt MFT-Basisfunktionen bereit.
SHOPPERTopologyServiceLookupClient Ermöglicht dem Mixer das Abrufen von Schnittstellen aus der EVR.
DINNERVideoDeviceID Ermöglicht dem Mixer das Abrufen von Schnittstellen aus der EVR.
ATTRIBUTEAttributes Wird verwendet, um das MF _ SA _ D3D _ AWARE-Attribut für die EVR verfügbar zu machen.

Optional kann ein MFT eine der folgenden Schnittstellen implementieren:

Schnittstelle BESCHREIBUNG
IEVRTrustedVideoPlugin Erforderlich, um geschützten Inhalt wiederzuspielen.
VERZRGETService Macht Schnittstellen wie Z.B. "ORBITVideoMixerBitmap" und "WFVideoProcessor" für die Anwendung verfügbar.
HAPQualityAdvise Ermöglicht dem Qualitätsmanager, die Videoqualität anzupassen.
ORBITVideoMixerBitmap Ermöglicht der Anwendung das Mischen einer statischen Bitmap in das Video.
CITRIXVideoPositionMapper Karten Koordinaten auf dem Ausgabevideorahmen zu Koordinaten für den Eingabevideorahmen.
DENKVideoProcessor Macht einige DXVA-Videoverarbeitungsfunktionen für die Anwendung verfügbar.

Die Formataushandlung mit dem Mixer funktioniert wie folgt:

  1. Die EVR legt den Medientyp im Verweisstream fest.

  2. Der EVR ruft AUFANZEIGEVideoPresenter::P rocessMessage auf dem Presenter mit der MFVP _ MESSAGE _ INVALIDATEMEDIATYPE-Nachricht auf.

  3. Die Präsentation legt den Medientyp im Ausgabestream des Mixers fest.

  4. Die EVR legt den Medientyp für die Unterstreams fest.

Wenn sich der Medientyp im Verweisstream ändert, sind die anderen Medientypen des Mixers nicht mehr gültig. Die MIXERTransform::P rocessOutput-Methode des Mixers schlägt dann fehl und gibt MF E TRANSFORM STREAM _ _ _ _ CHANGE zurück. Der Presenter sollte an diesem Punkt nichts tun. Die EVR initiiert den Formataushandlungsprozess erneut.

Wenn ein Eingabestream das Ende des Datenstroms erreicht, ruft der EVR MIT MFT _ MESSAGE _ NOTIFY END OF _ _ _ STREAMDIE BENACHRICHTIGUNGSTRANSFORM::P rocessMessage auf dem Mixer auf.

Der Mixer sendet die folgenden Ereignisse über die IMediaEventSink-Schnittstelle der EVR an die EVR. Diese Schnittstelle ist in der DirectShow SDK-Dokumentation dokumentiert.

Ereignis Beschreibung
_EC-BEISPIEL _ ERFORDERLICH Der Mixer erfordert ein neues Eingabebeispiel.

Die EVR ruft möglicherweise ProcessOutput auf dem Mixer auf, bevor das Streaming gestartet wird. Der Mixer sollte diese Aufrufe nicht fehlschlagen. Stattdessen sollte die Ausgabeoberfläche mit schwarzen Pixeln gefüllt werden. Der Mixer sollte weiterhin Ausgabebeispiele mit Farben füllen, bis er eine MFT _ MESSAGE NOTIFY _ BEGIN _ _ STREAMING-Nachricht empfängt oder die ProcessInput-Methode aufgerufen wird. Wenn der Mixer eine MFT _ MESSAGE NOTIFY _ END _ _ STREAMING-Nachricht empfängt, sollte er wieder in den Farbfüllmodus wechseln.

Implementieren von IMPLEMENTVIDEODeviceID

Die INTERFACESVideoDeviceID-Schnittstelle enthält eine Methode, GetDeviceID,die eine Geräte-GUID zurückgibt. Die Geräte-GUID stellt sicher, dass der Presenter und der Mixer kompatible Technologien verwenden. Wenn die Geräte-GUIDs nicht übereinstimmen, kann die EVR nicht initialisiert werden.

Sowohl der Standardmixer als auch der Presenter verwenden Direct3D 9, wobei die Geräte-GUID gleich IID _ IDirect3DDevice9 ist. Wenn Sie Ihre benutzerdefinierte Präsentation mit dem Standardmixer verwenden möchten, muss die Geräte-GUID des Moderators IID _ IDirect3DDevice9 sein. Wenn Sie beide Komponenten ersetzen, können Sie eine neue Geräte-GUID definieren.

Implementieren vonTOPTOPOLOGYServiceLookupClient

Der Mixer muss die SCHNITTSTELLE "MIXERTopologyServiceLookupClient" implementieren. Bevor mit dem Streaming begonnen wird, ruft der EVR DENTOPTOPOLOGYServiceLookupClient::InitServicePointers auf und übergibt einen Zeiger auf die INTERFACESTopologyServiceLookup-Schnittstelle der EVR. Der Mixer verwendet diesen Zeiger, um Schnittstellenzeiger von der EVR abzurufen.

Der Mixer muss mindestens die folgende Schnittstelle abfragen:

Wenn der EVR DENTOPTOPOLOGYServiceLookupClient::ReleaseServicePointersaufruft, muss der Mixer alle Zeiger freigeben, die aus dem Aufruf von InitServicePointersabgerufen wurden.

Mixer Attribute

Ein Mixer sollte die folgenden Attribute unterstützen.

attribute Beschreibung
MF _ SA _ D3D _ AWARE Gibt an, ob der Mixer DirectX Video Acceleration (DXVA) unterstützt.
MF _ SA _ REQUIRED _ SAMPLE _ COUNT Die Anzahl der Videobeispiele, die die EVR für jeden Mixerstream zuordnen sollte. Dieses Attribut gilt für einzelne Streams. verwenden Sie den attributspeicher, der von DERTRANSFORM::GetInputStreamAttributeszurückgegeben wird.

Festlegen der Mixer für die EVR

Um einen benutzerdefinierten Mixer für die EVR festzulegen, rufen Sie DIE AUFFORDERUNGVideoRenderer::InitializeRendererauf. Sowohl der DirectShow EVR-Filter als auch die EVR-Mediensenke implementieren diese Methode.

EVR-Aktivierungsobjekt. Wenn Sie das EVR-Aktivierungsobjekt verwenden, können Sie einen benutzerdefinierten Mixer bereitstellen, indem Sie eines der folgenden Attribute für das EVR-Aktivierungsobjekt festlegen:

attribute Beschreibung
MF _ ACTIVATE _ CUSTOM _ VIDEO _ MIXER _ ACTIVATE Zeiger auf ein Aktivierungsobjekt für den Mixer. Das Aktivierungsobjekt muss die INTERFACESActivate-Schnittstelle implementieren.
MF _ ACTIVATE _ CUSTOM _ VIDEO _ MIXER _ CLSID CLSID des Mixers.

Erweiterter Videorenderer