Udostępnij za pośrednictwem


Interfejsy usług

Niektóre interfejsy w programie Media Foundation muszą być uzyskiwane przez wywołanie IMFGetService::GetService zamiast wywołania QueryInterface. Metoda GetService działa jak QueryInterface, ale z następującymi różnicami:

  • Oprócz identyfikatora interfejsu przyjmuje identyfikator GUID identyfikatora usługi.
  • Może zwrócić wskaźnik do innego obiektu, który implementuje interfejs, zamiast zwracać wskaźnik do oryginalnego obiektu, którego dotyczy zapytanie.

Nuta

InterfejsIMFGetServicejest bardzo podobny do interfejsu IServiceProvider używanego w innych interfejsach API.

 

usługi to określony interfejs uzyskany z określonej klasy obiektów za pośrednictwem interfejsu IMFGetService. Zdefiniowane są następujące usługi.

Identyfikator usługi Interfejs Obiekty, które mogą uwidocznić tę usługę
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Źródła multimediów
MF_MEDIASOURCE_SERVICE IMFMediaSource Obsługiwane w systemie Windows 8.1 lub nowszym.
MF_PMP_SERVER_CONTEXT IMFPMPServer Sesja multimediów chronionych multimediów (PMP).
MF_QUALITY_SERVICES IMFQualityAdvise Źródła multimediów.
MF_RATE_CONTROL_SERVICE IMFRateControl Źródła multimediów, sesja multimediów
MF_RATE_CONTROL_SERVICE IMFRateSupport Źródła multimediów, ujścia multimediów, sesja multimediów
MF_REMOTE_PROXY MFWRemoteProxy Serwery proxy dla obiektów zdalnych.
MF_SAMI_SERVICE IMFSAMIStyle Synchronizowane źródło multimediów Accessible Media Interchange (SAMI).
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Źródło programu Sequencer
MF_TIMECODE_SERVICE IMFTimecodeTranslate Źródło multimediów ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Sesja multimediów
MF_WRAPPED_OBJECT IMFByteStream Opakowane obiekty
MF_WRAPPED_BUFFER_SERVICE Obsługiwane w systemie Windows 8.1 lub nowszym.
MF_WRAPPED_SAMPLE_SERVIC Obsługiwane w systemie Windows 8.1 lub nowszym.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Sesja multimediów
MFNET_SAVEJOB_SERVICE IMFSaveJob Strumienie bajtów
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Źródło sieci. Ta usługa służy do pobierania statystyk sieciowych. Zobacz MFNETSOURCE_STATISTICS Property.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Moduł renderowania audio
MR_BUFFER_SERVICE IDirect3DSurface9 powierzchni DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Źródło przechwytywania dźwięku
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Moduł renderowania audio
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Moduł renderowania audio
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Ulepszony program renderowania wideo (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Wyprowadzenia wejściowe filtru DirectShow EVR
MR_VIDEO_ACCELERATION_SERVICE IMFVideoSampleAllocator, interfejs Ujścia strumieniA EVR.
MR_VIDEO_MIXER_SERVICE Różne interfejsy narażone przez mikser EVR. Zobacz Using the Video Mixer Controls (Używanie kontrolek miksera wideo). EVR
MR_VIDEO_RENDER_SERVICE Różne interfejsy udostępniane przez prezentera EVR. Zobacz Używanie kontrolek wyświetlania wideo. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Efekty anulowania echa akustycznego (AEC). Wprowadzony w systemie Windows 11 w wersji 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Źródła multimediów. Wprowadzony w systemie Windows 11 w wersji 24H2.

 

Należy użyć GetService, aby pobrać interfejsy wymienione w tej tabeli z obiektów wymienionych w tej tabeli.

W niektórych przypadkach interfejs jest zwracany jako usługa przez jedną klasę obiektów i zwracany przez QueryInterface przez inną klasę obiektów. Strony referencyjne dla każdego interfejsu wskazują, kiedy należy używać GetService i kiedy używać QueryInterface.

Ostrożność

Obiekt może zostać zaimplementowany w taki sposób, aby zwracał interfejs usługi za pośrednictwem QueryInterface, a także GetService. Jednak użycie QueryInterface, gdy GetService jest wymagane, może prowadzić do problemów ze zgodnością później.

 

FunkcjaMFGetService jest funkcją pomocnika, która odpytuje obiekt dla IMFGetService, a następnie wywołuje metodę GetService obiektu.

Przykłady

Poniższy przykład wysyła zapytanie do sesji multimediów dla IMFGetService i pobiera interfejs 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);

Poniższy przykład jest odpowiednikiem poprzedniego przykładu, ale używa funkcji 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);

interfejs IMFGetService

interfejsy API platformy Media Foundation