Rozhraní služeb
Některá rozhraní v Media Foundation musí být získána voláním MMFGetService::GetService namísto volání QueryInterface. Metoda GetService funguje jako QueryInterface, ale s následujícími rozdíly:
- Kromě identifikátoru rozhraní přebírá identifikátor GUID služby.
- Může vrátit ukazatel na jiný objekt, který implementuje rozhraní, namísto vrácení ukazatele na původní objekt, který je dotazován.
Poznámka
Rozhraní MMFGetService je velmi podobné rozhraní IServiceProvider použité v některých dalších rozhraních API.
služba je konkrétní rozhraní získané z konkrétní třídy objektů prostřednictvím rozhraní MMFGetService. Jsou definovány následující služby.
Identifikátor služby | Rozhraní | Objekty, které mohou tuto službu zveřejnit |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | MMFMetadataProvider | Zdroje médií |
MF_MEDIASOURCE_SERVICE | MMFMediaSource | Podporováno ve Windows 8.1 a novějších verzích. |
MF_PMP_SERVER_CONTEXT | MMFPMPServer | Relace médií s chráněnou cestou k médiím (PMP). |
MF_QUALITY_SERVICES | MMFQualityAdvise | Zdroje médií. |
MF_RATE_CONTROL_SERVICE | MMFRateControl | Zdroje médií, relace médií |
MF_RATE_CONTROL_SERVICE | SUPPORT | Zdroje médií, jímky médií, relace médií |
MF_REMOTE_PROXY | MMFRemoteProxy | Proxy servery pro vzdálené objekty. |
MF_SAMI_SERVICE | MMFSAMIStyle | Synchronizovaný zdroj médií s podporou výměny médií (SAMI). |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | MMFMediaSourcePresentationProvider | Zdroj aplikace Sequencer |
MF_TIMECODE_SERVICE | MMFTimecodeTranslate | Zdroj médií ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | MMFTopologyNodeAttributeEditor | Relace médií |
MF_WRAPPED_OBJECT | MMFByteStream | Zabalené objekty |
MF_WRAPPED_BUFFER_SERVICE | Podporováno ve Windows 8.1 a novějších verzích. |
|
MF_WRAPPED_SAMPLE_SERVIC | Podporováno ve Windows 8.1 a novějších verzích. |
|
MF_WORKQUEUE_SERVICES | MMFWorkQueueServices | Relace médií |
MFNET_SAVEJOB_SERVICE | MMFSaveJob | Bajtové datové proudy |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Zdroj sítě. Pomocí této služby můžete načíst statistiky sítě. VizvlastnostiMFNETSOURCE_STATISTICS . |
MR_AUDIO_POLICY_SERVICE | MMFAudioPolicy | Zvukový renderer |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Vyrovnávací paměti povrchu DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | MMFSimpleAudioVolume | Zdroj zvukového záznamu |
MR_POLICY_VOLUME_SERVICE | MMFSimpleAudioVolume | Zvukový renderer |
MR_STREAM_VOLUME_SERVICE | MMFAudioStreamVolume | Zvukový renderer |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Vylepšený renderer videa (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Vstupní špendlíky ve filtru DirectShow EVR |
MR_VIDEO_ACCELERATION_SERVICE | MMFVideoSampleAllocator – rozhraní | Jímky toku EVR. |
MR_VIDEO_MIXER_SERVICE | Různá rozhraní vystavená mixérem EVR. Viz použití ovládacích prvků Video Mixer. | EVR |
MR_VIDEO_RENDER_SERVICE | Různá rozhraní vystavená prezentujícím EVR. Viz použití ovládacích prvků zobrazení videa. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Efekty AEC (Acoustic Echo Cancellation). Představeno ve Windows 11 verze 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Zdroje médií. Představeno ve Windows 11 verze 24H2. |
K získání rozhraní uvedených v této tabulce z objektů uvedených v této tabulce musíte použít GetService.
V některých případech je rozhraní vráceno jako služba jednou třídou objektů a vráceno prostřednictvím QueryInterface jinou třídou objektů. Referenční stránky pro každé rozhraní označují, kdy použít GetService a kdy použít QueryInterface.
Opatrnost
Objekt může být implementován takovým způsobem, že vrací rozhraní služby prostřednictvím QueryInterface a také GetService. Použití QueryInterface v případě, že se vyžaduje GetService, může dojít k problémům s kompatibilitou později.
MFGetService je pomocná funkce, která se dotazuje objektu na MMFGetService a potom volá metodu GetService objektu.
Příklady
Následující příklad se dotazuje Media Session pro MMFGetService a získá MMFRateControl rozhraní.
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);
Následující příklad je ekvivalentní předchozímu příkladu, ale používá funkci 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);
Související témata
-
rozhraníMMFGetService