Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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);
Tópicos relacionados