Condividi tramite


Interfacce di servizio

Alcune interfacce in Media Foundation devono essere ottenute chiamando IMFGetService::GetService anziché chiamando QueryInterface. Il metodoGetServicefunziona come QueryInterface, ma con le differenze seguenti:

  • Accetta un GUID dell'identificatore del servizio oltre all'identificatore di interfaccia.
  • Può restituire un puntatore a un altro oggetto che implementa l'interfaccia, anziché restituire un puntatore all'oggetto originale su cui viene eseguita una query.

Nota

L'interfacciaIMFGetServiceè molto simile all'interfaccia IServiceProvider di usata in altre API.

 

Un servizio è una particolare interfaccia ottenuta da una particolare classe di oggetti tramite l'interfaccia IMFGetService. Sono definiti i servizi seguenti.

Identificatore del servizio Interfaccia Oggetti che potrebbero esporre questo servizio
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Origini multimediali
MF_MEDIASOURCE_SERVICE IMFMediaSource Supportato in Windows 8.1 e versioni successive.
MF_PMP_SERVER_CONTEXT IMFPMPServer Sessione multimediale con percorso multimediale protetto (PMP).
MF_QUALITY_SERVICES IMFQualityAdvise Origini multimediali.
MF_RATE_CONTROL_SERVICE IMFRateControl Origini multimediali, Sessione multimediale
MF_RATE_CONTROL_SERVICE IMFRateSupport Origini multimediali, sink multimediali, sessione multimediale
MF_REMOTE_PROXY IMFRemoteProxy Proxy per oggetti remoti.
MF_SAMI_SERVICE IMFSAMIStyle Origine multimediale SAMI (Accessible Media Interchange) sincronizzata.
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Origine sequencer
MF_TIMECODE_SERVICE IMFTimecodeTranslate Origine multimediale ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Sessione multimediale
MF_WRAPPED_OBJECT IMFByteStream Oggetti di cui è stato eseguito il wrapping
MF_WRAPPED_BUFFER_SERVICE Supportato in Windows 8.1 e versioni successive.
MF_WRAPPED_SAMPLE_SERVIC Supportato in Windows 8.1 e versioni successive.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Sessione multimediale
MFNET_SAVEJOB_SERVICE IMFSaveJob Flussi di byte
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Origine di rete. Usare questo servizio per recuperare le statistiche di rete. Vedere MFNETSOURCE_STATISTICS Proprietà.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Renderer audio
MR_BUFFER_SERVICE IDirect3DSurface9 Buffer di superficie DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Origine di acquisizione audio
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Renderer audio
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Renderer audio
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Renderer video avanzato (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Pin di input nel filtro EVR DirectShow
MR_VIDEO_ACCELERATION_SERVICE interfaccia IMFVideoSampleAllocator Sink di flusso EVR.
MR_VIDEO_MIXER_SERVICE Varie interfacce esposte dal mixer EVR. Vedere uso dei controlli mixer video. EVR
MR_VIDEO_RENDER_SERVICE Varie interfacce esposte dal relatore EVR. Vedere uso dei controlli di visualizzazione video. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Effetti acoustic echo cancellation (AEC). Introdotto in Windows 11 versione 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Origini multimediali. Introdotto in Windows 11 versione 24H2.

 

È necessario usare GetService per ottenere le interfacce elencate in questa tabella dagli oggetti elencati in questa tabella.

In alcuni casi, un'interfaccia viene restituita come servizio da una classe di oggetti e restituita tramite QueryInterface da un'altra classe di oggetti. Le pagine di riferimento per ogni interfaccia indicano quando usare GetService e quando usare QueryInterface.

Cautela

Un oggetto può essere implementato in modo che restituisca un'interfaccia del servizio tramite QueryInterface e GetService. Tuttavia, l'uso di QueryInterface quando è necessario GetService potrebbe causare problemi di compatibilità in un secondo momento.

 

La funzioneMFGetServiceè una funzione helper che esegue una query su un oggetto per IMFGetService e quindi chiama il metodo GetService GetService dell'oggetto.

Esempi

Nell'esempio seguente viene richiesta la sessione multimediale per IMFGetService e viene recuperata l'interfacciaIMFRateControl.

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

L'esempio seguente equivale all'esempio precedente, ma usa la funzioneMFGetService.

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

interfaccia IMFGetService

MEDIA Foundation Platform