Интерфейсы служб

Некоторые интерфейсы в Media Foundation должны быть получены путем вызова МВФGetService::GetService вместо вызова QueryInterface. Метод GetService работает так же, как QueryInterface, но со следующими различиями:

  • Он принимает guid идентификатора службы в дополнение к идентификатору интерфейса.
  • Он может возвращать указатель на другой объект, реализующий интерфейс, а не возвращать указатель на исходный объект, запрашиваемый.

Примечание.

Интерфейс IMFGetService очень похож на интерфейс IServiceProvider, используемый в некоторых других API.

 

Служба — это определенный интерфейс, полученный из определенного класса объектов через интерфейс МВФGetService. Определены следующие службы.

Идентификатор службы Интерфейс Объекты, которые могут предоставлять эту службу
MF_METADATA_PROVIDER_SERVICE МВФMetadataProvider Источники мультимедиа
MF_MEDIASOURCE_SERVICE IMFMediaSource Поддерживается в Windows 8.1 и более поздних версиях.
MF_PMP_SERVER_CONTEXT МВФPMPServer Защищенный путь к мультимедиа (PMP) Сеанс мультимедиа.
MF_QUALITY_SERVICES МВФQualityAdvise Источники мультимедиа.
MF_RATE_CONTROL_SERVICE МВФRateControl Источники мультимедиа, сеанс мультимедиа
MF_RATE_CONTROL_SERVICE МВФRateSupport Источники мультимедиа, приемники мультимедиа, сеанс мультимедиа
MF_REMOTE_PROXY МВФRemoteProxy Прокси для удаленных объектов.
MF_SAMI_SERVICE МВФSAMIStyle Синхронизированный источник мультимедиа sAMI.
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE МВФMediaSourcePresentationProvider Источник Sequencer
MF_TIMECODE_SERVICE МВФTimecodeTranslate Источник мультимедиа ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE МВФTopologyNodeAttributeEditor Сеанс мультимедиа
MF_WRAPPED_OBJECT МВФByteStream Упакованные объекты
MF_WRAPPED_BUFFER_SERVICE Поддерживается в Windows 8.1 и более поздних версиях.
MF_WRAPPED_SAMPLE_SERVIC Поддерживается в Windows 8.1 и более поздних версиях.
MF_WORKQUEUE_SERVICES МВФWorkQueueServices Сеанс мультимедиа
MFNET_SAVEJOB_SERVICE IMFSaveJob Потоки байтов
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Сетевой источник. Эта служба используется для получения статистики сети. См. MFNETSOURCE_STATISTICS свойство.
MR_AUDIO_POLICY_SERVICE МВФAudioPolicy Средство отрисовки звука
MR_BUFFER_SERVICE IDirect3DSurface9 Буферы поверхности DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE МВФSimpleAudioVolume Источник аудиозахвата
MR_POLICY_VOLUME_SERVICE МВФSimpleAudioVolume Средство отрисовки звука
MR_STREAM_VOLUME_SERVICE МВФAudioStreamVolume Средство отрисовки звука
MR_VIDEO_ACCELERATION_SERVICE IDirect3DeviceManager9, IDirectXVideoAccelerationService Расширенный отрисовщик видео (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Входные закрепления в фильтре DirectShow EVR
MR_VIDEO_ACCELERATION_SERVICE Интерфейс IMFVideoSampleAllocator Приемники потока EVR.
MR_VIDEO_MIXER_SERVICE Различные интерфейсы, предоставляемые миксером EVR. См. статью "Использование элементов управления "Миксер видео". EVR
MR_VIDEO_RENDER_SERVICE Различные интерфейсы, предоставляемые выступающим EVR. См. статью "Использование элементов управления отображением видео". EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Эффекты отмены акустического эха (AEC). Представлено в Windows 11 версии 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Источники мультимедиа. Представлено в Windows 11 версии 24H2.

 

Для получения интерфейсов, перечисленных в этой таблице, необходимо использовать GetService из объектов, перечисленных в этой таблице.

В некоторых случаях интерфейс возвращается в качестве службы одним классом объектов и возвращается через QueryInterface другим классом объектов. Справочные страницы для каждого интерфейса указывают, когда следует использовать GetService и когда использовать QueryInterface.

Внимание

Объект может быть реализован таким образом, чтобы он возвращал интерфейс службы через QueryInterface, а также GetService. Однако использование QueryInterface при необходимости GetService может привести к проблемам совместимости позже.

 

Функция MFGetService является вспомогательной функцией, которая запрашивает объект для МВФGetService, а затем вызывает метод GetService объекта.

Примеры

В следующем примере выполняется запрос сеанса мультимедиа для МВФGetService и возвращается интерфейс 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);

Следующий пример эквивалентен предыдущему примеру, но использует функцию 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);

Интерфейс IMFGetService

API платформы Media Foundation