Udostępnij przez


Podgląd projektu

[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.]

[Ten interfejs API nie jest obsługiwany i może zostać zmieniony lub niedostępny w przyszłości.]

Aby wyświetlić podgląd projektu, potrzebny jest komponent nazywany silnikiem renderującym, który tworzy wykres filtru DirectShow z osi czasu. Graf filtrów to właśnie to, co faktycznie renderuje projekt. Aparat renderowania umożliwia wyświetlenie podglądu projektu lub zapisanie końcowego pliku wyjściowego.

Ten artykuł nie zawiera szczegółowych informacji na temat aparatu renderowania. W wersji zapoznawczej potrzebujesz tylko kilku wywołań metody. Bardziej szczegółowe omówienie, w tym sposób zapisywania plików wyjściowych, można znaleźć w Renderowanie projektu. Poniższy przykład kodu przedstawia sposób konstruowania grafu w wersji zapoznawczej.

IRenderEngine *pRender = NULL; 
hr = CoCreateInstance(CLSID_RenderEngine, NULL, CLSCTX_INPROC_SERVER,
            IID_IRenderEngine, (void**) &pRender);

hr = pRender->SetTimelineObject(pTL);
hr = pRender->ConnectFrontEnd( );
hr = pRender->RenderOutputPins( );

Utwórz silnik renderujący przy użyciu funkcji CoCreateInstance. Następnie wywołaj następujące metody na interfejsie IRenderEngine silnika renderowania:

  • SetTimelineObject. Określa oś czasu do użycia.
  • ConnectFrontEnd. Tworzy częściowy graf filtru, z jednym wyjściowym łączem dla każdej grupy na osi czasu.
  • RenderOutputPins. Kończy graf podglądu, łącząc każdy pin wyjściowy z renderem wideo lub audio.

Po utworzeniu grafu możesz wyświetlić podgląd projektu, uruchamiając graf, tak jak w przypadku dowolnego grafu filtru DirectShow. Najpierw uzyskaj wskaźnik do grafu filtru, wywołując metodę IRenderEngine::GetFilterGraph.

IGraphBuilder   *pGraph = NULL;
hr = pRender->GetFilterGraph(&pGraph);

Wykonaj zapytanie względem wykresu filtru dla interfejsów IMediaControl i IMediaEvent. Użyj tych dwóch interfejsów, aby uruchomić graf i poczekać na zakończenie odtwarzania. Aby uzyskać wyjaśnienie sposobu używania tych interfejsów, zobacz Jak odtworzyć plik i Odpowiedź na zdarzenia. Poniższy kod przedstawia jeden ze sposobów używania tych interfejsów.

IMediaControl   *pControl = NULL;
IMediaEvent     *pEvent = NULL;
long evCode;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();

Kod w tym przykładzie blokuje wykonywanie programu do momentu zakończenia odtwarzania ze względu na parametr INFINITE w wywołaniu metody IMediaEvent::WaitForCompletion. Jeśli coś pójdzie nie tak podczas odtwarzania, może to spowodować, że program przestanie odpowiadać. W rzeczywistej aplikacji użyj pętli komunikatów, aby poczekać na zakończenie odtwarzania. Zaleca się również udostępnienie użytkownikowi sposobu przerwania odtwarzania.

Po zakończeniu korzystania z silnika renderowania zawsze wywołaj metodę IRenderEngine::ScrapIt. Ta metoda usuwa graf filtru i zwalnia wszystkie zasoby przechowywane przez aparat renderowania.

pRender->ScrapIt();

Ładowanie i wyświetlanie podglądu projektu