Erfassen einer Typ-2-DV-Datei
[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.]
Eine DV AVI-Datei vom Typ 2 verfügt über zwei Streams, einen mit DV-Video und einen anderen mit Audiodaten. Um eine Datei vom Typ 2 während der Vorschau zu erfassen, verwenden Sie das Filterdiagramm, das im folgenden Diagramm dargestellt ist.
Dieses Diagramm ist fast identisch mit dem Diagramm für die Typ-1-Erfassung (siehe Erfassen einer Typ-1-DV-Datei). Der Erfassungsstream durchläuft jedoch den DV Splitter-Filter , bevor er den AVI Mux-Filter erreicht. Die AVI Mux empfängt daher zwei Streams, einen Audiostream und einen DV-codierten Videostream.
Erstellen Sie dieses Diagramm wie folgt:
ICaptureGraphBuilder2 *pBuilder; // Capture graph builder.
IBaseFilter *pDV; // DV capture filter (MSDV)
IBaseFilter *pAviMux // Avi Mux filter.
IBaseFilter *pDVSplit; // DV Splitter
// Initialize pDV (not shown).
// Create and initialize the Capture Graph Builder (not shown).
// Create the DV Splitter and add it to the filter graph.
hr = CoCreateInstance(CLSID_DVSplitter, 0, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, reinterpret_cast<void**>)(&pDVSplit));
hr = pGraph->AddFilter(pDVSplit, L"DV Splitter");
// Create the file-writing section of the graph.
hr = pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,
OLESTR("C:\\Example2.avi"), &pAviMux, 0);
// Connect the capture pin to the DV Splitter, and render one stream from
// the DV Splitter to the AVI Mux.
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved,
pDV, pDVSplit, pAviMux);
// Render the other stream from the DV splitter to the AVI Mux.
hr = pBuilder->RenderStream(0, 0, pDVSplit, 0, pAviMux);
// Render the preview stream.
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Interleaved,
pDV, 0, 0);
// Remember to release all interfaces.
- Erstellen Sie den DV-Splitter, und fügen Sie ihn dem Filterdiagramm hinzu.
- Rufen Sie ICaptureGraphBuilder2::SetOutputFileName auf, um den AVI Mux-Filter mit dem Dateischreiberfilter zu verbinden.
- Rufen Sie ICaptureGraphBuilder2::RenderStream auf, um den MSDV-Erfassungsfilter mit dem DV Splitter zu verbinden. Dieser Aufruf verbindet auch einen der Ausgabepins des DV Splitter mit dem AVI Mux.
- Rufen Sie RenderStream erneut auf, um den anderen Pin des DV-Splitters mit dem AVI Mux zu verbinden.
- Rufen Sie RenderStream ein drittes Mal auf, um den Vorschaudatenstrom zu rendern. Überspringen Sie diesen Schritt, wenn Sie keine Vorschau des Videos anzeigen möchten.
Zugehörige Themen