Interfaces de servicio
Algunas interfaces de Media Foundation deben obtenerse llamando 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 interfazIMFGetService es muy similar a la interfaz IServiceProvider que se usa en otras API.
Una de servicio es una interfaz determinada obtenida de una clase determinada de objetos a través de la interfazIMFGetService. 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 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 de medios, Sesión multimedia |
MF_REMOTE_PROXY | IMFRemoteProxy | Servidores proxy para objetos remotos. |
MF_SAMI_SERVICE | IMFSAMIStyle | Origen multimedia sincronizado de intercambio de medios accesibles (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 ajustados |
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 | Origen de red. Use este servicio para recuperar estadísticas de red. ConsulteMFNETSOURCE_STATISTICS Property . |
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 | Patillas de entrada en el filtro DirectShow EVR |
MR_VIDEO_ACCELERATION_SERVICE | de interfaz IMFVideoSampleAllocator | Receptores de flujo EVR. |
MR_VIDEO_MIXER_SERVICE | Varias interfaces expuestas por el mezclador EVR. Consulte Uso de los controles mezclador de vídeo. | EVR |
MR_VIDEO_RENDER_SERVICE | Varias interfaces expuestas por el moderador de EVR. Consulte Uso de los controles de visualización de vídeo. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Efectos acústicos de cancelación de eco (AEC). Introducido en Windows 11, versión 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Orígenes multimedia. Introducido en Windows 11, versión 24H2. |
Debe usar GetService para obtener las interfaces enumeradas en esta tabla de los objetos enumerados en esta tabla.
En algunos casos, una clase de objetos devuelve una interfaz como servicio y se devuelve a través de QueryInterface por otra clase de objetos. Las páginas de referencia de cada interfaz indican cuándo usar GetService y cuándo usar QueryInterface.
Cautela
Un objeto puede implementarse de tal manera que devuelva una interfaz de servicio mediante QueryInterface, así como GetService. Sin embargo, el uso de QueryInterface cuando se requiere GetService podría provocar problemas de compatibilidad más adelante.
La funciónMFGetServicees una función auxiliar que consulta un objeto para IMFGetService y, a continuación, llama al método GetService del objeto.
Ejemplos
En el ejemplo siguiente se consulta la sesión multimedia para IMFGetService y obtiene la interfazIMFRateControl.
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