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