サービス インターフェイス

メディア ファンデーションの一部のインターフェイスは、QueryInterface を呼び出す代わりに IMFGetService::GetService を呼び出して取得する必要があります。 GetService メソッドは QueryInterface と同様に機能しますが、次の違いがあります。

  • インターフェイス識別子に加えて、サービス識別子 GUID を受け取ります。
  • 照会された元のオブジェクトへのポインターを返す代わりに、インターフェイスを実装する別のオブジェクトへのポインターを返すことができます。

注意

IMFGetService インターフェイスは、他の API で使用される IServiceProvider インターフェイスによく似ています。

 

サービスは、IMFGetService インターフェイスを介してオブジェクトの特定のクラスから取得された特定のインターフェイスです。 次のサービスが定義されています。

サービス識別子 Interface このサービスを公開する可能性があるオブジェクト
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 Synchronized Accessible Media Interchange (SAMI) メディア ソース。
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 サーフェス バッファー
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 を使用して、この表に示されているオブジェクトからこの表に示されているインターフェイスを取得する必要があります。

場合によっては、インターフェイスが 1 つのクラスのオブジェクトによってサービスとして返され、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