서비스 인터페이스
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);
관련 항목