서비스 인터페이스

Media Foundation의 일부 인터페이스는 QueryInterface이 아닌 IMFGetService::GetService를 호출하여 가져와야 합니다. GetService 메서드는 QueryInterface처럼 작동하지만 다음과 같은 차이점이 있습니다.

  • 인터페이스 식별자 외에도 서비스 식별자 GUID를 사용합니다.
  • 쿼리된 원래 개체에 대한 포인터를 반환하는 대신 인터페이스를 구현하는 다른 개체에 대한 포인터를 반환할 수 있습니다.

참고 항목

IMFGetService 인터페이스는 다른 API에 사용되는 IServiceProvider 인터페이스와 매우 유사합니다.

 

serviceIMFGetService 인터페이스를 통해 특정 개체 클래스에서 가져온 특정 인터페이스입니다. 정의되는 서비스는 다음과 같습니다.

서비스 식별자 인터페이스 이 서비스를 노출할 수 있는 개체
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider 미디어 소스
MF_MEDIASOURCE_SERVICE IMFMediaSource Windows 8.1 이상에서 지원됩니다.
MF_PMP_SERVER_CONTEXT IMFPMPServer PMP(보호된 미디어 경로) 미디어 세션입니다.
MF_QUALITY_SERVICES IMFQualityAdvise 미디어 소스.
MF_RATE_CONTROL_SERVICE IMFRateControl 미디어 원본, 미디어 세션
MF_RATE_CONTROL_SERVICE IMFRateSupport 미디어 원본, 미디어 싱크, 미디어 세션
MF_REMOTE_PROXY IMFRemoteProxy 원격 개체에 대한 프록시입니다.
MF_SAMI_SERVICE IMFSAMIStyle 동기화된 SAMI(Synchronized Accessible Media Interchange) 미디어 원본입니다.
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider 시퀀서 소스
MF_TIMECODE_SERVICE IMFTimecodeTranslate ASF 미디어 소스.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor 미디어 세션
MF_WRAPPED_OBJECT IMFByteStream 래핑된 개체
MF_WRAPPED_BUFFER_SERVICE Windows 8.1 이상에서 지원됩니다.
MF_WRAPPED_SAMPLE_SERVIC Windows 8.1 이상에서 지원됩니다.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices 미디어 세션
MFNET_SAVEJOB_SERVICE IMFSaveJob 바이트 스트림
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore 네트워크 원본. 이 서비스를 사용하여 네트워크 통계를 검색합니다. MFNETSOURCE_STATISTICS 속성을 참조하세요.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy 오디오 렌더러
MR_BUFFER_SERVICE IDirect3DSurface9 DirectX Surface 버퍼
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume 오디오 캡처 원본
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume 오디오 렌더러
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume 오디오 렌더러
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService 고급 비디오 렌더러(EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration DirectShow EVR 필터의 입력 핀
MR_VIDEO_ACCELERATION_SERVICE IMFVideoSampleAllocator 인터페이스 EVR 스트림 싱크.
MR_VIDEO_MIXER_SERVICE EVR 믹서에 의해 노출되는 다양한 인터페이스. 비디오 믹서 컨트롤 사용을 참조하세요. EVR
MR_VIDEO_RENDER_SERVICE EVR 발표자가 노출하는 다양한 인터페이스입니다. 비디오 표시 컨트롤 사용을 참조하세요. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl AEC(음향 반향 제거) 효과. Windows 11, 버전 24H2에 도입되었습니다.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager 미디어 소스. Windows 11, 버전 24H2에 도입되었습니다.

 

GetService를 사용하여 이 테이블에 나열된 개체로부터 이 테이블에 나열된 인터페이스를 가져와야 합니다.

경우에 따라 인터페이스는 한 개체 클래스에 의해 서비스로 반환되고 다른 개체 클래스에 의해 QueryInterface를 통해 반환됩니다. 각 인터페이스에 대한 참조 페이지는 GetService를 사용해야 하는 시기와 QueryInterface를 사용해야 하는 시점을 나타냅니다.

주의

개체는 GetService뿐만 아니라 QueryInterface를 통해 서비스 인터페이스를 반환하는 방식으로 구현될 수 있습니다. 그러나 GetService가 필요할 때 QueryInterface를 사용하면 나중에 호환성 문제가 발생할 수 있습니다.

 

MFGetService 함수는 IMFGetService에 대한 개체를 쿼리한 다음 개체의 GetService 메서드를 호출하는 도우미 함수입니다.

예제

다음 예제에서는 IMFGetService에 대한 미디어 세션을 쿼리하고 IMFRateControl 인터페이스를 가져옵니다.

IMFGetService *pGetService = NULL;
IMFRateControl *pRateControl = NULL;
HRESULT hr = S_OK;

hr = pMediaSession->QueryInterface(
    IID_IMFGetService, 
    (void**)&pGetService);

if (SUCCEEDED(hr))
{
    hr = pGetService->GetService(
        MF_RATE_CONTROL_SERVICE, 
        IID_IMFRateControl,
        (void**)&pRateControl);
}
if (SUCCEEDED(hr))
{
    // Use IMFRateControl. (Not shown.)
}

// Clean up.
SAFE_REELEASE(pGetService);
SAFE_RELEASE(pRateControl);

다음 예제는 이전 예제와 동일하지만 MFGetService 기능을 사용합니다.

IMFRateControl *pRateControl = NULL;
HRESULT hr = S_OK;

hr = MFGetService(
    pMediaSession, 
    MF_RATE_CONTROL_SERVICE, 
    IID_IMFRateControl, 
    (void**) &pRateCtl 
); 
if (SUCCEEDED(hr))
{
    // Use IMFRateControl. (Not shown.)
}

// Clean up.
SAFE_RELEASE(pRateControl);

IMFGetService 인터페이스

미디어 파운데이션 플랫폼 API