Freigeben über


Informationen zu Medienbeispielen und -zuweisungen

[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.]

Filter liefern Daten über Pinverbindungen hinweg. Daten werden vom Ausgabepin eines Filters zum Eingabestift eines anderen Filters verschoben. Die gängigste Methode für die Übermittlung der Daten durch den Ausgabepin besteht darin, die IMemInputPin::Receive-Methode für die Eingabe aufzurufen, obwohl auch einige andere Mechanismen vorhanden sind.

Abhängig vom Filter kann der Arbeitsspeicher für die Mediendaten auf verschiedene Weise zugeordnet werden: auf dem Heap, auf einer DirectDraw-Oberfläche, mithilfe von freigegebenem GDI-Speicher oder mithilfe eines anderen Zuordnungsmechanismus. Das Objekt, das für die Zuweisung des Arbeitsspeichers verantwortlich ist, wird als Allocator bezeichnet. Hierbei handelt es sich um ein COM-Objekt, das die IMemAllocator-Schnittstelle verfügbar macht.

Wenn zwei Pins verbunden sind, muss einer der Pins eine Zuweisung bereitstellen. DirectShow definiert eine Sequenz von Methodenaufrufen, die verwendet wird, um festzulegen, welcher Pin die Zuweisung bereitstellt. Die Pins stimmen auch über die Anzahl der Puffer, die der Zuweisungsgeber erstellt, und die Größe der Puffer überein.

Bevor das Streaming beginnt, erstellt die Zuweisung einen Pufferpool. Während des Streamings füllt der Upstream Filter Puffer mit Daten und übermittelt sie an den Downstreamfilter. Der Upstream Filter gibt dem nachgeschalteten Filter jedoch keine rohen Zeiger auf die Puffer. Stattdessen werden COM-Objekte verwendet, die als Medienbeispiele bezeichnet werden, die der Zuweisungsgeber erstellt, um die Puffer zu verwalten. Medienbeispiele machen die IMediaSample-Schnittstelle verfügbar. Ein Medienbeispiel enthält Folgendes:

  • Ein Zeiger auf den zugrunde liegenden Puffer
  • ein Zeitstempel
  • verschiedene Flags
  • optional ein Medientyp

Der Zeitstempel definiert die Präsentationszeit, die der Rendererfilter verwendet, um das Rendering zu planen. Die Flags geben z. B. an, ob seit dem vorherigen Beispiel ein Datenbruch aufgetreten ist. Der Medientyp bietet eine Möglichkeit für Filter, die Formate in der Mitte des Datenstroms zu ändern. Normalerweise weist das Beispiel keinen Medientyp auf, was angibt, dass sich das Format seit dem vorherigen Beispiel nicht geändert hat.

Während ein Filter einen Puffer verwendet, enthält er die Verweisanzahl für das Beispiel. Die Zuweisung bestimmt anhand der Verweisanzahl, wann der Puffer wiederverwenden kann. Dadurch wird verhindert, dass ein Filter einen Puffer überschreibt, den ein anderer Filter noch verwendet. Eine Stichprobe wird erst dann in den Pool der verfügbaren Beispiele des Zuweisungsgebers zurückgegeben, wenn sie von jedem Filter freigegeben wurde.

Weitere Informationen finden Sie in den folgenden Themen:

Die folgenden Themen richten sich an Entwickler, die ihre eigenen benutzerdefinierten Filter schreiben:

Das Filterdiagramm und seine Komponenten