Freigeben über


Optionale Datenströme

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

Ein DMO kann einige seiner Ausgabedatenströme als optional festlegen. Ein optionaler Datenstrom erzeugt Daten, die die Anwendung verwerfen kann, entweder vollständig oder bei gelegentlichen Beispielen. Ein optionaler Datenstrom kann z. B. zusätzliche Informationen zu einem primären Datenstrom enthalten.

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

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

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

Der einzige funktionale Unterschied zwischen dem DMO_OUTPUT_STREAMF_OPTIONAL-Flag und dem DMO_OUTPUT_STREAMF_DISCARDABLE Flag lautet wie folgt:

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

direkt ein DMO-