Hizmet Arabirimleri
Media Foundation'daki bazı arabirimler, QueryInterfaceçağrılması yerine IMFGetService::GetService çağrılarak alınmalıdır. GetService yöntemi QueryInterface gibi çalışır, ancak aşağıdaki farklarla birlikte:
- Arabirim tanımlayıcısına ek olarak bir hizmet tanımlayıcıSı GUID alır.
- Sorgulanan özgün nesneye işaretçi döndürmek yerine arabirimini uygulayan başka bir nesneye işaretçi döndürebilir.
Not
IMFGetService arabirimi, diğer bazı API'lerde kullanılan IServiceProvider arabirimine çok benzer.
hizmet, IMFGetService arabirimi aracılığıyla belirli bir nesne sınıfından alınan belirli bir arabirimdir. Aşağıdaki hizmetler tanımlanır.
Hizmet tanımlayıcısı | Arayüz | Bu hizmeti kullanıma sunan nesneler |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Medya kaynakları |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Windows 8.1 ve sonraki sürümlerde desteklenir. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Korumalı medya yolu (PMP) Medya Oturumu. |
MF_QUALITY_SERVICES | IMFQualityAdvise | Medya kaynakları. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Medya kaynakları, Medya Oturumu |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Medya kaynakları, medya havuzları, Medya Oturumu |
MF_REMOTE_PROXY | IMFRemoteProxy | Uzak nesneler için proxy'ler. |
MF_SAMI_SERVICE | IMFSAMIStyle | Eşitlenmiş Erişilebilir Medya Değişimi (SAMI) medya kaynağı. |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Sıralayıcı kaynağı |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | ASF medya kaynağı. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Medya oturumu |
MF_WRAPPED_OBJECT | IMFByteStream | Sarmalanan nesneler |
MF_WRAPPED_BUFFER_SERVICE | Windows 8.1 ve sonraki sürümlerde desteklenir. |
|
MF_WRAPPED_SAMPLE_SERVIC | Windows 8.1 ve sonraki sürümlerde desteklenir. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Medya oturumu |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Bayt akışları |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Ağ kaynağı. Ağ istatistiklerini almak için bu hizmeti kullanın. Bkz. MFNETSOURCE_STATISTICS Özelliği. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Ses işleyici |
MR_BUFFER_SERVICE | IDirect3DSurface9 | DirectX yüzey arabellekleri |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Ses yakalama kaynağı |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Ses işleyici |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Ses işleyici |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Gelişmiş video işleyici (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | DirectShow EVR filtresinde giriş pinleri |
MR_VIDEO_ACCELERATION_SERVICE | IMFVideoSampleAllocator Arabirimi | EVR akış havuzları. |
MR_VIDEO_MIXER_SERVICE | EVR karıştırıcısı tarafından kullanıma sunulan çeşitli arabirimler. Bkz. Video Mixer Denetimlerini Kullanma. | EVR |
MR_VIDEO_RENDER_SERVICE | EVR sunucusu tarafından kullanıma sunulan çeşitli arabirimler. bkz. Video Görüntüleme Denetimlerini Kullanma. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Akustik Yankı İptali (AEC) efektleri. Windows 11, sürüm 24H2'de kullanıma sunulmuştur. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Medya kaynakları. Windows 11, sürüm 24H2'de kullanıma sunulmuştur. |
Bu tabloda listelenen arabirimleri bu tabloda listelenen nesnelerden almak için GetService kullanmanız gerekir.
Bazı durumlarda, bir arabirim bir nesne sınıfı tarafından hizmet olarak döndürülür ve başka bir nesne sınıfı tarafından QueryInterface aracılığıyla döndürülür. Her arabirimin başvuru sayfaları, GetService ne zaman kullanılacağını ve queryinterface ne zaman kullanılacağını belirtir.
Dikkat
Bir nesne, QueryInterface ve GetServicearacılığıyla hizmet arabirimi döndürecek şekilde uygulanabilir. Ancak, GetService gerektiğinde QueryInterface kullanılması daha sonra uyumluluk sorunlarına yol açabilir.
MFGetService işlevi, IMFGetService için bir nesneyi sorgulayan ve sonra nesnenin GetService yöntemini çağıran bir yardımcı işlevdir.
Örnekler
Aşağıdaki örnek, IMFGetService için Medya Oturumu'nu sorgular ve IMFRateControl arabirimini alır.
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);
Aşağıdaki örnek önceki örne eşdeğerdir ancak MFGetService işlevini kullanır.
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);
İlgili konular