Freigeben über


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.

Typ-2-Erfassung mit Vorschau

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.
  1. Erstellen Sie den DV-Splitter, und fügen Sie ihn dem Filterdiagramm hinzu.
  2. Rufen Sie ICaptureGraphBuilder2::SetOutputFileName auf, um den AVI Mux-Filter mit dem Dateischreiberfilter zu verbinden.
  3. 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.
  4. Rufen Sie RenderStream erneut auf, um den anderen Pin des DV-Splitters mit dem AVI Mux zu verbinden.
  5. 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.

Digitales Video in DirectShow