Akış Önceliği Belirlemeyi Kullanma
[Windows Media Format 11 SDK bu sayfayla ilişkilendirilmiş özellik eski bir özelliktir. Kaynak Okuyucu ve Havuz Yazıcısıtarafından değiştirildi. Kaynak Okuyucu ve Havuz Yazıcısı Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, yeni kodun mümkün olduğunda Kaynak Okuyucu ve Alıcı Yazıcı yerine Windows Media Format 11 SDKkullanmasını kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]
Akış öncelik belirlemesi, bir profildeki akışlar için öncelik sırası belirtmenize olanak tanıyarak içeriğin kayıttan yürütülmesi üzerinde daha fazla denetim sahibi olmanıza olanak tanır. Okuyucu ve akış sunucusu kayıttan yürütme sırasında bant genişliği kesintisi ile karşılaştığında, kesintisiz kayıttan yürütme sağlamak için örneklerin bırakılması gerekebilir. Profilde bir akış öncelik belirleme nesnesiyle bir öncelik sırası belirtirseniz, örnekler önce en düşük öncelikli akışlardan bırakılır.
Bant genişliği paylaşımı ve karşılıklı dışlama nesnelerinden farklı olarak, akış önceliklendirme nesnesi, akış listesini izlemek için IWMStreamList arabirimini kullanmaz. Bunun yerine, WM_STREAM_PRIORITY_RECORD yapıları dizisi kullanmanız gerekir. Yapılar dizide azalan öncelik sırasına göre düzenlenmelidir. Akış numarası tutmanın yanı sıra, akış öncelik yapısı bir akışın zorunlu olup olmadığını belirtmenizi de sağlar. Zorunlu akışlar, listedeki konumlarından bağımsız olarak bırakılmaz.
Aşağıdaki örnek kod, bir profile akış önceliklendirmesinin nasıl dahil olduğunu gösterir. Bu profil, konuşan öğretim üyesinin ses akışı, öğretim üyesinin video akışı ve sunum slaytlarını yakalayan video akışı ile birlikte bir sınıf sunumu içindir. Ses akışı en önemli akıştır ve zorunlu olacaktır. Resim oldukça sabit olacağı için sunu slaytları en düşük önceliğe sahip olur, bu nedenle burada birkaç kare kaybolur ve çok fazla bir fark olmaz.
IWMProfileManager* pProfileMgr = NULL;
IWMProfile* pProfileTmp = NULL;
IWMProfile3* pProfile = NULL;
IWMStreamPrioritization* pPriority = NULL;
WM_STREAM_PRIORITY_RECORD StreamArray[3];
HRESULT hr = S_OK;
// Initialize COM.
hr = CoInitialize(NULL);
// Create a profile manager object.
hr = WMCreateProfileManager(&pProfileMgr);
// Create an empty profile.
hr = pProfileMgr->CreateEmptyProfile(WMT_VER_9_0, &pProfileTmp)
// Get the IWMProfile3 for the new profile, then release the old one.
hr = pProfileTmp->QueryInterface(IID_IWMProfile3, (void**)&pProfile);
pProfileTmp->Release();
pProfileTmp = NULL;
// Give the new profile a name and description.
hr = pProfile->SetName(L"Prioritization_Example");
hr = pProfile->SetDescription(L"Only for use with example code.");
// Create the first stream.
hr = pProfile->CreateNewStream(WMMEDIATYPE_Audio, &pStream);
// TODO: configure the stream as needed for the scenario.
// Set the stream number.
hr = pStream->SetStreamNumber(1);
// Give the stream a name for clarity.
hr = pStream->SetStreamName(L"Lecturer_Audio");
// Include the new stream in the profile.
hr = pProfile->AddStream(pStream);
// Release the stream configuration interface.
pStream->Release();
pStream = NULL;
// Repeat for the other two streams.
hr = pProfile->CreateNewStream(WMMEDIATYPE_Video, &pStream);
// TODO: configure the stream as needed for the scenario.
hr = pStream->SetStreamNumber(2);
hr = pStream->SetStreamName(L"Lecturer_Video");
hr = pProfile->AddStream(pStream);
pStream->Release();
pStream = NULL;
hr = pProfile->CreateNewStream(WMMEDIATYPE_Video, &pStream);
// TODO: configure the stream as needed for the scenario.
hr = pStream->SetStreamNumber(3);
hr = pStream->SetStreamName(L"Slide_Video");
hr = pProfile->AddStream(pStream);
pStream->Release();
pStream = NULL;
// Create a stream prioritization object.
hr = pProfile->CreateNewStreamPrioritization(&pPriority);
// Fill the array with data.
StreamArray[0].wStreamNum = 1;
StreamArray[0].fMandatory = TRUE;
StreamArray[1].wStreamNum = 2;
StreamArray[1].fMandatory = FALSE;
StreamArray[2].wStreamNum = 3;
StreamArray[2].fMandatory = FALSE;
// Assign the stream array to the stream prioritization object.
hr = pPriority->SetPriorityRecords(StreamArray, 3);
// Add the stream prioritization to the profile.
hr = pProfile->SetStreamPrioritization(pPriority);
// Release the stream prioritization object.
pPriority->Release();
pPriority = NULL;
// TODO: Save the profile to a string, and save the string to a file.
// For more information, see To Save a Custom Profile.
// Release the remaining interfaces.
pProfile->Release();
pProfile = NULL;
pProfileMgr->Release();
pProfileMgr = NULL;
İlgili konular