Özel Karıştırıcılar
[Gelişmiş Video oluşturucu bu sayfada açıklanan bileşen eski bir özelliktir. MediaPlayer ve IMFMediaEngine bileşenleri aracılığıyla kullanıma sunulan Basit Video Oluşturucu (SVR) tarafından değiştirildi. Video içeriğini oynatmak için bu bileşenlerden birine veri göndermeniz ve yeni video işleyicinin örneğini oluşturmalarına izin vermelisiniz. Bu bileşenler Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda yeni kodun EVR yerine Windows'ta video medyası yürütmek için MediaPlayer veya alt düzey IMFMediaEngine API'lerini kullanmasını kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]
Bu konu, gelişmiş video işleyicisi (EVR) için özel bir karıştırıcının nasıl yazıldığını açıklar. Media Foundation EVR ortam havuzu veya DirectShow EVR filtresi ile özel bir karıştırıcı kullanabilirsiniz. Karıştırıcılar ve sunucular hakkında daha fazla bilgi için bkz. Gelişmiş Video oluşturucu.
Karıştırıcı, bir veya daha fazla giriş (başvuru akışı artı alt akışlar) ve bir çıkış içeren bir Media Foundation dönüşümüdür (MFT). Giriş akışı yukarı akıştan örnekler alır. Çıkış akışı, örnekleri sunucuya teslim eder. EVR, karıştırıcıda IMFTransform::P rocessInput çağırmaktan sorumludur ve sunucu da IMFTransform::P rocessOutputçağrısından sorumludur.
EvR karıştırıcısının en azından aşağıdaki arabirimleri uygulaması gerekir:
Arayüz | Açıklama |
---|---|
IMFTransform | Temel MFT işlevselliği sağlar. |
IMFTopologyServiceLookupClient | Karıştırıcının EVR'den arabirimler almasına olanak tanır. |
IMFVideoDeviceID | Karıştırıcının EVR'den arabirimler almasına olanak tanır. |
IMFAttributes | MF_SA_D3D_AWARE özniteliğini EVR'ye göstermek için kullanılır. |
İsteğe bağlı olarak, MFT aşağıdaki arabirimlerden herhangi birini uygulayabilir:
Arayüz | Açıklama |
---|---|
IEVRTrustedVideoPlugin | Korumalı içeriği yürütmek için gereklidir. |
IMFGetService | IMFVideoMixerBitmap ve IMFVideoProcessor gibi arabirimleri uygulamaya sunar. |
IMFQualityAdvise | Kalite yöneticisinin video kalitesini ayarlamasını sağlar. |
IMFVideoMixerBitmap | Uygulamanın videoya statik bit eşlem karıştırmasını sağlar. |
IMFVideoPositionMapper | Çıkış video çerçevesindeki koordinatları giriş video çerçevesindeki koordinatlarla eşler. |
IMFVideoProcessor | Bazı DXVA video işleme özelliklerini uygulamada kullanıma sunar. |
Karıştırıcı ile biçim anlaşması aşağıdaki gibi çalışır:
EVR, başvuru akışındaki medya türünü ayarlar.
EVR, sunucuya MFVP_MESSAGE_INVALIDATEMEDIATYPE iletisiyle birlikte IMFVideoPresenter::P rocessMessageçağırır.
Sunucu, karıştırıcının çıkış akışında medya türünü ayarlar.
EVR, alt akışlarda medya türünü ayarlar.
Başvuru akışındaki medya türü değişirse, karıştırıcının diğer medya türleri artık geçerli değildir. Karıştırıcının IMFTransform::P rocessOutput yöntemi başarısız olur ve MF_E_TRANSFORM_STREAM_CHANGEdöndürür. Sunucu bu noktada hiçbir şey yapmamalıdır. EVR, biçim anlaşması işlemini yeniden başlatır.
Herhangi bir giriş akışı akışı sonuna ulaştığında EVR, MFT_MESSAGE_NOTIFY_END_OF_STREAMile karıştırıcıda IMFTransform::P rocessMessage çağırır.
Karıştırıcı, EVR'nin IMediaEventSink arabirimini kullanarak EVR'ye aşağıdaki olayları gönderir. Bu arabirim DirectShow SDK belgelerinde belgelenmiştir.
Olay | Açıklama |
---|---|
EC_SAMPLE_NEEDED | Karıştırıcı için yeni bir giriş örneği gerekir. |
EVR, akış başlamadan önce karıştırıcıda ProcessOutput çağırabilir. Karıştırıcı bu çağrıları başarısız olmamalıdır. Bunun yerine çıkış yüzeyini siyah piksellerle doldurması gerekir. Mikser, MFT_MESSAGE_NOTIFY_BEGIN_STREAMING bir ileti alana veya ProcessInput yöntemi çağrılana kadar çıkış örneklerini renk doldurmaya devam etmelidir. Karıştırıcı bir MFT_MESSAGE_NOTIFY_END_STREAMING iletisi alırsa renk dolgu moduna geri dönmelidir.
IMFVideoDeviceID Uygulama
IMFVideoDeviceID arabirimi, cihaz GUID'sini döndüren GetDeviceIDbir yöntem içerir. Cihaz GUID'i, sunucunun ve karıştırıcının uyumlu teknolojiler kullanmasını sağlar. Cihaz GUID'leri eşleşmiyorsa EVR başlatılamaz.
Standart karıştırıcı ve sunucu, cihaz GUID'sinin IID_IDirect3DDevice9 eşit olduğu Direct3D 9 kullanır. Özel sunucunuzu standart mikserle kullanmayı planlıyorsanız sunucunun cihaz GUID'sinin IID_IDirect3DDevice9 olması gerekir. Her iki bileşeni de değiştirirseniz, yeni bir cihaz GUID'i tanımlayabilirsiniz.
IMFTopologyServiceLookupClient Uygulama
Karıştırıcının IMFTopologyServiceLookupClient arabirimini uygulaması gerekir. Akış başlamadan önce EVR, IMFTopologyServiceLookupClient::InitServicePointers çağırır ve EVR'nin IMFTopologyServiceLookup arabirimine bir işaretçi geçirir. Karıştırıcı, EVR'den arabirim işaretçileri almak için bu işaretçiyi kullanır.
Karıştırıcının en azından aşağıdaki arabirimi sorgulaması gerekir:
EVR, IMFTopologyServiceLookupClient::ReleaseServicePointersçağırdığında, karıştırıcının InitServicePointersçağrısından elde edilen tüm işaretçileri serbest bırakması gerekir.
Mixer Öznitelikleri
Bir karıştırıcı aşağıdaki öznitelikleri desteklemelidir.
Öznitelik | Açıklama |
---|---|
MF_SA_D3D_AWARE | Karıştırıcının DirectX Video Hızlandırmayı (DXVA) destekleyip desteklemediğini belirtir. |
MF_SA_REQUIRED_SAMPLE_COUNT | EVR'nin her mikser akışı için ayırması gereken video örneklerinin sayısı. Bu öznitelik tek tek akışlar için geçerlidir; IMFTransform::GetInputStreamAttributestarafından döndürülen öznitelik depoyu kullanın. |
EVR'de Mikser'i ayarlama
EVR'de özel bir karıştırıcı ayarlamak için IMFVideoRenderer::InitializeRendererçağrısı yapın. Hem DirectShow EVR filtresi hem de EVR medya havuzu bu yöntemi uygular.
EVR Etkinleştirme Nesnesi . EVR etkinleştirme nesnesini kullanıyorsanız, EVR etkinleştirme nesnesinde aşağıdaki özniteliklerden birini ayarlayarak özel bir karıştırıcı sağlayabilirsiniz:
Öznitelik | Açıklama |
---|---|
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE | Karıştırıcı için bir etkinleştirme nesnesinin işaretçisi. Etkinleştirme nesnesinin IMFActivate arabirimini uygulaması gerekir. |
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID | Karıştırıcının CLSID'i. |
İlgili konular