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

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 ミキサーによって公開されるさまざまなインターフェイス。 ビデオ ミキサー コントロール の使用に関するを参照してください。 EVR
MR_VIDEO_RENDER_SERVICE EVR 発表者によって公開されるさまざまなインターフェイス。 ビデオディスプレイコントロール を使用するを参照してください。 EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Acoustic Echo Cancellation (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);

IMFGetService インターフェイスの

Media Foundation Platform API