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);
Zugehörige Themen