다음을 통해 공유


서비스 인터페이스

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

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

메모

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

 

서비스IMFGetService 인터페이스를 통해 특정 개체 클래스에서 가져온 특정 인터페이스입니다. 다음 서비스가 정의됩니다.

서비스 식별자 인터페이스 이 서비스를 노출할 수 있는 개체
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(액세스 가능 미디어 교환) 미디어 원본입니다.
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Sequencer 원본
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 표면 버퍼
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 믹서에 의해 노출되는 다양한 인터페이스. Video Mixer 컨트롤 사용하는참조하세요. EVR
MR_VIDEO_RENDER_SERVICE EVR 발표자가 노출하는 다양한 인터페이스입니다. 비디오 표시 컨트롤 사용하는참조하세요. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl AEC(Acoustic Echo Cancellation) 효과. Windows 11 버전 24H2에 도입되었습니다.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager 미디어 원본. Windows 11 버전 24H2에 도입되었습니다.

 

이 테이블에 나열된 개체에서 이 테이블에 나열된 인터페이스를 얻으려면 GetService 사용해야 합니다.

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

주의

개체는 QueryInterface 통해 서비스 인터페이스를 반환하고 GetService방식으로 구현될 수 있습니다. 그러나 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 인터페이스

Media Foundation 플랫폼 API