Dienstschnittstellen

Einige Schnittstellen in Media Foundation müssen durch Aufrufen von IMFGetService::GetService statt durch Aufrufen von QueryInterface abgerufen werden. Die GetService-Methode funktioniert wie QueryInterface, jedoch mit den folgenden Unterschieden:

  • Zusätzlich zur Schnittstellenkennung wird eine Dienst-ID-GUID verwendet.
  • Sie kann einen Zeiger auf ein anderes Objekt zurücksenden, das die Schnittstelle implementiert, anstatt einen Zeiger auf das ursprüngliche Objekt zurückzusenden, das abgefragt wird.

Hinweis

Die IMFGetService-Schnittstelle ist der in einigen anderen APIs verwendeten IServiceProvider-Schnittstelle sehr ähnlich.

 

Ein Dienst ist eine bestimmte Schnittstelle, die von einer bestimmten Klasse von Objekten über die IMFGetService-Schnittstelle abgerufen wird. Die folgenden Dienste werden definiert.

Dienstbezeichner Schnittstelle Objekte, die diesen Dienst möglicherweise verfügbar machen
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Medienquellen
MF_MEDIASOURCE_SERVICE IMFMediaSource Unterstützt in Windows 8.1 und höher.
MF_PMP_SERVER_CONTEXT IMFPMPServer Geschützte Medienpfad (PMP)-Mediensitzung.
MF_QUALITY_SERVICES IMFQualityAdvise Medienquellen.
MF_RATE_CONTROL_SERVICE IMFRateControl Medienquellen, Mediensitzung
MF_RATE_CONTROL_SERVICE IMFRateSupport Medienquellen, Mediensenken, Mediensitzung
MF_REMOTE_PROXY IMFRemoteProxy Proxys für Remoteobjekte.
MF_SAMI_SERVICE IMFSAMIStyle Synchronisierte Medienquelle mit Zugriff für Medienaustausch (SAMI) Medienquelle.
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Sequencer-Quelle
MF_TIMECODE_SERVICE IMFTimecodeTranslate ASF-Medienquelle.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Mediensitzung
MF_WRAPPED_OBJECT IMFByteStream Verpackte Objekte
MF_WRAPPED_BUFFER_SERVICE Unterstützt in Windows 8.1 und höher.
MF_WRAPPED_SAMPLE_SERVIC Unterstützt in Windows 8.1 und höher.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Mediensitzung
MFNET_SAVEJOB_SERVICE IMFSaveJob Byte-Streams
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Netzwerkquelle. Verwenden Sie diesen Dienst, um Netzwerkstatistiken abzurufen. Siehe MFNETSOURCE_STATISTICS-Eigenschaft.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Audiorenderer
MR_BUFFER_SERVICE IDirect3DSurface9 DirectX Oberflächen-Puffer
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Audio Capture einbinden
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Audiorenderer
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Audiorenderer
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Verbesserter Videorenderer (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Eingabestecknadeln im ActiveMovie EVR-Filter
MR_VIDEO_ACCELERATION_SERVICE IMFVideoSampleAllocator-Schnittstelle EVR-Streamsenken.
MR_VIDEO_MIXER_SERVICE Verschiedene Schnittstellen, die vom EVR-Mixer verfügbar gemacht werden. Siehe Verwenden der Videomixersteuerelemente. EVR
MR_VIDEO_RENDER_SERVICE Verschiedene Schnittstellen, die vom EVR-Referent verfügbar gemacht werden. Siehe Verwenden der Videoanzeigesteuerelemente. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl AEC-Effekte (Akustisches Echo abbrechen). Eingeführt in Windows 11, Version 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Medienquellen. Eingeführt in Windows 11, Version 24H2.

 

Sie müssen GetService verwenden, um die in dieser Tabelle aufgeführten Schnittstellen aus den in dieser Tabelle aufgeführten Objekten abzurufen.

In einigen Fällen wird eine Schnittstelle als Dienst von einer Klasse von Objekten zurückgegeben und von einer anderen Objektklasse durch QueryInterface zurückgegeben. Die Referenzseiten für jede Schnittstelle geben an, wann GetService und wann QueryInterface verwendet werden soll.

Achtung

Ein Objekt kann so implementiert werden, dass es eine Dienstschnittstelle über QueryInterface sowie GetService zurückgibt. Die Verwendung von QueryInterface, wenn GetService erforderlich ist, kann jedoch später zu Kompatibilitätsproblemen führen.

 

Die MFGetService-Funktion ist eine Hilfsfunktion, die ein Objekt für IMFGetService abfragt und dann die GetService-Methode des Objekts aufruft.

Beispiele

Das folgende Beispiel fragt die Mediensitzung für IMFGetService ab und ruft die IMFRateControl- Schnittstelle ab.

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);

Das folgende Beispiel entspricht dem vorherigen Beispiel, aber nutzt die Funktion 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-Schnittstelle

Media Foundation-Plattform-APIs