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.
Nota
AntarmukaIMFGetServicesangat mirip dengan antarmuka IServiceProvider yang digunakan di beberapa API lainnya.
layanan adalah antarmuka tertentu yang diperoleh dari kelas objek tertentu melalui antarmukaIMFGetService. 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. LihatPropertiMFNETSOURCE_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 MenggunakanKontrol 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 menggunakanGetServiceuntuk 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 menggunakanGetServicedan kapan menggunakan QueryInterface.
Hati
Objek mungkin diimplementasikan sedih sehingga mengembalikan antarmuka layanan melalui QueryInterface serta GetService. Namun, menggunakan QueryInterface saat GetService diperlukan dapat menyebabkan masalah kompatibilitas nanti.
FungsiMFGetService adalah fungsi pembantu yang mengkueri objek untukIMFGetServicelalu memanggil metodeGetServiceobjek.
Contoh
Contoh berikut mengkueri Sesi Media untukIMFGetServicedan mendapatkan antarmukaIMFRateControl.
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 fungsiMFGetService.
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);
Topik terkait