服務介面
媒體基礎中的某些介面必須藉由呼叫 IMFGetService::GetService 而不是呼叫 QueryInterface 來取得。 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 | 遠端物件的 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 | 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。
警告
物件可以透過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);
相關主題