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:
Die EVR legt den Medientyp im Verweisstream fest.
Der EVR ruft AUFANZEIGEVideoPresenter::P rocessMessage auf dem Presenter mit der MFVP _ MESSAGE _ INVALIDATEMEDIATYPE-Nachricht auf.
Die Präsentation legt den Medientyp im Ausgabestream des Mixers fest.
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. |