Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]
Det här exemplet visar hur du avbildar DV från videokameran och sparar den i en fil som okomprimerad RGB vid förhandsgranskning. Använd filterdiagrammet som visas i följande diagram.
DV Splitter-filtret delar upp det interfolierade ljudet/videon i separata video- och ljudströmmar Den DV-kodade videon går till DV Video Decoder filter, som matar ut okomprimerad RGB-video. RGB-videon dirigeras via Smart Tee-filtret till AVI Mux-filtret (för inspelning) och videoåtergivningen (för förhandsversion). Under tiden går ljudströmmen från DV Splitter genom Infinite Pin Tee-filtret till AVI Mux och ljudåtergivningen. Filter Graph Manager håller alla dessa strömmar synkroniserade med tidsstämplarna på exemplen och grafreferensklockan.
Det här diagrammet kan verka onödigt komplicerat, men det säkerställer att den DV-kodade videoströmmen bara avkodas en gång, vilket minimerar CPU-kraven. Observera också att videon går igenom Smart Tee-filtret medan ljudet går igenom Infinite Pin Tee-filtret. Smart Tee kan släppa förhandsgranskningsramar för att förbättra inspelningsprestanda, vilket är önskvärt för video men inte för ljud, där borttagna exempel är mycket märkbara. Dessutom, eftersom ljudet kräver mycket lägre bandbredd än videon, finns det relativt liten chans att släppa ljud i filen.
Du måste skapa det här diagrammet ett avsnitt i taget, men metoden RenderStream kan fortfarande vara till hjälp. Använd följande kod:
// Build the file-writing section of the graph.
hr = pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi,
OLESTR("C:\\Example3.avi"), &pMux, 0);
// MSDV to DV splitter.
IBaseFilter *pDVSplit; // Create the DV Splitter (CLSID_DVSplitter)
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pDV, 0, pDVSplit);
// Splitter to DV Decoder to Smart Tee.
IBaseFilter *pDVDec; // Create the DV Decoder (CLSID_DVVideoCodec)
IBaseFilter *pSmartTee; // Create the Smart Tee (CLSID_SmartTee)
hr = pBuilder->RenderStream(0, &MEDIATYPE_Video, pDVSplit, pDVDec,
pSmartTee);
// Smart Tee (video) to Avi Mux.
IPin *pPin1;
hr = pBuilder->FindPin(pSmartTee, PINDIR_OUTPUT, 0, 0, TRUE, 0, &pPin1);
hr = pBuilder->RenderStream(0, 0, pPin1, 0, pMux);
// Smart Tee to preview.
IPin *pPin2;
hr = pBuilder->FindPin(pSmartTee, PINDIR_OUTPUT, 0, 0, TRUE, 1, &pPin2);
hr = pBuilder->RenderStream(0, 0, pPin2, 0, pMux);
// DV Splitter (audio) to Infinite Tee to Avi Mux.
IBaseFilter *pTee; // Create the Infinite Pin Tee (CLSID_InfTee)
hr = pBuilder->RenderStream(0, &MEDIATYPE_Audio, pDVSplit, pTee, pMux);
// Infinite Pin Tee to preview.
hr = pBuilder->RenderStream(0, 0, pTee, 0, 0);
Du måste skapa filtren DV Splitter, DV Video Decoder, Smart Tee och Infinite Pin Tee och lägga till var och en i filterdiagrammet. (I korthet utelämnas de här stegen från föregående kod.) I det här exemplet används metoden ICaptureGraphBuilder2::FindPin för att hitta hämtnings- och förhandsgranskningsstiften i Smart Tee-filtret. capture är alltid utdatastift 0 och förhandsversionen är utdatastift 1.
Relaterade ämnen