사용자 지정 믹서
[이 페이지에 설명된 구성 요소, 향상된 Video Renderer는 레거시 기능입니다. MediaPlayer 및 IMFMediaEngine 구성 요소를 통해 노출된 SVR(Simple Video Renderer)으로 대체되었습니다. 비디오 콘텐츠를 재생하려면 이러한 구성 요소 중 하나로 데이터를 보내고 새 비디오 렌더러를 인스턴스화하도록 허용해야 합니다. 이러한 구성 요소는 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 MediaPlayer 또는 하위 수준 IMFMediaEngine API를 사용하여 EVR 대신 Windows에서 비디오 미디어를 재생하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
이 항목에서는 향상된 EVR(비디오 렌더러)에 대한 사용자 지정 믹서를 작성하는 방법을 설명합니다. Media Foundation EVR 미디어 싱크 또는 DirectShow EVR 필터에서 사용자 지정 믹서를 사용할 수 있습니다. 믹서 및 발표자에 대한 자세한 내용은 향상된 비디오 렌더러를 참조 하세요.
믹서는 하나 이상의 입력(참조 스트림 및 하위 스트림)과 하나의 출력이 있는 MFT(Media Foundation 변환)입니다. 입력 스트림은 업스트림 샘플을 받습니다. 출력 스트림은 발표자에게 샘플을 제공합니다. EVR은 믹서에서 IMFTransform::P rocessInput을 호출할 책임이 있으며 발표자는 IMFTransform::P rocessOutput을 호출할 책임이 있습니다.
최소한 EVR 믹서는 다음 인터페이스를 구현해야 합니다.
인터페이스 | 설명 |
---|---|
IMFTransform | 기본 MFT 기능을 제공합니다. |
IMFTopologyServiceLookupClient | 믹서가 EVR에서 인터페이스를 가져올 수 있도록 합니다. |
IMFVideoDeviceID | 믹서가 EVR에서 인터페이스를 가져올 수 있도록 합니다. |
IMFAttributes | MF_SA_D3D_AWARE 특성을 EVR에 노출하는 데 사용됩니다. |
필요에 따라 MFT는 다음 인터페이스를 구현할 수 있습니다.
인터페이스 | 설명 |
---|---|
IEVRTrustedVideoPlugin | 보호된 콘텐츠를 재생하는 데 필요합니다. |
IMFGetService | 애플리케이션에 IMFVideoMixerBitmap 및 IMFVideoProcessor와 같은 인터페이스를 노출합니다. |
IMFQualityAdvise | 품질 관리자가 비디오 품질을 조정할 수 있도록 합니다. |
IMFVideoMixerBitmap | 애플리케이션이 정적 비트맵을 비디오에 혼합할 수 있도록 합니다. |
IMFVideoPositionMapper | 출력 비디오 프레임의 좌표를 입력 비디오 프레임의 좌표로 지도. |
IMFVideoProcessor | 애플리케이션에 일부 DXVA 비디오 처리 기능을 노출합니다. |
믹서와의 형식 협상은 다음과 같이 작동합니다.
EVR은 참조 스트림의 미디어 형식을 설정합니다.
EVR은 MFVP_MESSAGE_INVALIDATEMEDIATYPE 메시지와 함께 발표자에서 IMFVideoPresenter::P rocessMessage를 호출합니다.
발표자는 믹서의 출력 스트림에서 미디어 형식을 설정합니다.
EVR은 하위 스트림의 미디어 형식을 설정합니다.
참조 스트림의 미디어 형식이 변경되면 믹서의 다른 미디어 형식이 더 이상 유효하지 않습니다. 믹서의 IMFTransform::P rocessOutput 메서드가 실패하고 MF_E_TRANSFORM_STREAM_CHANGE 반환합니다. 발표자는 이 시점에서 아무 작업도 수행해서는 안 됩니다. EVR은 형식 협상 프로세스를 다시 시작합니다.
입력 스트림이 스트림의 끝에 도달하면 EVR은 MFT_MESSAGE_NOTIFY_END_OF_STREAM 믹서에서 IMFTransform::P rocessMessage를 호출합니다.
믹서는 EVR의 IMediaEventSink 인터페이스를 사용하여 EVR에 다음 이벤트를 보냅니다. 이 인터페이스는 DirectShow SDK 설명서에 설명되어 있습니다.
이벤트 | 설명 |
---|---|
EC_SAMPLE_NEEDED | 믹서에는 새 입력 샘플이 필요합니다. |
스트리밍이 시작되기 전에 EVR이 믹서에서 ProcessOutput을 호출할 수 있습니다. 믹서는 이러한 호출에 실패하지 않아야 합니다. 대신 출력 화면을 검은색 픽셀로 채워야 합니다. 믹서는 MFT_MESSAGE_NOTIFY_BEGIN_STREAMING 메시지를 받거나 ProcessInput 메서드가 호출될 때까지 출력 샘플을 색으로 채웁니다. 믹서가 MFT_MESSAGE_NOTIFY_END_STREAMING 메시지를 받으면 색 채우기 모드로 다시 전환해야 합니다.
IMFVideoDeviceID 구현
IMFVideoDeviceID 인터페이스에는 디바이스 GUID를 반환하는 GetDeviceID라는 하나의 메서드가 포함되어 있습니다. 디바이스 GUID를 사용하면 발표자와 믹서가 호환되는 기술을 사용할 수 있습니다. 디바이스 GUID가 일치하지 않으면 EVR이 초기화되지 않습니다.
표준 믹서와 발표자는 모두 장치 GUID가 IID_IDirect3DDevice9 동일한 Direct3D 9를 사용합니다. 표준 믹서에서 사용자 지정 발표자를 사용하려는 경우 발표자의 디바이스 GUID는 IID_IDirect3DDevice9 합니다. 두 구성 요소를 모두 바꾸면 새 디바이스 GUID를 정의할 수 있습니다.
IMFTopologyServiceLookupClient 구현
믹서는 IMFTopologyServiceLookupClient 인터페이스를 구현해야 합니다. 스트리밍을 시작하기 전에 EVR은 IMFTopologyServiceLookupClient::InitServicePointers를 호출하고 EVR의 IMFTopologyServiceLookup 인터페이스에 대한 포인터를 전달합니다. 믹서는 이 포인터를 사용하여 EVR에서 인터페이스 포인터를 가져옵니다.
최소한 믹서는 다음 인터페이스를 쿼리해야 합니다.
EVR이 IMFTopologyServiceLookupClient::ReleaseServicePointers를 호출하는 경우 믹서는 InitServicePointers 호출에서 가져온 모든 포인터를 해제해야 합니다.
Mixer 특성
믹서는 다음 특성을 지원해야 합니다.
attribute | 설명 |
---|---|
MF_SA_D3D_AWARE | 믹서가 DXVA(DirectX Video Acceleration)를 지원하는지 여부를 지정합니다. |
MF_SA_REQUIRED_SAMPLE_COUNT | EVR이 각 믹서 스트림에 할당해야 하는 비디오 샘플의 수입니다. 이 특성은 개별 스트림에 적용됩니다. 는 IMFTransform::GetInputStreamAttributes에서 반환 된 특성 저장소를 사용합니다. |
EVR에서 Mixer 설정
EVR에서 사용자 지정 믹서 설정하려면 IMFVideoRenderer::InitializeRenderer를 호출 합니다. DirectShow EVR 필터와 EVR 미디어 싱크 모두 이 메서드를 구현합니다.
EVR 활성화 개체입니다. EVR 활성화 개체를 사용하는 경우 EVR 활성화 개체에서 다음 특성 중 하나를 설정하여 사용자 지정 믹서가 제공됩니다.
attribute | 설명 |
---|---|
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE | 믹서의 활성화 개체에 대한 포인터입니다. 활성화 개체는 IMFActivate 인터페이스를 구현해야 합니다. |
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID | 믹서의 CLSID입니다. |
관련 항목