Antarmuka Layanan

Beberapa antarmuka di Media Foundation harus diperoleh dengan memanggil IMFGetService::GetService alih-alih dengan memanggil QueryInterface. Metode GetService berfungsi seperti QueryInterface, tetapi dengan perbedaan berikut:

  • Dibutuhkan GUID pengidentifikasi layanan selain pengidentifikasi antarmuka.
  • Ini dapat mengembalikan pointer ke objek lain yang mengimplementasikan antarmuka, alih-alih mengembalikan pointer ke objek asli yang dikueri.

Catatan

Antarmuka IMFGetService sangat mirip dengan antarmuka IServiceProvider yang digunakan di beberapa API lainnya.

 

Layanan adalah antarmuka tertentu yang diperoleh dari kelas objek tertentu melalui antarmuka IMFGetService. Layanan berikut didefinisikan.

Pengidentifikasi layanan Antarmuka Objek yang mungkin mengekspos layanan ini
MF_METADATA_PROVIDER_SERVICE IMFMetadataProvider Sumber media
MF_MEDIASOURCE_SERVICE IMFMediaSource Didukung di Windows 8.1 dan yang lebih baru.
MF_PMP_SERVER_CONTEXT IMFPMPServer Sesi Media Jalur Media Terproteksi (PMP).
MF_QUALITY_SERVICES IMFQualityAdvise Sumber media.
MF_RATE_CONTROL_SERVICE IMFRateControl Sumber media, Sesi Media
MF_RATE_CONTROL_SERVICE IMFRateSupport Sumber media, sink media, Sesi Media
MF_REMOTE_PROXY IMFRemoteProxy Proksi untuk objek jarak jauh.
MF_SAMI_SERVICE IMFSAMIStyle Sumber media Accessible Media Interchange (SAMI) yang disinkronkan.
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE IMFMediaSourcePresentationProvider Sumber pengurut
MF_TIMECODE_SERVICE IMFTimecodeTranslate Sumber media ASF.
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE IMFTopologyNodeAttributeEditor Sesi media
MF_WRAPPED_OBJECT IMFByteStream Objek yang dibungkus
MF_WRAPPED_BUFFER_SERVICE Didukung di Windows 8.1 dan yang lebih baru.
MF_WRAPPED_SAMPLE_SERVIC Didukung di Windows 8.1 dan yang lebih baru.
MF_WORKQUEUE_SERVICES IMFWorkQueueServices Sesi media
MFNET_SAVEJOB_SERVICE IMFSaveJob Aliran byte
MFNETSOURCE_STATISTICS_SERVICE IPropertyStore Sumber jaringan. Gunakan layanan ini untuk mengambil statistik jaringan. Lihat Properti MFNETSOURCE_STATISTICS.
MR_AUDIO_POLICY_SERVICE IMFAudioPolicy Perender audio
MR_BUFFER_SERVICE IDirect3DSurface9 Buffer permukaan DirectX
MR_CAPTURE_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Sumber penangkapan audio
MR_POLICY_VOLUME_SERVICE IMFSimpleAudioVolume Perender audio
MR_STREAM_VOLUME_SERVICE IMFAudioStreamVolume Perender audio
MR_VIDEO_ACCELERATION_SERVICE IDirect3DDeviceManager9, IDirectXVideoAccelerationService Perender video yang ditingkatkan (EVR)
MR_VIDEO_ACCELERATION_SERVICE IDirectXVideoMemoryConfiguration Pin input pada filter DirectShow EVR
MR_VIDEO_ACCELERATION_SERVICE Antarmuka IMFVideoSampleAllocator Sink aliran EVR.
MR_VIDEO_MIXER_SERVICE Berbagai antarmuka yang diekspos oleh mixer EVR. Lihat Menggunakan Kontrol Video Mixer. EVR
MR_VIDEO_RENDER_SERVICE Berbagai antarmuka yang diekspos oleh penyaji EVR. Lihat Menggunakan Kontrol Tampilan Video. EVR
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE IAcousticEchoCancellationControl Efek Pembatalan Gema Akustik (AEC). Diperkenalkan di Windows 11, versi 24H2.
MF_AUDIO_EFFECTS_MANAGER_SERVICE IAudioEffectsManager Sumber media. Diperkenalkan di Windows 11, versi 24H2.

 

Anda harus menggunakan GetService untuk mendapatkan antarmuka yang tercantum dalam tabel ini dari objek yang tercantum dalam tabel ini.

Dalam beberapa kasus, antarmuka dikembalikan sebagai layanan oleh satu kelas objek, dan dikembalikan melalui QueryInterface oleh kelas objek lain. Halaman referensi untuk setiap antarmuka menunjukkan kapan harus menggunakan GetService dan kapan menggunakan QueryInterface.

Perhatian

Objek mungkin diimplementasikan sedih sehingga mengembalikan antarmuka layanan melalui QueryInterface serta GetService. Namun, menggunakan QueryInterface saat GetService diperlukan dapat menyebabkan masalah kompatibilitas nanti.

 

Fungsi MFGetService adalah fungsi pembantu yang meminta objek untuk IMFGetService lalu memanggil metode GetService objek.

Contoh

Contoh berikut mengkueri Sesi Media untuk IMFGetService dan mendapatkan antarmuka 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);

Contoh berikut setara dengan contoh sebelumnya tetapi menggunakan fungsi 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);

Antarmuka IMFGetService

API Platform Media Foundation