Compartilhar via


Interfaces de serviço

Algumas interfaces no Media Foundation devem ser obtidas chamando IMFGetService::GetService em vez de chamar QueryInterface. O método GetService funciona como QueryInterface, mas com as seguintes diferenças:

  • Ele usa um GUID do identificador de serviço além do identificador de interface.
  • Ele pode retornar um ponteiro para outro objeto que implementa a interface, em vez de retornar um ponteiro para o objeto original que é consultado.

Nota

A interfaceIMFGetService é muito semelhante à interface de IServiceProvider usada em algumas outras APIs.

 

Um serviço é uma interface específica obtida de uma classe específica de objetos por meio da interfaceIMFGetService. Os serviços a seguir são definidos.

Identificador de serviço Interface Objetos que podem expor esse serviço
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Fontes de mídia
MF_MEDIASOURCE_SERVICE IMFMediaSource Com suporte no Windows 8.1 e posterior.
MF_PMP_SERVER_CONTEXT IMFPMPServer Sessão de Mídia do PMP (caminho de mídia protegido).
MF_QUALITY_SERVICES IMFQualityAdvise Fontes de mídia.
MF_RATE_CONTROL_SERVICE IMFRateControl Fontes de mídia, Sessão de Mídia
MF_RATE_CONTROL_SERVICE IMFRateSupport Fontes de mídia, coletores de mídia, Sessão de Mídia
MF_REMOTE_PROXY IMFRemoteProxy Proxies para objetos remotos.
MF_SAMI_SERVICE IMFSAMIStyle Fonte de mídia SAMI (Intercâmbio de Mídia Acessível Sincronizada).
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Origem do sequencer
MF_TIMECODE_SERVICE IMFTimecodeTranslate Fonte de mídia ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Sessão de mídia
MF_WRAPPED_OBJECT IMFByteStream Objetos encapsulados
MF_WRAPPED_BUFFER_SERVICE Com suporte no Windows 8.1 e posterior.
MF_WRAPPED_SAMPLE_SERVIC Com suporte no Windows 8.1 e posterior.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Sessão de mídia
MFNET_SAVEJOB_SERVICE IMFSaveJob Fluxos de bytes
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Fonte de rede. Use esse serviço para recuperar estatísticas de rede. Consulte MFNETSOURCE_STATISTICS Property.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Renderizador de áudio
MR_BUFFER_SERVICE IDirect3DSurface9 Buffers de superfície do DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Origem da captura de áudio
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Renderizador de áudio
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Renderizador de áudio
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Renderizador de vídeo avançado (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Fixações de entrada no filtro EVR do DirectShow
MR_VIDEO_ACCELERATION_SERVICE interface IMFVideoSampleAllocator Coletores de fluxo EVR.
MR_VIDEO_MIXER_SERVICE Várias interfaces expostas pelo mixer EVR. Consulte Usando os controles do Video Mixer. EVR
MR_VIDEO_RENDER_SERVICE Várias interfaces expostas pelo apresentador do EVR. Consulte Usando os controles de exibição de vídeo. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Efeitos de cancelamento de eco acústico (AEC). Introduzido no Windows 11, versão 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Fontes de mídia. Introduzido no Windows 11, versão 24H2.

 

Você deve usar GetService para obter as interfaces listadas nesta tabela dos objetos listados nesta tabela.

Em alguns casos, uma interface é retornada como um serviço por uma classe de objetos e retornada por meio de QueryInterface por outra classe de objetos. As páginas de referência de cada interface indicam quando usar GetService e quando usar QueryInterface.

Cuidado

Um objeto pode ser implementado de forma a retornar uma interface de serviço por meio de QueryInterface, bem como GetService. No entanto, usar QueryInterface quando getService for necessário pode levar a problemas de compatibilidade posteriormente.

 

A função MFGetService é uma função auxiliar que consulta um objeto para IMFGetService e, em seguida, chama o métodoGetServicedo objeto.

Exemplos

O exemplo a seguir consulta a Sessão de Mídia para IMFGetService e obtém a interfaceIMFRateControl.

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

O exemplo a seguir é equivalente ao exemplo anterior, mas usa a função 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);

interface IMFGetService

APIs do Media Foundation Platform