Aracılığıyla paylaş


Ö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:

  1. EVR, başvuru akışındaki medya türünü ayarlar.

  2. EVR, sunucuya MFVP_MESSAGE_INVALIDATEMEDIATYPE iletisiyle birlikte IMFVideoPresenter::P rocessMessageçağırır.

  3. Sunucu, karıştırıcının çıkış akışında medya türünü ayarlar.

  4. 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.

 

gelişmiş video işleyici