Übertragen von Einer Datei vom Typ 1
Um eine Datei vom Typ 1 während der Vorschau der Datei zu übertragen, verwenden Sie das im folgenden Diagramm gezeigte Filterdiagramm.

Filter in diesem Diagramm umfassen Folgendes:
- Der AVI-Splitter analysiert die AVI-Datei. Für eine DV-Datei vom Typ 1 stellt der Ausgabepin verschachtelte DV-Beispiele bereit.
- Der Filter Infinite Pin Tee teilt die überlappende DV in einen Übertragungsstream und einen Vorschaudatenstrom auf. Beide Streams enthalten dieselben überlappende Daten. (In diesem Diagramm wird die Unendliche Pin Tee anstelle von Smart Teeverwendet, da beim Lesen aus einer Datei keine Gefahr besteht, Frames zu löschen, wie es bei live capture der Fall ist.)
- Der DV-Splitter teilt den überlappenden Stream in einen DV-Videostream auf, der vom DV-Videodecoderdecodiert wird, und einen Audiostream. Beide Streams werden für die Vorschau gerendert.
Erstellen Sie dieses Diagramm wie folgt:
ICaptureGraphBuilder2 *pBuilder; // Capture graph builder.
IBaseFilter *pDV; // DV capture filter (MSDV)
// Initialize pDV (not shown).
// Create and initialize the Capture Graph Builder (not shown).
// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");
// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(
L"C:\\YourFileNameHere.avi",
L"Source",
&pFileSource);
// Add the AVI Splitter filter to the graph.
IBaseFilter *pAviSplit;
hr = CoCreateInstance(CLSID_AviSplitter, 0, CLSCTX_INPROC_SERVER
IID_IBaseFilter, reinterpret_cast<void**>)(&pAviSplit));
hr = pGraph->AddFilter(pAviSplit, L"AVI Splitter");
// Connect the file source to the AVI Splitter.
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pAviSplit);
if (FAILED(hr))
{
// This is not an AVI file.
}
// Connect the file source to the Infinite Pin Tee.
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pAviSplit, 0, pTee);
if (FAILED(hr))
{
// This is not a type-1 DV file.
}
// Render one stream from the Infinite Pin Tee to MSDV, for transmit.
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
// Render another stream from the Infinite Pin Tee for preview.
hr = pBuilder->RenderStream(0, 0, pTee, 0, 0);
- Rufen Sie IGraphBuilder::AddSourceFilter auf, um dem Filterdiagramm den Quellfilter hinzuzufügen.
- Erstellen Sie den AVI-Splitter und den Infinite Pin Tee, und fügen Sie sie dem Diagramm hinzu.
- Rufen Sie ICaptureGraphBuilder2::RenderStream auf, um den Quellfilter mit dem AVI-Splitter zu verbinden. Geben Sie MEDIATYPE _ Interleaved an, um sicherzustellen, dass die Methode fehlschlägt, wenn es sich bei der Quelldatei nicht um eine DV-Datei vom Typ 1 handelt. In diesem Fall können Sie ein Back-Out ausführen und stattdessen versuchen, ein Typ-2-Übertragungsdiagramm zu erstellen.
- Rufen Sie RenderStream erneut auf, um den verschachtelten Stream vom AVI-Splitter an die Unendliche Pin Tee weiterzuleiten.
- Rufen Sie RenderStream ein drittes Mal auf, um einen Stream vom Infinite Pin Tee an den MSDV-Filter für die Übertragung an das Gerät weiterzuleiten.
- Rufen Sie RenderStream ein letztes Mal auf, um den Vorschauabschnitt des Diagramms zu erstellen.
Wenn Sie keine Vorschauversion wünschen, verbinden Sie einfach die Dateiquelle mit dem MSDV-Filter:
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pFileSource, 0, pDV);