Freigeben über


Optionale Streams

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Ein DMO kann einige seiner Ausgabestreams als optional festlegen. Ein optionaler Stream erzeugt Daten, die die Anwendung verwerfen kann, entweder vollständig oder in gelegentlichen Beispielen. Beispielsweise kann ein optionaler Stream zusätzliche Informationen zu einem primären Datenstrom enthalten.

Um abzufragen, ob ein Stream optional ist, rufen Sie die IMediaObject::GetOutputStreamInfo-Methode auf, und überprüfen Sie den pdwFlags-Parameter . Optionale Streams geben entweder das DMO_OUTPUT_STREAMF_DISCARDABLE-Flag oder das DMO_OUTPUT_STREAMF_OPTIONAL-Flag zurück. Diese Flags bedeuten fast das gleiche; ein kleiner Unterschied zwischen ihnen wird in Kürze erläutert.

Wenn ein Stream optional ist, kann der Client den DMO anweisen, Daten aus diesem Stream zu verwerfen, wenn er die Ausgabe verarbeitet. Rufen Sie hierzu die IMediaObject::P rocessOutput-Methode auf, und legen Sie den Ausgabepuffer für jeden Stream, den Sie verwerfen möchten, auf NULL fest. (Der Ausgabepuffer wird im pBuffer-Member des DMO_OUTPUT_DATA_BUFFER angegeben.) Legen Sie auch das DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER-Flag im dwFlags-Parameter fest.

Für jeden Stream, bei dem der pBuffer-ZeigerNULL ist, versucht der DMO, die Daten zu verwerfen. Wenn der Stream optional ist, wird die Daten vom DMO garantiert verworfen. Wenn der Stream nicht optional ist, verwirft der DMO die Daten nach Möglichkeit, aber es ist nicht garantiert, dass dies geschieht. Wenn die Daten nicht verworfen werden können, wird das flag DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE festgelegt. Wenn Sie einen pBuffer-Zeiger auf NULL festlegen, aber nicht das DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER-Flag festlegen, verwirft die DMO die Daten nicht. In diesem Fall puffert die DMO entweder die Ausgabe intern oder schlägt einfach den ProcessOutput-Aufruf aus.

Der einzige funktionale Unterschied zwischen dem DMO_OUTPUT_STREAMF_OPTIONAL-Flag und dem DMO_OUTPUT_STREAMF_DISCARDABLE-Flag ist folgendes:

  • Das flag DMO_OUTPUT_STREAMF_OPTIONAL gibt an, dass der Client keinen Medientyp für diesen Stream festlegen muss. Wenn der Client jedoch mit der Verarbeitung von Daten beginnt, ohne den Medientyp für diesen Stream festzulegen, muss er die Daten aus diesem Stream für die gesamte Dauer des Streamings verwerfen. Wenn Sie Stichproben selektiv verwerfen möchten, müssen Sie den Medientyp festlegen.
  • Das flag DMO_OUTPUT_STREAMF_DISCARDABLE gibt an, dass der Stream zwar optional ist, aber immer einen Medientyp erfordert.

Direktes Hosten einer DMO