サービス インターフェイス
メディア ファンデーションの一部のインターフェイスは、QueryInterface を呼び出す代わりに IMFGetService::GetService を呼び出して取得する必要があります。 GetService メソッドは QueryInterface と同様に機能しますが、次の違いがあります。
- インターフェイス識別子に加えて、サービス識別子 GUID を受け取ります。
- 照会された元のオブジェクトへのポインターを返す代わりに、インターフェイスを実装する別のオブジェクトへのポインターを返すことができます。
Note
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 | 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 を使用して、この表に示されているオブジェクトからこの表に示されているインターフェイスを取得する必要があります。
場合によっては、インターフェイスが 1 つのクラスのオブジェクトによってサービスとして返され、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);
関連トピック