Интерфейсы служб
Некоторые интерфейсы в 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);
См. также