Freigeben über


Dienstschnittstellen

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

  • Zusätzlich zur Schnittstellen-ID wird eine Dienst-ID-GUID verwendet.
  • Es kann einen Zeiger auf ein anderes Objekt zurückgeben, das die Schnittstelle implementiert, anstatt einen Zeiger auf das ursprüngliche Objekt zurückzugeben, das abgefragt wird.

Anmerkung

Die IMFGetService--Schnittstelle ähnelt der IServiceProvider- Schnittstelle, die in einigen anderen APIs verwendet wird.

 

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 für barrierefreie Medienaustausch (Accessible Media Interchange, SAMI).
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Sequenzerquelle
MF_TIMECODE_SERVICE IMFTimecodeTranslate- ASF-Medienquelle.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Mediensitzung
MF_WRAPPED_OBJECT IMFByteStream- Umschlossene 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- Bytedatenströme
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ächenpuffer
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Audioaufnahmequelle
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Audiorenderer
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume- Audiorenderer
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Erweiterter Videorenderer (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Eingabenadeln im DirectShow EVR-Filter
MR_VIDEO_ACCELERATION_SERVICE IMFVideoSampleAllocator Interface EVR-Stromsenken.
MR_VIDEO_MIXER_SERVICE Verschiedene Schnittstellen, die vom EVR-Mischer verfügbar gemacht werden. Siehe Verwenden der Videomixer-Steuerelemente. EVR
MR_VIDEO_RENDER_SERVICE Verschiedene Schnittstellen, die vom EVR-Referenten verfügbar gemacht werden. Siehe Verwenden der Videoanzeigesteuerelemente. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl AEC-Effekte (Acoustic Echo Cancellation). 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 von einer Objektklasse als Dienst zurückgegeben und durch QueryInterface- von einer anderen Objektklasse zurückgegeben. Die Referenzseiten für jede Schnittstelle geben an, wann GetService- und wann QueryInterface-verwendet werden soll.

Vorsicht

Ein Objekt kann so implementiert werden, dass es eine Dienstschnittstelle über QueryInterface- sowie GetService-zurückgibt. Die Verwendung von QueryInterface jedoch, wenn GetService- erforderlich ist, kann 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, verwendet jedoch 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 Platform-APIs