ICaptureGraphBuilder2::RenderStream-Methode (strmif.h)

[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 RenderStream -Methode verbindet einen Ausgabepin eines Quellfilters mit einem Senkenfilter, optional über einen Zwischenfilter.

Syntax

HRESULT RenderStream(
  [in] const GUID  *pCategory,
  [in] const GUID  *pType,
  [in] IUnknown    *pSource,
  [in] IBaseFilter *pfCompressor,
  [in] IBaseFilter *pfRenderer
);

Parameter

[in] pCategory

Ein Zeiger auf eine GUID, die eine der unter Pin-Eigenschaftensatz aufgeführten Pinkategorien angibt. Legen Sie diesen Parameter unabhängig von der Kategorie auf NULL fest, um eine beliebige Pin abzugleichen. Typische Werte sind:

  • PIN_CATEGORY_CAPTURE
  • PIN_CATEGORY_PREVIEW
  • PIN_CATEGORY_CC

[in] pType

Zeiger auf eine GUID vom Haupttyp, die den Medientyp des Ausgabepins angibt; oder NULL , um einen beliebigen Pin zu verwenden, unabhängig vom Medientyp. Eine Liste der möglichen Werte finden Sie unter Haupttypen.

[in] pSource

Gibt einen Zeiger auf den Startfilter für die Verbindung oder auf einen Ausgabepin an.

[in] pfCompressor

Zeiger auf die IBaseFilter-Schnittstelle eines Zwischenfilters, z. B. eines Komprimierungsfilters. Kann NULL sein.

[in] pfRenderer

Zeiger auf die IBaseFilter-Schnittstelle eines Senkenfilters, z. B. eines Renderers oder mux-Filters. Wenn der Wert NULL ist, verwendet die -Methode einen Standardrenderer (siehe Hinweise).

Rückgabewert

Gibt einen HRESULT-Wert zurück. Folgende Rückgabewerte sind möglich.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
VFW_S_NOPREVIEWPIN
Die Vorschau wurde über den Smart Tee-Filter gerendert.
E_FAIL
Fehler.
E_INVALIDARG
Ungültiges Argument.
E_POINTER
NULL-Zeigerargument.
VFW_E_NOT_IN_GRAPH
Ein Filter befindet sich nicht im Filterdiagramm. Dieser Fehler kann auftreten, wenn Sie AddFilter nicht aufgerufen haben, um dem Diagramm pSource, pIntermediate oder pSink hinzuzufügen. Dies kann auch auftreten, wenn Sie SetFiltergraph nicht aufgerufen haben, um Ihren Graphen mit dem Capture Graph Builder zu verbinden. In diesem Fall erstellt das Capture Graph Builder-Objekt automatisch ein eigenes Filterdiagramm. Weitere Informationen finden Sie unter Informationen zum Capture Graph Builder.

Hinweise

Diese Methode rendert einen Stream, indem zwei oder mehr Filter in einer Kette miteinander verbunden werden:

  • Der pSource-Parameter gibt den Anfang der Kette an, entweder ein Filter oder ein Ausgabepin.
  • Der Parameter pIntermediate gibt einen Zwischenfilter an, in der Regel einen Komprimierungsfilter. Dieser Parameter kann NULL sein.
  • Der pSink-Parameter gibt den Filter am Ende der Kette an. In der Regel ist dieser Filter entweder ein Renderer für die Vorschau oder ein Mux für die Dateierfassung.
Die -Methode verbindet pSource mit pIntermediate und dann pIntermediate mit pSink. Wenn pIntermediateNULL ist, verbindet die Methode nur pSource mit pSink. Alle filter, die von pSource, pIntermediate und pSink angegeben werden, müssen dem Diagramm hinzugefügt werden, bevor die -Methode aufgerufen wird. Die -Methode verwendet Intelligent Connect, sodass zusätzliche Filter wie Decoder dem Diagramm hinzugefügt werden können.

Wenn der pSink-ParameterNULL ist, versucht die Methode, einen Standardrenderer zu verwenden. Für Video wird der Video-Renderer und für Audio der DirectSound-Renderer verwendet.

Wenn pSource ein Filter ist, sucht die Methode nach einem Ausgabenadel für diesen Filter. Verwenden Sie in diesem Fall die Parameter pCategory und pType , um die Suche einzugrenzen. Wenn ein Filter beispielsweise über separate Pins für Vorschau und Erfassung verfügt, können Sie entweder PIN_CATEGORY_CAPTURE oder PIN_CATEGORY_PREVIEW angeben. Wenn pSource ein Ausgabepin ist, legen Sie pCategory und pType auf NULL fest.

In allen Fällen sucht die -Methode nach nicht verbundenen Pins. Wenn mehrere Pins die angegebenen Kriterien erfüllen, verwendet die Methode den ersten gefundenen Pin.

Beachten Sie, dass bei dv capture, wenn der Medientyp MEDIATYPE_Interleaved und der pSink-ParameterNULL ist, die -Methode den verschachtelten Datenstrom in einen Audio- und einen Videodatenstrom aufteilt und beide dieser Datenströme rendert.

Die RenderStream -Methode verarbeitet viele der details, die für Erfassungsdiagramme erforderlich sind:

Smart Tee. Einige Aufnahmefilter verfügen über einen Aufnahmenadel, aber keine Vorschau-Pin. Um eine Vorschau anzuzeigen, muss der Aufnahmepin mit dem Smart Tee-Filter verbunden sein. Dieser Filter teilt die Daten in zwei Datenströme auf: einen Aufnahmedatenstrom und einen Vorschaudatenstrom. Wenn Sie PIN_CATEGORY_PREVIEW oder PIN_CATEGORY_CAPTURE angeben, fügt die Methode bei Bedarf einen Smart Tee-Filter ein. Anschließend wird der angegebene Stream im Smart Tee-Filter gerendert. Wenn Sie einen Vorschaudatenstrom rendern und die Methode einen Smart Tee-Filter verwendet, wird VFW_S_NOPREVIEWPIN zurückgegeben.

Untertitel. Sie können diese Methode verwenden, um Untertitel zu erfassen oder eine Vorschau anzuzeigen. Einige Erfassungsfilter liefern VBI-Daten (Vertical Blanking Interval), andere liefern Untertiteldaten. Um beide Fälle zu behandeln, rufen Sie die -Methode zweimal auf, einmal mit PIN_CATEGORY_VBI und einmal mit PIN_CATEGORY_CC. Die -Methode fügt alle Filter ein, die zum Konvertieren von VBI-Daten in Untertitel erforderlich sind. Um eine Vorschau der Daten anzuzeigen, legen Sie den pSink-Parameter auf NULL fest. Um die Daten in einer Datei zu erfassen, verwenden Sie den IBaseFilter-Schnittstellenzeiger des Multiplexers. Sie können die Daten im selben Diagramm erfassen und in der Vorschau anzeigen. Rufen Sie die -Methode einmal mit NULL und erneut mit dem Multiplexer auf. Legen Sie den pIntermediate-Parameter auf NULL fest.

Videoport-Pins. Filter, die mit VPE-Videoaufnahmehardware (Video Port Extension) arbeiten, verfügen möglicherweise über Videoport-Pins (PIN_CATEGORY_VIDEOPORT) anstelle von Vorschaupins. Damit die Vorschau oder Aufnahme funktioniert, muss ein Videoport-Pin eine Verbindung mit dem Overlay Mixer-Filter herstellen. Die -Methode verarbeitet dieses Detail. Sie müssen keine PIN_CATEGORY_VIDEOPORT angeben. Geben Sie PIN_CATEGORY_PREVIEW oder PIN_CATEGORY_CAPTURE an, und die -Methode verbindet den Pin ordnungsgemäß. Auf ähnliche Weise liefern einige Filter VBI-Daten mithilfe von Videoport-Pins (PIN_CATEGORY_VIDEOPORT_VBI). Wie bei PIN_CATEGORY_VIDEOPORT verarbeitet die -Methode diese Details. Sie müssen keine PIN_CATEGORY_VIDEOPORT_VBI angeben.

Unterstützende Filter. Wenn ein Aufnahmegerät einen WDM-Treiber (Windows Driver Model) verwendet, erfordert das Diagramm möglicherweise bestimmte Filter Upstream aus dem WDM-Videoaufnahmefilter, z. B. einen TV-Tuner-Filter oder einen Analog Video Crossbar Filter. Wenn diese Methode den Stream erfolgreich rendert, fügt sie auch alle erforderlichen WDM-Filter in Ihr Diagramm ein. Die -Methode fragt die Eingabepins auf dem Erfassungsfilter ab, um zu bestimmen, welche Medien sie unterstützen, und verbindet sie mit übereinstimmenden Filtern.

Beispielcode

Verbinden Sie für ein typisches Erfassungsdiagramm den Vorschaupin ohne Zwischenfilter mit dem Standardrenderer:
C++
// Video: 
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCaptureFilter, NULL, NULL); 
// Audio:
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio, 
    pCaptureFilter, NULL, NULL); 
Verbinden Sie den Aufnahmepin mit einem Mux-Filter oder Einem Datei-Writer-Filter, je nachdem, welcher Dateityp Sie ausgeben möchten. Verwenden Sie für AVI-Dateien den AVI Mux-Filter . Verwenden Sie für ASF-Dateien den WM ASF Writer-Filter . In der Regel erhalten Sie einen Zeiger auf diesen Filter aus dem ppf-Parameter der ICaptureGraphBuilder2::SetOutputFileName-Methode .
C++
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\Example.avi", 
    &ppf, &pSink);
pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
    pCaptureFilter, NULL, ppf);

Dateiquellen

Sie können diese Methode verwenden, um eine Datei zu transcodieren oder neu zu komprimieren. In der folgenden Erläuterung wird davon ausgegangen, dass die Datei höchstens einen Video- und einen Audiodatenstrom oder einen einzelnen überlappenden Datenstrom enthält. Andernfalls funktioniert die -Methode nicht ordnungsgemäß.

Eine Dateiquelle verfügt über einen Ausgabepin. Legen Sie daher pCategory und pType auf NULL fest. Rufen Sie die -Methode zweimal auf– einmal zum Rendern des Videodatenstroms und einmal zum Rendern des Audiodatenstroms. Der erste Aufruf verbindet den Quellfilter mit einem Parserfilter und rendert einen der Ausgabepins des Parserfilters. Der zweite Aufruf rendert den verbleibenden Ausgabepin des Parsers. Wenn Sie einen Stream komprimieren, aber nicht den anderen, stellen Sie sicher, dass Sie den Kompressorfilter beim ersten Aufruf angeben. Die -Methode wählt basierend auf dem Komprimierungstyp automatisch den richtigen Stream aus.

C++
pBuilder->RenderStream(NULL, NULL, pSrc, pCompressor, pMux);
pBuilder->RenderStream(NULL, NULL, pSrc, NULL, pMux);
Ein vollständiges Beispiel finden Sie unter Erneutes Komprimieren einer AVI-Datei.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile strmif.h (include Dshow.h)
Bibliothek Strmiids.lib

Weitere Informationen

Erstellen von Graphen mit dem Capture Graph Builder

Fehler- und Erfolgscodes

ICaptureGraphBuilder2-Schnittstelle

Videoaufnahme