服務介面

媒體基礎中的某些介面必須藉由呼叫 IMFGetService::GetService 而不是呼叫 QueryInterface 來取得。 GetService 方法的運作方式類似 QueryInterface,但有下列差異:

  • 除了介面標識碼之外,它也需要服務標識元 GUID。
  • 它可以傳回另一個實作 介面的物件指標,而不是傳回查詢原始物件的指標。

 

服務是透過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 遠端物件的 Proxy。
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 IDirect3DDeviceManager9IDirectXVideoAccelerationService 增強式視訊轉譯器 (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。

警告

物件可以透過QueryInterfaceGetService 傳回服務介面的方式實作。 不過,需要 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