Freigeben über


VMR mit mehreren Streams (Mischmodus)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Die VMR kann mehrere Eingabestreams rendern. In dieser Konfiguration, die als Mischmodus bezeichnet wird, lädt die VMR ihren Mixer und Compositor, um das Mischen und Mischen vor dem Rendern durchzuführen. Der Mischmodus kann entweder verwendet werden, während sich die VMR im Fenstermodus oder ohne Fenster befindet.

Der Mischmodus erfordert, dass der Grafiktreiber die DDCAPS_BLTFOURCC- und DDCAPS_BLTSTRETCH-Funktionsflags (Farbraumkonvertierung bzw. Stretch-Blitting) unterstützt. Fast alle neuen Grafiktreiber verfügen über diese Funktionen. Darüber hinaus muss der Treiber die Erstellung von Direct3D-Renderzielen für die aktuelle Anzeigepixeltiefe unterstützen. Einige Geräte unterstützen keine Direct3D-Vorgänge, wenn die Anzeige auf 24 Bits pro Pixel festgelegt ist. Weitere Informationen finden Sie in der Dokumentation zum DirectX Graphics SDK.

Hinweis

Wenn die VMR mehrere Videostreams mischt, sucht das Filterdiagramm nicht ordnungsgemäß. Wenn Sie mehrere Videostreams suchen müssen, müssen Sie separate Filtergraphen erstellen, die dasselbe benutzerdefinierte Zuweisungs-Presenter-Objekt verwenden.

 

Konfigurieren von VMR-7 für mehrere Streams

Gehen Sie wie folgt vor, um mehrere Eingabedatenströme mit VMR-7 zu rendern:

  1. Rufen Sie die IVMRFilterConfig::SetNumberOfStreams-Methode mit der Anzahl der Streams auf, bevor Sie einen der Eingabepins der VMR verbinden. Dies bewirkt, dass die VMR den Mixer und den Compositor lädt und die angegebene Anzahl von Eingabestiften erstellt.
  2. Rufen Sie IVMRFilterConfig::SetRenderingPrefs auf, um verschiedene Renderingeinstellungen anzugeben.
  3. Verbinden Sie die Pins mit den Upstream Filtern. Die einfachste Möglichkeit besteht darin, IGraphBuilder::RenderFile für jeden Eingabedatenstrom aufzurufen. Wenn der Ausgabepin auf dem Upstream Filter (in der Regel ein Decoder) und der Eingabepin auf der VMR nicht auf eine Verbindung einigen können, wird eine neue instance der VMR mit Standardeinstellungen erstellt. Dies führt zu einem neuen Fenster mit "ActiveMovie" in der Titelleiste. Um dies zu verhindern, sollte die Anwendung immer überprüfen, ob die richtige instance der VMR verwendet wird, indem eine Methode wie IPin::ConnectedTo aufgerufen wird. Eine weitere Möglichkeit besteht darin, den Quellfilter hinzuzufügen und dann die Pins mithilfe von IGraphBuilder::Connect zu verbinden.
  4. Verwenden Sie die IVMRMixerControl-Schnittstelle auf der VMR, um Parameter für jeden Stream zu steuern, z. B. den Alphawert, die Z-Reihenfolge und das Ausgaberechteck.
  5. Führen Sie das Filterdiagramm aus.

Konfigurieren von VMR-9 für mehrere Streams

Standardmäßig erstellt VMR-9 vier Eingabepins. Wenn Sie mehr als vier Videostreams mischen möchten, rufen Sie IVMRFilterConfig9::SetNumberOfStreams auf, bevor Sie eingabenadeln. Verwenden Sie die IVMRMixerControl9-Schnittstelle , um die Streamparameter wie Alpha, Z-Reihenfolge und Position festzulegen.

Verwenden des VMR-Mischmodus