Capturer un fichier DV de type 2
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
Un fichier AVI DV de type 2 a deux flux, l’un qui contient la vidéo DV et l’autre qui contient de l’audio. Pour capturer un fichier de type 2 lors de l’aperçu, utilisez le graphique de filtre illustré dans le diagramme suivant.
Ce graphique est presque identique à celui de la capture de type 1 (voir Capturer un fichier DV de type 1). Toutefois, le flux de capture passe par le filtre Splitter DV avant d’atteindre le filtre AVI Mux . L’AVI Mux reçoit donc deux flux, un flux audio et un flux vidéo encodé en DV.
Créez ce graphique comme suit :
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.
- Créez le séparateur DV et ajoutez-le au graphique de filtre.
- Appelez ICaptureGraphBuilder2::SetOutputFileName pour connecter le filtre AVI Mux au filtre Enregistreur de fichiers.
- Appelez ICaptureGraphBuilder2::RenderStream pour connecter le filtre de capture MSDV au séparateur DV. Cet appel connecte également l’une des broches de sortie du splitter DV à l’AVI Mux.
- Appelez à nouveau RenderStream pour connecter l’autre broche du splitter DV au Mux AVI.
- Appelez RenderStream une troisième fois pour restituer le flux d’aperçu. Ignorez cette étape si vous ne souhaitez pas afficher un aperçu de la vidéo.
Rubriques connexes