Transmettre à partir d’un fichier 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 in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si 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.]
Pour transmettre un fichier de type 2 lors de l’aperçu, utilisez le graphique de filtre illustré dans le diagramme suivant.
Un fichier de type 2 comporte deux flux, un flux audio et un flux vidéo encodé en DV. Ce graphique utilise le filtre DV Muxer pour combiner les flux audio et vidéo. Il envoie le flux entrelacé au filtre MSDV, mais fractionne à nouveau le flux pour la préversion.
Générez ce graphique comme suit :
// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");
// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source",
&pFileSource);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
// 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");
hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);
Ce code effectue plusieurs appels à RenderStream :
Les deux premières connectent le filtre source au séparateur AVI et le séparateur AVI au DV Mux. Dans le premier appel, le Générateur de graphiques de capture ajoute automatiquement le séparateur AVI au graphique et connecte l’une des broches de sortie du séparateur AVI au Mux DV. Dans le deuxième appel, le Générateur de graphiques de capture recherche la deuxième broche de sortie du séparateur AVI et la connecte au DV Mux.
Le troisième appel à RenderStream connecte le Muxer DV au filtre Infinite Pin Tee. L’appel suivant connecte un flux de l’épinglage infini au filtre de capture MSDV. Ce flux est transmis à l’appareil. Le dernier appel à RenderStream génère la section d’aperçu du graphique.
Si vous ne souhaitez pas afficher un aperçu lors de la transmission, vous pouvez omettre l’épinglage infini et simplement connecter le Mux DV au filtre MSDV :
hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);
Rubriques connexes