Interfaces de servicio

Algunas interfaces de Media Foundation deben obtenerse mediante una llamada a IMFGetService::GetService en lugar de llamar a QueryInterface. El método GetService funciona como QueryInterface, pero con las siguientes diferencias:

  • Toma un GUID de identificador de servicio además del identificador de interfaz.
  • Puede devolver un puntero a otro objeto que implementa la interfaz, en lugar de devolver un puntero al objeto original que se consulta.

Nota:

La interfaz IMFGetService es muy similar a la interfaz IServiceProvider que se usa en otras API.

 

Un servicio es una interfaz determinada obtenida de una clase determinada de objetos mediante la interfaz IMFGetService. Se definen los siguientes servicios.

Identificador de servicio Interfaz Objetos que podrían exponer este servicio
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Orígenes multimedia
MF_MEDIASOURCE_SERVICE IMFMediaSource Compatible con Windows 8.1 y versiones posteriores.
MF_PMP_SERVER_CONTEXT IMFPMPServer Sesión multimedia de ruta multimedia protegida (PMP).
MF_QUALITY_SERVICES IMFQualityAdvise Orígenes multimedia.
MF_RATE_CONTROL_SERVICE IMFRateControl Orígenes multimedia, sesión multimedia
MF_RATE_CONTROL_SERVICE IMFRateSupport Orígenes multimedia, receptores multimedia, Sesión multimedia
MF_REMOTE_PROXY IMFRemoteProxy Servidores proxy para objetos remotos.
MF_SAMI_SERVICE IMFSAMIStyle Origen multimedia de Intercambio multimedia accesible sincronizado (SAMI).
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Origen del secuenciador
MF_TIMECODE_SERVICE IMFTimecodeTranslate Origen multimedia de ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Sesión multimedia
MF_WRAPPED_OBJECT IMFByteStream Objetos encapsulados
MF_WRAPPED_BUFFER_SERVICE Compatible con Windows 8.1 y versiones posteriores.
MF_WRAPPED_SAMPLE_SERVIC Compatible con Windows 8.1 y versiones posteriores.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Sesión multimedia
MFNET_SAVEJOB_SERVICE IMFSaveJob Secuencias de bytes
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Fuente de red. Use este servicio para recuperar estadísticas de red. Vea MFNETSOURCE_STATISTICS (propiedad).
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Representador de audio
MR_BUFFER_SERVICE IDirect3DSurface9 Búferes de superficie de DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Origen de captura de audio
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Representador de audio
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Representador de audio
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Representador de vídeo mejorado (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Pines de entrada en el filtro EVR de DirectShow
MR_VIDEO_ACCELERATION_SERVICE ImfVideoSampleAllocator (Interfaz) Receptores de flujo de EVR.
MR_VIDEO_MIXER_SERVICE Varias interfaces que expone el mezclador de EVR. Vea Uso de los controles del mezclador de vídeo. EVR
MR_VIDEO_RENDER_SERVICE Varias interfaces que expone el moderador de EVR. Vea Uso de los controles de visualización de vídeo. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Efectos de cancelación acústica del eco (AEC). Introducido en la versión 24H2 de Windows 11.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Orígenes multimedia. Introducido en la versión 24H2 de Windows 11.

 

Debe usar GetService para obtener las interfaces mostradas en esta tabla de los objetos mostrados en esta tabla.

En algunos casos, una clase de objetos devuelve una interfaz como servicio y la devuelve otra clase de objetos mediante QueryInterface. Las páginas de referencia de cada interfaz indican cuándo usar GetService y cuándo usar QueryInterface.

Precaución

Un objeto se puede implementar de tal manera que devuelva una interfaz de servicio mediante QueryInterface, así como GetService. Pero el uso de QueryInterface cuando se requiere GetService puede provocar problemas de compatibilidad más adelante.

 

La función MFGetService es una función auxiliar que consulta un objeto para IMFGetService y, después, llama al método GetService del objeto.

Ejemplos

En el ejemplo siguiente se consulta la sesión multimedia para IMFGetService y se obtiene la interfaz 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);

El ejemplo siguiente es equivalente al ejemplo anterior, pero usa la función 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);

Interfaz IMFGetService

API de plataforma de Media Foundation