Udostępnij za pośrednictwem


Przechwytywanie wideo do pliku Windows Media

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Aby przechwycić wideo i zakodować je do pliku Windows Media Video (WMV), połącz pin przechwytywania z filtrem WM ASF Writer, jak pokazano na poniższym diagramie.

graf przechwytywania w systemie Windows Media

Najprostszym sposobem utworzenia tego grafu jest określenie MEDIASUBTYPE_Asf w metodzie ICaptureGraphBuilder2::SetOutputFileName:

IBaseFilter* pASFWriter = 0;
hr = pBuild->SetOutputFileName(
    &MEDIASUBTYPE_Asf,   // Create a Windows Media file.
    L"C:\\VidCap.wmv",   // File name.
    &pASFWriter,         // Receives a pointer to the filter.
    NULL);  // Receives an IFileSinkFilter interface pointer (optional).

Wartość MEDIASUBTYPE_Asf informuje konstruktora programu Capture Graph o użyciu filtru składnika zapisywania ASF WM jako ujścia pliku. Konstruktor Capture Graph Builder tworzy filtr, dodaje go do grafu i wywołuje IFileSinkFilter::SetFileName, aby ustawić nazwę pliku wyjściowego. Zwraca wskaźnik do filtru jako parametr wychodzący (

pASFWriter

w poprzednim przykładzie).

Użyj interfejsu IConfigAsfWriter w komponencie WM ASF Writer, aby ustawić profil Windows Media. Musisz to zrobić przed podłączeniem jakichkolwiek pinów do modułu WM ASF Writer.

IConfigAsfWriter *pConfig = 0;
hr = pASFWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if (SUCCEEDED(hr))
{
     // Configure the ASF Writer filter.
    pConfig->Release();
}

Aby uzyskać więcej informacji, jak ustawić profil, zobacz Tworzenie plików ASF w DirectShow.

Wywołaj ICaptureGraphBuilder2::RenderStream, aby połączyć filtr przechwytywania z modułem zapisywania ASF:

hr = pBuild->RenderStream(
    &PIN_CATEGORY_CAPTURE,   // Capture pin.
    &MEDIATYPE_Video,        // Video. Use MEDIATYPE_Audio for audio.
    pCap,                    // Pointer to the capture filter. 
    0, 
    pASFWriter);             // Pointer to the sink filter (ASF Writer).

Każdy pin wejściowy w filtrze zapisu WM ASF odpowiada strumieniowi w profilu Windows Media. Należy połączyć każdy pin, aby zawartość pliku odpowiadała profilowi.

Przechwytywanie wideo do pliku