Sdílet prostřednictvím


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

rozhraníMMFGetService

rozhraní API platformy Media Foundation