Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Składnik opisany na tej stronie, ulepszony program renderowania wideo, jest starszą funkcją. Został zastąpiony przez Simple Video Renderer (SVR) udostępniany poprzez komponenty MediaPlayer i IMFMediaEngine. Aby odtworzyć zawartość wideo, należy wysłać dane do jednego z tych komponentów i umożliwić im zainicjowanie nowego modułu renderowania wideo. Te składniki zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer lub niższego poziomu interfejsów API IMFMediaEngine do odtwarzania multimediów wideo dla systemu Windows zamiast EVR-u, 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.]
Interfejs IMFVideoDisplayControl steruje sposobem wyświetlania wideo w oknie aplikacji przez ulepszony moduł renderowania wideo (EVR). Ten interfejs może być używany w programie DirectShow lub Media Foundation. Wewnętrznie kontrolki wyświetlania wideo są dostarczane przez domyślny prezenter EVR. Jeśli piszesz niestandardowy prezenter, możesz podać ten sam interfejs lub zdefiniować interfejs niestandardowy.
Prawidłowy sposób uzyskania wskaźnika do interfejsu IMFVideoDisplayControl zależy od tego, czy używasz wersji DirectShow EVR lub wersji Media Foundation. W przypadku aplikacji Media Foundation EVR zależy ona również od tego, czy używasz go bezpośrednio, czy też używasz go za pośrednictwem sesji multimediów (co jest bardziej typowe).
Aby uzyskać wskaźnik do interfejsu IMFVideoDisplayControl, wykonaj następujące czynności:
Pobierz wskaźnik do interfejsu IMFGetService.
Jeśli używasz filtru DirectShow EVR, wywołaj QueryInterface na filtrze.
Jeśli korzystasz bezpośrednio z odbiornika multimediów EVR, wywołaj QueryInterface na odbiorniku multimediów.
Jeśli używasz Media Session, wywołaj QueryInterface na Media Session.
Jeśli używasz sesji multimediów, poczekaj, aż sesja multimediów wyśle zdarzenie MESessionTopologyStatus z wartością stanu MF_TOPOSTATUS_READY. (Pomiń ten krok w przeciwnym razie).
Wywołaj IMFGetService::GetService, aby uzyskać interfejs IMFVideoDisplayControl. Identyfikator usługi jest MR_VIDEO_RENDER_SERVICE.
Do wykonywania następujących zadań można użyć interfejsu IMFVideoDisplayControl:
Ustaw okno przycięcia.
Ustaw prostokąty źródłowe i docelowe.
Zaktualizuj okno wideo w odpowiedzi na komunikaty okna.
Włącz lub wyłącz tryb pełnoekranowy.
Okno wycinków
Aplikacja musi podać okno, w którym EVR rysuje film wideo. Aby ustawić okno wycinków, wywołaj IMFVideoDisplayControl::SetVideoWindow z uchwytem do okna aplikacji.
Jeśli utworzysz ujście multimediów EVR poprzez obiekt aktywacji, ten krok nie jest wymagany. Obiekt aktywacji automatycznie wywołuje SetVideoWindow, używając uchwytu okna podanego w funkcji MFCreateVideoRendererActivate.
Prostokąty źródłowe i docelowe
Podczas odtwarzania prezenter pobiera część złożonego obrazu wideo i rysuje go na obszar okna wideo. Część obrazu złożonego to prostokąt źródłowy , a obszar okna wideo to prostokąt docelowy.
Prostokąt źródłowy jest definiowany przy użyciu znormalizowanych współrzędnych, w których punkt (0.0, 0.0) odpowiada lewemu górnemu rogu filmu wideo, a (1.0, 1.0) odpowiada prawego dolnego rogu filmu wideo. Prostokąt źródłowy może być dowolnym regionem w tym prostokątze. Prostokąt docelowy jest określony w pikselach w odniesieniu do obszaru roboczego okna. Domyślny prostokąt źródłowy to cały obraz, a domyślny prostokąt docelowy jest pustym prostokątem.
Aby ustawić prostokąty źródłowe i docelowe, wywołaj metodę IMFVideoDisplayControl::SetVideoPosition.
Jeśli utworzysz ujście multimediów EVR za pośrednictwem jego obiektu aktywacji, ten krok nie jest wymagany. Obiekt aktywacji automatycznie ustawia prostokąt docelowy równy całemu obszarowi klienta okna. Należy jednak wywołać SetVideoPosition, jeśli chcesz zmienić prostokąt źródłowy lub ustawić inny prostokąt docelowy.
Komunikaty okna
Podczas odtwarzania aplikacja powinna odpowiadać na niektóre komunikaty okna w następujący sposób:
WM_PAINT: Wywołaj IMFVideoDisplayControl::RepaintVideo, aby przemalować wideo. Ponadto należy unikać malowania przez prostokąt docelowy podczas odtwarzania wideo, ponieważ może to spowodować migotanie.
WM_SIZE: aby zmienić rozmiar prostokąta docelowego, może być konieczne wywołanie SetVideoPosition.
W przeciwieństwie do filtru Video Mixing Renderer (VMR) w DirectShow, nie musisz powiadamiać EVR po otrzymaniu komunikatu WM_DISPLAYCHANGE.
Tematy pokrewne