Partilhar via


Interfaces de serviço

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

  • Ele usa um GUID de 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.

Observação

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

 

Um de serviço é uma interface particular obtida de uma classe particular de objetos através da interfaceIMFGetService. São definidos os seguintes serviços.

Identificador de serviço Interface Objetos que podem expor este serviço
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Fontes dos meios de comunicação social
MF_MEDIASOURCE_SERVICE IMFMediaSource Suportado no Windows 8.1 e posterior.
MF_PMP_SERVER_CONTEXT IMFPMPServer Sessão de mídia PMP (Protected Media Path).
MF_QUALITY_SERVICES IMFQualityAdvise Fontes dos meios de comunicação social.
MF_RATE_CONTROL_SERVICE IMFRateControl Fontes de mídia, Media Session
MF_RATE_CONTROL_SERVICE IMFRateSupport Fontes de mídia, dissipadores 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 (Synchronized Accessible Media Interchange).
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Fonte do sequenciador
MF_TIMECODE_SERVICE IMFTimecodeTranslate Fonte de mídia ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Sessão de imprensa
MF_WRAPPED_OBJECT IMFByteStream Objetos embrulhados
MF_WRAPPED_BUFFER_SERVICE Suportado no Windows 8.1 e posterior.
MF_WRAPPED_SAMPLE_SERVIC Suportado no Windows 8.1 e posterior.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Sessão de imprensa
MFNET_SAVEJOB_SERVICE IMFSaveJob Fluxos de bytes
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Fonte da rede. Use este serviço para recuperar estatísticas de rede. Ver MFNETSOURCE_STATISTICS propriedade.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Renderizador de áudio
MR_BUFFER_SERVICE IDirect3DSurface9 Buffers de superfície DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Fonte de captura de áudio
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Renderizador de áudio
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Renderizador de áudio
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9IDirectXVideoAccelerationService Renderizador de vídeo melhorado (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Pinos de entrada no filtro DirectShow EVR
MR_VIDEO_ACCELERATION_SERVICE Interface IMFVideoSampleAllocator Dissipadores de fluxo EVR.
MR_VIDEO_MIXER_SERVICE Várias interfaces expostas pelo misturador EVR. Consulte Usando os controles do misturador de vídeo. EVR
MR_VIDEO_RENDER_SERVICE Várias interfaces expostas pelo apresentador 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 dos meios de comunicação social. Introduzido no Windows 11, versão 24H2.

 

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

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

Atenção

Um objeto pode ser implementado de tal forma que retorna uma interface de serviço por meio QueryInterface bem como GetService. No entanto, usar QueryInterface quando GetService é necessário pode levar a problemas de compatibilidade mais tarde.

 

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

Exemplos

O exemplo a seguir consulta a sessão de mídia para IMFGetService e obtém o IMFRateControl interface.

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