Stream-rangsorolás használata
[A laphoz társított funkció, Windows Media Format 11 SDKegy régi funkció. A Forrásolvasó és a Fogadó írófelváltotta. Bemeneti olvasó és Kimeneti író Windows 10-hez és Windows 11-hez optimalizálták. A Microsoft határozottan javasolja, hogy az új kód az Source Reader és a Sink Writer használata legyen a Windows Media Format 11 SDKhelyett, ha lehetséges. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]
A streampriorizálás lehetővé teszi, hogy nagyobb mértékben szabályozhassa a tartalmak lejátszását azáltal, hogy lehetővé teszi a profilban lévő streamek prioritási sorrendjének megadását. Ha az olvasó és a streamkiszolgáló sávszélesség-hiányba ütközik a lejátszás során, előfordulhat, hogy a mintákat le kell dobni, hogy zavartalan lejátszást biztosítson. Ha prioritási sorrendet ad meg egy streampriorizációs objektummal a profilban, a rendszer először a legalacsonyabb prioritású streamekből elveti a mintákat.
A sávszélesség-megosztással és a kölcsönös kizárási objektumokkal ellentétben a stream priorizálási objektumai nem használják a IWMStreamList felületet a streamek listájának nyomon követéséhez. Ehelyett WM_STREAM_PRIORITY_RECORD struktúrák tömbét kell használnia. A struktúrákat csökkenő prioritási sorrendben kell rendezni a tömbben. A streamszám megtartása mellett a stream prioritási struktúrája lehetővé teszi annak megadását is, hogy a stream kötelező-e. A kötelező streamek nem lesznek elvetve, függetlenül attól, hogy milyen pozícióban szerepelnek a listában.
Az alábbi példakód bemutatja, hogyan lehet stream-rangsorolást belefoglalni egy profilba. Ez a profil egy osztályterem-bemutatóhoz készült, amelyen az előadó hangstreamje, az előadó videostreamje és a bemutató diákat rögzítő videóstream található. A hangstream a legfontosabb, és kötelező lesz. A bemutató diák a legalacsonyabb prioritást kapják, mert a kép elég állandó lesz, így előfordulhat, hogy néhány képkocka elveszik itt-ott, ami nem okoz nagy különbséget.
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;
Kapcsolódó témakörök