Interfacce di servizio

Alcune interfacce in Media Foundation devono essere ottenute chiamando IMFGetService::GetService anziché chiamando QueryInterface. Il metodo GetService funziona 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'interfaccia IMFGetService è molto simile all'interfaccia IServiceProvider 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_edizione Standard RVICE IMFMetadataProvider Origini multimediali
MF_MEDIASOURCE_edizione Standard RVICE IMFMediaSource Supportato in Windows 8.1 e versioni successive.
MF_PMP_edizione Standard RVER_CONTEXT IMFPMPServer Sessione multimediale con percorso multimediale protetto (PMP).
MF_QUALITY_edizione Standard RVICES IMFQualityAdvise Origini multimediali.
MF_RATE_CONTROL_edizione Standard RVICE IMFRateControl Origini multimediali, Sessione multimediale
MF_RATE_CONTROL_edizione Standard RVICE IMFRateSupport Origini multimediali, sink multimediali, sessione multimediale
MF_REMOTE_PROXY IMFRemoteProxy Proxy per oggetti remoti.
MF_SAMI_edizione Standard RVICE IMFSAMIStyle Origine multimediale SAMI (Accessible Media Interchange) sincronizzata.
MF_SOURCE_PRE edizione Standard NTATION_PROVIDER_edizione Standard RVICE IMFMediaSourcePresentationProvider Origine sequencer
MF_TIMECODE_edizione Standard RVICE IMFTimecodeTranslate Origine multimediale ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_edizione Standard RVICE IMFTopologyNodeAttributeEditor Sessione multimediale
MF_WRAPPED_OBJECT IMFByteStream Oggetti di cui è stato eseguito il wrapping
MF_WRAPPED_BUFFER_edizione Standard RVICE Supportato in Windows 8.1 e versioni successive.
MF_WRAPPED_SAMPLE_edizione Standard RVIC Supportato in Windows 8.1 e versioni successive.
MF_WORKQUEUE_edizione Standard RVICES IMFWorkQueueServices Sessione multimediale
MFNET_SAVEJOB_edizione Standard RVICE IMFSaveJob Flussi di byte
MFNETSOURCE_STATISTICS_edizione Standard RVICE Ipropertystore Origine di rete. Usare questo servizio per recuperare le statistiche di rete. Vedere MFNETSOURCE_STATISTICS Proprietà.
MR_AUDIO_POLICY_edizione Standard RVICE IMFAudioPolicy Renderer audio
MR_BUFFER_edizione Standard RVICE IDirect3DSurface9 Buffer di superficie DirectX
MR_CAPTURE_POLICY_VOLUME_edizione Standard RVICE IMFSimpleAudioVolume Origine di acquisizione audio
MR_POLICY_VOLUME_edizione Standard RVICE IMFSimpleAudioVolume Renderer audio
MR_STREAM_VOLUME_edizione Standard RVICE IMFAudioStreamVolume Renderer audio
MR_VIDEO_ACCELERATION_edizione Standard RVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Renderer video avanzato (EVR)
MR_VIDEO_ACCELERATION_edizione Standard RVICE IDirectXVideoMemoryConfiguration Pin di input nel filtro EVR DirectShow
MR_VIDEO_ACCELERATION_edizione Standard RVICE Interfaccia IMFVideoSampleAllocator Sink di flusso EVR.
MR_VIDEO_MIXER_edizione Standard RVICE Varie interfacce esposte dal mixer EVR. Vedi Uso dei controlli mixer video. EVR
MR_VIDEO_RENDER_edizione Standard RVICE Varie interfacce esposte dal relatore EVR. Vedi Uso dei controlli di visualizzazione video. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_edizione Standard RVICE IAcousticEchoEreitionControl Effetti acoustic echo cancellation (AEC). Introdotto in Windows 11 versione 24H2.
MF_AUDIO_EFFECTS_MANAGER_edizione Standard RVICE 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.

Attenzione

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 funzione MFGetService è una funzione helper che esegue una query su un oggetto per IMFGetService e quindi chiama il metodo GetService dell'oggetto.

Esempi

L'esempio seguente esegue una query sulla sessione multimediale per IMFGetService e ottiene l'interfaccia IMFRateControl.

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

Interfaccia IMFGetService

API della piattaforma Media Foundation