Dela via


Tjänstgränssnitt

Vissa gränssnitt i Media Foundation måste hämtas genom att anropa IMFGetService::GetService i stället för genom att anropa QueryInterface. Metoden GetService fungerar som QueryInterface, men med följande skillnader:

  • Det tar ett GUID för tjänstidentifierare utöver gränssnittsidentifieraren.
  • Den kan returnera en pekare till ett annat objekt som implementerar gränssnittet, i stället för att returnera en pekare till det ursprungliga objektet som efterfrågas.

Not

Gränssnittet IMFGetService liknar det IServiceProvider- gränssnitt som används i vissa andra API:er.

 

En tjänst är ett visst gränssnitt som hämtas från en viss objektklass via IMFGetService-gränssnittet. Följande tjänster definieras.

Tjänstidentifierare Gränssnitt Objekt som kan exponera den här tjänsten
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Mediekällor
MF_MEDIASOURCE_SERVICE IMFMediaSource Stöds i Windows 8.1 och senare.
MF_PMP_SERVER_CONTEXT IMFPMPServer PmP-mediesession (Protected Media Path).
MF_QUALITY_SERVICES IMFQualityAdvise Mediekällor.
MF_RATE_CONTROL_SERVICE IMFRateControl Mediekällor, Media Session
MF_RATE_CONTROL_SERVICE IMFRateSupport Mediekällor, mediamottagare, mediasession
MF_REMOTE_PROXY IMFRemoteProxy Proxyservrar för fjärrobjekt.
MF_SAMI_SERVICE IMFSAMIStyle Synkroniserad SAMI-mediekälla (Accessible Media Interchange).
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Sequencer-källa
MF_TIMECODE_SERVICE IMFTimecodeTranslate ASF-mediekälla.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Mediasession
MF_WRAPPED_OBJECT IMFByteStream Omslutna objekt
MF_WRAPPED_BUFFER_SERVICE Stöds i Windows 8.1 och senare.
MF_WRAPPED_SAMPLE_SERVIC Stöds i Windows 8.1 och senare.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Mediasession
MFNET_SAVEJOB_SERVICE IMFSaveJob Byteströmmar
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Nätverkskälla. Använd den här tjänsten för att hämta nätverksstatistik. Se MFNETSOURCE_STATISTICS egenskap.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Ljudåtergivning
MR_BUFFER_SERVICE IDirect3DSurface9 DirectX-ytbuffertar
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Ljudinspelningskälla
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Ljudåtergivning
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Ljudåtergivning
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Förbättrad videoåtergivning (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Indatastift i DirectShow EVR-filtret
MR_VIDEO_ACCELERATION_SERVICE IMFVideoSampleAllocator Interface EVR-strömmottagare.
MR_VIDEO_MIXER_SERVICE Olika gränssnitt som exponeras av EVR-mixern. Se Använda videoblandarens kontroller. EVR
MR_VIDEO_RENDER_SERVICE Olika gränssnitt som exponeras av EVR-presentatören. Se Använda videovisningskontrollerna. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl AEC-effekter (Acoustic Echo Cancellation). Introducerades i Windows 11, version 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Mediekällor. Introducerades i Windows 11, version 24H2.

 

Du måste använda GetService- för att hämta gränssnitten i den här tabellen från objekten som anges i den här tabellen.

I vissa fall returneras ett gränssnitt som en tjänst av en objektklass och returneras via QueryInterface av en annan objektklass. Referenssidorna för varje gränssnitt anger när du ska använda GetService och när du ska använda QueryInterface.

Försiktighet

Ett objekt kan implementeras på ett sådant sätt att det returnerar ett tjänstgränssnitt via QueryInterface- samt GetService-. Att använda QueryInterface- när GetService- krävs kan dock leda till kompatibilitetsproblem senare.

 

Funktionen MFGetService är en hjälpfunktion som frågar ett objekt efter IMFGetService- och sedan anropar objektets GetService--metod.

Exempel

I följande exempel frågar mediasessionen efter IMFGetService- och hämtar IMFRateControl--gränssnittet.

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

Följande exempel motsvarar föregående exempel men använder funktionen 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 Interface

Media Foundation Platform-API:er